我不断发送数据到IAudioClient
(GetBufferSize/GetCurrentPadding/GetBuffer/ReleaseBuffer
),但我想知道音频设备何时完成播放我发送的最后一个数据。我不想因为将最后一块数据发送到设备而停止播放器:它可能仍在播放缓冲数据。IAudioClient - 播放结束时得到通知?
我尝试使用IAudioClock
/IAudioClock2
来检查硬件缓冲区的位置,但从发送最后一个块的那一刻开始,它保持不变。
我还没有看到在IMMNotificationClient
和IAudioSessionNotification
接口相关的任何东西......
我缺少什么?
谢谢!
无论音频播放与否,IAudioClock :: GetPosition /等总是返回相同的值。 我可以使用IAudioMeterInformation.GetPeakValue并检查返回的值是否为0。这似乎适用于我的情况(音频是带有至少一些环境噪声的麦克风录音),但我不太喜欢它作为通用解决方案 - 人们可以在音频流中静音。 –
只要不停止流,AudioClock应该返回不断增加的位置。有任何代码重现问题? –
什么我可以发布 - 我有一个德尔福应用程序流数据(工作正常),而流,我有一个计时器每隔50ms触发(只是一个测试),并调用AudioClock :: GetPosition。两个返回值都被记录下来。它们始终保持不变,只有在重新初始化设备时才有所不同。 –