Est-il possible d'obtenir python pour générer un son simple comme une onde sinusoïdale?
Existe-t-il un module disponible pour cela? Sinon, comment feriez-vous pour créer le vôtre?
De plus, auriez-vous besoin d'une sorte d'environnement Host pour que python s'exécute afin de jouer du son, ou peut-il être obtenu simplement en passant des appels depuis le terminal?
Si la réponse dépend du système d'exploitation, j'utilise un mac.
Je cherchais la même chose, à la fin, j'ai écrit ce code qui fonctionne bien.
import math #import needed modules
import pyaudio #Sudo apt-get install python-pyaudio
PyAudio = pyaudio.PyAudio #initialize pyaudio
#See https://en.wikipedia.org/wiki/Bit_rate#Audio
BITRATE = 16000 #number of frames per second/frameset.
FREQUENCY = 500 #Hz, waves per second, 261.63=C4-note.
LENGTH = 1 #seconds to play sound
if FREQUENCY > BITRATE:
BITRATE = FREQUENCY+100
NUMBEROFFRAMES = int(BITRATE * LENGTH)
RESTFRAMES = NUMBEROFFRAMES % BITRATE
WAVEDATA = ''
#generating wawes
for x in xrange(NUMBEROFFRAMES):
WAVEDATA = WAVEDATA+chr(int(math.sin(x/((BITRATE/FREQUENCY)/math.pi))*127+128))
for x in xrange(RESTFRAMES):
WAVEDATA = WAVEDATA+chr(128)
p = PyAudio()
stream = p.open(format = p.get_format_from_width(1),
channels = 1,
rate = BITRATE,
output = True)
stream.write(WAVEDATA)
stream.stop_stream()
stream.close()
p.terminate()
Je sais que je suis un peu en retard sur le jeu sur celui-ci, mais c'est un projet assez fantastique python pour la synthèse et la composition audio: https://github.com/ hecanjog/pippi
Il est toujours en cours de développement, mais cela dure depuis un certain temps.
Après avoir perdu du temps sur des projets incompilables ou inexistants, j'ai découvert le module python wavebender , qui propose la génération de canaux simples ou multiples d'ondes sinusoïdales, carrées et combinées) Les résultats peuvent être écrits dans un fichier d'onde ou dans sys.stdout
, d'où ils peuvent être interprétés directement par aplay en temps réel. Quelques exemples utiles sont expliqués ici , et sont inclus sur le projet page github .
La page Python In Music wiki n'a pas été très bien entretenue, mais c'est un bon point de départ. http://wiki.python.org/moin/PythonInMusic
J'aime PyAudiere , qui vous permet de jouer des tableaux numpy en tant que sons ... Je suppose que cela correspond bien à mon arrière-plan Matlab. Je pense que c'est multiplateforme. Je pense que scikits.audiolab fait la même chose, et peut être plus actuel/mieux pris en charge ... me semble plus facile que d'essayer de sauvegarder des choses en tant que fichiers wav ou de les écrire dans des tampons et d'utiliser la bibliothèque de sons intégrée de Python .
J'ai trouvé ces deux python très utiles, je voudrais peut-être y jeter un œil ...
python https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder
ipython : https://timsainb.github.io/spectrograms-mfccs-and-inversion-in-python.html
[EDIT] Comme indiqué, voici une explication des deux liens
python on semble avoir une erreur, mais beaucoup de gens ont pu le faire fonctionner, donc je ne suis pas sûr. ipython fonctionnait comme un charme, donc j'espère que vous pourrez l'exécuter.
Les deux liens sont censés prendre un audio en entrée, de préférence . Wav fichier. Présentez-le (UTILISER FFT: 512, taille de pas = 512/8) pour obtenir des spectrogrammes (vous pouvez même le visualiser), c'est une matrice 2D, puis entraînez vos objets d'apprentissage machine ou faites ce que vous voulez en utilisant une matrice qui représente l'original l'audio. Si vous voulez, à un moment donné, ce que ces vecteurs représentent, vous pouvez également resynthétiser l'audio.
Je travaille sur un puissant synthétiseur en python. J'ai utilisé des fonctions personnalisées pour écrire directement dans un fichier .wav. Il existe des fonctions intégrées qui peuvent être utilisées à cette fin. Vous devrez modifier l'en-tête .wav pour refléter la fréquence d'échantillonnage, les bits par échantillon, le nombre de canaux et la durée de la synthèse.
Voici une première version d'un générateur d'onde sinueuse qui génère une liste de valeurs qui, après application de bytearray, devient appropriée pour l'écriture dans le paramètre de données d'un fichier wave. [edit] Une fonction de conversion devra transformer la liste en petites valeurs hexadécimales endiennes avant d'appliquer le bytearray. Voir le lien de format de fichier son WAVE PCM ci-dessous pour plus de détails sur la spécification .wav. [/ edit]
def sin_basic(freq, time=1, amp=1, phase=0, samplerate=44100, bitspersample=16):
bytelist = []
import math
TwoPiDivSamplerate = 2*math.pi/samplerate
increment = TwoPiDivSamplerate * freq
incadd = phase*increment
for i in range(int(samplerate*time)):
if incadd > (2**(bitspersample - 1) - 1):
incadd = (2**(bitspersample - 1) - 1) - (incadd - (2**(bitspersample - 1) - 1))
Elif incadd < -(2**(bitspersample - 1) - 1):
incadd = -(2**(bitspersample - 1) - 1) + (-(2**(bitspersample - 1) - 1) - incadd)
bytelist.append(int(round(amp*(2**(bitspersample - 1) - 1)*math.sin(incadd))))
incadd += increment
return bytelist
Une version plus récente peut utiliser des formes d'onde pour moduler la fréquence, l'amplitude et la phase des paramètres de forme d'onde. Le format des données rend trivial le mélange et la concaténation des ondes. Si cela vous convient, consultez format de fichier son WAVE PCM .