MAX 7 サウンドプログラミング基礎8
8
p.292〜295
前回投稿したgateやswitchオブジェクトは、toggleオブジェクト等によって動作を設定していたが、それはエアコンのスイッチを手動で入れたり、切ったりすることに例えられる。
一方、温度計によってエアコンを制御すれば、自動的に適切な温度に室温を保つことが出来る。
このような一定条件に基づく判断を条件判断と呼び、それによって何らかの動作を行うことを条件処理と呼ぶ。
条件処理を行うためには、次のような条件演出オブジェクトが利用できる。
== 等しい
!= 等しくない
< より小さい
<= 等しいか小さい
> より大きい
>= 等しいか大きい
==オブジェクトの場合は、アーギュメントで指定した数値または、第2インレットに入力された数値と、第1インレットに入力された数値を比較して、等しければ1を、そうでなければ0を出力する。理論用語に置き換えると、1は”真”を、0は”偽”を表す。
また、二つの条件演算の結果を総合的に判断することがある。MAXで論理演算を行うためのオブジェクトは以下の通りである。
&& かつ(論理積・論理AND演算)
ll または(論理積・論理OR演算)
こちらのオブジェクトにおいても、条件に等しければ1を、そうでなければ0を出力する。
では、以上の条件オブジェクトを用いて、限られた座標範囲内でドットを描くプログラムを作って
みたい。
右図では、y座標が50-150の範囲でのみドットが描かれるプログラムになっている。
まず、y軸、すなわちtopの座標を指定する右側のrandomオブジェクトから、それぞれ>50, <150の条件処理を行い、&&オブジェクトによって二つの条件を満たした時に、アウトレットから1が出力されるようになる。
その1を受け取った時だけ、gateオブジェクトによってpaintovalからの座標リストを出力するというプログラム内容である。
このプログラムを組む際に、right-to-leftの仕組みが非常にキーになってく場面があった。
colorメッセージを、x座標(left座標)側のrandomオブジェクトから直接入力し、まずは図のように最左部においてみると、下の図のようにランダムな配色がなされる。
ところが、最右部においてみると、下の図のように1〜200までの色値と同じ規則的な配列となった。
なぜこのようなことが起きるのか。
これは、そもそも条件制限をしなくとも同じことが起き、しかもy座標(top座標)側においてはcolorメッセージがどこにいようともグラデーション配色となり、ランダムになるのはleft座標の場合のみである。
y座標(top座標)側のrandomに繋いでも違いがない現象について。
座標リストに関してのシグナルは、こちらもright-to-leftによって、bottom, right, top, leftの順に瞬間的に送られる。よって、最初に右側にあるtop座標のrandomオブジェクトからのシグナルをあとからいくら左に移動しようとも、その後にleft座標が入ってくるため、こちらは関係ない。
そして、問題のcolor値に関して、これはまだ解明しきれていないのだが、randomオブジェクトの変わりにcounterオブジェクトを使用する等して原因を解明してみたところ、colorメッセージがpackオブジェクトよりも左へよった場合、最初のbangをなぜかスルーして、次のbangから受け取った数値の反映を開始するようである。
これに関しては、詳細が分かり次第更新したいと思う。