2

我对 WASAPI 很陌生,我正在尝试用 C++ 编写一个程序,该程序查看主播放设备上的音频流并通过 fftw3 对每个块执行 FFT,对结果进行处理,然后丢弃块. 到目前为止,我在 WASAPI 和 fftw3 上找到的每个示例都涉及写入文件然后打开该文件。是否可以直接处理 WAVE 块?

4

1 回答 1

1

WASAPI 音频捕获通常用“刚刚捕获的”音频数据填充内存缓冲区并将它们传递回控制应用程序。“不写入文件” - 这是它首先工作的方式。将数据写入媒体文件需要额外的努力,无论是否压缩。

您可能对以下Windows SDK 示例感兴趣:

  • CaptureSharedEventDriven - 此示例应用程序使用核心音频 API 从用户指定的输入设备捕获音频数据,并将其写入当前目录中唯一命名的 .WAV 文件。此示例演示事件驱动的缓冲。
  • CaptureSharedTimerDriven - 此示例应用程序使用核心音频 API 从用户指定的输入设备捕获音频数据,并将其写入当前目录中唯一命名的 .WAV 文件。此示例演示了计时器驱动的缓冲。

两者都向您展示了数据如何从 API 通过内存缓冲区传输到文件。您可以在从 API 获取数据时应用 FFT,然后再将其转到示例中的文件。

于 2014-01-06T23:18:16.937 回答