MIDI キーボードで弾いた音を調べて、その情報を基に次の動作を決定するパッチを書くことができます。この演習では、比較を用いた決定についての理解度をテストします。
・ MIDI キーボードで演奏されたノートを受信し、ノートがミドル C( MIDI ノート60)、もしくはそれより高い場合には、演奏されたピッチより1オクターブ低いノートと1オクターブ高いノートを演奏するパッチを作成しなさい。
演奏されるピッチが「60以上」かどうかを検出するために比較が必要になります。
この比較に基づいて、オリジナルのピッチより1オクターブ低いノート(12半音低い)と1オクターブ高いノート(12半音高い)を演奏するかどうかを決定します。
オリジナルのピッチが60よりも小さい値の場合には、何もする必要はありません。しかし、ピッチが60以上の場合には、2つの新しい音が生成される必要があります。低いピッチを得るにはオリジナルのピッチから12を引き、高いピッチを得るにはオリジナルのピッチに12を加えなければなりません。
新しいピッチは、ノートオンとノートオフ・メッセージをシンセサイザに送信するために、ベロシティ(おそらくはオリジナルのベロシティ)と結合されなければなりません。
・ この問題に対する2つの可能な解答を見るために、パッチャーウィンドウ を右にスクロールして下さい。
2つの解答では共に、演奏されたピッチが 60 以上の場合に検出できるように、関係演算子の >= を使用しています。それぞれの解答は、多少違った方法で比較の結果を用いています。
解答1では、比較の結果が真の場合に、数値12と‐12をトリガするようになっています。ピッチの値は比較を行なわれる前に + オブジェクトの右インレットに格納されます。そして、ピッチが60以上ならば、>= オブジェクトは 1を送信し、sel オブジェクトにメッセージ -12と12をトリガさせます。これら2つの数値はオリジナルのピッチに加えられ、その合計が noteout に送信されますが、そこで演奏された音のベロシティと結合され、シンセサイザへのノート・メッセージをトリガします。このプロセスはノートオンとノートオフの両方で生じるため、トランスポーズされたピッチは首尾よく演奏され、オフにされます。
解答2では、比較の結果が真の場合に gate を開き、ピッチを通過させます。そのため、60 以上のピッチだけが渡されます。
>= オブジェクトの位置は非常に重要です。それは、>= が gate オブジェクトの右にあるため、>= が最初にピッチを受信し、ピッチがgate に到達する前に gate のインレットの開閉を行うからです。
ピッチが通過すると、1つのオブジェクトでは12を引かれ、もう1つのオブジェクトでは12を加えられます。その結果はピッチとして noteout に送信され、そこで(ノートオンとノートオフの両方とも)オリジナルのベロシティと結合されます。
注: MIDI キーボードからの音が両方のパッチに影響を及ぼさないように、解答2の notein と noteout オブジェクトは MIDI チャンネル2だけを送受信するように設定されています。
この演習では、 >= 60 という比較は、一方ではメッセージをトリガするために使用され、もう一方では gate を開くために使用されました。問題の解答にはどちらかの方法が組み入れられるでしょう。
テストを行なって決定する場合、次の質問を自問自答してみて下さい