マルチ・ポリフォニック・シンセサイザーを作る
MPE規格の基礎とMPEに対応したシンセサイザーの実装方法を学びます。アプリケーションをROLI Seaboard Riseに接続します!
レベル:中級
プラットフォーム:Windows, macOS, Linux
クラス: MPESynthesiser,MPEInstrument,MPENote,MPEValue,SmoothedValue
スタート
このチュートリアルのデモ・プロジェクトのダウンロードはこちらから:PIP|ZIP.プロジェクトを解凍し、最初のヘッダーファイルをProjucerで開く。
このステップにヘルプが必要な場合は、以下を参照してください。Tutorial: Projucer Part 1: Getting started with the Projucer.
を読むと役に立つだろう。Tutorial: Build a MIDI synthesiserこれは多くの場所で基準点として使われているからだ。
デモ・プロジェクト
デモ・プロジェクトはMPEDemo
のプロジェクトである。JUCE/examples
ディレクトリに移動します。このチュートリアルを最大 限に活用するためにはMPE互換性のあるコントローラー。MPEを表す。MIDIポリフォニック・エクスプレッションこれは、オーディオ製品間で多次元データの通信を可能にする新しい仕様である。
そのような例をいくつか挙げよう。MPE互換性のある機器は、ROLIのSeaboardシリーズ(例えば、以下のようなもの)である。Seaboard RISE).
シンセサイザーは、コントローラーがMIDIチャンネル・プレッシャーとコンティニュアス・コントローラー74(ベル)のやり方でSeaboard RISEはそうする。
を持っている。Seaboard RISEあなたのコンピューターに接続されたデモ・アプリケーションのウィンドウは、以下のスクリーンショットのようになっているはずです:

MIDI入力を1つ有効にする必要があります。Seaboard RISEはオプションとして表示される)。
ビジュアライザー
で演奏されたすべての音符は、その音符に対応する。MPE対応するデバイスがウィンドウの下部に表示されます。これは以下のスクリーンショットに示されています:

の重要な特徴のひとつである。MPEは、特定のコントローラー・キーボードからのすべてのノートが同じMIDI チャンネルに割り当てられるのではなく、それぞれの新しいMIDI ノート・イベントに独自のMIDI チャンネルが割り当てられます。これにより、コントロール・チェンジ・メッセージやピッチ・ベンド・メッセージなどによって、個々のノートを独立してコントロールできるようになります。JUCEの実装ではMPE演奏音はMPENoteオブジェクト。或いはMPENoteオブジェクトは以下のデータをカプセル化する:
- ノートのMIDIチャンネル
- MIDIノートの初期値
- ノートオン・ベロシティストライキ).
- ノートのピッチベンド値:このノートのMIDIチャンネルで受信したMIDIピッチベンドメッセージから得られます。
- ノートの音圧:このノートのMIDIチャンネルで受信したMIDIチャンネル音圧メッセージから得られます。
- についてベル通常、このノートのMIDIチャンネルにあるコントローラー74のコントローラー・メッセージに由来する。
- ノートオフ速度(またはリフト):ノート・オフ・イベントを受信した後、再生音が止まるまで有効。
ノートを演奏していない状態では、ビジュアライザーが従来の MIDI キーボードレイアウトを表していることがわかります。デモアプリケーションのビジュアライザーでは、各ノートを以下のように表現しています:
- 灰色で塗りつぶされた円はノートオンの速度を表す(速度が速いほど円は大きくなる)。
- ノートのMIDIチャンネルは、この円内の "+"シンボルの上に表示されます;
- 初期MIDIノート名は "+"記号の下に表示されます。
- 重ねて表示されている白い円は、このノートの現在の圧力を表している(ここでも、圧力が高いほど円は大きくなる)。
- ノートの水平位置は、元の ノートと、このノートに適用されたピッチベンドから決定されます。
- ノートの垂直方向の位置はベルこのノートのMIDIチャンネルのMIDIコントローラー74から)。
その他の設定
の他の側面をさらに掘り下げる前に。MPEこのアプリケーションで実証されている仕様の他に、このアプリケーションが使っているものをいくつか見てみよう。
まず第一にMainComponent
クラスはAudioIODeviceCallback [1]そしてMidiInputCallback [2]クラスである:
class MainComponent : public juce::Component,
private juce::AudioIODeviceCallback, // [1]
private juce::MidiInputCallback // [2]
{
public:
また、このクラスには重要なメンバーもいる。MainComponent
クラスである:
juce::AudioDeviceManager audioDeviceManager; // [3]
juce::AudioDeviceSelectorComponent audioSetupComp; // [4]
Visualiser visualiserComp;
juce::Viewport visualiserViewport;
juce::MPEInstrument visualiserInstrument;
juce::MPESynthesiser synth;
juce::MidiMessageCollector midiCollector; // [5]
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
};
についてAudioDeviceManager [3]クラスはコンピュータのオーディオとMIDIのコンフィギュレーションを処理します。AudioDeviceSelectorComponent [4]クラスは、グラフィカル・ユーザー・インターフェースからこれを設定する手段を与えてくれる (Tutorial: The AudioDeviceManager class).そのMidiMessageCollector [5]クラスを使用すると、オーディオ・コールバックでタイムスタンプ付きMIDIメッセージのブロックにメッセージを簡単に集めることができます (Tutorial: Build a MIDI synthesiser).
が重要である。AudioDeviceManagerのコンストラクタに渡すので、オブジェクトが最初にリストされる。AudioDeviceSelectorComponentオブジェクトがある:
MainComponent()
: audioSetupComp (audioDeviceManager, 0, 0, 0, 256,
true, // showMidiInputOptions must be true
true, true, false)