私は連続してデータをIAudioClient
(GetBufferSize/GetCurrentPadding/GetBuffer/ReleaseBuffer
)に送信しますが、オーディオデバイスが最後に送信したデータの再生をいつ終了するかを知りたいと思います。最後のチャンクをデバイスに送信しただけで、プレイヤーが停止したと仮定したくはありません。バッファされたデータを再生している可能性があります。IAudioClient - 再生終了時に通知を受け取りますか?
私はIAudioClock
/IAudioClock2
を使用してハードウェアのバッファ位置を確認しようとしましたが、最後のチャンクを送信してから同じ状態を保ちました。
また、私は何をしないのです
... IMMNotificationClient
とIAudioSessionNotification
インタフェースで関連する何も見えませんか?
ありがとうございます!
IAudioClock :: GetPosition /などは、オーディオの再生の有無にかかわらず常に同じ値を返します。 私はIAudioMeterInformation.GetPeakValueを使用して、返された値が== 0であるかどうかを調べることができます。これは私のケースではうまくいくようです(オーディオは少なくとも周囲ノイズのあるマイク録音です)。しかし、解決策 - 確かにオーディオストリームの中に無音の期間を持つことができます。 –
ストリームを停止しない限り、AudioClockは継続的に増加する位置に戻ります。問題を再現するサンプルコードがありますか? –
何も投稿することはできません - データをストリーミングするDelphiアプリケーションを持っています(ストリーミング中)、50msごとにタイマーファイアが発生し、AudioClock :: GetPositionを呼び出します。両方の戻り値がログに記録されます。それらは常に同じままであり、デバイスを再初期化するときにのみ異なります。 –