DSPACK コンポーネント ライブラリを使用して Delphi 6 で構築した DirectShow アプリケーションがあります。2 日間、私はオーディオ再生の問題を解決しようとしてきました。作成したフィルタ グラフを実行すると、再生中にクリック音が繰り返し聞こえます。本当に混乱したのは、フィルタ グラフと同時に作成したオーディオ ファイルに、ギャップではなく、クリーンな連続オーディオが含まれていたことです。そのため、オーディオ バッファが適切に配信されていることはわかっていましたが、「ライブ」再生を「妨害」していました。とか、そう思いました。セマフォの保持時間が長すぎる (ロック)、またはおそらくタイムスタンプの問題を探して問題を診断するのに 2 日間を費やしました。
出力ファイルが「スムーズ」であるにもかかわらず、DirectShow フィルタのレンダリング中に途切れる
数分前、Graph Edit ユーティリティでテストを試みることにしました。使用していたキャプチャ デバイス (VOIP 電話のマイク) と、使用していたレンダラー デバイス (ヘッドフォンへのHD ATI リア オーディオ出力)だけで構成される非常に単純なグラフを作成しました。合計2つのフィルター。 驚いたことに、同じクリック音が聞こえました。 ここでは、私のコードがまったく関係なく、クリック音が聞こえたケースがありました。
次に、Graph Edit で作成したフィルター グラフのオーディオ レンダラーをVOIP phone ear pieceに変更しました。クリック音が消えました。
これで、ATI リア オーディオ デバイスでスムーズなオーディオを取得する方法があることがわかりました。これは、優先オーディオ出力デバイスであり、PC で再生するビデオから再生する wave ファイルまで、すべてが完璧に聞こえるからです。では、他のソフトウェア プログラムは、単にフィルターを接続するだけでなく、何か違うことをしているのですか? おそらく、HD ATI リア オーディオのデフォルト モードはダブル バッファリングなしで、他のソフトウェア プログラムはその機能を有効にする方法を知っているのではないでしょうか? それとも、 HD ATI リア オーディオレンダラーでオーディオをスムーズに再生するために、たとえば別の DirectShow または DirectSound フィルターまたは技術を使用して、何か別のことを行っているのでしょうか?