gpt4 book ai didi

c - 在 Win32 SDK 中使用 PlaySound 时,如何检测声音何时播放完毕?

转载 作者:可可西里 更新时间:2023-11-01 11:09:50 26 4
gpt4 key购买 nike

我正在使用 Win32 SDK 中的 PlaySound 函数来播放波形文件。目前,我有以下代码行:

PlaySound(szFile,NULL,SND_FILENAME );

但是现在我想知道,如何检测wave文件播放结束的时间?我想在 wave 停止播放时更改按钮的文本。

最佳答案

PlaySound 的功能非常有限。在我开发的一个产品中,我们在 DirectSound 之上构建了一个媒体播放库来克服这些限制。在它所做的许多事情中,它涉及编写 WAV 文件解析器和线程代码以将 PCM 样本流维护到 DirectSound 缓冲区中。不适合胆小的人。

你可以走这条路,但这里有一些更简单的建议。

  1. 如果您知道正在播放的 WAV 文件的长度,则可以使用 SND_ASYNcflags调用 PlaySound。安排一个计时器在声音应该完成播放的估计时间触发。如果您不知道 WAV 文件的长度,您可以编写一个解析器来读取文件的标题。将“fmt” block 中的采样率和格式与数据 block 中的字节数进行比较,以计算文件的时间长度。

  2. 或者....创建一个专用线程来发出 PlaySound 调用(没有 SND_ASYNcflags)。当同步 PlaySound 函数返回时,对您的 UI 线程执行 PostMessage 以更新按钮。如果您对 PlaySound 有重叠调用,您可能需要进行一些多线程同步,但这并不难。

关于c - 在 Win32 SDK 中使用 PlaySound 时,如何检测声音何时播放完毕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com