JUCEのリバーブモジュール、パラメータを変更できるみたいですね。
パラメータをいろいろと変化させて遊んでみよう~
JUCEチュートリアル、Introduction to DSPのチュートリアルを進めてきました。前回のリバーブモジュールでの残響を付加するチュートリアルで、パラメータを変更までは記載されていなかったので、dsp::juce::Reverbモジュールのパラメータを変更してみました。
今回の記事は、前回記事の続きとなります。
公式のチュートリアルはこちらです。
こんな人の役に立つかも
・JUCEチュートリアル、Introduction to DSPをやっている人
・JUCEのReverbモジュールを利用したい人
・JUCEのリバーブモジュールのパラメータを変更したい人
実装とパラメータの検証
JUCEのリバーブモジュール、「juce::dsp::Reverb」パラメータを与えるためには、「setParameters」関数に「juce::Reverb::Parameters構造体」を渡す必要があります。
まずは、AudioEngineクラスのprivateなメンバとして「juce::Reverb::Parameters」構造体を追加します。[1]のように、「RevParams」という名前のメンバを追加しました。
//...略...
enum
{
reverbIndex
};
juce::dsp::ProcessorChain<juce::dsp::Reverb> fxChain;
//[1]パラメータを格納する構造体です。
juce::Reverb::Parameters RevParams;
};
次に、コンストラクタ内で、RevParams構造体内のパラメータに値を設定していきます。
AudioEngine()
{
for (auto i = 0; i < maxNumVoices; ++i)
addVoice(new Voice);
setVoiceStealingEnabled(true);
//[2]リバーブのパラメータです。
RevParams.roomSize = 0.8f;
//RevParams.damping = 0.5f;
//RevParams.dryLevel = 0.4f;
//RevParams.wetLevel = 0.33f;
//RevParams.width = 1.0f;
//RevParams.freezeMode = 0.0f;
}
JUCEのリバーブモジュールは、「roomSize」「damping」「dryLevel」「wetLevel」「width」「freezeMode」のパラメータがあります。
RoomSize:0.0から1.0の値を取ります。1に近づくほど大きな部屋での残響感を表現できます。
damping: 0.0から1.0の値を取ります。1に近づくほど反射音が減衰します。Dampingは、壁の素材のようなイメージといいますが、1に近づくほど、残響の高周波がなくなっていくような聴感です。
dryLevel: 0.0から1.0の値を取ります。 1に近づくほど原音の音量を上げることができます。
wetLevel: 0.0から1.0の値を取ります。 1に近づくほど残響音の音量を上げることができます。
dry、wetともに0のとき、音は無音になります。
width:0.0~1.0値を取ります。1に近づくほど残響音に広がりを与えることができます。0のとき、残響音がパンの中心にあるような聴感、1で、ステレオ全体に広がるような聴感となります。
freezeMode:0.5より大きい値で、残響音がフィードバックするようになるとのことですが、やってみると、残響が突然ぶつ切りになりました。使い方がわかりませんでした。
パラメータの公式ドキュメントはこちらです。
最後に、prepare関数でリバーブモジュールに、パラメータを反映させます。
void prepare(const juce::dsp::ProcessSpec& spec) noexcept
{
setCurrentPlaybackSampleRate(spec.sampleRate);
for (auto* v : voices)
dynamic_cast<Voice*> (v)->prepare(spec);
//[3]リバーブパラメータを反映させます。
fxChain.get<reverbIndex>().setParameters(RevParams);
fxChain.prepare(spec);
}
[3]ProcessorChainクラスから特定のプロセッサを指定するためには、get関数にプロセッサのインデックスを与えればよいので、getで、revervIndexを与えてリバーブモジュールを指定しています。返ってくるリバーブモジュールのオブジェクトから、setParameter関数を呼び出して、引数にRevparamsを与えます。