はじめに
JUCEは、C++言語によるマルチメディア系アプリケーションの開発を支援するフレームワークです。JUCEはオーディオやMIDIを扱うアプリケーションに特化したAPI群が整備されているため、簡単に楽器アプリケーションを実装することができます。
JUCEにはオーディオプラグインを開発するためのテンプレートが充実しています。VST/AudioUnit/AAX/RTASプラグインといった、DTMで広く使われている主要なオーディオプラグインをビルドすることができます。
オーディオプラグインを構成するクラス
JUCEでは、プロジェクト作成時に2つのクラスによってオーディオプラグイン(VSTプラグイン)が構成されます。
- xxxAudioProcessorクラス...オーディオプラグインのインターフェース
- xxxAudioProcessorEditorクラス...オーディオプラグインのGUIを定義するクラス
GUIの実装が面倒な時ってありますよね?
下の図は私が実際に作成したプラグイン・シンセサイザーです。パラメーターが20個以上あるので、GUIの実装もそれなりに時間を費やしました。
でも、例えばプロトタイプ段階での開発であったり、特定のアルゴリズムをテストする目的であれば、GUIに凝る必要が無いのが実際の所だと思います。
汎用的なGUIを表示する機能を利用する
JUCEライブラリには、汎用的なGUIを生成してくれるGenericAudioProcessorEditorクラスが提供されています。以下に、その使い方を簡単に示します。
※APIリファレンス https://docs.juce.com/master/classGenericAudioProcessorEditor.html
パラメータを追加する
プロセッサー側のクラス(xxxAudioProcessorクラス)にパラメータを追加する処理を実装します。
// コンストラクタ
xxxAudioProcessor::xxxAudioProcessor()
#ifndef JucePlugin_PreferredChannelConfigurations
: AudioProcessor (BusesProperties()
#if ! JucePlugin_IsMidiEffect
#if ! JucePlugin_IsSynth
.withInput ("Input", AudioChannelSet::stereo(), true)
#endif
.withOutput ("Output", AudioChannelSet::stereo(), true)
#endif
)
#endif
{
AudioParameterFloat* parameter1 = new AudioParameterFloat("PARAMETER_1", "PARAMETER_1", -36.f, 6.f, -3.0f);
AudioParameterInt* parameter2 = new AudioParameterInt("PARAMETER_2", "PARAMETER_2", 1, 128, 8);
AudioParameterBool* parameter3 = new AudioParameterBool("PARAMETER_3", "PARAMETER_3", true);
addParameter(parameter1);
addParameter(parameter2);
addParameter(parameter3);
}
xxxAudioProcessor::createEditor関数の返り値を変更する
AudioProcessorEditor* xxxAudioProcessor::createEditor()
{
return new xxxAudioProcessorEditor (*this);
}
↓ GenericAudioProcessorEditorクラスのインスタンスを返すように変更する
AudioProcessorEditor* xxxAudioProcessor::createEditor()
{
return new GenericAudioProcessorEditor(this);
}