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 的实时程序声音?的主要内容,如果未能解决你的问题,请参考以下文章

qt中使用libsndfile实时播放声音c++

实时编码音频会导致声音跳过

实时改变声音的音高(Swift)

从串行端口 (COM) 播放实时声音

使用 C++ 或 C# 实时录制声音

Android Firebase下载声音