MIDIシンセサイザーを作る
このチュートリアルでは、MIDI 入力に反応するポリフォニックなサイン波シンセサイザーを実装します。これはSynthesiserクラスおよび関連クラス。
レベル:中級
プラットフォーム:Windows, macOS, Linux
クラス: Synthesiser,SynthesiserVoice,SynthesiserSound,AudioSource,MidiMessageCollector
スタート
JUCEでのMIDI入力の扱い方と、サイン波の生成方法に慣れている必要があります。参照Tutorial: Handling MIDI eventsそしてTutorial: Build a sine wave synthesiser.
このチュートリアルのデモ・プロジェクトのダウンロードはこちらから:PIP|ZIP.プロジェクトを解凍し、最初のヘッダーファイルをProjucerで開く。
このステップにヘルプが必要な場合は、以下を参照してください。Tutorial: Projucer Part 1: Getting started with the Projucer.
デモ・プロジェクト
このデモ・プロジェクトでは、シンプルなサイン波シンセサイザーを演奏するのに使えるオンスクリーン・キーボードを紹介している。

コンピュータのキーボードのキーを使って、画面上のキーボードをコントロールすることができます(A、S、D、Fなどのキーを使って、音符C、D、E、Fなどをコントロールします)。これにより、シンセサイザーをポリフォニックに演奏することができます。
シンセシザークラス
このチュートリアルでは、JUCESynthesiserクラスを使用して、ポリフォニック・シンセシスを実装することができます。これは、独自のアプリケーションで独自のサウンドを使ってシンセサイザーを カスタマイズするために必要なすべての基本要素を示しています。これを動作させるために必要なクラスはいろいろあり、標準のMainContentComponent
クラスがある:
SynthAudioSource
を実装している。AudioSourceというクラスがあります。SynthAudioSource
を含む。Synthesiserクラスそのものです。これはシンセサイザーからすべてのオーディオを出力する。SineWaveVoice
これはカスタムSynthesiserVoiceというクラスがあります。SineWaveVoice
.ボイスクラスは、シンセサイザーのボイスの1つを、他のボイスとミックスしてレンダリングします。Synthesiserオブジェクトを生成します。1つのボイスクラスのインスタンスが1つのボイスをレンダリングします。SineWaveSound
カスタムSynthesiserSoundというクラスがあります。SineWaveSound
.サウンド クラスは、ボイスとして作成できるサウンドを記述したものです。例えば、サンプラーボイスのサンプルデータや、ウェーブテーブルシンセサイザーのウェーブテーブルデータが含まれます。
キーボードの設定
私たちのMainContentComponent
クラスには以下のデータ・メンバが含まれる。
juce::MidiKeyboardState keyboardState;
SynthAudioSource synthAudioSource;
juce::MidiKeyboardComponent keyboardComponent;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)
};
についてsynthAudioSource
そしてkeyboardComponent
メンバはMainContentComponent
ビルダー
MainContentComponent()
: synthAudioSource (keyboardState),
keyboardComponent (keyboardState, juce::MidiKeyboardComponent::horizontalKeyboard)
{
addAndMakeVisible (keyboardComponent);
setAudioChannels (0, 2);
setSize (600, 160);
startTimer (400);
}