Microsoft DirectX 8.0 (Visual Basic)

ジッター バッファ

Microsoft® DirectPlay® Voice には、ジッター バッファという特徴的な機能がある。ジッター バッファは、最小限の遅延時間で最適な音質を提供する、柔軟なバッファリング アルゴリズムである。

混雑したネットワークでは、音声データ情報の各パケットが、ホスト コンピュータでエンコードされたときと異なった順序で届くことがある。音声データは本来連続したものなので、パケットが万一遅れても受信して順序よく再生するために、これらの流入パケットは、しばらくキューに入れておく必要がある。

音声通信の品質を最大にするようにジッター バッファを設定すると、必要な数の音声パケットが届き、再生用のキューに入るまでに、時間がかかる。このために音声が遅れ、音声通信をリアルタイムに聞くことができない。代わりに、音声データが聞こえるタイミングは、録音より数ミリ秒から数秒ほど遅れる可能性がある。プレーヤーが協力し合うゲームでは、この遅れによって問題が発生する。ゲーム内でイベントが発生したときに、プレーヤーがそれらのイベントに基づいてリアルタイムに情報をやり取りできないからである。たとえば、対面型のシューティング ゲームで、プレーヤーが背後から攻撃されそうになって仲間が警告しようとしても、攻撃されてしまうまで音声通信が聞こえない可能性がある。

遅延時間を減らすようにジッター バッファを設定すると、キューを一杯にするために必要なパケット数が少なくなる。ただしこの場合、連続パケットの一部が間に合わず、その結果、再生時にバッファ内に音声データが揃っていない可能性がある。音声通信が聞こえるタイミングは、実際の録音とほぼ一致している。ただしこの場合、音声が "こま切れ" で品質は低い。

DirectPlay ジッター バッファでは、最小限の遅延時間で最高品質の音声通信を提供する方法を、2 つの方法により判断する。最初に、ネットワークの状態を監視して、遅れや混雑状況を判断する。次に、音声の中断を最小限に抑えながら遅延時間を可能な限り短縮するため、ジッター バッファ (またはキュー) のサイズを動的に調整する。

DirectPlay Voice ジッター バッファは、ネットワークの状態に合わせて自動的に調整される (デフォルト動作の場合)。アルゴリズムでネットワークの状態をどの程度厳密に追跡するかは、DVCLIENTCONFIG 構造体の lBufferAggressiveness メンバとlBufferQuality メンバを使って手動で調整できる。アグレッシブネスのレベルを上げるほど、ネットワークの状態が厳密に監視される。通常、dwBufferQuality の値が高いほど、音質は上がるが遅延時間は長くなる。また、値が小さいほど、遅延時間は短くなるが質は低下する。

アグレッシブネスのレベルは、ゲーム アプリケーション実行中のネットワーク状態に合わせて選択することが重要である。ネットワーク パフォーマンスが安定しているときに高レベルのアグレッシブネスが選択されていると、一時的な問題が誤まって解釈され、存在しないかもしれない問題が過剰に補正される可能性があるためである。