バスってDAWでは何気なく利用していますが、音声のバス設定もプラグイン作成には必要ですね。
何気ないものもプログラミングしていかなきゃね~
バスレイアウトについてのチュートリアルを進めています。進めているチュートリアルはこちらになります。
こんな人の役に立つかも
・JUCEフレームワークに入門したい人
・VST、AUプラグイン開発の最初の一歩を踏み出したい人
・JUCEのチュートリアルをやっている人
コンストラクタでオーディオ入出力を定義
試しに、前回までで作成した「GainPlugin」の入出力をモノラル入力、モノラル出力としてみました。
以下のGitHubリモートリポジトリからcloneまたは、zipファイルでダウンロードが可能です。(VisualStudio2019で作成しています。Projucerで開けば、そのままMacでも行けると思います^^;未検証です。)
>git clone https://github.com/perfectpanda-works/GainPluginRefactoring.git
ダウンロード後、「GainPlugin.jucer」からプロジェクトを開き、VSTをビルドすることでプラグインが生成されます。
コンストラクタファイルの変更
「PluginProcessor.cpp」のコンストラクタに以下のように音声の入出力に関する初期化を追加します。
GainPluginAudioProcessor::GainPluginAudioProcessor()
: parameters(*this, nullptr, juce::Identifier("APVTSTutorial"),
{
std::make_unique<juce::AudioParameterFloat>("gain", // parameterID
"Gain", // parameter name
0.0f, // minimum value
1.0f, // maximum value
0.5f), // default value
std::make_unique<juce::AudioParameterBool>("invertPhase", // parameterID
"Invert Phase", // parameter name
false) // default value
})
//以下の2行を追加しました。プラグインのモノラル入力、モノラル出力
に設定しています。
, AudioProcessor(BusesProperties().withInput("Input", juce::AudioChannelSet::mono(), true)
.withOutput("Output", juce::AudioChannelSet::mono(), true))
{
phaseParameter = parameters.getRawParameterValue("invertPhase");
gainParameter = parameters.getRawParameterValue("gain");
}
このように、「AudioProcessor」クラスの「BusesProperties」インスタンスのコンストラクタで音声入力と出力の初期化を行うことができます。
動作検証
以前チュートリアルでビルドしたHostアプリからみると、音声入力の設定がモノラル入力、モノラル出力になっていることが確認できます。
ホストアプリのビルドについては、こちらの記事もご参照ください。
※ホストアプリでは、緑色のノードが音声を示します。
入出力の設定の種類
プラグインの音声入出力初期値を次のように設定することでいろいろなパターンができます。
ステレオ入力、ステレオ出力
一般的なオーディオプラグインの入出力の形ですね。ちなみに、以下のように明記しない場合、デフォルトがステレオ入力ステレオ出力になる模様です。
//...略...
, AudioProcessor (BusesProperties().withInput ("Input", juce::AudioChannelSet::stereo(), true)
.withOutput ("Output", juce::AudioChannelSet::stereo(), true))
{
//...略...
自身が発音するタイプでステレオ出力
音源プラグインのように、音声の入力がないような場合、音声入力のみの設定になるかと思います。次のように設定を行うことでステレオ出力のみを備えたプラグインとすることが可能です。
//...略...
, AudioProcessor(BusesProperties().withOutput("Output", juce::AudioChannelSet::stereo(), true))
//...略...
このような感じで、入力が消えました。
MIDIエフェクトプラグインなど音声入出力がない
MIDIエフェクト処理など、音声入出力がないパターンのプラグインの場合、BusesPropertiesに何も指定しません。
//...略...
, AudioProcessor(BusesProperties())
//...略...
音声の入出力が存在しないプラグインの例です。
AudioChannelSetオブジェクト
先ほどまでの例で、AudioChannelSetオブジェクトで音声バスがモノラルなのか、ステレオなのかを決定していることがわかります。
次のようにAudioChannelSetを設定することができます。
//モノラル(センター定位のみ)
AudioChannelSet::mono()
//ステレオ(LとRの2チャンネル分音声バスです。)
AudioChannelSet::stereo()
//クアドロフォニック(LとR、Lサラウンド、Rサラウンドの4チャンネル音声)
AudioChannelSet::quadraphonic()
このAudioChannelSetオブジェクトで設定されたバスのモノラルやステレオといった設定は、プラグイン終了まで固定でいなければいけないわけではなく、DAW側からのリクエストで変更が可能とのことです。