ぼく用あれこれまとめ
XAudio2
最終更新:
bokuyo
-
view
XAudio2
WAVEFORMATEX構造体■
チャンネル数 | 1(モノラル), 2(ステレオ) |
ビット深度 | 8bit, 16bit |
サンプリングレート | 8.0 kHz, 11.025 kHz, 22.05 kHz, 44.1 kHz |
ビットレート | 1411bps(=2(stereo)*16bit*44.1bit)以下 |
XAUDIO2: WARNING: High-bit-depth PCM format should be expressed using WAVEFORMATEXTENSIBLE XAUDIO2: WARNING: High-bit-depth PCM format should be expressed using WAVEFORMATEXTENSIBLE
- これはサンプルレート24bitをWAVEFORMATEX構造体を使って呼んだ場合。
- WAVEFORMATEX構造体はサンプルレート8bitか16bitしか対応してないため怒られる。
解決策
- wavファイルを16bit/44.100Hzにエンコードする。
- WAVEFORMATEXTENSIBLE構造体を使う。
WAVEFORMATEXTENSIBLE構造体■
- WAVEFORMATEX構造体で対応できない解像度の高いwavファイルを扱える。
チャンネル数 | 3以上 |
ビット深度 | WAVEFORMATEXより高いビット深度(24bit) |
サンプリングレート | WAVEFORMATEXより高い周波数(44.8Hzとか) |
XAUDIO2_BUFFER構造体■
- Loopの回数や、Loopするところの指定はすべてここで行う。
LoopCount
- 0~XAUDIO2_MAX_LOOP_COUNT(=254)回指定できる。
- 無限ループする場合は、XAUDIO2_LOOP_INFINITE(=255)
- 0回の場合ループは実行されず、LoopBeginとLoopLengthの値を0にしないといけない。
- 256をいれるとどうなるのか?
→256が入るけれど、バッファを送るときに強制終了(ブレークポイント発動!)する。
- じゃあ-1をいれるとどうなるのか?
→buffer.LoopCount=4294967295の値が入るけれど同じく、CreateSourceVoice();で中断(ブレークポイント発動!!)させられる。
Voice
- ソースボイス
- サブミックスボイス
- マスターボイス
があって、ソースボイスはオーディオファイルを読み込んだもの、
- サブミックスボイスはソースボイスやサブミックスボイスをミックスしたもの。
- マスターボイスはソースボイスやサブミックスボイスをミックスして、サウンドカードに渡す唯一無二のもの。
- MSDN - XAudio2 ボイス
- MSDN - IXAudio2SourceVoice インターフェイス
- MSDN - IXAudio2MasteringVoice インターフェイス
SourceVoice
IXAudio2SourceVoice::Start()■
WaveFileClass
- SDK付属のwav読み込みクラス。便利。
- C:\Program Files\Microsoft DirectX SDK (February 2010)\Samples\C++\Direct3D10\GPUSpectrogram の中にあるよ。