gpt4 book ai didi

winapi - IAudioClient - 播放结束时收到通知?

转载 作者:行者123 更新时间:2023-12-02 22:32:33 26 4
gpt4 key购买 nike

我不断向 IAudioClient 发送数据( GetBufferSize / GetCurrentPadding / GetBuffer / ReleaseBuffer ),但我想知道音频设备何时播放完我发送的最后一个数据。我不想假设播放器停止只是因为我将最后一 block 数据发送到设备:它可能仍在播放缓冲的数据。

我尝试使用 IAudioClock/IAudioClock2检查硬件缓冲区的位置,但从我发送最后一个 block 的那一刻起它就保持不变。

我也没有在 IMMNotificationClient 中看到任何相关内容和 IAudioSessionNotification接口(interface)...

我错过了什么?

谢谢!

最佳答案

IMMNotificationClient 和 IAudioSessionNotification 不会帮助你,它们分别用于检测新设备/新应用程序 session 。据我所知,当设备(独占模式)或音频引擎(共享模式)使用最后一个样本时,WASAPI 中没有任何内容明确发送事件。我过去使用的一个技巧(尽管使用 DirectSound,但应该同样适用于 WASAPI)是不断检查音频缓冲区中的可用空间(对于 WASAPI,使用 GetCurrentPadding)。发送最后一个样本后,立即记录当前的填充,假设它是 N 帧。然后继续向 AudioClient 写入零,直到处理了 N 帧(由 IAudioClock(2) 报告,或者只是使用计时器进行推测),然后停止流。这是否适用于专有事件驱动模式流是驱动程序质量问题;驱动程序可以选择报告“真实”播放位置,或者只是以完整缓冲区大小的 block 处理它。

关于winapi - IAudioClient - 播放结束时收到通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731209/

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