2

DirectSound には、循環バッファーという非常に明確な概念がありました。

具体的には、現在の読み取り位置、現在の書き込み位置、および GetPosition の clear メソッドがあり、バッファーをロックして書き込みを開始しました。

ここに画像の説明を入力

私は OpenAL で同様の概念を探していますが、見つけられるのはAL_STREAMINGバッファをループしAL_SAMPLE_OFFSET、現在の読み取り位置を決定するために使用することだけです (そして、その後 15 サンプルを書き込みますか?)

OpenAL ドキュメントは現在ダウンしていますが、ここからアクセスできます。

再生中にアプリケーションによって書き込まれるサウンド バッファを宣言する安全な方法は何ですか? ループ ストリーミング バッファを使用するのは正しいですか?

4

1 に答える 1

3

実際、OpenAL の循環バッファーは、DirectSound の場合とは大きく異なります。

OpenAL では、サウンド バッファを順番にキューに入れる必要があります。その場合、必要なサウンド バッファは 2 つだけで、alSourceQueueBuffers と alSourceUnqueueBuffers を継続的に呼び出すだけです。

ソースでのバッファのキューイング ソースからオーディオを途切れることなく継続的にストリーミングするには、バッファ キューイングが必要です。バッファ キューイングを使用するには、バッファとソースを通常の方法で生成しますが、alSourcei を使用してバッファをソースにアタッチしません。代わりに、関数 alSourceQueueBuffers および alSourceUnqueueBuffers が使用されます。プログラムは、alSourceQueueBuffers を使用してバッファまたはバッファのセットをソースにアタッチし、そのソースで alSourcePlay を呼び出すことができます。ソースの再生中に、alSourceUnqueueBuffers を呼び出して、既に再生されたバッファを削除できます。これらのバッファは、新しいデータで満たされるか、破棄されます。その後、alSourceQueueBuffers を使用して、再生中のソースに新しいバッファまたは補充されたバッファをアタッチできます。再生する新しいバッファが常にキューにある限り、ソースは再生を続けます。

于 2012-12-17T18:40:46.630 に答える