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

Dav*_*bie 0 windows signal-processing fft real-time

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

有没有办法在 Windows 中对实时音频实施频谱分析(特别是 FFT)?

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

如果发生一组特定的 FFT 特征,我可以执行程序也会很有用。

谢谢你们!

Woo*_*Dev 5

要做到这一点,您基本上有几个选项,具体取决于您最喜欢的语言/框架。我不确定你对信号处理有多陌生,所以我会建议一些选择。

可视化编程

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

Simulink(付费)

MathWorks/Matlab 的可视化编程工具,实时运行非常好(在我看来)。使用音频系统工具箱,您可以轻松地实时捕获系统中的麦克风输入并进行FFT处理,绘制频谱,如您所说,如果满足某些 FFT 条件,则进行一些进一步的处理。

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

最大 MSP(付费)

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

您可以将MAX MSP编译为可执行文件以立即提供给某人。以下是帮助您开始在 MAX 中使用 FFT的参考。同样,这不是免费的,但如果您想了解更多信息,那么我认为它物有所值(如果我记得它并不太贵)。

如果您需要比内置模块更多的自定义处理,我相信您可以使用 C 或 JavaScript 设计自定义 MAX 模块。Max 旨在轻松获取系统音频输入/输出,这里有一个链接可以帮助您入门。

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

纯数据 (PD)(免费)

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

编程语言

如果您还没有接触过 DSP 或音频编程,那么视觉内容是一个非常好的入门方式。否则这里只有几个选项和链接可以开始以及我推荐的地方。

Matlab八度

和以前一样,音频系统工具箱支持 Matlab 脚本中的实时音频 I/O。这与 Matlab 的内置FFT函数相结合,可以让您设置编程实时 FFT 并立即绘制响应(少于 10 行代码或其他内容)。

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

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

Python

由于PyAudio模块,使用 Python 更可能实现实时音频 I/O 和 DSP!如果您刚开始确定,我会推荐 Python,因为它是对任何编程语言的一个很好的介绍,并且可以在尝试低级语言之前帮助教授 DSP 的基础知识。

您可以从这里开始使用 PyAudio 在 Python 中进行实时非阻塞音频 I/O。要绘制数据,您可以使用诸如matplotlib 之类的库(设计类似于 Matlab 的简单绘图功能)。

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

C

经典(有时)最令人生畏的编程语言之一。由于没有对象(除非您想自己制作)或其他高级抽象,C 是少数仍然感觉您正在从头开始构建的语言之一(我个人喜欢)。

要开始使用音频,我认为我会查看使用最广泛的跨平台音频 I/O 库;端口音频。这将使您能够在 Mac、Linux 和 Windows 上实时访问声卡数据输入和输出。

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

如果您对编程非常陌生,除非您真的想陷入困境,否则我不建议您这样做。

C++

无论KissFFTportaudio也将与C ++代码编译,但这里有一对夫妇的更高水平的替代品。

我的最爱之一是JUCE框架/开发环境。它内置了跨平台音频 I/O,并且已经具有自定义FFT功能作为框架的一部分。如果您愿意,您也可以为您的音乐DAW构建自定义VST。它还带有对图形窗口的“简单”(如果您知道 C++)访问,并具有对 openGL 的更高级别的访问权限,因此您可以在实时绘制数据时变得有趣。如果我没记错的话,第一次安装的演示项目之一是实时 FFT 图,您可以编译并查看来自笔记本电脑麦克风的输入。JUCE 可免费供个人使用,但作为独立开发者需要支付少量许可费。

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

概括

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

  • 完整的编程初学者:最大 MSP
  • 新手/稍微了解一下:Python(使用PyAudio
  • 用其他语言编程可能希望获得更多编程技能:C++ with JUCE

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

这只是我的意见,但希望这能让你一路走好!