使用iPython.display.audio生成一系列音频音调



我想在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工作,但如果它能实时播放音调(而不仅仅是写入文件),我愿意使用其他模块。我听说过pyaudiopygame,但我不确定这些声音是否能在飞行中产生。

我意识到我误解了你的问题。我最初的答案是关于组合音调,你可能仍然觉得这很有用,所以我把它留在下面。你需要附加你的音频矢量来制作一个长音调,就像这样:
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)

这是一个非常好的页面叠加波,因为它涉及音频。

最新更新