RenderExclusiveEventDriven
此示例应用程序使用核心音频 API 将音频数据呈现到用户指定的输出设备。 此示例演示以独占模式呈现客户端的事件驱动缓冲。 对于独占模式流,客户端与音频设备共享终结点缓冲区。
本主题包含以下部分。
描述
此示例演示了以下功能。
- MMDevice API 进行多媒体设备枚举和选择。
- 用于流管理作的 WASAPI。
要求
产品 | 版本 |
---|---|
Windows SDK | Windows 7 |
Visual Studio | 2008 |
下载示例
此示例在以下位置可用。
位置 | 路径/URL |
---|---|
Windows SDK | \Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderExclusiveEventDriven\... |
生成示例
若要生成 RenderExclusiveEventDriven 示例,请使用以下步骤:
- 打开 Windows SDK 的 CMD shell 并更改为 RenderExclusiveEventDriven 示例目录。
- 在 RenderExclusiveEventDriven 目录中运行命令
start WASAPIRenderExclusiveEventDriven.sln
,在 Visual Studio 窗口中打开 WASAPIRenderExclusiveEventDriven 项目。 - 在窗口中,选择 调试 或 发布 解决方案配置,从菜单栏中选择 生成 菜单,然后选择 生成 选项。 如果未从 SDK 的 CMD shell 打开 Visual Studio,Visual Studio 将无法访问 SDK 生成环境。 在这种情况下,除非显式设置在项目文件 WASAPIRenderExclusiveEventDriven.vcproj 中使用的环境变量 MSSdk,否则此示例不会生成。
运行示例
如果成功生成演示应用程序,则会生成可执行文件 WASAPIRenderExclusiveEventDriven.exe。 若要运行它,请在命令窗口中键入 WASAPIRenderExclusiveEventDriven
,后跟必需或可选参数。 以下示例演示如何通过在默认多媒体设备上指定播放持续时间来运行示例。
WASAPIRenderExclusiveEventDriven.exe -d 20 -multimedia
下表显示了参数。
论点 | 描述 |
---|---|
-? | 显示帮助。 |
-h | 显示帮助。 |
-f | Hz 中的正弦波频率。 |
-l | 音频呈现延迟(以毫秒为单位)。 |
-d | 正弦波持续时间(以秒为单位)。 |
-m | 禁用 MMCSS 的使用。 |
-安慰 | 使用默认控制台设备。 |
-通信 | 使用默认通信设备。 |
-多媒体 | 使用默认多媒体设备。 |
-端点 | 使用开关值中指定的终结点标识符。 |
如果应用程序在没有参数的情况下运行,它将枚举可用的设备,并提示用户为呈现会话选择设备。 用户指定设备后,应用程序将在 440 Hz 处呈现正弦波 10 秒。 可以通过指定 -f 和 -d 开关值来修改这些值。
RenderExclusiveEventDriven 示例演示事件驱动的缓冲。 此示例演示如何:
- 实例化音频客户端,将其配置为以独占模式运行,并通过在调用 IAudioClient::Initialize中设置 AUDCLNT_STREAMFLAGS_EVENTCALLBACK 标志来启用事件驱动的缓冲。
- 通过调用 IAudioClient::SetEventHandle 方法,将客户端与准备好呈现的示例相关联。
- 创建呈现线程以处理来自音频引擎的示例。
- 在将缓冲区发送到设备之前,在 128 字节边界上正确对齐缓冲区。 这是通过调整引擎的周期来完成的。
- 检查设备终结点的混合格式,以确定是否可以呈现样本。 如果设备不支持混合格式,则数据将转换为 PCM。
- 处理流切换。
在呈现会话开始和流启动后,音频引擎会向提供的事件句柄发出信号,以便在每次缓冲区准备好供客户端处理时通知客户端。 还可以在计时器驱动的循环中处理音频数据。 RenderExclusiveTimerDriven 示例中演示了此模式。
有关呈现流的详细信息,请参阅 呈现流。
相关主题
-
使用核心音频 API 的 SDK 示例