Python 用于音频信号/流处理的Apache Beam

Python 用于音频信号/流处理的Apache Beam,python,audio,apache-beam,Python,Audio,Apache Beam,我正在研究类似语音的识别,从而处理音频信号,即对原始音频信号应用一系列变换和数字信号处理(DSP)技术,以获得有价值的表示,然后将其输入机器学习算法 我的代码库完全是用Matlab编写的,只适用于有限(有界)信号。我计划迁移到一个解决方案,在这个解决方案中,我可以处理有限和无限(流)音频信号,最好使用python(主要用于机器学习和音频信号处理中的第三方库可用性) 经过一些研究,我发现Apache Beam非常适合我的情况,但是,python SDK中似乎没有某些功能,比如窗口概念,它在我的情况

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

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

经过一些研究,我发现Apache Beam非常适合我的情况,但是,python SDK中似乎没有某些功能,比如窗口概念,它在我的情况下非常重要,无论是对于有界信号还是无界信号(通常,我的代码处理帧/窗口为32毫秒)

因此,我正在寻求以下方面的建议:

  • apachebeam(pythonsdk)对音频信号的相关性 加工
  • 如何克服我刚才提到的限制
  • 我的情况是否还有其他选择
首先,一般来说,我会避免使用Python执行繁重的DSP:与C/C++相比,这将不可避免地导致性能降低

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

那么,接下来该怎么办? 最后,您可能需要使用C/C++编写程序。例如,您可以使用:

  • Matlab编码器,它允许您在C/C++中转换Matlab代码。我不确定你的表现,也不确定你离最终结果有多近
  • ,这是一个相对低级的音频库,肯定能让你制作你想要的
  • 其他图书馆
您还可以尝试混合使用Matlab编码器和PortAudio:使用Matlab编码器转换C/C++中的特定算法,并将它们集成到PortAudio提供的框架中

PortAudio的基本原则是:

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

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

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

那么,接下来该怎么办? 最后,您可能需要使用C/C++编写程序。例如,您可以使用:

  • Matlab编码器,它允许您在C/C++中转换Matlab代码。我不确定你的表现,也不确定你离最终结果有多近
  • ,这是一个相对低级的音频库,肯定能让你制作你想要的
  • 其他图书馆
您还可以尝试混合使用Matlab编码器和PortAudio:使用Matlab编码器转换C/C++中的特定算法,并将它们集成到PortAudio提供的框架中

PortAudio的基本原则是:

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

感谢@filaton的澄清。我考虑到了对性能的担忧,并找到了<巴塞罗那>庞贝法拉大学开发的一个图书馆。它是用C++编写的,带有Python绑定。除了标准处理之外,它还提供了一种流模式,允许您将管道指定为有向图。Essentia主要是一个音乐分析库(因此先天不适合语音识别),尽管它包括标准DSP算法。如果它不适合您,您也可以使用PyAudio,它是我在第一个答案中提到的PortAudio库的Python绑定。(顺便说一句,如果您对我的回答感到满意,您可以将其标记为已接受。欢迎访问StackOverflow:))谢谢@filaton的澄清。我考虑到了对性能的担忧,并找到了<巴塞罗那>庞贝法拉大学开发的一个图书馆。它是用C++编写的,带有Python绑定。除了标准处理之外,它还提供了一种流模式,允许您将管道指定为有向图。Essentia主要是一个音乐分析库(因此先天不适合语音识别),尽管它包括标准DSP算法。如果它不适合您,您也可以使用PyAudio,它是我在第一个答案中提到的PortAudio库的Python绑定。(顺便说一句,如果您对我的答案感到满意,您可以将其标记为已接受。欢迎访问StackOverflow:)