使用 C 在 Windows 上捕获和分析音频
Posted
技术标签:
【中文标题】使用 C 在 Windows 上捕获和分析音频【英文标题】:Capture and analyze audio on windows using C 【发布时间】:2015-07-15 12:32:56 【问题描述】:我正在构建一个程序,该程序需要录制音频并实时或半实时地对其进行分析(录制短音频位并在一次录制时对其进行分析)。
我编写了用于打开和分析 WAV 文件的代码(使用 libsndfile 库)。
现在我无法编写用于从 PC 麦克风录制的代码并将其保存到缓冲区/WAV 文件中。 我尝试使用此示例 - http://www.techmind.org/wave/。但我不知道如何将录制的缓冲区保存到 WAV 或如何使用录制的数据本身。
项目的要求是用C语言和windows编写。
我正在为此目的寻找一个高效的库。
编辑:在使用以下代码将数据从 16 位转换为双倍后,我设法将数据另存为 WAV:
for (int i = 0; i < size; i += 2)
int c = (waveIn[i + 1] << 8) | waveIn[i];
double t = c / 32768.0;
data[i] = t;
但是,录音非常嘈杂且不清楚。有什么建议吗?
谢谢
【问题讨论】:
我不是 OP,但为什么这被否决了?我对这样的问题很感兴趣 【参考方案1】:Previous question for saving a WAV file. 答案中有一些建议您可能想要追求。假设您的录制实际正在发生,您可能希望将代码放置在最后的 DO-WHILE 循环中保存录制的数据。
【讨论】:
我会尝试将代码保存在循环中。我确实有使用 libsndfile.h 写入 WAV 文件的成功经验。问题是我无法确定我是否正确“翻译”了采样数据,或者采样数据是否有效。 噪音问题需要过滤解决方案。如果您将麦克风插入 PC,则使用运算放大器创建多极陷波有源滤波器的可能性不大。 link 网站的作者很好地解释了这个概念。【参考方案2】:经过大量修补和测试,我放弃了为此使用 Windows API 并决定使用PortAudio。 他们有几个例子可以解决这个问题。 我采用了其中一个 PA 示例并对其进行了修改以使其适合我的需要,并将其与基于 libsndfile 的函数结合为 saving WAV files。 这是一个很棒的低级解决方案。
此外,如果有人正在寻找高级音频录制解决方案(无法控制采样率等),我推荐MCI based solution。
谢谢:)
【讨论】:
以上是关于使用 C 在 Windows 上捕获和分析音频的主要内容,如果未能解决你的问题,请参考以下文章