0

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

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

我目前正在使用默认安装的 Alsa 和 PulseAudio 在 Linux 上工作。如果可能的话,我宁愿不涉及各种和杂乱无章的其他音频包,比如 Jack,尽管这不是一个硬性要求。

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

4

3 回答 3

4

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

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

  2. 如果你想做一些核心工作,比如应用各种机器学习算法,不一定是实时的(即,如果你可以读/写 WAV 文件而不是实时音频),那么你应该使用通用编程语言广泛的支持,以及一个好的库生态系统,可以满足您的额外需求。将 Python 与诸如 numpy 和 scikits-learn 之类的库一起使用非常适合这一点。它有利于快速原型制作,但它不仅缺乏可靠的实时音频,而且标准音频构建块也少得多。在制作音频管道原型时,这两件重要的事情会阻碍你。

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

于 2013-02-05T12:03:03.177 回答
2

SuperCollider 对这些方面有很多支持,无论是作为外部/插件还是 Quarks。也就是说,这完全取决于您想要做什么。如果您只是想检测事件,Onsets.kr那就没问题了。如果您正在寻找频率/音高信息,Pitch或者Tartini会工作(我发现Tartini更准确)。如果您尝试跟踪幅度,则结合使用Amplitude.ar一些简单的数学运算也可以。

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

以上都是非常笼统的,还有更多(JoshUGensexternals 包有一些有趣的 FFT 相关的声学材料)。所以我建议下载这个程序,加入邮件列表(如果你有更多的问题),它就住在这里,并在 Externals、Quarks 和 Standard UGens 中四处寻找。

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

于 2013-01-24T23:51:18.783 回答
0

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

于 2013-04-27T15:24:21.920 回答