python - 使用 iPython.display.Audio 生成一系列音频

标签 python audio ipython pyaudio

我想在 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)

这是一个相当不错的page on superposition of waves因为它与音频有关。

关于python - 使用 iPython.display.Audio 生成一系列音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34254588/

相关文章:

Android Quickblox 视频聊天错误

ios - 发短信和通过电子邮件发送录音大小问题

python - 具有调试和 iPython 集成的 Python IDE?

python - 从 Notepad++ 启动和关闭交互式 ipython session 的正确方法

python - 如何在 Python 中实现 Schwartzian 变换?

python - 在 SQLite 中使用 Python 列表的多行更新

ios - 如何将音频单元输出的相位移动 180 度

python - wxpython 框架 "steal"和 "return"如何像 Dash 应用程序那样聚焦?

python - 使用 Python 遍历给定搜索短语和 URL 的 Google 搜索结果

Python 未在图中正确设置范围