我想在iPython中生成连续的音频音调。我见过pyo
,但我只能让它在terminal
中工作。。。如果可能的话,我更愿意在iPython
中测试作文。
我最近发现了iPython.display.Audio
,并认为它可能是一种为动画生成音调的有用方法。
# Generate a sound
from IPython.display import Audio
import numpy as np
def waveform(freq,sec=1,sample_rate=44100):
t = np.linspace(0,sec,sample_rate*sec)
return(np.sin(np.pi*freq*t))
scale = [440, 493.88, 523.25, 587.33, 659.25, 698.46, 783.99, 880.00]
sample_rate = 44100
Audio(waveform(440,sec=2),rate=sample_rate,autoplay=True)
所以这是有效的,它制作了一个小音箱GUI,播放我的音调。但我尝试时无法生成多个音调:
for note in scale:
Audio(waveform(note,sec=2),rate=sample_rate,autoplay=True)
我真的很想让iPython.display.Audio
工作,但如果它能实时播放音调(而不仅仅是写入文件),我愿意使用其他模块。我听说过pyaudio
和pygame
,但我不确定这些声音是否能在飞行中产生。
sequence = np.array([])
for note in scale:
sequence = np.append(sequence, waveform(note, sec))
Audio(sequence,rate=sample_rate,autoplay=True)
如果您想同时播放多个音调,请继续阅读。
声波遵循叠加原理,因此多个波的组合是所有部分的线性和。这非常酷,因为这意味着你可以通过对多个声音进行求和来组合它们,因为你已经有了一个很好的矢量形式
sec = 2
chord = waveform(0, sec) # silence
for note in scale:
chord += waveform(note, sec)
Audio(chord,rate=sample_rate,autoplay=True)
这是一个非常好的页面叠加波,因为它涉及音频。