【问题标题】:Audio Domain Specific Language vs Python音频领域特定语言与 Python
【发布时间】:2013-01-22 23:29:28
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python audio dsl supercollider


    【解决方案1】:

    我在 SuperCollider 和 Python(使用和不使用 Numpy)方面拥有丰富的经验。我做了很多音频分析,恐怕答案取决于你想做什么。

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

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

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

    【讨论】:

      【解决方案2】:

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

      同样有SpecCentroid.kr(用于亮度分析的一种)、Loudness.krSpecFlatness.kr

      以上内容都很笼统,还有更多(JoshUGens externals 包有一些有趣的与 FFT 相关的声学内容)。因此,我建议下载该程序,加入邮件列表(如果您还有其他问题),该邮件列表位于 here,并在 Externals、Quarks 和 Standard UGens 中四处寻找。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2019-01-05
          • 1970-01-01
          • 2010-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多