Maxとjs

maxの中でのjsの書き方まとめ.これだけわかっていればだいたい書ける.
ちゃんとしたリファレンスが無いのがつらい.

 

入力/出力ポート数の定義

inlets = 1
outlets = 1

 

入力によって呼ばれる関数

function msg_int(){} //入力がintの時
function msg_float(){} //入力がfloatの時
function bang(){} //入力がbangの時
function anything(){} //入力がそれ以外の時

 

入力された値へのアクセス

方法1:引数

function msg_int(in){
  post(in)
}

方法2:arguments (packされたのを受信する時などに使う)

function msg_int(){
  post(auguments[0])
}

備考:インレットが複数ある場合

function msg_int(){
  if (inlet==0){
    //
  }else if (inlet==1){
    //
  }
}

入力時に呼ばれる関数(例えばmsg_intとか)は,入力がどのinletポートから行われたとしても呼ばれるため,こういう書き方になる.効率悪いように見えるがこれしか無いっぽい.

 

出力

outlet ( outlet_number, value )
outlet ( outlet_number, [val1,val2] ) //配列で返す時.勿論unpackして取り出せる

 

send出力

glob = new Global(“hoge”) // グローバルオブジェクトを宣言
glob.tag_name = value // グローバルオブジェクトにデータを入れる
glob.sendnamed ( receive_object_name , tag_name) // それをreceiveオブジェクトに渡す

maxpat内で使うsendと同じようにreceiveオブジェクトに値を送れる.
直接値は送れない仕様らしく,グローバルオブジェクトを使って間接的にreceiveオブジェクトに値を渡す感じで書く.

 

maxobjへのアクセスと値の設定/取得

maxpat内のオブジェクトを取得できる.
下はScripting Nameを使ってmaxobjを取得する例.Scripting Nameはmaxpatのインスペクタ上で設定できる

var something_maxobj = patcher.getnamed(“scripting_name”)

something_maxobj.set ( value )

var hoge = something_maxobj.getvalueof()

とても便利.jsオブジェクトとmaxpat上のuiオブジェクトの値を同期させるのに使える.
http://qiita.com/okupara/items/b70dc76332dd69be0ab5

パッチャーウィンドウ制御

まだ使ったことがない.

 

デバッグ

post()

 

おまけ:jsの自動更新

autowatch = 1

セーブされるとjsオブジェクトがスクリプトを自動で読み込み直す.これを書かないとセーブするたびにopenしなくてはいけなくて不便だった,が,max7からは自動でautowatchする設定になっている気がする.

0 Comments

Leave a Reply

Your email address will not be published.