【问题标题】:Apache Beam for audio signal/stream processing用于音频信号/流处理的 Apache Beam
【发布时间】:2017-08-22 21:36:21
【问题描述】:

我正在研究类语音识别,从而处理音频信号,即对原始音频信号应用一系列变换和数字信号处理 (DSP) 技术,以获得有价值的表示,然后将其输入机器学习算法。

我的代码库完全用 Matlab 编写,仅适用于有限(有界)信号。我计划迁移到一个可以处理有限和无限(流)音频信号的解决方案,最好是在 python 中(主要用于机器学习和音频信号处理中的第三方库可用性)。

经过一些研究,我发现 Apache Beam 非常适合我的情况,但是,python SDK 中似乎没有某些功能,比如对我来说非常重要的窗口概念,两者都适用于有界和无限信号(通常,我的代码处理 32 毫秒的帧/窗口)。

所以,我正在寻求建议:

  • Apache Beam(python SDK)对音频信号的针对性 处理;
  • 如何解决我刚才提到的限制;
  • 在我的情况下还有其他选择吗?

【问题讨论】:

    标签: python audio apache-beam


    【解决方案1】:

    首先,一般来说,我会避免使用 Python 进行繁重的 DSP:与 C/C++ 相比,这将不可避免地导致性能下降。

    现在我对 Apache Beam 了解不多,但它似乎根本不适合音频信号处理,而是适合处理大量文本数据。实际上,我在他们的网站上找不到任何提及“音频”这个词......

    那么,从这里到哪里去呢?

    归根结底,您的程序可能要用 C/C++ 编写。例如,您可以使用:

    • Matlab Coder,它允许您在 C/C++ 中转换 Matlab 代码。不确定性能以及它与最终结果的接近程度。
    • PortAudio,这是一个比较低级的音频库,一定能让你做出你想要的。
    • 其他库

    您也可以尝试混合使用 Matlab CoderPortAudio:使用 Matlab Coder 转换 C/C++ 中的特定算法和将它们集成到 PortAudio 为您提供的框架中。

    PortAudio的基本原理是:

    • 它独立于平台并且是开源的
    • 您定义了一个回调函数,该函数将在您必须处理音频缓冲区时调用。如果您处理一个文件,它将被分成小块,用作音频缓冲区。如果您使用实时流,您从“外部世界”接收的每个缓冲区都将发送到此回调函数。

    【讨论】:

    • 感谢@filaton 的澄清。我考虑到了对性能的担忧,并找到了Essentia,这是一个由巴塞罗那庞培法布拉大学开发的库。它是用 C++ 编写的,带有 python 绑定。除了标准处理之外,它还提供了一种流模式,允许将您的管道指定为有向图。
    • 嗯,Essentia 主要是一个音乐分析库(因此 a priori 不太适合语音识别),尽管它包含标准 DSP 算法.如果它不适合您,您还可以使用 PyAudio,它是我在第一个答案中提到的 PortAudio 库的 Python 绑定。 (顺便说一句,如果您对我的回答感到满意,可以将其标记为已接受。欢迎使用 StackOverflow :))
    猜你喜欢
    • 2012-11-01
    • 2013-06-07
    • 1970-01-01
    • 2012-11-05
    • 2010-12-23
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多