ストリーミングは、再生中のオーディオ ファイルのごく一部のみをメモリに保持するプロセスです。 これにより、バックグラウンド ミュージックなどの大きなオーディオ ファイルを再生でき、大量のメモリを占有しません。
Tip
低待機時間のバッファー サイズ設定: ストールを回避し、各バッファーの期間を 20 から 100 ミリ秒の間に維持するには、ストリーミング リングで少なくとも 3 つのバッファーを使用します。 バッファーが短い (20 ~ 40 ミリ秒) と、対話型のサウンド エフェクトで認識される待機時間が短縮されますが、ディスクの読み取り速度が速く、スレッドのスケジューリングが厳しくなる必要があります。 バックグラウンド ミュージック ストリーミングの場合、80 ~ 100 ミリ秒のバッファーは、ユーザーには聞こえないまま快適な余白を提供します。
Warning
ストリーミング スレッドは 、MMCSS を使用して高い優先度で実行する必要があります (たとえば、"Pro Audio" または "Games" タスクに登録します)。これにより、低優先度のスレッドでオーディオ パイプラインが不足することによるバッファーアンダーランが回避されます。 アンダーランが発生すると、ゲームオーディオで耳障りなポップノイズや無音の途切れが生じます。
オーディオ ファイルがストリーミングされると、ファイル全体を一度に読み込むのではなく、そのデータがディスクからチャンクで読み取られます。 ストリーミングは、オーディオ データをディスク バッファーのキューに非同期的に読み込むことによって実現されます。 各バッファーが入力され、ソース音声に送信されます。 音声がバッファーの再生を終了すると、バッファーは再び読み取り可能になります。 この方法でディスク バッファーをループ処理すると、データの一部のみが読み込まれる間に、大きなオーディオ ファイルを再生できます。 ストリーミング コードは別のスレッドに配置する必要があります。このスレッドは、実行時間の長いディスク操作とオーディオ操作が完了するまで待機している間にスリープ状態にすることができます。 コールバック クラスは、オーディオ操作が完了したときにイベントをトリガーすることによってスレッドをウェイクするために使用されます。
XAudio2 でストリーミングを実行する方法の例については、「 方法: ディスクからサウンドをストリーミングする」を参照してください。
関連トピック