RenderSharedEventDriven

此示例应用程序使用核心音频 API 将音频数据呈现到用户指定的输出设备。 此示例演示以共享模式呈现客户端的事件驱动缓冲。 对于共享模式流,客户端与音频引擎共享终结点缓冲区。

本主题包含以下各节:

说明

此示例演示了以下功能。

  • 用于多媒体设备枚举和选择的 MMDevice API
  • 用于流管理操作的 WASAPI。

要求

产品 版本
Windows SDK Windows 7
Visual Studio 2008

 

下载示例

此样本在以下位置提供。

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

 

生成示例

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

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

运行示例

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

WASAPIRenderSharedEventDriven.exe -d 20 -multimedia

下表列出了参数。

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

 

如果应用程序在没有参数的情况下运行,它会枚举可用的设备,并提示用户为呈现会话选择设备。 用户指定设备后,应用程序将在 440 Hz 处呈现正弦波 10 秒。 可以通过指定 -f 和 -d 开关值来修改这些值。

RenderSharedEventDriven 演示了事件驱动的缓冲。 示例演示如何执行以下操作:

  • 实例化音频客户端,将其配置为以独占模式运行,并通过在 IAudioClient::Initialize 调用中设置 AUDCLNT_STREAMFLAGS_EVENTCALLBACK 标志来启用事件驱动的缓冲。
  • 通过调用 IAudioClient::SetEventHandle 方法向系统提供事件句柄,将客户端与准备呈现的示例相关联。
  • 创建呈现线程以从音频引擎处理示例。
  • 检查设备终结点的混合格式,以确定是否可以呈现样本。 如果设备不支持混合格式,则将数据转换为 PCM。
  • 处理流切换。

在呈现会话开始和流启动后,音频引擎会向提供的事件句柄发出信号,以便在缓冲区准备好供客户端处理时通知客户端。 音频数据也可以在定时器驱动的循环中进行处理。 RenderSharedTimerDriven 示例中演示了这种模式。

有关呈现流的详细信息,请参阅呈现流

使用核心音频 API 的SDK 示例