メインコンテンツまでスキップ

チュートリアル:プラグインの正しいバスレイアウトの設定

📚 Source Page

様々な設定に対応したプラグインのバスレイアウトの設定と制限方法を学びます。AppleのLogic Proに含まれるauvalツールを使用して、AUプラグインのバス配置を確認します。

レベル: 初級
プラットフォーム: Windows, macOS, Linux
プラグインフォーマット: VST, VST3, AU, Standalone
クラス: AudioProcessor::BusesLayout, AudioProcessor::BusesProperties, AudioChannelSet, AudioProcessor

はじめに

このチュートリアルに従うには、プラグインプロジェクトを開いているか、または代わりにProjucer内で新しいAudio Pluginプロジェクトを作成してください。

この手順でサポートが必要な場合は、チュートリアル:基本的なAudio/MIDIプラグインの作成 Part 1: セットアップを参照してください。

警告

AudioUnitプラグインをビルドしてauvalツールでテストするには、macOS上でビルドし、Logic Pro Xがインストールされている必要があります。

はじめに

JUCEのAudioProcessorクラスは、いくつかの入力チャンネルを受け取り、入力データを処理し、その結果をいくつかの出力チャンネルに供給します。これは以下の図に示されています:

Plugin with I/O channels
Plugin with I/O channels

多くの種類のオーディオプロセッサでは、これで十分です。しかし、ホストとプロセッサ間のコミュニケーションを容易にするために、これらの個々のチャンネルをグループとして表現したい場合がよくあります。例えば、最初の4つの入力チャンネルをメインチャンネルとして使用し、最後の2つの入力チャンネルをサイドチェーンとして使用できます。以下に示すように:

Plugin with I/O buses
Plugin with I/O buses

上の図の黄色い矢印は_バス_と呼ばれます。したがって、バスは通常、プラグイン内で同じ信号パスを共有するチャンネルのグループです。例えば、メインオーディオ信号パスやサイドチェーン信号パスなどです。JUCEでは、各バスにはプラグイン内での特定の目的を識別できるように名前が付いています。

ヒント

ほぼすべてのDAWで、最初の入力バスまたは最初の出力バスはメインバスと呼ばれます。JUCEでは、単に最初の入力または出力バスを指すメインバスに言及するコメントやメソッド名が見つかることがあります。

しかし、オーディオプロセッサの入出力チャンネルをグループ化し、それらのグループに名前を付けるだけでは十分ではありません。各バス内の各チャンネルの空間的位置に関する情報も伝える必要があります。例えば、バスをステレオバス(Left、Right)、クアドラフォニックバス(Left、Right、Left Surround、Right Surround)、またはモノバス(Centre)などとして設定できます。JUCEでは、各バスには、これらのチャンネルセットの空間的位置を記述するAudioChannelSetが割り当てられます(例:AudioChannelSet::mono()AudioChannelSet::stereo()AudioChannelSet::quadraphonic())。

各バスのAudioChannelSetはプラグインのライフタイム全体を通じて固定されていないことに注意することが重要です。DAWは、いつでも特定のバスに対して異なるAudioChannelSetを要求する可能性があります。例えば、DAWユーザーがサイドチェーンソースをモノからステレオに切り替えたときなどです。これを実装するために、JUCEは各バスがサポートするAudioChannelSetオブジェクトについてプラグインに問い合わせるコールバックをサポートしています。

ヒント

AudioChannelSet::disabled()と呼ばれる特別なAudioChannelSetがあり、これにはチャンネルが含まれていません。このAudioChannelSetは、DAWでサイドチェーンが接続されていない場合など、特定のバスが現在使用されていないことを示すために使用されます。

まとめると、任意の時点でプラグインの各チャンネルに関する情報を通信するために、DAWとプラグインは以下のことを行う必要があります:

  • チャンネルのバスへのグループ化に関する情報を交換する。
  • 各バスの名前と現在のAudioChannelSetに関する情報を交換する。
  • 各バスでサポートされているAudioChannelSetオブジェクトをネゴシエートする。

プラグイン開発者としてこの情報をホストに伝える方法を探ることから始めましょう。

BusesPropertiesの割り当て

プラグインを書くときの最初の2点(チャンネルのバスへのグループ化と命名、および各バスへのAudioChannelSetの選択)にまず焦点を当てます。この情報は、以下のようにAudioProcessorのコンストラクタにAudioProcessor::BusesPropertiesインスタンスを渡すことでDAWに伝えられます:

ExampleAudioProcessor()
: AudioProcessor (BusesProperties().withInput ("Input", juce::AudioChannelSet::stereo(), true).withOutput ("Output", juce::AudioChannelSet::stereo(), true))
{
//...

上記のコードは、このプラグインに2つのバスがあることをDAWに通知します:「Input」という名前の入力バスと「Output」という名前の出力バスです。withInput()withOutput()関数の2番目のパラメータは、それぞれのバスの初期AudioChannelSetを記述します。DAWはいつでもこれを変更できることを覚えておくことが重要です。3番目のパラメータは、バスが最初に有効か無効かを示します。これらの2つのバスはメインバスであるため、無効にすることにはあまり意味がありません。

前の例は通常、エフェクトプラグインで使用されます。しかし、シンセプラグインは通常、出力バスのみを持つため、コンストラクタは次のようになります:

ExampleAudioProcessor()
: AudioProcessor (BusesProperties().withOutput ("Output", juce::AudioChannelSet::stereo(), true))
{
//...

JUCEでサポートされているもう1つのプラグインタイプは、MIDIエフェクトプラグインです。これらはMIDIのみを処理するため、オーディオバスは一切ありません:

ExampleAudioProcessor()
: AudioProcessor (BusesProperties())
{
//...
ヒント

上記のコンストラクタコードは、デフォルトのAudioProcessorコンストラクタの呼び出しと混同しないでください。後方互換性のため、デフォルトコンストラクタは、「Input」という名前の最初は無効な入力バスと「Output」という名前の最初は無効な出力バスを持つプラグインを作成します --- それぞれAudioChannelSet::stereo()として。

BusesLayoutの設定

DAWはコンストラクタで提供された初期AudioChannelSetをいつでも変更したいと思う可能性があるため、特定のバスがサポートするAudioChannelSetオブジェクトを設定することだけが必要な手順です。プラグインが自身のレイアウトを能動的に変更する方法はないことに注意することが重要です:プラグインは受動的であり、常にホストの「言いなり」になります。要求されたAudioChannelSetの設定を拒否または受け入れることしかできません。

これを行うには、プラグインはAudioProcessor::isBusesLayoutSupported()コールバックをオーバーライドする必要があります。このコールバックは、プラグインの各バスのAudioChannelSetオブジェクトの配列である単一のBusesLayoutパラメータを受け取ります。

ヒント

サポートされる入力および出力バスの配列の要素数は、AudioProcessorコンストラクタで指定したバス数と常に一致します。

AudioProcessor::isBusesLayoutSupported()コールバックでは、指定されたBusesLayoutがサポートされているかどうかを返す必要があります。例えば、デフォルトのコールバックは、DAWが要求するあらゆるBusesLayoutを受け入れるものです:

bool isBusesLayoutSupported (const BusesLayout& layouts) const
{
return true;
}

ほとんどのエフェクトプラグインは、単一のメイン入力および出力バスのみを持ちます。通常、入力側と出力側でAudioChannelSetが同じである必要があります:

bool isBusesLayoutSupported (const BusesLayout& layouts) const
{
return layouts.getMainInputChannelSet() == layouts.getMainOutputChannelSet();
}

AudioChannelSet::disabled()と呼ばれる特別なAudioChannelSetがあり、特定のバスが無効であることを示すことを覚えておいてください。ほとんどのエフェクトプラグインは、メインバスを無効にしたくないので、コールバックに以下のチェックを含めることができます:

bool isBusesLayoutSupported (const BusesLayout& layouts) const
{
if (layouts.getMainInputChannelSet() == juce::AudioChannelSet::disabled()
|| layouts.getMainOutputChannelSet() == juce::AudioChannelSet::disabled())
return false;

return layouts.getMainInputChannelSet() == layouts.getMainOutputChannelSet();
}

プラグインがモノ・ツー・モノまたはステレオ・ツー・ステレオの設定のみを処理できるとしましょう。上記のコードの最後の行は、入力と出力のレイアウトが同じでなければならないことを既にチェックしているので、入力または出力バスのいずれかに対して先行するチェックを行うだけで済みます:

bool isBusesLayoutSupported (const BusesLayout& layouts) const
{
if (layouts.getMainInputChannelSet() == juce::AudioChannelSet::disabled()
|| layouts.getMainOutputChannelSet() == juce::AudioChannelSet::disabled())
return false;

if (layouts.getMainOutputChannelSet() != juce::AudioChannelSet::mono()
&& layouts.getMainOutputChannelSet() != juce::AudioChannelSet::stereo())
return false;

return layouts.getMainInputChannelSet() == layouts.getMainOutputChannelSet();
}

BusesLayoutのテスト

isBusesLayoutSupported()関数で定義されたレイアウトのエッジケースを見落としやすいため、プラグインでサポートするバスレイアウト設定はさまざまなツールを使用してテストできます。

このチュートリアルでは、AudioUnitsをテストおよび検証するためのAppleのLogic Proに含まれるauvalツールと、VSTおよびAUプラグインをサポートするJUCEに含まれるAudio Plugin Hostの2つのソリューションを紹介します。

auvalツールでのテスト

ヒント

このセクションでは、macOSでAudioUnitsでのみ利用可能なツールについて説明します。

auvalツールは、AppleのLogic Pro XやFinal Cut Pro Xなどのプラグインホストにロードされる前にAudioUnitsを検証します。プラグインに対してさまざまな有用なテストを実行しますが、このチュートリアルではバスレイアウトテストに焦点を当てます。

auvalツールは、Logic Pro X内でLogic Pro X > Preferences > Plug-in Manager...に移動し、ここに示すようにReset & Rescan Selectionをクリックして検証を呼び出すことでアクセスできます:

The Plug-in Manager in Logic Pro X
The Plug-in Manager in Logic Pro X

ただし、コマンドラインからも次のように呼び出すことができます:

auval - v aufx Test Manu

最初の引数はAUメインタイプを示し、エフェクトプラグインを実装する場合はデフォルトで'aufx'になります。2番目と3番目の引数は、プロジェクトのProjucer設定で指定されたプラグインコードとメーカーコードです:

The Projucer plugin settings
The Projucer plugin settings

例として、AU検証の出力は次のようになります:

AU Validation Tool
Version: 1.6.1a1
Copyright 2003-2013, Apple Inc. All Rights Reserved.
Specify -h (-help) for command options

--------------------------------------------------
VALIDATING AUDIO UNIT: 'aufx' - 'Test' - 'Manu'
--------------------------------------------------
Manufacturer String: Manu
AudioUnit Name: TestPlugin
Component Version: 1.0.0 (0x10000)

* PASS
--------------------------------------------------
FORMAT TESTS:

Reported Channel Capabilities (explicit):
[1, 1] [2, 2]

Input/Output Channel Handling:
1-1 1-2 1-4 1-5 1-6 1-7 1-8 2-2 2-4 2-5 2-6 2-7 2-8 4-4 4-5 5-5 6-6 7-7 8-8
X X

# # AudioChannelLayouts (5), Input Scope:
//...

Is Audio Channel Layout Available:
Mono Stereo Binau. AU_4 Ambi. AU_5 AU_5_0 AU_6 AU_6_0 AU_7_0 AU_7_0F AU_8 AU_5_1 AU_6_1 AU_7_1 AU_7_1F
X X X

//...

# # AudioChannelLayouts (5), Output Scope:
//...

Is Audio Channel Layout Available:
Mono Stereo Binau. AU_4 Ambi. AU_5 AU_5_0 AU_6 AU_6_0 AU_7_0 AU_7_0F AU_8 AU_5_1 AU_6_1 AU_7_1 AU_7_1F
X X X

//...

* PASS
--------------------------------------------------
AU VALIDATION SUCCEEDED.
--------------------------------------------------

上記の出力からわかるように、テストプラグインがモノ・ツー・モノとステレオ・ツー・ステレオの設定のみを受け入れることを確認できます。これはまさに私たちが望んでいることです。

警告

macOSバージョン10.12.0から10.13.1の間を使用している場合、auvalにはプラグインの間違ったバスレイアウトを報告する可能性のあるバグが含まれています。

Plugin Hostでのテスト

もう1つの便利なツールは、ライブラリのJUCE/examplesフォルダにあるJUCEに含まれるAudio Plugin Hostです。このツールを使用すると、実行時にバスレイアウトを変更してVSTおよびAUプラグインをテストできます。

ヒント

Audio Plugin Hostのビルドと使用に関するヘルプが必要な場合は、チュートリアル:基本的なAudio/MIDIプラグインの作成 Part 1: セットアップを参照してください。

Audio Plugin Hostを開き、テストしたいプラグインのインスタンスをロードします。プラグインを右クリックしてConfigure Audio I/Oを選択すると、次のウィンドウが表示されます:

Audio I/O settings of a plugin
Audio I/O settings of a plugin

ここでは、プラグインが許可している場合、入力または出力バスを追加または削除したり、選択したバスのチャンネルセットを変更したり、バスを便利に有効/無効にしたりできます。

プラグインを初めてロードしたときに、入力と出力のピンがAudioProcessorコンストラクタで設定されたデフォルトのBusesLayout設定を表示していることに注目してください。

注記

演習:さまざまなバスレイアウトを試し、auvalツールとAudio Plugin Hostでプラグインの動作を確認してください。

まとめ

このチュートリアルを読んだ後、以下のことができるようになります:

  • 異なるチャンネルセットを持つ入力、出力、サイドチェーンバスを定義する。
  • プラグインタイプに合わせた好みのバスレイアウトを設定する。
  • auvalツールを使用してAudioUnitsのバス配置設定を確認する。
  • JUCEオーディオプラグインホストで異なるバスプロパティを割り当てる。

関連項目