Я работаю над мощным синтезатором в Python. Я использовал пользовательские функции для записи непосредственно в WAV-файл. Есть встроенные функции, которые можно использовать для этой цели. Вам нужно будет изменить заголовок .wav, чтобы он отражал частоту дискретизации, биты на выборку, количество каналов и продолжительность синтеза.
Вот ранняя версия синусоидального генератора, который выводит список значений, которые после применения байтовой матрицы становятся пригодными для записи в параметр данных волнового файла. [править] Функция преобразования должна преобразовать список в шестнадцатеричные значения с прямым порядком байтов до применения байтового массива. Подробнее о спецификации WAVE см. Ссылку на формат звукового файла WAVE PCM ниже. [/ 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
В более новой версии могут использоваться сигналы для модуляции частоты, амплитуды и фазы параметров сигнала. Формат данных позволяет легко объединять и объединять волны. Если это похоже на ваш переулок, проверьте WAVE PCM формат звукового файла .