CaptureSharedEventDriven

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

本主题包含以下各节:

说明

此示例演示了以下功能。

  • 用于多媒体设备枚举和选择的 MMDevice API
  • WASAPI 用于流管理操作,如启动和停止流以及流切换。

要求

产品 版本
Windows SDK Windows 7
Visual Studio 2008 年

 

下载示例

此样本在以下位置提供。

位置 路径/URL
Windows SDK \Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\CaptureSharedEventDriven\...

 

生成示例

要生成 CaptureSharedEventDriven 示例,请执行以下步骤:

  1. 打开 Windows SDK 的 CMD shell,并更改为 CaptureSharedEventDriven 示例目录。
  2. 在 CaptureSharedEventDriven 目录中运行 start WASAPICaptureSharedEventDriven.sln 命令,在 Visual Studio 窗口中打开 WASAPICaptureSharedEventDriven 项目。
  3. 在窗口中选择“调试”或“发布”解决方案配置,从菜单栏中选择“生成”菜单,然后选择“生成”选项。 如果未从 SDK 的 CMD shell 打开 Visual Studio,则 Visual Studio 将无法访问 SDK 的生成环境。 在这种情况下,除非显式设置了项目文件 WASAPICaptureSharedEventDriven.vcproj 中使用的环境变量 MSSdk,否则将无法生成此示例。

运行示例

如果成功生成演示应用程序,则会生成一个可执行文件 WASAPICaptureSharedEventDriven.exe。 要运行它,请在命令窗口中键入 WASAPICaptureSharedEventDriven,然后输入必要或可选的参数。 以下示例展示了如何在默认多媒体设备上通过指定捕获持续时间来运行采样。

WASAPICaptureSharedEventDriven.exe -d 20 -multimedia

下表列出了参数。

参数 说明
-? 显示帮助。
-h 显示帮助。
-l 音频捕获延迟(毫秒)。
-d 音频捕获持续时间(秒)。
-m 禁用 MMCSS。
-console 使用默认控制台设备。
-communications 使用默认通信设备。
-multimedia 使用默认多媒体设备。
-endpoint 使用开关值中指定的终结点标识符。

 

如果应用程序在没有参数的情况下运行,它会枚举可用的设备,并提示用户为捕获会话选择设备。 将列出默认控制台、通信和多媒体设备,后跟设备和终结点标识符。 如果未指定持续时间,则会从指定设备捕获 10 秒钟的音频流。 应用程序会将捕获的数据写入一个唯一命名的 .wav 文件。

CaptureSharedEventDriven 演示了事件驱动的缓冲。 为此示例实例化的音频客户端被配置为在共享模式下运行,通过在调用 IAudioClient::Initialize 时设置 AUDCLNT_STREAMFLAGS_EVENTCALLBACK 标志,客户端对音频缓冲区的处理将由事件驱动。 此示例显示了客户端必须如何通过调用 IAudioClient::SetEventHandle 方法来向系统提供事件句柄。 在捕获会话开始和流启动后,音频引擎会向所提供的事件句柄发出信号,以便在缓冲区准备好供客户端处理时通知客户端。 音频数据也可以在定时器驱动的循环中进行处理。 CaptureSharedTimerDriven 示例中演示了这种模式。

使用核心音频 API 的SDK 示例