Microsoft DirectX 8.0 (C++)

最小距離と最大距離

リスナーが音源に近づくにつれてサウンドが大きくなり、距離が半分になったときに音のボリュームは倍増する。しかし、特定の点を過ぎると、ボリュームが増加し続けるのは合理的ではない。これが音源の最小距離である。

アプリケーションが異なる音の絶対ボリューム レベルの差を補正しなければならない場合、最小距離は特に役立つ。たとえば、ジェット エンジンの音は蜂の羽音よりもずっと大きいが、実用上の理由でこれらの音を同程度の絶対ボリュームで録音しなければならない。アプリケーションはジェット エンジンの最小距離を 100 メートル、蜂の最小距離を 2 センチに設定することが考えられる。これらの設定では、リスナーが 200 メートル離れるとジェット エンジンは半分のボリュームになり、リスナーが 4 センチ離れると蜂の羽音は半分のボリュームになる。

サウンド バッファのデフォルトの最小距離 DS3D_DEFAULTMINDISTANCE は、1 単位、つまりデフォルトの距離係数では 1 メートルと定義されている。この値を変更しない限り、リスナーから 1 メートル離れた位置で音は最大になり、2 メートル離れると半分の大きさ、4 メートル離れると 1/4 の大きさになる。ほとんどのサウンドでは、最小距離をこれよりも大きく設定し、距離が大きくなってもサウンドが急速に消えないようにする。

音源の最大距離とは、それ以上離れても音がより小さくならない距離を意味する。DirectSound の 3D バッファのデフォルトの最大距離 (DS3D_DEFAULTMAXDISTANCE) は 10 億であり、音が聞こえなくなった後も引き続き減衰を計算しなければならないことを意味する。不必要な処理を避けるために、アプリケーションは適切な最大距離を設定し、バッファを作成する際に DSBCAPS_MUTE3DATMAXDISTANCE フラグを含めるべきである。このフラグは、オーディオパスの一部として作成された標準的な 3D バッファについては自動的に設定される。「標準オーディオパス」を参照すること。

サウンドが聞こえなくなることを防止する目的でも、最大距離を利用できる。たとえば、あるサウンドの最小距離を 100 メートルに設定し、1,000 メートル以上離れるとそのサウンドが事実上聞こえなくなると仮定する。ここで最大距離を 800 メートルに設定すると、距離にかかわりなく、そのサウンドは最大ボリュームの少なくとも 1/8 で聞こえることが保証される。もちろん、この場合は DSBCAPS_MUTE3DATMAXDISTANCE フラグを設定しない。

次の図は、距離が大きくなるにつれて、最小距離と最大距離がジェット エンジンの音と蜂の羽音の大きさにどのように影響するかを示している。

アプリケーションで最小距離値を設定および取得するには、IDirectSound3DBuffer8::SetMinDistanceIDirectSound3DBuffer8::GetMinDistance の各メソッドを使う。同様に、最大距離値を設定および取得するには IDirectSound3DBuffer8::SetMaxDistanceIDirectSound3DBuffer8::GetMaxDistance の各メソッドを使う。

デフォルトでは、距離値はメートル単位で表される。「距離係数」を参照すること。

すべてのサウンド バッファで、距離がボリュームに及ぼすエフェクトを調整するには、ロールオフ係数を変更する。