aRts - アナログ・リアルタイム・シンセサイザ
前のページ | 第 6章チュートリアル | 次のページ

# 6.7. ステップ 7: Midi シンセサイズ

最後に、正弦波を本物の楽器に流します。 これは、midi イベントを aRts に送れるものがあるときだけ意味があります。 ここでは外部キーボードを利用する方法について説明します。 ただ、Brahms のような midi バスを認識するシーケンサでもよいでしょう。

まず、artsbuilder を何も実行していない状態で2つ残して全部のウィンドウを閉じます。 artsbuilder の一方には tutorial ストラクチャが、もう一方には play ストラクチャ (ここでは base ストラクチャと呼びます)が入っています。 tutorial ストラクチャで、 Synth_SEQUENCE モジュールを Interface_MIDI_NOTE モジュールに置き換えます。 その周波数を Synth_FREQUENCY オブジェクトに接続します。 ただし、これには pos 出力がないことに気が付くと思います。

これは、アルゴリズムがなくても、一度 midi キーボードの鍵盤を押したら必ず離すからです。 だから、代わりに pressed パラメータがあり、ユーザが鍵盤を押しているかどうかを指示します。 (pressed = 1:鍵盤が押されている、pressed = 0:鍵盤から手が離れている)

このため、Synth_PSCALE オブジェクトも置き換えられる必要があります。 代わりに Synth_ENVELOPE_ADSR を組み込みます。そして、

- MIDI_NOTE の pressed を ADSR の active に接続します。

- SIN の出力値を ADSR の入力値に接続します。

- ADSR の出力値を UPLINK の左側に接続します。

- ADSR の出力値を UPLINK の右側に接続します。

パラメータattack を0.1に、decay を0.2に、sustain を0.7に、release を0.1にセットします。

他に考えなければならないのは、楽器のストラクチャはなんとかして、 演奏しはじめる時、自分が消滅する時を知る必要がある、ということです。 そうでないと、鍵盤が離された後も演奏が終わりません。 都合の良いことに、ADSR のエンベロープは何も聞こえなくなった時を認識します。 なぜなら、これは鍵盤が離された後にとにかく信号をゼロに見積もるからです。

これは、done パラメータが1に設定されることで示されます。 Synth_STRUCT_KILL モジュールを ADSR エンベロープの done 出力に接続します。 done が1になったらすぐにストラクチャは消去されます。

楽器のストラクチャをサーバに公開してください。 名前は tutorial のままにします。古いものは上書きされます。

もう一方の artsbuilder に行き、Synth_MIDI_ROUTER モジュールを挿入します。 チャンネルを0に、最大値を4に、ストラクチャを tutorial にセットします。 このモジュールは midi イベントをチャンネル0で受け取ります。 そして、受け取るたびに正弦波を作成しバスに書き込みます。 ところで：MIDI_ROUTER をダミーな値に設定した場合には "bus" パラメータを設定してください。 これは後で説明します。x, y ,parent などのものは無視します。

ファイル/ストラクチャの実行をクリックします。 artsbuilder では、base ストラクチャだけ実行されているときは、 周波数を指定せずに楽器を演奏しても意味がありません。

端末を開き、`midisend`と入力してください。 キーボードを取り出し、演奏してみてください(当然ながら、コンピュータに接続した状態で)。 CPU のパワーがまだ多く残っているならば、MIDI_ROUTER の最大値の設定をひとつ上げて、 8か、おそらくそれ以上の音を処理できるようにすることができるようになります。

前のページ | Home | 次のページ
ステップ 6: Beaming for advanced users | Up | 本物の楽器を作る