Estoy trabajando en un potente sintetizador en python. Utilicé funciones personalizadas para escribir directamente en un archivo .wav. Hay funciones integradas que se pueden usar para este propósito. Tendrá que modificar el encabezado .wav para reflejar la frecuencia de muestreo, los bits por muestra, el número de canales y la duración de la síntesis.
Aquí hay una versión anterior de un generador de ondas sinusoidales que genera una lista de valores que, después de aplicar bytearray, es adecuada para escribir en el parámetro de datos de un archivo de onda. [editar] Una función de conversión tendrá que transformar la lista en pequeños valores hexadecimales endian antes de aplicar el bytearray. Consulte el enlace de formato de archivo de sonido WAVE PCM a continuación para obtener detalles sobre la especificación .wav. [/ editar]
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
Una versión más reciente puede utilizar formas de onda para modular la frecuencia, amplitud y fase de los parámetros de forma de onda. El formato de datos hace que sea trivial combinar y concatenar ondas juntas. Si esto parece estar en tu callejón, mira WAVE PCM soundfile format.
@hochl Bueno, qué irónico es que este es el primer resultado de Google devuelto después de un día dedicado a buscar con diferentes palabras clave ... –
Revisaría [Pyo] (http://ajaxsoundstudio.com/pyodoc/index .html). [Aquí está] (http://ajaxsoundstudio.com/pyodoc/examples/02-controls/04-building-lfo.html) un buen ejemplo de inicio. – mobeets