チュートリアル:プラグインパラメータの追加
オーディオプラグインにパラメータを追加して、デジタルオーディオワークステーションからのコントロールとオートメーションを可能にします。 オーディオパラメータをオーディオ処理に使用し、そのユーザーインターフェイスを作成する方法を学びます。
レベル:初級
プラットフォーム:Windows, macOS, Linux
クラス:AudioParameterFloat, AudioParameterBool, GenericAudioProcessorEditor,
はじめる
このチュートリアルのデモ・プロジェクトのダウンロードはこちらから:PIP | ZIP プロジェクトを解凍し、Projucerで最初のヘッダーファイルを開きます。
このステップでヘルプが必要な場合は、 Projucerパート1:Projucerを使い始める を参照してください
また、JUCEを使ってオーディオプラグインを構築し、これをあなたの好きなオーディオホスト(デジタルオーディオワークステーション - DAW とも呼ばれます) にロードする方法も知っておく必要があります。 基本的なAudio/MIDIプラグインを作る パート1:セットアップ を参照してください:
デモプロジェクト
このデモ・プロジェクトは、JUCE/examples/Plugins
ディレクトリにある GainPlugin プロジェクトに基づいています。
このプラグインは、1つのパラメータを使って入力信号のゲインを変更するだけです。
ゲインプロセッサー
TutorialProcessor
クラスのコードのほとんどは、Audio Plug-In プロジェクト・テンプレートを使用したときにProjucerによって生成されるものと同じです。
簡単にするために、プロセッサーのコードを.cppファイルと.hファイルに分けるのではなく、1つの.hファイルにまとめました。
パラメータの設定
プロセッサーには、各パラメーターのオーディオ・パラメーター・メンバーを格納する必要があります。 私たちの場合は1つだけです:
private:
//==============================================================================
juce::AudioParameterFloat* gain;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TutorialProcessor)
};
プロセッサは、プラグインが必要とするパラメータをコンストラクタに割り当てて追加します。 この単純な例では、設定するパラメータは1つだけです:
TutorialProcessor()
{
addParameter (gain = new juce::AudioParameterFloat ("gain", // parameterID
"Gain", // parameter name
0.0f, // minimum value
1.0f, // maximum value
0.5f)); // default value
}
パラメータ・オブジェクトの所有権はベース・クラス(AudioProcessor)が持っているので、派生プロセッサ・クラスでは生のポインタを使用してパラメータを格納します。 これは、派生クラスの後で基底クラスが解体されることが確実にわかっているので安全です。 これに加えて、プロセッサのエディタ・コンポーネントがプロセッサ・オブジェクトよりも先に削除されることも想定できます。
パラメータIDは、このパラメータの一意な識別子でなければならない。 これは変数名のようなもので、英数字とアンダースコアが使用できますが、スペースは使用できません。 パラメータ名は画面に表示される名前です。
これに加えて、AudioParameterFloat クラスでは、パラメータが表現できる値の範囲を指定できます。 AudioParameterFloat クラスには、代 わりに NormalisableRange<float> オブジェクトを使用できる別のコンストラクタもあります。 JUCEは全てのパラメータ値を[0, 1]の範囲で保存します。 上に示したコードを次のように書き換えることができます:
addParameter (gain = new juce::AudioParameterFloat ("gain", // parameter ID
"Gain", // parameter name
juce::NormalisableRange<float> (0.0f, 1.0f), // parameter range
0.5f)); // default value