2

私は WASAPI を使用して、Windows 7 の共有モードでオーディオ バッファーをキャプチャします。48 kHz のサンプル レート、96 kHz、192 kHz、または 44.1 kHz のサンプル レートしか持たないラウドスピーカーを使用しています。私のサウンド カードは Realtek High Definition です。

Windows Vista や Windows 8 などの別の OS でプログラムを実行すると、WASAPI の動作が異なるかどうかを知る必要があります。また、異なるハードウェア (異なるサウンド カード) でキャプチャされたバッファーに対して getBuffer が同じサイズを取得するかどうかを知る必要があります。

自分でテストすることはできず、インターネットで詳細を見つけることはできません。しかし、私のプログラムは、さまざまなバージョンの Windows とさまざまなハードウェアを搭載したさまざまなコンピューターで動作する必要があります。キャプチャされたバッファ サイズが異なると、別のコンピュータでプログラムが正しく動作しません。

誰かがそれについて何か知っているなら、私に知らせてください。ありがとうございました。

4

1 に答える 1

2

MSDNのストリームのキャプチャでは、オーディオ デバイスから返される特定のバイト数 (サンプル) に依存せずにデータをキャプチャする方法を示すコード スニペットが提供されます。キャプチャ ロジックは、バッファーから内部バッファーにコピーする必要があります。そこでは、さらに処理するために十分な量の連続したデータが蓄積されます。また、特定の状況下では、キャプチャ ループでサンプルが失われ、データ ストリームに不連続性が生じる可能性があることに注意してください。これは基本的にストリームのどの部分でも発生する可能性があり、使用しているバイト/バッファーを減らすことができます。あなたもこれを優雅に処理することに興味があります。

// Get the available data in the shared buffer.
hr = pCaptureClient->GetBuffer(&pData, &numFramesAvailable, &flags, NULL, NULL);
if (flags & AUDCLNT_BUFFERFLAGS_SILENT)
{
   // TODO: Tell CopyData to write silence.
}
// Copy the available capture data to the audio sink.
hr = pMySink->CopyData(pData, numFramesAvailable, &bDone);
于 2014-07-11T16:25:49.887 に答える