MAX 7 サウンドプログラミング基礎2
p.159〜168
前回から少し空いた。本日は進めるだけ進めたいと思う。
ちなみに、家の近くのファミレスで作業している日もあり、今日がそうなのだがノートPCの電池がもつまでという限られた時間しか行えないため、PC電源用のモバイルバッテリーを買おうかと思っている。
・symbolメッセージ
seymbolメッセージは、「hello」や「clear」など、オブジェクトに対して何らかの動作を支持する役目をもつメッセージである。例えば、{lcd}オブジェクトという、ビットマップ画像を描くオブジェクトに[writepict]というsymbolメッセージを送ると、ファイル保存ダイアログが開き、画像をファイルとして保存することが可能となる。
メッセージのタイプ指定について
メッセージの前に、"int"や"float"、"list"、"symbol"を付け加えることで、メッセージタイプを明示的に指定することができる。
例えば、[symbol 98]というメッセージは、整数としてではなくsymbolとして出力される。また、[float 5]とすれば、実数の5.0として出力されることとなる。
メッセージ内の"$"に関して
$記号は、$1とすることでそのメッセージボックスに入力される数値やsymbolなどと同じ数値が入ることを意味する。
ただし、symbolメッセージや複数のlistメッセージを置き換える場合には、メッセージに"symbol Fightや"list 100 0.4"のように明示的にメッセージがどのような内容であることを示さなければ反映されない。(MAX6まで?7ではsymbolなしでも可能。)
また、複数の値がある場合には、$1、$2と続く数字を1つずつ上げていけばよい。※ちなみに、メッセージとして$という記号を使用したい場合は、\$(バックスラッシュ)とする。
右の図では、packに入っている数値、listに入っている文字はそれぞれ$1〜3まで順に反映されていくが、"color 15"のようにlist化、symbol化されていない内容のものに対しては、$は反映されず、colorにおいては、メッセージボックスの色を指定してしまうこととなる。
・append/ prependオブジェクト
appendは後に、prependは前に加えるオブジェクト。
左のプログラムでは、[Her name is]というメッセージに対して、その後ろに[Mimi]を加え、前に[set]を足し、結果[set Her name is Mimi]というメッセージを送ることとなる。
ちなみに、[prepend set]が先に来てしまうと、appendオブジェクトに対しての[set]が無効になってしまうため、メッセージボックスには何も反映されない。
・sprintfオブジェクト
下記の%で始まる特殊記号を用いることで、受け取ったメッセージをインレットの順番に置き換えることができるオブジェクトである。
⑴%dまたは%ld.....メッセージを整数として
⑵%f .....メッセージを実数として
⑶%s .....メッセージをシンボルとして
⑷%c .....メッセージをASCⅡ値として
また、"sprintf"オブジェクトは、複数の要素を一つの要素として扱う場合に便利である(図のように、%記号の後に"!"のような文字を売った場合、"hello"に直接つながった状態で)。
※ASCⅡ値とは、アメリカ規格協会が定めたデータ通信用の符号体系のことで、数字・アルファベット・制御符号を7ビット(0〜127の128段階)で表している。アスキー-コードと読む。
なお、sprintfオブジェクとでは、10進数→文字は可能だが、逆ができないため、spellオブジェクトを用いることで可能となる。