Я использую следующий код, который сгенерирует wav-файл, содержащий тональный сигнал с частотой 440 Гц, длительностью 2 секунды.
from scipy.io.wavfile import write
from numpy import linspace,sin,pi,int16
def note(freq, len, amp=1, rate=44100):
t = linspace(0,len,len*rate)
data = sin(2*pi*freq*t)*amp
return data.astype(int16) # two byte integers
tone = note(440,2,amp=10000)
write('440hzAtone.wav',44100,tone) # writing the sound to a file
Мне было интересно, смогу ли я изменить код, основываясь на методе note, чтобы фактически создать мелодию с python.
Я попытался добавить два разных тона, икак и ожидалось, два тона воспроизводятся одновременно, создавая что-то, похожее на тональный сигнал набора:
tone1 = note(440,2,amp=10000)
tone2 = note(480,2,amp=10000)
tone = tone1+tone2
write('440hzAtone.wav',44100,tone)
Я также попытался умножить два тона, но это просто генерирует статический сигнал.пробовал генерировать тоны разной длины и добавлять их, однако это вызывает исключение, например:
tone1 = note(440,2,amp=10000)
tone2 = note(480,1,amp=10000)
tone = tone1+tone2
write('440hzAtone.wav',44100,tone)
вызывает:
ValueError: operands could not be broadcast together with shapes (88200) (44100)
Итак, мне было интересно - как можноЯ объединяю разные тоны, чтобы создать мелодию?