5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

初心者はここで聞け!DirectX相談室

769 :デフォルトの名無しさん:02/01/29 00:32
>>727

OSおよびドライバの仕様の違いのせい。
Win2kなどのWDMモデルと、Win9xのMMEモデルでは、
プライマリバッファの動作が違う。

WDMでは、プライマリは実際には存在していなく、
すべての入力はkmixerにリダイレクトされる。
kmixerは、設定の如何に関わらず、現在アクティブなすべてのストリームのうち、
最大のサンプリングレート/ビット深度でミキシング/再生する。
なので、キミの例の、
22.05kHzを指定しても、44.1kHzのセカンダリが再生されていれば、
44.1kHzでミキシングが行われるので、違いはでない。

一方、MMEでは、kmixerがないので、DirectSound内部のmixerが動作する。
これが本来のプライマリバッファ。
こいつは、再生しているストリームのフォーマットの如何に関わらず、
強制的に設定したフォーマットで再生する。
プライマリ作成時には、基本的に22.05kHz/8bit(16bitだったかも?)に設定されているので、
明示的に設定してやらないと、セカンダリで44.1kHzとか鳴らすと、
22.05kHzへのダウンサンプリングが行われた後、22.05kHzミキシング/再生される。

つまりは、WDMでは自動的に音質が下がらないように設定を変えてくれるが、
ミキシングのフォーマットは自由に設定できないということ。
MMEでは、自由に設定が可能だが、自動的になにかやってくれるということはない。
なお、WDMでも、再生しているストリームより上位のフォーマットを指定した場合は、
そのフォーマットでミキシングさせることができる模様。
例として、44.1kHz/16bitのセカンダリを再生している時に、
プライマリに48kHz/32bitIEEEFloatを指定すると、
48kHz/32bitIEEEFloatでミキシング/再生が行われる。


276 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)