
MAX 7 サウンドプログラミング基礎13
P301〜P305 ・selectオブジェクト selectオブジェクトは、入力されたメッセージがアーギュメントに一致するかを調べるオブジェクトである。一致した場合はアーギュメントの順番に対応したアウトレットからbangを出力し、どのアーギュメントにも一致しない場合は、一番右のアウトレットから受け取ったメッセージをそのまま出力する。 また、各インレットに関しては、アーギュメント内の数値を変更できるもので、例えば下のパッチでは第2インレットは2、第3インレットは6、第4インレットは8をそれぞれ変えたい時にそれぞれのインレットへ違う数値を送ることで変更可能である。 また、リスト化されたメッセージから遷都の要素のみ一致を摘出することも出来る。左パッチの場合では、送られた[mammy daddy]メッセージのうち、先頭のものが摘出されるため、bangは第2アウトレットから出力されるというわけである。 ・routeオブジェクト routeオブジェクトは、selectオブジェクトと似ており、アーギュメント内の値と受け取ったメッセージの一致を調べる。 ただし、

MAX 7 サウンドプログラミング基礎12
P299〜300 条件指定において、splitオブジェクトを用いることで、アーギュメント内で指定した範囲によって数値を振り分けて出力することが出来る。アーギュメントは、二つの整数によって最小値と最大値を指定し、その範囲の整数を第1インレットに受け取った場合は、その整数を第1アウトレットから出力。範囲外のものであれば第2アウトレットから出力を行う。 右のパッチで、sliderオブジェクトを動かして範囲内と範囲外の数値の出力のされ方を見ることが出来る。なお、splitオブジェクトの第2インレットには最小値を、第3インレットには最大値の変更したい値を入力することが可能である。 また、splitオブジェクトに似ているが、clipオブジェクトも最小値と最大値の範囲内を出力するオブジェクトである。ただし、clipp部ジェクとの方は、アウトレットが一つだけで、最小値よりも小さい数値は最小値として、最大値より大きい数値は最大値として出力される。 では、これもまたlcdオブジェクトで応用してみよう。 下図のように、x軸(left座標)の範囲を指定したドット作成であ

MAX 7 サウンドプログラミング基礎11
P296〜p298 ==や<>などの条件判断オブジェクトでは表現しにくい条件判断は、ifオブジェクトを使って記述することが出来る。ifオブジェクトは、C言語などのif文に似た次のようなアーギュメントを与える。 ・if 条件式 then 出力1 ・if 条件式 then 出力1 else 出力2 条件式は、$i1、$f1、$s1といった記号を用いて、インレットから入力されるメッセージを扱う。既述した記号の場合、二番目の文字であるiはint(整数)、fはfloat(実数)、sはsymbol(シンボル)となる。まt,あ三番目の数値はインレット番号となる。 具体的な例で見てみよう。 [if $i1 > 0 then $i1 else 0]というアーギュメント内容であれば、第1インレットで受け取った整数が0よりも大きければその整数をそのまま出力し、そうでない場合は0を出力するということになる。 また、[if $i1 > $i2 then bang else out2 bang]であれば、第1インレットから入った整数が第2インレットには行った整数よりも大きけ

MAX 7 right-to-left問題-補足-
以前投稿したright-to-left問題における補足。 基本的に、右からインプットされたものは、最終的に最も左からくるインプットによってbangされる。それはつまり、bangしたい対象がそのオブジェクトよりも左にあった場合には未反映状態となることを示す。 gateオブジェクトにおいて簡単なプロジェクトを見てみたい。 次の図において、左側のプロジェクトでは、丈夫のナンバーボックスを徐々に上げていくと、100を上回った際、本来であれば101の時にgateを通過したいのだが、gateオブジェクトへ101が入力される瞬間にはまだgateは開かれておらず、一瞬後に入力される[>100]の条件通過を受けて初めてgateが開かれる。そのため、101時点ではまだ数値は100のままであり、102になった際に先程開いたgateを、そのまま通過するという流れになるのである。 一方、右側のプロジェクトでは、まず[>100]の条件指定がgateオブジェクトへ送られてからナンバーボックスからの数値を受け取るため、正常に条件のみを通過した数値が下のナンバーボックスへ反映され

MAX 7 サウンドプログラミング基礎10
P505 リスト化とリスト分離について。 ここでは、2パターンのリスト化、非リスト化オブジェクトをメモしておく。 まず、これまでも記述したが、数値をリスト化するには、主にpackオブジェクトを用い、またpack内のリストを個別に出力するにはunpackオブジェクトを用いる。 しかしながら、packオブジェクトはbang入力時に受け入れられるリストはその時のもののみであるのに対して、threshオブジェクトはアーギュメント値に指定されたmsec内に受け取った数値をまとめてリスト化することが可能である(※ちなみにsymbolの入力は不可)。 例えば、下の図においては、99という最初のメッセージを、それぞれthresh400,thresh1000オブジェクトが受け取るわけであるが、各オブジェクトには、0secで受け取るもの(黄,青)と、pipeオブジェクトによって50msec後に受け取るもの(橙,緑)がある。 thresh400に関しては400msec内に受け取った数値がリスト化され、thresh1000に関しては1秒内の数値がリスト化されるため、結果

MAX 7 サウンドプログラミング基礎9
p.498 さて、MAX上で音を鳴らすための基本構造は、オシレーターの決定、周波数の決定、ボリュームの決定、そしてその数値をアナログに変換するためのDigital Analogue Converterであるdacを繋げる手順となる。 今回はそのdac~オブジェクトについて。 maxにおいて、同時に複数のパッチを開いて作業をすることは頻繁にあることである。 また、その各パッチにおいてdacを用いてサウンドプログラムを作っていることも多々あるわけであるが、max上で普通にdacオブジェクトを使って音を出そうとすると、デフォルトでは同時に現在開かれているパッチ上のdacが一斉にON状態になってしまい、限定的に使用できない。 これは非常に使いづらい。 そこで、聞きたいパッチだけ聞けるようにAudioのON/OFFを設定しておきたい。 使用するのは、startwindowというメッセージである。これを、dac~オブジェクトに直接つなげ、メッセージを送るだけで良い。 そうすると、右下のマスターボリューム表示がオレンジ色に点灯する。これが現在のパッチのみ音量O

MAX 7 line~オブジェクトと音設定2
番外編〜その2〜 以前投稿したline~オブジェクトについて、現在進んでいるオーディオ処理項目匂いて改めて重要な点に気付いたのでメモしておく。 内容は、line~オブジェクトによるクリップノイズの回避についてである。 下のようなmtof(MIDI to Frequensy)プログラムを作成し、functionオブジェクトによって音のエンベロープ 設定を行う。 さて、ここでは、エンベロープで書かれた信号をline~オブジェクトに送るわけである。エンベロープオブジェクトについては改めてこの先記事を作っていくが、描かれたエンベロープ情報は第2アウトレットからリスト表示と鳴って出力される。 しかしそのままだと、右図のように、最初のポイントのrange(y座標)とその次のリストが同時に出力されるため、急なボリューム変化によって波形の不連続が生じ、結果よしてクリックノイズが発生してしまう。 どういうことかというと、すなわちその下に表すように、出発点をゼロに設定していたとして、0とその次の数値がほぼ同時に入力されるため、本来のlineオブジェクトの現地点から〇

MAX 7 right-to-left問題
前回投稿した基礎⑧における、ドットのカラーが一つ連れて反映される問題についての解答が出たので載せておく。 キーになるのはやはりright-to-leftの仕組みであった。 まず、ドットのカラーが反映される状態というものを考えなければならない。 lcdオブジェクトが、paintovalメッセージからドットの座標リストを受け取る時(というのは、そのbangが発動する前)に、カラーやサイズなどの情報は前もってlcdへ保存されておかなければならない)。 そうでなければ、次のbangまで反映されないのである。 すなわち、colorがpaintovalよりも右にあれば、最初のbangは一足先にlcdへ届いているが、cokorが左にあれば、paintovalがlcdに入力された直後に届けられるため、その数値はそのまま保存されて次のbangの際に発動されるというわけなのである。

MAX 7 サウンドプログラミング基礎8
8 p.292〜295 前回投稿したgateやswitchオブジェクトは、toggleオブジェクト等によって動作を設定していたが、それはエアコンのスイッチを手動で入れたり、切ったりすることに例えられる。 一方、温度計によってエアコンを制御すれば、自動的に適切な温度に室温を保つことが出来る。 このような一定条件に基づく判断を条件判断と呼び、それによって何らかの動作を行うことを条件処理と呼ぶ。 条件処理を行うためには、次のような条件演出オブジェクトが利用できる。 == 等しい != 等しくない < より小さい <= 等しいか小さい > より大きい >= 等しいか大きい ==オブジェクトの場合は、アーギュメントで指定した数値または、第2インレットに入力された数値と、第1インレットに入力された数値を比較して、等しければ1を、そうでなければ0を出力する。理論用語に置き換えると、1は”真”を、0は”偽”を表す。 また、二つの条件演算の結果を総合的に判断することがある。MAXで論理演算を行うためのオブジェクトは以下の通りである。 && かつ(論理積・

MAX 7 サウンドプログラミング基礎7
p.288〜292 ・GSwitch/gateオブジェクト メッセージの流れを制御するオブジェクトとして、 Gswitchオブジェクトと、 Gswitch2オブジェクトがある。 まず、GSwitchオブジェクトに関しては、第1インレットへbangまたは0か1の数値(Toggleオブジェクトに関しては、オンで1、オフで0が出力されている)を受け取ることで、 回路が繋がっている方のインレットからのメッセージをそのまま出力することが出来る。 あるいは、直接グラフィック部分をクリックすることでの変更も可能だ。 switchオブジェクトもまた、メッセージの入力を選択できるオブジェクトであるが、初期値または第1インレットに0が入力された場合には、第2インレット以降のどのインレットからも入力を受け付けない。 そして、1が入力される場合には第2インレット、2の場合は第3インレットからの入力を受け付けることができる。 また、アーギュメント内の数値によってインレットの数を指定することも出来る(省略の場合は2となる)。 次に、GSwitch2オブジェクトに関して。 こ