Max/MSPの技術ブログ【Max】opendialogでファイル選択ダイアログを使うMaxで他人にパッチを使ってもらう時に、オーディオファイルを読み込むのにopenメッセージなどではなく、ファイル選択ダイアログを使ってもらった方が分かりやすい場合があります。ファイル選択ダイアログからファイルのパスを取得できるのが[opendialog]です。使い方[opendialog]にbangを出力するとファイル選択のダイアログが出現します。ファイルを選択すると第1インレットからパスのシンボルが出力されます。選択をキャンセルした場合、第2アウトレットからbangを出力されます。opendialog【Max】speedlimとqlimを使ってデータを出力するタイミングを固定する使い方[speedlim]と[qlim]は同じ動きをするので[speedlim]で紹介します。必要な方は[qlim]に読み替えてください。間隔(ms)]で設定すると、その間隔でデータを出力します。ms間隔で0~99の数値をランダムに出力しています。ms(1秒)ごとに制限されます。出力間隔時間内に送られたメッセージは直近のものが採用され、他は無視されます。toggle【Max】urnで数値が重ならないランダム出力するランダムな数値を出力するオブジェクトとして[random]などがありますが、[urn]は数値が重ならないように出力します。十二音技法で音階を自動で作る時など、音高が重ならずにランダムに音高を選択するので便利です。数値でランダムに数値を出力されます。bangを第1インレットに送ると数値が重ならないようランダムな数値を出力します。設定された全ての数値が出力されると第1インレットからの出力はされなくなり、第2インレットからbangが出力されます。urn【Max】randomでランダムな数値を出力する自分で数値を設定するのではなく、ランダムに数値を出力するオブジェクトが[random]です。範囲]のように設定すると範囲内でランダムに数値が出力されます。ここでの範囲は「0を含めた数」を意味するので、10を設定すると実際には0~9の数値が出力されます。[random]にbangを送るとランダムに数値が出力されます。範囲を変更する第2インレットに数値を入力すると、範囲が変更されます。シード値]でシード値を設定すると、起動時に毎回同じ数値の並びを出力します。図のように異なるオブジェクトでシード値を設定すれば、同じ値が出力されます。シード値」の形でメッセージを入力しても設定ができます。random【Max】drunkを使って少しずつランダムに出力する[drunk]は指定した値以下で、bangを受けるたびにランダムに指定したステップ分ランダムに増減します。徐々にパラメータが変化していくような表現をする場合に便利です。初期値は最大値の半分から始まります。ステップに指定した数値分ランダムに増減します。同じ値に推移するのを1とカウントするため、1増減したい場合「2」、2増減したい場合「3」を設定します。ステップを重複させないステップをマイナスの数値で指定すると、数値が重複しないように出力されます。初期値」のメッセージで初期値を変更できます。シード値」のメッセージでシード値を設定できます。複数のdrunkを異なる値にする場合、同じランダム挙動を求める場合に使えます。toggle【Max】buddyを使ってデータが揃うまで出力を待つ[buddy]は全てのインレットに入力があるまで出力をしないオブジェクトです。Maxでは殆どのオブジェクトが第1インレットにデータが入力されると出力します。そのため、2つのデータを入力したい場合は先に第2インレットに入れてから第1インレットに入れる必要があります。しても、第1インレットへ先にデータが送られる処理ができることもあります。そのような時に[buddy]を使用すると便利です。基本的な使い方[buddy]はどちらかにデータが揃うまで出力をしません。どちらが先に入力されてもOKです。出力は右から順になりますが、インレットとアウトレットの番号は共通しています。イン・アウト数]を設定すると3以上のイン・アウト数を設定できます。使い方は上と同じです。Max/MSP【Max】JavaScriptからパッチ・コードを操作する前回に引き続き、JavaScriptでの操作を学んでいきましょう。Maxの[js]オブジェクトからはJavaScriptを使用してパッチの操作ができます。今回はパッチ・コードを繋いだり外したりしてみましょう。「connect」メッセージを送るとオブジェクトを生成してパッチ・コードを繋げ、「disconnect」で外す処理を学んでいきます。パッチ・コードを繋げる「connect」メッセージが来た場合の処理を書いていきます。patcher.newdefault(50,100,"toggle");patcher.connect(a,0,b,0);}メッセージをトリガーにしたい場合はfunctionのメソッド名をその名前にします。connect()を使用します。aとbというオブジェクトを生成し、connect()でa,bを接続します。接続するオブジェクトは、connect(アウト・オブジェクト,アウトレット番号,イン・オブジェクト,インレット番号)で指定します。今回はa,bともに第1アウトから第1インに接続しています。toggle【Max】JavaScriptからオブジェクトを生成する大量のオブジェクトを作る場合JavaScriptを使用すると便利です。bangが送られたらオブジェクトを生成するパッチを作ります。bang()を記述し、bangが入力された場合のスクリプトを書いていきます。[js]オブジェクトでJavaScriptを扱えます。配列やforのようなMaxではオブジェクトの数が膨大になるような処理は、JavaScriptに任せるとパッチが簡素になります。jsオブジェクト[js]オブジェクトを配置してみましょう。ファイル名]のようにアーギュメントを指定します。今回はtest.jsというファイル名にします。オブジェクトをダブルクリックするとテキストエディタのウィンドウが開きます。test.jsを保存します。test.jsと同じ階層にMaxパッチも保存してください。Max/MSP【Max】2点間の距離と角度を求めるUI今回は[nodes]を使用します。準備オブジェクトを配置したらインスペクターを開いてください。この2つのノードを使用し、距離と角度を出していきます。