top of page

MAX 7 サウンドプログラミング基礎10

P505

リスト化とリスト分離について。

ここでは、2パターンのリスト化、非リスト化オブジェクトをメモしておく。

まず、これまでも記述したが、数値をリスト化するには、主にpackオブジェクトを用い、またpack内のリストを個別に出力するにはunpackオブジェクトを用いる。

しかしながら、packオブジェクトはbang入力時に受け入れられるリストはその時のもののみであるのに対して、threshオブジェクトはアーギュメント値に指定されたmsec内に受け取った数値をまとめてリスト化することが可能である(※ちなみにsymbolの入力は不可)。

例えば、下の図においては、99という最初のメッセージを、それぞれthresh400,thresh1000オブジェクトが受け取るわけであるが、各オブジェクトには、0secで受け取るもの(,)と、pipeオブジェクトによって50msec後に受け取るもの(,)がある。

thresh400に関しては400msec内に受け取った数値がリスト化され、thresh1000に関しては1秒内の数値がリスト化されるため、結果、[99 99] 、[99 99]という二つのリストがそれぞれ出力されることになる。

さらに、packとthreshでは特筆すべき大きな違いがある。

それは、threshオブジェクトにおいては、出力されるのは常にright-to-leftに従って右端リストもしくはメッセージの順番から出力されるということである。

下の図においては、左側のオブジェクトでは、最右の105,350,2,そしてリスト1 50の順に出力されるが、右のpackにおいては、リストはそのまま入力された形の通りリスト化して出力されるのである。

また、packからthreshに入力される場合には、packからのリスト順はそのままであるが、複数のpackオブジェクトから入力される場合には、右端のpackリストから順番に出力されることとなる。

少しややこしいが、これらの違いは頭に入れておきたい。

ちなみに下でプリントされるpackthの値が、なぜ[350 105 0 1 50 2]と間に0が挟まっているのかというと、pack内のアーギュメント数値が3つのため、右端の第3インレットに数値が入力されていないため、そのまま0が反映されてある。また、リスト化されたものは第1・第2に別れるのと同じことなので、[1 50]で2つ、[2]が第3イントレット値として反映しているわけだ。

次に、リスト分離について。

こちらに関しては、unpackオブジェクトの場合、アーギュメント内に、分離したい数値の数だけ実数または整数を表記しなければならず、一度に大量のリストを分離するのが困難である。

それに対して、iterオブジェクトの場合は、入力したリストを一気にここに分離して出力することが可能である。

最新記事
アーカイブ
タグから検索
bottom of page