オブジェクト指向、結構苦手なんですよ
ガシガシやって慣れていきたいね~
引き続き、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変数を見ているだけ、というイメージですね。