Python 的实时程序声音?
Posted
技术标签:
【中文标题】Python 的实时程序声音?【英文标题】:Real-time procedural sounds with Python? 【发布时间】:2012-10-07 22:41:19 【问题描述】:我想在 Python 中制作程序声音,并立即播放它们而不是将它们保存到文件中。我应该为此使用什么?我可以只使用内置模块,还是需要额外的东西?
我可能会想改变音高、音量之类的东西。
【问题讨论】:
【参考方案1】:使用 numpy 和 scikits.audiolab
应该可以解决问题。 audiolab
具有支持 ALSA 和 Core Audio 后端的 play
函数。
这是一个使用 numpy 生成简单正弦波的示例:
from __future__ import division
import numpy as np
def testsignal(hz,amplitude = .5,seconds=5.,sr=44100.):
'''
Create a sine wave at hz for n seconds
'''
# cycles per sample
cps = hz / sr
# total samples
ts = seconds * sr
return amplitude * np.sin(np.arange(0,ts*cps,cps) * (2*np.pi))
要创建 5 秒 440 赫兹的正弦波并收听,您可以:
>>> from scikits.audiolab import play
>>> samples = testsignal(440)
>>> play(samples)
请注意,play
是一个阻塞调用。在声音播放完毕之前,控制权不会返回给您的代码。
【讨论】:
看起来很棒,直到我意识到它仅适用于 Mac OS 和 Linux。 (我正在运行 Windows) 对 play() 的重复调用在它们之间有听得见的间隙......除非我遗漏了什么,否则这不适用于任何想要连续流的实时应用程序不同的声音......【参考方案2】:查看this Python wiki page。特别是“Python 中的音乐编程”部分。
【讨论】:
【参考方案3】:Pyglet 可能是一个不错的选择,因为它嵌入了音频程序功能: Pyglet/media_procedural
【讨论】:
以上是关于Python 的实时程序声音?的主要内容,如果未能解决你的问题,请参考以下文章