JUCEでソフトシンセをつくる 1 ~ Hello, SineとMIDI入力
はじめに
JUCEを使って、ソフトシンセを作っていきます。
とりあえず、今回はSine波オシレータとMIDI入力を実装してみます。
仕様
以下の機能を実装します。
プロジェクトの設定
下記の画像のように設定します。
- Plugin is a SynthとPlugin Midi Inputに☑を入れておきます
- SineOscillator、Synthヘッダ・ソースファイルを追加します(前者には、Sine波オシレータの実装を、後者には、オシレータで生成した波形のレンダリングやMIDI入力に関する実装を書いていきます)
SineOscillatorの実装
SineOscillator.h, cppに記述していきます。
本当はSine波の生成はテーブル・ルックアップを使った方が速い(らしい)のですが、それは、次回ということで。今回は、普通にsin関数を使っています。
波形のレンダリングとMIDI処理の実装
Synth.h, cppに記述していきます。
実際、このMIDI入力処理だと1つのMIDI入力があったらすぐにオーディオレンダリングに入っているので、1ボイスしか同時発音できません。
また、鍵盤が現在押しこまれているのかどうかを判断できないので、2鍵盤を押しこんだ状態で片方を放した時、まだ、打鍵状態にある方の音が鳴らない等という問題が残っていたりしますが、この対処については、またの機会に。
とりあえず、MIDI鍵盤を通して任意の音階を鳴らすことはできるようになりました。
オーディオバッファの取得云々等については、JUCE JAPANを読もう(ダイレクトマーケティング)。
後は、実際にこれをProcessBlockで走らせれば、Hello, sineできます。
無事、MIDI入力を通して、Hello, sineできてますね。
次の予定
ただ、Sine波を鳴らすだけではつまらないので、次は、基本波形を一式実装…といきたいのですが、Sine波以外のバンドリミット済みの基本波形テーブル作製や波形の切り替え処理の実装が意外と面倒なので、次回は、SineテーブルのみからできるFM Oscillatorを実装してみようかと思います。そのうち書きます。