【问题标题】:Generate series of audio tones using iPython.display.Audio使用 iPython.display.Audio 生成一系列音频
【发布时间】:2015-12-13 18:17:40
【问题描述】:

我想在 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,但我不确定声音是否可以即时生成。

【问题讨论】:

    标签: python audio ipython pyaudio


    【解决方案1】:

    [编辑] 我意识到我误读了你的问题。我最初的答案是关于组合音调,你可能仍然觉得它很有用,所以我把它留在了下面。你需要附加你的音频向量来发出一个长音,像这样:

    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,因为它与音频有关。

    【讨论】:

    • 感谢您的精彩解释。我对和弦发生了什么有点困惑。它不需要 0 频率来初始化,对吧?
    • 我正在利用 waveform 在传递 freq=0 时返回无声波形这一事实。由于0是加法下的恒等元,我们可以用它来做笔记的求和归约。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2017-07-08
    • 1970-01-01
    • 2013-12-18
    相关资源
    最近更新 更多