音频域特定语言与Python

时间:2013-01-22 23:29:28

标签: python audio dsl supercollider

我想编写一些代码来进行声学分析,我正在尝试确定适合该工作的工具。我通常会在Python中使用numpy和scipy编写类似的东西,并且可能使用Cython作为分析部分。我发现Python音频库的世界有点乱,在各种开发状态下都有大量非常有限的包。

我还遇到了一些音频/声学特定语言,如SuperCollider,Faust等,这些语言似乎使音频处理变得简单,但在IO和分析能力方面可能受到限制。

我目前正在使用默认情况下安装了Alsa和PulseAudio的Linux。如果可能的话,我宁愿不涉及像杰克这样的各种其他音频包,尽管这不是一个很难的要求。

我对这个问题的主要兴趣是确定是否有一种特定于域的语言可以提供更快的原型设计和测试,或者像Python这样的通用语言是否更合适。感谢。

3 个答案:

答案 0 :(得分:4)

我在SuperCollider和Python(有和没有Numpy)方面有很多经验。我做了很多音频分析,我担心答案取决于你想做什么。

  1. 如果您想创建实时输入或输出音频的系统,那么Python就不是一个好选择。音频I / O库(正如你所说)有点粗略。还有一个基本问题,Python的垃圾收集器并不是真正设计用于实时的东西。 你应该使用一个从头开始实时设计的系统。 SuperCollider对此非常好,正如caseyanderson指出的那样,一些用于音频分析的标准构建模块就在那里。还有其他环境。

  2. 如果您想进行硬核工作,例如应用各种机器学习算法,不一定是实时的(即如果您可以通过读/写WAV文件而不是现场音频),那么你应该使用具有广泛支持的通用编程语言,以及适用于您想要的额外事物的良好库的生态系统。将Python与libs(如numpy和scikits-learn)结合使用对此非常有用。这对于快速原型设计很有用,但它不仅缺乏可靠的实时音频,而且还有更少的标准音频构建模块。这些是在音频管道原型设计时阻碍您的两件重要事情。

  3. 那么,你就会陷入这两种选择之中。根据您的应用程序,您可以通过在实时环境中操作音频I / O,并使用 OSC消息传递或shell脚本与外部通信来组合两者 Python进程。这种限制是你不能真正地在两者之间抛出大量数据(你不能明智地将你的所有音频传输到其他一些进程,这很愚蠢)。

答案 1 :(得分:2)

SuperCollider对这些内容提供了大量支持,包括外部/插件或夸克。也就是说,这完全取决于你想做什么。如果您只是想要检测事件,Onsets.kr就可以了。如果您正在查找频率/音调信息,PitchTartini会起作用(我发现Tartini更准确)。如果您正在尝试跟踪幅度,Amplitude.ar和一些简单数学的组合也可以。

同样,SpecCentroid.kr(用于某种亮度分析),Loudness.krSpecFlatness.kr等。

以上都非常通用,还有更多(JoshUGens外部包有一些有趣的与FFT相关的声学内容)。因此,我建议下载该程序,加入邮件列表(如果您还有其他问题),其中包含here,并在外部,夸克和标准UGens中进行探索。

尽管如此,由于我不确定你要做什么,我不能提出比上述更具体的建议,再加上我的感觉,为了这个最有意义的去SC,而不是写你自己的所有Python中的工具从头开始。

答案 2 :(得分:0)

我不是100%确定你想做什么,但作为一个额外的建议,我会提出:Speles with Common Lisp中的脚本。如果你正在做的事情涉及大量的光谱分析,那么你可以使用公共音乐的公共列表来完成沉重的矛提升,并编写所有这些。 Spear在编辑非常具体的部分方面有一些很棒的工具。