カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

リバーブを使う

DMOの具体例としてここではリバーブを実装してみます。

サウンドエフェクト用DMOに関する情報はMSDNのDirectSoundの使い方の下にあります。

オブジェクトを作成する

ウェーブリバーブを示すCLSIDはdsound.hの中で定義されています。

DEFINE_GUID(GUID_DSFX_WAVES_REVERB, 0x87fc0268,0x9a55,0x4360,0x95,0xaa,0x00,0x4a,0x1d,0x9d,0xe2,0x6c);

またウェーブリバーブのカテゴリーはオーディオエフェクトです。このCLSIDはdmoreg.hの中で定義されています。

DEFINE_GUID(DMOCATEGORY_AUDIO_EFFECT, 0xf3602b3f,0x0592,0x48df,0xa4,0xcd,0x67,0x47,0x21,0xe7,0xeb,0xeb);

単独で用いる場合やDirectShowに挿入する場合など上記のGUIDを用いてオブジェクトを作成します。作成方法は関連するセクションを参照して下さい。

DirectSoundで用いるときは、オブジェクトを作成する必要はありません。セカンダリーバッファにDMOを登録して利用します。詳しくはセクション「DMOをDirectSoundで使う」を参照して下さい。

IDirectSoundFXWavesReverb8

オブジェクトを作成したら、オブジェクトからIDirectSoundFXWavesReverb8インターフェースを取得します。

IDirectSoundFXWavesReverb8とIDirectSoundFXWavesReverbはバージョンが異なりますが内容は同じものです。

IDirectSoundFXWavesReverb8はウェーブリバーブのパラメータ設定に用いるインターフェースです。構造体のポインターを引数としてパラメータの取得と設定の関数があります。

// パラメータの取得
HRESULT GetAllParameters(LPDSFXWavesReverb pDsFXWavesReverb);
// パラメータの設定
HRESULT SetAllParameters(LPCDSFXWavesReverb pcDsFXWavesReverb);

DSFXWavesReverb構造体

DSFXWavesReverbはウェーブリバーブで用いるパラメータ一式を格納する構造体です。

typedef struct _DSFXWavesReverb {
    FLOAT   fInGain; 
    FLOAT   fReverbMix;
    FLOAT   fReverbTime;
    FLOAT   fHighFreqRTRatio;
} DSFXWavesReverb, *LPDSFXWavesReverb;

typedef const DSFXWavesReverb *LPCDSFXWavesReverb;

fInGain

信号の入力ゲインです。単位はdBです。Dsound.hの中に以下の定数が定義されています。パラメータの設定や範囲のチェックに用います。

#define DSFX_WAVESREVERB_INGAIN_MIN                 -96.0f
#define DSFX_WAVESREVERB_INGAIN_MAX                 0.0f
#define DSFX_WAVESREVERB_INGAIN_DEFAULT             0.0f

fReverbMix

リバーブのミキシング量です。単位はdBです。

#define DSFX_WAVESREVERB_REVERBMIX_MIN              -96.0f
#define DSFX_WAVESREVERB_REVERBMIX_MAX              0.0f
#define DSFX_WAVESREVERB_REVERBMIX_DEFAULT          0.0f

fReverbTime

リバーブの時間です。単位はmSecです。

#define DSFX_WAVESREVERB_REVERBTIME_MIN             0.001f
#define DSFX_WAVESREVERB_REVERBTIME_MAX             3000.0f
#define DSFX_WAVESREVERB_REVERBTIME_DEFAULT         1000.0f

fHighFreqRTRatio

高周波数リバーブの時間比です。

#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN        0.001f
#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX        0.999f
#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT    0.001f

パラメータの設定

初期値としてはデフォルト値を設定すると良いでしょう。

パラメータを個々に設定することはできませんので、全体を取得した後、希望のパラメータを変更し、全体を設定し直します。

リバーブ以外のエフェクトDMOの利用

ウェーブリバーブを含め標準的なエフェクトには以下のものがあります。併せて使用するインターフェースと構造体を示します。

エフェクト インターフェース 構造体
コーラス IDirectSoundFXChorus8 DSFXChorus
コンプレッサー IDirectSoundFXCompressor8 DSFXCompressor
ディストーション IDirectSoundFXDistortion8 DSFXDistortion
エコー IDirectSoundFXEcho8 DSFXEcho
環境リバーブ IDirectSoundFXI3DL2Reverb8 DSFXI3DL2Reverb
フランジャー IDirectSoundFXFlanger8 DSFXFlanger
ガーグル IDirectSoundFXGargle8 DSFXGargle
パラメトリックイコライザー IDirectSoundFXParamEq8 DSFXParamEq
ウェーブリバーブ IDirectSoundFXWavesReverb8 DSFXWavesReverb

プログラムの流れはリバーブと同じです。オブジェクトの作成からインターフェースの取得までは同じアルゴリズムです。パラメータの設定に構造体を用いることも同じです。

もちろん個々のエフェクトについてはそれぞれの処理が必要です。詳しい資料はMSDNのDirectSoundの使い方の下にあります。

ウェーブリバーブ以外の資料については紙面の都合とMSDNの資料と多くが重複するため省略しました。詳しくはMSDNを参照して下さい。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ