【Max】opendialogでファイル選択ダイアログを使う

Maxで他人にパッチを使ってもらう時に、オーディオファイルを読み込むのにopenメッセージなどではなく、ファイル選択ダイアログを使ってもらった方が分かりやすい場合があります。

ファイル選択ダイアログからファイルのパスを取得できるのが[opendialog]です。

使い方

[opendialog]にbangを出力すると

ファイル選択のダイアログが出現します。

ファイルを選択すると

第1インレットからパスのシンボルが出力されます。

キャンセルした場合

選択をキャンセルした場合、第2アウトレットからbangを出力されます。

“【Max】opendialogでファイル選択ダイアログを使う” の続きを読む

【Max】speedlimとqlimを使ってデータを出力するタイミングを固定する

使い方

[speedlim]と[qlim]は同じ動きをするので[speedlim]で紹介します。必要な方は[qlim]に読み替えてください。

基本的な使い方

[speedlim 間隔(ms)]で設定すると、その間隔でデータを出力します。

図は[metro]と[random]を使用して10 ms間隔で0~99の数値をランダムに出力しています。それを[speedlim]に接続すると、1,000 ms(1秒)ごとに制限されます。出力間隔時間内に送られたメッセージは直近のものが採用され、他は無視されます。

“【Max】speedlimとqlimを使ってデータを出力するタイミングを固定する” の続きを読む

【Max】urnで数値が重ならないランダム出力する

ランダムな数値を出力するオブジェクトとして[random]などがありますが、[urn]は数値が重ならないように出力します。

十二音技法で音階を自動で作る時など、音高が重ならずにランダムに音高を選択するので便利です。

使い方

[urn 限界値]で設定すると、限界値未満 (図では< 5) の数値でランダムに数値を出力されます。

bangを第1インレットに送ると数値が重ならないようランダムな数値を出力します。

設定された全ての数値が出力されると第1インレットからの出力はされなくなり、第2インレットからbangが出力されます。

“【Max】urnで数値が重ならないランダム出力する” の続きを読む

【Max】randomでランダムな数値を出力する

自分で数値を設定するのではなく、ランダムに数値を出力するオブジェクトが[random]です。

使い方

[random 範囲]のように設定すると範囲内でランダムに数値が出力されます。ここでの範囲は「0を含めた数」を意味するので、10を設定すると実際には0~9の数値が出力されます。

[random]にbangを送るとランダムに数値が出力されます。

範囲を変更する

第2インレットに数値を入力すると、範囲が変更されます。

シード値を設定する

[random 範囲 シード値]でシード値を設定すると、起動時に毎回同じ数値の並びを出力します。図のように異なるオブジェクトでシード値を設定すれば、同じ値が出力されます。

第1インレットに「seed シード値」の形でメッセージを入力しても設定ができます。

“【Max】randomでランダムな数値を出力する” の続きを読む

【Max】drunkを使って少しずつランダムに出力する

[drunk]は指定した値以下で、bangを受けるたびにランダムに指定したステップ分ランダムに増減します。

徐々にパラメータが変化していくような表現をする場合に便利です。

使い方

[drunk 最大値 ステップ]で指定

初期値は最大値の半分から始まります。

ステップに指定した数値分ランダムに増減します。同じ値に推移するのを1とカウントするため、1増減したい場合「2」、2増減したい場合「3」を設定します。

ステップを重複させない

ステップをマイナスの数値で指定すると、数値が重複しないように出力されます。

初期値を設定する

「set 初期値」のメッセージで初期値を変更できます。

シード値を設定する

「seed シード値」のメッセージでシード値を設定できます。複数のdrunkを異なる値にする場合、同じランダム挙動を求める場合に使えます。

【Max】buddyを使ってデータが揃うまで出力を待つ

[buddy]は全てのインレットに入力があるまで出力をしないオブジェクトです。

Maxでは殆どのオブジェクトが第1インレットにデータが入力されると出力します。そのため、2つのデータを入力したい場合は先に第2インレットに入れてから第1インレットに入れる必要があります。

しかしどうしても、第1インレットへ先にデータが送られる処理ができることもあります。そのような時に[buddy]を使用すると便利です。

基本的な使い方

[buddy]はどちらかにデータが揃うまで出力をしません。どちらが先に入力されてもOKです。

出力は右から順になりますが、インレットとアウトレットの番号は共通しています。

複数の入出力

[buddy イン・アウト数]を設定すると3以上のイン・アウト数を設定できます。使い方は上と同じです。

【Max】JavaScriptからパッチ・コードを操作する

前回に引き続き、JavaScriptでの操作を学んでいきましょう。

Maxの[js]オブジェクトからはJavaScriptを使用してパッチの操作ができます。今回はパッチ・コードを繋いだり外したりしてみましょう。

パッチ・コードの操作

「connect」メッセージを送るとオブジェクトを生成してパッチ・コードを繋げ、「disconnect」で外す処理を学んでいきます。

パッチ・コードを繋げる

「connect」メッセージが来た場合の処理を書いていきます。

function connect(){
	a = patcher.newdefault(50,50,"toggle");
	b = patcher.newdefault(50,100,"toggle");
	
	patcher.connect(a,0,b,0);	
}

メッセージをトリガーにしたい場合はfunctionのメソッド名をその名前にします。今回は「connect」メッセージが来た場合に操作したいので、function connect()を使用します。

aとbというオブジェクトを生成し、connect()でa,bを接続します。接続するオブジェクトは、

connect(アウト・オブジェクト,アウトレット番号,イン・オブジェクト,インレット番号)

で指定します。今回はa,bともに第1アウトから第1インに接続しています。

“【Max】JavaScriptからパッチ・コードを操作する” の続きを読む

【Max】JavaScriptからオブジェクトを生成する

大量のオブジェクトを作る場合JavaScriptを使用すると便利です。

bangが送られたらオブジェクトを生成するパッチを作ります。

bangで反応するメソッドを書く

function bang(){
	
}

function bang()を記述し、bangが入力された場合のスクリプトを書いていきます。

“【Max】JavaScriptからオブジェクトを生成する” の続きを読む

【Max】jsオブジェクトでJavaScriptを使う

Maxは [js]オブジェクトでJavaScriptを扱えます。配列やforのようなMaxではオブジェクトの数が膨大になるような処理は、JavaScriptに任せるとパッチが簡素になります。

jsオブジェクト

[js]オブジェクトを配置してみましょう。

[js ファイル名]のようにアーギュメントを指定します。今回はtest.jsというファイル名にします。

オブジェクトをダブルクリックするとテキストエディタのウィンドウが開きます。

Menu > File > Save As… でtest.jsを保存します。

test.jsと同じ階層にMaxパッチも保存してください。

“【Max】jsオブジェクトでJavaScriptを使う” の続きを読む

【Max】2点間の距離と角度を求める

UI

今回は[nodes]を使用します。

準備

オブジェクトを配置したらインスペクターを開いてください。

Nodes > Number of Nodesを「2」に、

nodes > Node Sizesは「0. 0.」にします。

この2つのノードを使用し、距離と角度を出していきます。

“【Max】2点間の距離と角度を求める” の続きを読む