使用 iPython.display.Audio 生成一系列音频
Generate series of audio tones using 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
工作,但如果它实时播放音调(而不是仅仅写入文件),我愿意使用其他模块。我听说过 pyaudio
和 pygame
但我不确定这些声音是否可以即时生成。
[edit] 我意识到我误解了你的问题。我最初的回答是关于组合音调,你可能仍然觉得它有用,所以我把它留在下面。你需要附加你的音频向量来制作一个长音,像这样:
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)
这是一个非常好的 page on superposition of waves,因为它与音频有关。
我想在 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
但我不确定这些声音是否可以即时生成。
[edit] 我意识到我误解了你的问题。我最初的回答是关于组合音调,你可能仍然觉得它有用,所以我把它留在下面。你需要附加你的音频向量来制作一个长音,像这样:
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)
这是一个非常好的 page on superposition of waves,因为它与音频有关。