音频领域特定语言vs Python

2024-05-13 06:08:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我也遇到过一些音频/声学特定的语言,如SuperCollider、Faust等,它们似乎使音频处理变得容易,但在IO和分析能力方面可能受到限制。在

我目前正在Linux上工作,默认安装了Alsa和PulseAudio。如果可能的话,我不想涉及其他各种各样的音频包,尽管这不是一个硬性的要求。在

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


Tags: 工具代码ionumpy语言linux状态世界
3条回答

我不能百分之百地确定您想要做什么,但是作为一个额外的建议,我将提出:用commonlisp编写脚本。如果你所做的工作涉及大量的频谱分析,那么你可以在Spear中完成繁重的工作,并使用普通的音乐列表编写所有这些。Spear在编辑非常具体的部分方面有一些很好的工具。在

SuperCollider对这些东西有很多支持,包括外部/插件或夸克。也就是说,这完全取决于你想做什么。如果您只是想检测事件,Onsets.kr就可以了。如果您要查找频率/基音信息,Pitch或{}就可以了(我发现Tartini更准确)。如果你想跟踪振幅,结合Amplitude.ar和一些简单的数学方法也可以。在

类似地,还有SpecCentroid.kr(用于一种亮度分析)、Loudness.krSpecFlatness.kr

以上这些都是很一般的,还有很多(externals包有一些有趣的FFT相关声学特性)。所以我建议你下载这个程序,加入邮件列表(如果你还有其他问题的话),它的地址是here,在外部、夸克和标准ugen中四处搜索。在

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

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

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

  2. 如果您想做一些核心工作,例如应用各种机器学习算法,而不一定是实时的(例如,如果您可以轻松地读/写WAV文件,而不是实时音频),那么您应该使用具有广泛支持的通用编程语言,以及一个良好库的生态系统你想要的东西。将Python与lib(如numpy和scikitslearn)一起使用非常好。它有利于快速原型制作,但它不仅缺少可靠的实时音频,而且标准音频构建块也少得多。在制作音频管道原型时,这两个重要的因素会阻碍您的工作。

那么,你就被夹在这两种选择之间了。根据您的应用程序,您可以通过在实时环境中操作音频I/O,并使用OSC消息传递或shell脚本与外部Python进程通信,从而将两者结合起来。它的局限性在于你不能在这两个进程之间真正地抛出大量的数据(你不能理智地将你的音频传输到其他进程中,那太傻了)。在

相关问题 更多 >