JUCEでアプリケーション開発、プラグインコーディング3、GUIスライダーの値を取得する

1_プログラミング

オブジェクト指向、結構苦手なんですよ

ガシガシやって慣れていきたいね~

引き続き、JUCEチュートリアルを進めています。今回は、「Pass control information to the processor class」の項目を進めていきます。

チュートリアルページはこちらです。

こんな人の役に立つかも

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

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

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

スポンサーリンク

スライダーの値を取得するプログラム

今回も、チュートリアルに沿ってプログラムを作成していきます。

スライダー値を保持する変数

「PluginProcessor.h」に以下のPublicなメンバ変数を追加しました。

class TutorialPluginAudioProcessor  : public juce::AudioProcessor
{
public:
    float noteOnVel;
.....

この「noteOnVel」の値は、スライダーが変化したときのスライダーの値を保持するための変数です。前回、「midiVolume」というスライダーを定義しましたが、このスライダーは0~127までの値を取るように設定しました。変化する0~127の値をこの「noteOnVel」に格納して使います。

リスナー関数の追加

スライダーの値を取得するためには、スライダーが動いたら動作する関数である「slider listener callback function」(以下、リスナー関数と呼びます。)というものを利用します。「Editor」クラスに「リスナー関数」を利用できるようにするため、次のように「PluginEditor.h」に以下のように「private juce::Slider::Listener」を追記します。

class TutorialPluginAudioProcessorEditor  : public juce::AudioProcessorEditor,//←コロンで区切る
                                            private juce::Slider::Listener //←追記しました。
{
public:
    TutorialPluginAudioProcessorEditor (TutorialPluginAudioProcessor&);
    ~TutorialPluginAudioProcessorEditor();
 
    //==================================================================
    // This is just a standard Juce paint method...
    void paint (juce::Graphics& g) override;
 
    void resized() override;
 
private:
    void sliderValueChanged (juce::Slider* slider) override; //←デフォルトの「リスナー関数」を使います。
 
    //==================================================================
    // This reference is provided as a quick way for your editor to
    // access the processor object that created it.
    TutorialPluginAudioProcessor& audioProcessor;
 
    juce::Slider midiVolume;
 
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TutorialPluginAudioProcessorEditor)
};

TutorialPluginAudioProcessorEditorクラスがjuceのSliderのListenerを継承する形になりました。そして、「sliderValueChanged」というあらかじめJUCEライブラリに準備されているスライダーの変化に反応する「リスナー関数」をオーバーライドして利用するように設定しました。

次に、Editorクラスのコンストラクタ(初期化する関数)でこの「リスナー関数」をスライダーオブジェクトのインスタンスである「midiVolume」に紐づけします。

リスナー関数の紐づけと機能追加

「PluginEditor.cpp」に以下のプログラムを追記します。

TutorialPluginAudioProcessorEditor::TutorialPluginAudioProcessorEditor (TutorialPluginAudioProcessor& p)
    : AudioProcessorEditor (&p), audioProcessor (p)
//プログラムの一番最初に記載されているコンストラクタ
{
    // 省略...
 
    //リスナー関数をmidiVolumeに紐づけます。
    midiVolume.addListener (this);
//←ここを追記しました。
}

そして、slider「PluginEditor.cpp」の一番下に先ほどオーバーライドした「sliderValueChanged」へ機能追加を行っていきます。一番最初に「audioProcessor」クラスに追加した「noteVel」変数の値を「sliderValueChanged」で書き換えるようにします。

void TutorialPluginAudioProcessorEditor::sliderValueChanged (juce::Slider* slider)
{
//オーバーライドしているsliderValueChanged関数に独自の機能を追記していきます。
    audioProcessor.noteOnVel = midiVolume.getValue();
//スライダー「midiVolume」の値をnoteOnVelの値に代入します。
}

「noteOnVel」変数は「audioProcessor」クラスのメンバ変数なので、「audioProcessor.noteOnVel」のようにしてアクセスします。また、スライダー「midiVolume」の値は「getValue()」関数で取得できます。

スライダーからのデータの取得の流れと処理クラスのイメージを図にしてみました。

スライダーの値担当がEditorのリスナー関数で、ProcessorはnoteOnVel変数を見ているだけ、というイメージですね。

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