JUCEでアプリケーション開発、音声のゲインを変更する

1_プログラミング

今回は、オーディオ信号の変化に挑戦です。

オーディオを扱うには、まずは音量だね!

JUCEプログラミングでVSTプラグイン開発の勉強を進めています。今回は、プラグインでオーディオのゲインを変更するチュートリアルを行いました。ゲインは、音量なので、音の要素の音の大きさに関連するパラメータになります。今回は、ゲインを調整することで入力された音量を変化させるようなプラグインを作成することができます。

公式チュートリアルは次のページになります。

こんな人の役に立つかも

・JUCEフレームワークに入門したい人

・VST、AUプラグイン開発の最初の一歩を踏み出したい人

・JUCEのチュートリアルをやっている人

スポンサーリンク

GainPluginをプログラミング

ゲインの数値を格納する場所

「PluginProcessor.h」に以下のプログラムを追加します。クラスとして、provateのAudioParameterFloatのポインタ、「gain」をクラスに追加します。

private:
    //==============================================================================
    juce::AudioParameterFloat* gain;
    //==============================================================================
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (GainPluginAudioProcessor)
};

「PluginProcessor.cpp」のコンストラクタに以下のプログラムを追加します。

GainPluginAudioProcessor::GainPluginAudioProcessor()
#ifndef JucePlugin_PreferredChannelConfigurations
     : AudioProcessor (BusesProperties()
                     #if ! JucePlugin_IsMidiEffect
                      #if ! JucePlugin_IsSynth
                       .withInput  ("Input",  juce::AudioChannelSet::stereo(), true)
                      #endif
                       .withOutput ("Output", juce::AudioChannelSet::stereo(), true)
                     #endif
                       )
#endif
{
   //以下が追加したコードになります。
    addParameter(gain = new juce::AudioParameterFloat("gain", // parameterID
「※ユニークでなければならない」
        "Gain", // parameter name
        0.0f,   // minimum value
        1.0f,   // maximum value
        0.5f)); // default value
}

※でコメントを書いたparameterIDは、ユニークでないといけません。

addParameterという関数をコンストラクタ(初期化関数)で実行することで、「gain」をオーディオのパラメータとして追加しています。

addParameterで設定するときに、minimum valueとmaximum valueで数値の最小値と最大値を設定します。ゲインは0~1までの値で変化させるようにします。別の記載方法として、maxとminの値をjuce::NormalisableRange<float>を利用して次のように記載することもできるようです。

addParameter (gain = new juce::AudioParameterFloat ("gain",
                                                    "Gain",
                                                    juce::NormalisableRange<float> (0.0f, 1.0f),
                                                    0.5f));

ここで設定したgainの値をオーディオバッファに反映させることで、ゲインの変化ができます。「PluginProessor.cpp」のprocessBlock関数の中を次のように変更します。

void GainPluginAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer, juce::MidiBuffer& midiMessages)
{
    buffer.applyGain (*gain);
}

ここまでで、addParameterの最後の引数の値にオーディオの音量を変化させるようなプラグインができています。今回は、0.5fという数値にしているので、入力音量が半分になって出力されるはずです。

動作検証

Reaperという無料DAWで動作検証を行いました。

プラグインを追加

「Ctrl + P」でpreferenceを開きます。

①のVSTを選択して、②のEditからaddを開き、今回のVST3フォルダを選択します。

最後に③のRe-scanを行うと、GainPluginを追加できるようになります。

プラグインをトラックに挿入

適当なMIDIデータを書き込み、トラックのFXボタンを押します。

Add FXを選択します。

Newの項目に作成したGainPlugin(名称は任意です。)ができているので、選択して追加します。

これで、固定値のGainの値に音量が調整されます。

ちなみに、プラグインの接続順序以下の図のようにしています。(オーディオを発音するプラグインの後でないと、効果はありません。)

今回は、UIというボタンを押すことで、スライダーが表示されました。ここに「Gain」というパラメータが表示されています。これで音量をコントロールすることができます。

paint関数は、自作のGUIを作成するときに利用するものなのですかね・・・

C++豆知識

コンストラクタはインスタンスが作成されたときに実行される初期化関数です。クラスと同じ名前で定義されます。

//GainPluginAudioProcessorクラスのコンストラクタとして、以下のように定義されます。
GainPluginAudioProcessor::GainPluginAudioProcessor()
{}

でコンストラクタはオブジェクトが破棄されるときなどに実行される終了処理です。C++では「~」をつけた関数で表現されます。

GainPluginAudioProcessor::~GainPluginAudioProcessor(){}

今回は特に何も記載してません。このように、「::」はメソッドをクラス表現の外で記述するため、「GainPluginAudioProcessor::~GainPluginAudioProcessor() {}」は終了処理のデストラクタの処理になります。

タイトルとURLをコピーしました