Platform SDK: DirectX |
リスナーが音源に近づくにつれ音は大きくなる。距離が半分になればボリュームは倍になる。しかし、特定の点を過ぎると、ボリュームが増加し続けるのは合理的ではない。これが音源の最小距離である。
アプリケーションが異なる音の絶対ボリューム レベルの差を補正しなければならない場合、最小距離は特に役立つ。たとえば、ジェット エンジンの音は蜂の羽音よりもずっと大きいが、実用上の理由でこれらの音を同程度の絶対ボリュームで録音しなければならない。アプリケーションはジェット エンジンの最小距離を 100 メートル、蜂の最小距離を 2 センチに設定することが考えられる。これらの設定では、リスナーが 200 メートル離れるとジェット エンジンは半分のボリュームになり、リスナーが 4 センチ離れると蜂の羽音は半分のボリュームになる。
サウンド バッファのデフォルトの最小距離は、DS3D_DEFAULTMINDISTANCE であり、現在は 1 単位と定義されている。この値を変更しない限り、ユーザーから 2 メートル離れると音は半分の大きさ、4 メートル離れると 1/4 の大きさになる。ほとんどのサウンドでは、おそらくこれより大きい最大距離を設定するはずである。
音源の最大距離とは、それ以上離れても音がより小さくならない距離を意味する。DirectSound の 3D バッファのデフォルトの最大距離 (DS3D_DEFAULTMAXDISTANCE) は非常に大きな値であり、音が聞こえなくなったとしても引き続き減衰を計算しなければならないことを意味する。不必要な処理を避けるために、アプリケーションは適切な最大距離を設定し、バッファを作成する際に DSBCAPS_MUTE3DATMAXDISTANCE フラグを含めるべきである。
サウンドが聞こえなくなることを防止する目的でも、最大距離を利用できる。たとえば、あるサウンドの最小距離を 100 メートルに設定し、1,000 メートル以上離れるとそのサウンドが事実上聞こえなくなると仮定する。ここで最大距離を 800 メートルに設定すると、距離にかかわりなく、そのサウンドは最大ボリュームの少なくとも 1/8 で聞こえることが保証される。もちろん、この場合は DSBCAPS_MUTE3DATMAXDISTANCE フラグを設定しない。
次の図は、最小距離と最大距離の概念を示す。
最小距離値の設定と取得を行うには IDirectSound3DBuffer::SetMinDistance と IDirectSound3DBuffer::GetMinDistance の各メソッドを使う。同様に、最大距離値の設定と取得を行うには IDirectSound3DBuffer::SetMaxDistance と IDirectSound3DBuffer::GetMaxDistance の各メソッドを使う。
最小距離値の設定と取得を行うには DirectSound3DBuffer.SetMinDistance と DirectSound3DBuffer.GetMinDistance の各メソッドを使う。同様に、最大距離値の設定と取得を行うには DirectSound3DBuffer.SetMaxDistance と DirectSound3DBuffer.GetMaxDistance の各メソッドを使う。
デフォルトでは、距離値はメートル単位で表される。「距離係数」を参照すること。
すべてのサウンド バッファで、距離がボリュームに及ぼすエフェクトを調整するには、ロールオフ係数を変更する。