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 du fichier .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'ondes sinusoïdales qui produit une liste de valeurs qui, après application de bytearray, devient adaptée à l'écriture dans le paramètre de données d'un fichier wave. [modifier] Une fonction de conversion devra transformer la liste en valeurs hexagonales little endian avant d'appliquer le bytearray. Voir le lien vers le format de fichier son PCM WAVE 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 la forme d'onde. Le format des données rend trivial le mélange et la concaténation des ondes. Si cela vous intéresse, jetez un coup d'œil à Format de fichier son WAVE PCM .