Winamp統合スレ18

このエントリーをはてなブックマークに追加
5名無し~3.EXE
Q: DirectSoundとwaveOutとの違いは何ですか?
A:
簡易説明:
Win95/98/Me/NT4上ではwaveOutを
Win2k/XP上ではDirectSoundの上で使用するべきです。

詳細説明:

waveOutは
32ビットWindowsでデジタル音声を扱う為のAPI(Application Programming Interface)で
古く旧式のものです。

古いOS(すべてのWin9xおよびNT4)上では最良のパフォーマンスの為にwaveOut出力を使用するべきです。
ただしwaveOutの機能は複数のアプリケーションで同時に音を鳴らすことができなかったりと制限されています。
その制限を避けたい場合はDirectSoundを使用してください。

Win2k/XP上では古いソフトウェアとの互換性にのみ供給されているように見え
複数のアプリケーションで同時に音を鳴らすことができないといった問題は解決されているようです。

それは、どんな種類のハードウェアアクセラレータも使用しません。
ミキシングはすべてソフトウェアによって実行されます。
(CPU負荷が高い場合は音が途切れるかもしれません)

6名無し~3.EXE:03/11/02 20:55 ID:0AmPB88s
DirectSoundは
32ビットWindows(NT4のDirectSoundは私の経験から恐ろしく壊れていますが)の
すべてのバージョンに再配布できるとともに利用可能な新しい"現代"のAPIで
複数のアプリケーションで同時に音を鳴らす機能
独立したボリュームコントロール
ハードウェアアクセラレータレイヤ
ハードウェアエミュレーションレイヤ(ハードウェアでサポートされない機能はソフトウェアによってエミュレートされます。したがって、プログラマが新しいl33tコードを古いSB16でうまく動作するかどうか心配する必要がありません)
などをサポートしています。

あなたがOSおよび適切なサウンドデバイスドライバの為に最新のDirectXをインストールしている限り
NT4を除いてどれに使用しても一般的に素晴らしいに違いありません。
それらの実行方法が比較的よいので(waveOutより少ないCPU負荷で、waveOut実行方法の異常から決別できる)
Win2k/XP上でwaveOutより好まれます。

DirectSoundは他のDirectXコンポーネントのように
下位レベルのハードウェア機能に直接触れることなく
ゲームでハードウェアアクセラレータを利用させることを目指して作られました。

7名無し~3.EXE:03/11/02 20:55 ID:0AmPB88s
Q: DirectSoundとwaveOutとの音質に違いはありますか?
A:
1. Win2k/XP(WDM)において、waveOutとDirectSoundはPCMデータをWindowsカーネルのミキサ(k-mixer)へ渡すちょうど異なる2つの方法です。

waveOutがソフトウェア・ミキシングのみを使用します。
それはシステム上特有の問題を抑える傾向にあります。

DirectSoundでは有効にした時ハードウェア・ミキシングを使用できますが
その設定は音質問題を引き起こすと知られています。
out_ds v2.2.4からハードウェア・ミキシングがデフォルトで無効になっており
ソフトウェア・ミキシングを使用しwaveOutをエミュレートします。
なのでその音質問題はout_dsそのものに関してはありません。

ハードウェア・ミキシングを使用するには
「ハードウェアアクセラレーションの許可(Allow hardware acceleration)」を有効にしてください。
v2.2.4以前はハードウェア・ミキシングで動作します。

2. Win9x上では、DirectSoundは下位レベルのハードウェアアクセスを独自に行います。
それは多くの場合でwaveOutより異なって作用するかもしれないことを意味します。
例えば、ISAバスカードが22khzへダウンサンプルする仕様はよく説明されています。
これを簡単に面倒無く直す為に「プライマリバッファの作成(Create primary buffer)」を有効にします。
すべてのWin9x上においてデフォルトで有効になっています。

ダウンサンプリングしようとするそれを余分で愚かなソフトウェアだと感じる場合は
常に「プライマリバッファの作成」を可能にすることができます。
それは上記のようにハードウェアによって再生するフォーマットをファイル自体のフォーマットと同じものにさせることができます。

48kHz固定出力を備えた新しいAC97規格対応のサウンドチップはそれに影響されませんが
出力をいつでも48kHzへリサンプルするでしょう。
これらにはSB Live!/Audigyシリーズも含まれています。

8名無し~3.EXE:03/11/02 20:56 ID:0AmPB88s
Q: リサンプリングで音質改善はされるのですか?
A: いいえ、リサンプリングによって再生音質を改善することはできません。
リサンプリングは損失のある処理方法です。

例えば、ビットマップ・イメージを別のサイズへ拡大縮小した場合
出力されたイメージは非常に似ているように見えます。
しかし、あなたがそれをズームして見れば、それはもはや同じではありません。

それでも、あなたのドライバ/ハードウェアにリサンプリングを扱わせる代わりに
高品質のソフトウェアリサンプラ-SSRCを使用すれば
ハードウェアでさせた時の大きなデータ損失を回避することができます。
SSRCを使用した場合、たとえ「高速モード(Fast mode)」で動作させても
通常よりも高い負荷になることがあるので注意が必要です。

私は次のことを知っています。
既に子供たちのまわりでは"より素晴らしい音"を得る為に
リサンプラが心理的効果しか無い偽物の薬として用いられ
幸福にも彼らのSB16で96kHz/24bitsまでアップサンプルされています。
その後Windowsカーネルのミキサによって44kHz/16bitsへダウンサンプルされているのに。
"より素晴らしい音"なんて得ることは出来ないのです。

9名無し~3.EXE:03/11/02 20:57 ID:0AmPB88s
Q: いつ、どんな設定でリサンプラを使ったらよいのですか?
A: まず最初に、ハードウェア性能を確認してください。

いくつかのカード(例えば、すべての古いSound Blaster)はそれ自身でリサンプルしません。
なので常に最適の音質(=リサンプリングによる音質損失は無い)
を得られるのでしょうから当然SSRCでリサンプリングの必要はありません。

最近に出たSB Live!/Audigyを始めとするほぼ全てのデバイスがAC97規格対応で
サンプルレートが48kHz固定出力であり、再生するものすべてが48kHz/16bitsにリサンプルされるでしょう。
リサンプリングの質はドライバ/ハードウェア/Windowsミキサなどで変わります。

ほとんどの場合で
SSRCリサンプラがあなたのハードウェア/ドライバによってするものより優秀です。
あなたのハードウェア/ドライバが自分自身でリサンプルするのを防ぐために
SSRCで48kHz/16bitsへ処理の設定をすべきです。
また、設定値と同じフォーマットに対してはSSRCは動作しません。

例外として一部のサウンドデバイスや
オーディオカードと呼ばれる非AC97なものはサンプルレートが固定されないようです。

あなたの持つハードウェアがSSRCを必要とするのか、確認の上使用してください。

Q: しかし、私のSound Blasterでは96kHz/24bitsにリサンプルすることができます...
A: 確かにできます。
なぜならその後Windowsミキサがハードウェアのサポートするフォーマット(48kHz/16bitsなど)へ
ダウンサンプルし直しているからです。それは役に立たないデータ損失になってしまいます。
ハードウェア性能より上にアップサンプルしないでください。

10名無し~3.EXE:03/11/02 20:58 ID:0AmPB88s
Q: リサンプラを使用する場合、最良の音質品質の為に
入力プラグインではどんな設定をしたらよいのですか?
A: まず最初に可能な場合はリサンプリングを回避してください。
これはSSRCを使用しなくとも高い音質を得る有効な手段の一つです。

in_mod/in_spcなどは出力サンプルレートを変更でき
設定をリサンプルされるレートに合わせれば回避できます。
例えばSSRCで48kHz/16bitsとするならサンプルレートを48k(48000)というようにし
bit数の指定が出来る場合16bitsと指定します。
再生サンプルレートを上げることで再生時の負荷が増大することもあります。
SSRCと共にパソコンの処理能力を考え使い分けてください。

元々48k/16bitsのものならば当然リサンプリングの対象にはなりません。

特定の入力フォーマットでリサンプリングを回避することができない場合
in_vorbis/in_madなどで解像度(bits-per-sample,Resolution)を
24bits(現在32bitsはサポートされません)に設定してください。

こうすることで入力プラグインとリサンプラの間のデータ損失を抑えられます。
ほとんどの損失のあるフォーマットをデコードするアルゴリズムは実数上で動作し
それらはハードウェアの為に8bits/16bits/24bitsの整数に変換し
再びリサンプラはまた実数上で動作します。

可能な限り最も大きな解像度を使用することは
実数→整数→実数の変換によって生じるデータ損失を縮小させるのです。

11名無し~3.EXE:03/11/02 20:59 ID:0AmPB88s
関連・参考
MSDN
Policy for Mixing Audio Streams and Setting the Output Sample Rate
ttp://msdn.microsoft.com/library/en-us/stream/hh/stream/aud-design_76zr.asp
Policy for Sample Rate Conversion of Audio Streams
ttp://msdn.microsoft.com/library/en-us/stream/hh/stream/aud-design_9p2g.asp
ゲーム オーディオを最適化し正しく動作させるためのサウンド カード、ボイスマネジメント、ドライバモデル
ttp://www.microsoft.com/japan/msdn/library/ja/jpdnaudio/htm/DirectX8.asp

Dither
ttp://www.earlevel.com/Digital%20Audio/Dither.html

Dithering and Noise Shaping
ttp://www.glowingcoast.co.uk/audio/theory/dither/

Intel Audio Technology
ttp://www.intel.com/labs/media/audio/