DSPACK ライブラリを使用して DirectShow フィルタ処理を行う Delphi 6 Pro プログラムがあります。カスタム オーディオ ソースからオーディオを提供する最初のプッシュ ソース フィルターを作成しています。現在、私の最大の疑問は、FillBuffer() 呼び出し中にフィルターの出力バッファーにコピーするデータの量を決定する方法です。
一度に 1 つのオーディオ サンプルしかコピーできないのですか? 私の場合、各オーディオ サンプルは 16 ビット幅のシングル チャネルであるため、これはわずか 2 バイトになります。これは根本的に非効率に思えます。または、サンプルのブロックを一度にコピーする必要がありますか? もしそうなら、コピーするバイト数を決定する際に使用する正しいロジックは何ですか? Sample.GetSize() によって返された値を提供するバイト数として単純に使用する正しいロジックはありますか?ここで、Sample は FillBuffer() 呼び出しに渡された IMediaSample オブジェクトですか?
また、オーディオ プッシュ ソース フィルターとビデオ フィルターの作成に関するヒントや注意点があれば、ここに投稿してください。私が取り組んでいるサンプルは、現在のデスクトップ イメージを一連のビットマップとしてストリーミングするビデオ フィルターです。ビデオ フィルターを出発点として使用する場合、オーディオのみの DirectShow フィルターに不適切なことを行うのではないかと心配しています。さらに、このフィルタからのオーディオは、2 つのパーティ間のライブ オーディオ接続を伴うため、リアルタイムである必要があります。