2013-01-22 60 views
0

我想编写一些代码来进行声学分析,我正在尝试确定适合这项工作的工具。我通常会在Python中使用numpy和scipy以及可能用于分析部分的Cython来写这样的东西。我发现Python音频库的世界有点混乱,在各种开发状态下都有很多非常有限的软件包。音频领域特定语言与Python

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

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

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

回答

2

SuperCollider对这些产品有很多支持,包括外部/插件或夸克。这就是说,这取决于你想要做什么。如果你只是想检测事件,Onsets.kr会没事的。如果你正在寻找频率/音调信息,PitchTartini会工作(我发现Tartini更准确)。如果你试图跟踪幅度,Amplitude.ar和一些简单的数学的组合也可以工作。

同样,也SpecCentroid.kr(一类亮度分析),Loudness.krSpecFlatness.kr

以上都是很一般,而且有很多以上(JoshUGens的外部包有一些有趣的FFT的相关的声学材料)。所以我会推荐下载该程序,加入邮件列表(如果您还有其他问题),它将生活在之间,并在Externals,Quarks和Standard UGens中寻找答案。

尽管如此,由于我不确定你在做什么,我不能提出比上述更具体的建议,加上我觉得这是最有意义的去SC,而不是写所有的自己从事Python的工具。

4

我对SuperCollider和Python有很多经验(有和没有Numpy)。我做了很多音频分析,恐怕答案取决于你想做什么。

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

  2. 如果你想做核心工作,如应用各种机器学习算法,不一定实时(即如果你可以摆脱阅读/写入WAV文件而不是实况音频),那么你应该使用一个具有广泛支持的通用编程语言,以及为您想要的额外事物提供良好图书馆生态系统。使用Python与libs如numpy和scikits-learn非常适合。这对于快速原型制作来说非常有用,但它不仅缺乏稳定的实时音频,而且还具有更少的标准音频构建块。这些是在音频流水线原型设计时阻碍你的两件重要事情。

那么,你被夹在这两个选项之间。根据您的应用程序,您可以通过在实时环境中操作音频I/O,并使用OSC消息传递或shell脚本与外部Python进程进行通信来结合两个。这里的局限性在于,你不能真正将大量数据放在两者之间(你不能合理地将所有音频传送到其他进程,这很愚蠢)。

0

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