音声 CODEC

音声 CODEC

Microsoft® DirectPlay® に用意される圧縮/圧縮解除 (CODEC) アルゴリズムは、低帯域幅の音声圧縮と圧縮解除に最適化されている。これらの CODEC は、すべて 8 kHz、16 ビット モノラル形式のデータに対して動作する。しかし、DirectPlay Voice は、音声データから中間フォーマットへの変換、中間フォーマットから音声データへの変換のすべてを処理する。サードパーティの CODEC はサポートされない。また、DirectPlay Voice と共に使う独自の CODEC を作成することはできない。

帯域幅の要件が低くなると、音声データのオーディオ品質も低下するので、注意が必要である。次の表は、サポートされる CODEC、キロバイト/秒 (Kbps) 単位の帯域幅、それらの選択に使われる圧縮グローバル一意識別子 (GUID) を示す。圧縮 GUID は、Dvoice.h に定義される。

CODEC 帯域幅 GUID
Voxware VR12 可変 (平均 1.2 Kbps)   DPVCTGUID_VR12
Voxware SC03 3.2 Kbps DPVCTGUID_SC03
Voxware SC06 6.4 Kbps DPVCTGUID_SC06
TrueSpeech 8 Kbps DPVCTGUID_TRUESPEECH
Global System for Mobile Communications (GSM) 13 Kbps DPVCTGUID_GSM
Microsoft Adaptive Delta Pulse Code Modulation (MS-ADPCM) 32 Kbps DPVCTGUID_ADPCM
Pulse Code Modulation (PCM) 64 Kbps DPVCTGUID_NONE

最初の 3 つの CODEC は、高レベルの圧縮を提供し、要求するリソースもほぼ同じである。500 MHz の Pentium III クラスのコンピュータでは、これらの CODEC は CPU 能力の約 1.5 パーセントを使う。VR12 CODEC の音は安っぽくロボット的であるが、SC03 および SC06 CODEC の音は妥当な品質である。PCM CODEC の音は高品質であり、基本的には非圧縮の 8 kHz、16 ビット モノラル フォーマットの音声データである。

  GSM、ADPCM、PCM CODEC は Microsoft Windows® のインストールに含まれているが、ユーザーがインストールしていない可能性がある。ユーザーに対して、インストールを求めなければならないこともある。システムで利用可能な CODEC を判定するには、IDirectPlayVoiceServer::GetCompressionTypes を呼び出す。CODEC が表示されない場合、対応する ACM CODEC はインストールされない。

CODEC の選択

他のすべてのゲーム設定パラメータと同様に、ボイス セッションに使う CODEC はホストが制御する。ボイス セッションのすべてのメンバは、同じ CODEC を使う必要がある。ピアツーピア ボイス セッションでは、ボイス セッションのホストが必ずしもゲーム データのホストと同じである必要はない。ホストは、IDirectPlayVoiceServer::StartSession を呼び出すときに CODEC を選択する。DVSESSIONDESC 構造体の guidCT メンバは、使用する CODEC の圧縮 GUID に設定する。クライアントは、IDirectPlayVoiceClient::GetSessionDesc を呼び出してこの構造体を取得できる。

同じ CODEC は、ゲームの全体にわたって理想的でないこともある。たとえば、プレーヤがゲームの設定に使うロビー チャット機能には 1 つの CODEC を使い、ゲームの起動後に音声通信を処理するために他の CODEC を使うなどである。ボイス セッション中に、動的に CODEC を変更することはできない。他の CODEC に切り替えるには、現在のボイス セッションを終了し、新しい CODEC を使って新しいボイス セッションを作成する必要がある。しかし、基になる DirectPlay コア セッションを終了しなくても、ボイス セッションを停止して再開始できる。

どのような形のネットワーク通信でも同じだが、音声通信の負荷を分析して、ゲーム データと音声データの通信に必要な帯域幅が確保できるかどうかを確認することが重要である。音声による帯域幅の使用量は、簡単に分析できる。同時に発生すると思われる音声ストリームの数を予測し、CODEC およびプロトコル オーバーヘッドに必要な帯域幅の合計を、その数に乗算する。CODEC の選択では、CPU の消費というもう 1 つの要素も考慮する必要がある。ネットワークの帯域幅と同様に、CPU リソースの消費もストリーム数に応じて増加する。