在 C/C++ 中使用 JACK 和 fftw 的音频频谱
Posted
技术标签:
【中文标题】在 C/C++ 中使用 JACK 和 fftw 的音频频谱【英文标题】:Audio Spectrum using JACK and fftw in C/C++ 【发布时间】:2011-09-12 00:28:13 【问题描述】:我需要有关如何在 C/C++ 中使用 JACK 和 fftw 开发音频频谱的帮助(文档、示例代码等)。我正在 Mac OS X (10.6+) 上开发。任何帮助将不胜感激。
【问题讨论】:
“开发音频频谱”是什么意思?您是否尝试测量和/或显示音频功率谱? 是的;抱歉没有澄清。一个例子是在 iTunes 中找到的那个(在当前播放的歌曲信息窗口中)。我已经知道如何应用窗口函数和傅里叶变换并绘制数据。我真正需要帮助的是如何从声音设备上的默认线路中提取浮点数。 @Agent0:好的——你应该编辑你的问题并添加说明。祝你好运。 看起来像是对您之前问题的重新陈述:***.com/questions/6287523/… ? 请原谅我的困惑,但这不是我之前问题的重述,因为我之前的问题涉及 Core Audio,而这是 JACK 音频库。 【参考方案1】:这里有一个很棒的千斤顶教程演练:
http://dis-dot-dat.net/index.cgi?item=/jacktuts/starting/
这应该演示如何构建一个能够从系统输入和/或任何支持插孔的音频播放器中获取音频的插孔应用程序。
【讨论】:
注意,该教程似乎没有提到 JACK 回调发生在它们自己的线程中,所以不要调用任何无法从它们内部处理的东西(例如:GUI 库)。 有趣的地方。为什么 GUI 库难以处理来自不同线程内部的调用? 它们通常不做任何锁定(部分是因为你可以在不使用-pthreads
编译的情况下使用它们,部分是为了性能,最后是因为如果你不知道的话,很容易造成死锁GUI 是如何锁定的)。
从本质上讲,这只是在几乎所有情况下最好以另一种方式处理它的事情之一,很难为事件处理程序获得正确的锁定。最好看看如何从主线程中注入事件或空闲回调,例如:g_idle_add()
用于 GLib/GTK+以上是关于在 C/C++ 中使用 JACK 和 fftw 的音频频谱的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 fftw3 Visual Studio 2010 的 openCV 的链接器错误