实时输入音频上的信号处理/ FFT

时间:2018-07-16 13:16:04

标签: windows signal-processing real-time fft

有人告诉我这属于程序设计,而不属于信号处理子交换。

是否可以在Windows中对现场音频进行频谱分析(特别是FFT)?

我希望能够从麦克风中读取音频,并在屏幕上显示可以产生傅立叶变换的显示。

如果出现一组特定的FFT特性,如果我可以执行程序,这也将很有用。

谢谢大家!

1 个答案:

答案 0 :(得分:3)

为此,您可以根据自己的首选语言/框架有几个选择。我不确定您要发出信号的处理方式有多新,所以我将建议一些选择。

可视化编程

这些都是可视化编程环境,实际上不需要任何代码编写,但是Simulink和Pure Data都需要运行时供用户运行程序。

Simulink(付费)

MathWorks / Matlab的可视化编程工具实时性非常好(我认为)。使用Audio System Toolbox,您可以轻松地实时捕获来自系统的麦克风输入并进行FFT处理,绘制频谱图,并且如您所说,如果满足某些FFT条件,则可以执行一些进一步处理。

这不是免费软件,需要安装Matlab / Simulink运行时。您还可以根据需要使用Matlab的.m语言(Java,JS和C之间的交叉)编写处理脚本。

Max MSP(付费)

与Simulink类似的版本,但已开发为独立的可视化编程工具。这将给您与Simulink类似的自由度,但我认为重新分发会更容易。

您可以compile将MAX MSP转换成可执行文件,以立即交给某人。以下是帮助您入门MAX中的using the FFT的参考。再说一次,这不是免费的,但是如果您想了解更多,那么我认为这是值得的(如果我还记得它不太贵的话)。

如果您需要比内置模块更多的自定义处理,我相信您可以使用C或JavaScript设计自定义MAX模块。 Max旨在轻松获取系统音频输入/输出和here's a link来帮助您入门。

奖金:您可以使用Max4Live插件来设计自己的Ableton Live插件,该插件只允许将MAX MSP项目编译为.VST格式。因此,如果您从事音乐制作,则可以构建自定义FX。

Pure Data (PD)(免费)

MAX MSP的一个非常平淡的开源版本,但完全免费。乍一看它可能看起来很乏味,但是我知道很多研究都使用它来构建相当复杂的系统,可以进行一些认真的数据处理。如果您需要自定义模块,也有很多社区为PD设计的附加功能。这是一个链接,可帮助您开始使用PD中的FFT。您不能使用PD编译应用程序,但是由于安装完全免费,因此任何人都可以在安装PD后运行程序。另一个link用于对PD中的音频I / O进行故障排除(如果无法立即使用)。

编程语言

如果您还没有接触过DSP或音频编程,那么可视化内容是一种非常不错的入门方法。否则,这里只有一些选项和链接,可以开始使用,以及我会推荐的位置。

MatlabOctave

像以前一样,Audio Systems Toolbox在Matlab脚本中支持实时音频I / O。结合Matlab内置的FFT函数,您可以设置编程实时FFT并立即绘制响应(少于10行代码或类似内容)。

Octave具有自己的FFT函数版本和用于渲染绘图响应的不同后端,但是没有Audio Systems Toolbox。但是,Playrec还是Matlab / Octave中音频I / O的开源替代品,它支持实时音频输入和输出。

({Octave是等效于Matlab的开源软件(Matlab需要付费许可才能开发程序),但不支持所有Matlab支持的功能)。

Python

由于PyAudio模块的支持,使用Python可以实现实时音频I / O和DSP!如果您确定刚入门,我会建议您使用Python,因为它是任何编程语言的不错的入门指南,可以在尝试使用低级语言之前帮助教授DSP的基础知识。

Here's,您可以使用PyAudio在Python中开始实时实时无阻塞音频I / O。要绘制数据,可以使用matplotlib之类的库(其设计类似于Matlab的简单绘制功能)。

对于您的FFT,那里有多个库,但我将从Scipy / Numpy一个库开始。

C

经典(有时是最艰巨)的编程语言之一。没有对象(除非您想自己创建它们)或其他高级抽象,C是仍然感觉像您从头开始构建大量东西(我个人很喜欢)的少数语言之一。

在我看来,要开始使用音频,我将看一下使用最广泛的跨平台音频I / O库。 portaudio。这将使您可以在Mac,Linux和Windows上实时访问声卡数据输入和输出。

一旦您启动并运行FFT,我就会开始使用KissFFT,因为它使用起来非常简单。如果您想绘制数据,我可能会看gnuplot,但这在开发方面并不是一条很漂亮的路。

如果您是编程的新手,除非您真的想参与其中,否则我不建议您这样做。

C ++

KissFFTportaudio都将使用C ++代码进行编译,但是这里有一些更高级的选择。

我最喜欢的一个是JUCE框架/开发环境。它内置了跨平台音频I / O,并已将自定义FFT函数作为框架的一部分。您也可以根据需要为音乐VSTs构建自定义DAW。它还带有“容易”(如果您了解C ++)对图形窗口的访问,以及对openGL的更高级别的访问,因此,在实时绘制数据时您会很喜欢。如果我没记错的话,第一次安装时的演示项目之一是实时FFT图,您可以编译并查看笔记本电脑麦克风的输入。 JUCE免费供个人使用,但作为独立开发人员需要支付少量许可费用。

否则,我想到的另一个是QT用于UI设计的C ++库/框架(主要是)。这是一个易于使用的跨平台GUI设计器,还具有用于从Mac / Win / Linux麦克风获取音频输入的高级类。 Here只是我使用QT's multimedia classesFFTReal绘制实时FFT频谱的一个例子。

摘要

我建议了很多选择,但也错过了一些其他人可能会推荐的语言,例如RC#JavaRust等...有太多建议,不可能一一涵盖,但我认为这应该足以开始。如果是我,那么经验:

  • 完成编程的初学者:Max MSP
  • 新手/稍微了解一下自己的方法:Python(与PyAudio一起)
  • 使用其他语言编程可能希望获得更多编程技能:使用JUCE的C ++

您选择的这些语言中的任何一种都将在将来对软件职位起到很好的参考作用,许多公司/研究人员使用它们来原型/开发实时音频处理软件。

这只是我的看法,但希望这会使您一路走好!