JUCEチュートリアル、juce::dsp::Revebモジュールのパラメータを変更する

JUCEのリバーブモジュール、パラメータを変更できるみたいですね。

パラメータをいろいろと変化させて遊んでみよう~

JUCEチュートリアル、Introduction to DSPのチュートリアルを進めてきました。前回のリバーブモジュールでの残響を付加するチュートリアルで、パラメータを変更までは記載されていなかったので、dsp::juce::Reverbモジュールのパラメータを変更してみました。

今回の記事は、前回記事の続きとなります。

あわせて読みたい
JUCEチュートリアル、Introduction to DSP、リバーブモジュールで残響を追加する JUCEには、簡易にリバーブを付加できるモジュールがあるようです。 JUCEモジュール、至れり尽くせりだね~ JUCEチュートリアル、Intorduction to DSPの最後の項目、「Ad...

公式のチュートリアルはこちらです。

目次

こんな人の役に立つかも

・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を与えます。

よかったらシェアしてね!
目次
閉じる