UI作成をbpatcherを使って賢く便利に

bpatcherのめんどくさくて賢い使い方をまとめました。

patcherのようにパッチ内部にbpatcherを埋め込む

bpatcherはサブパッチの内容を表示しつつ、 そのパッチの機能を利用することができるオブジェクトだが、 普通のpatcherのように親となるMaxパッチにサブパッチを埋め込むことができる。

方法は、インスペクタの Embed Patcher in Parent にチェックを入れるだけ

bpatcher作成時に

bpatcher name @embed 1

でも可能

埋め込まれたサブパッチを編集するには

右クリックメニューから Object -> New view of Embedded Patcher を選択し

表示されたサブパッチを編集すると反映される

引数をサブパッチに与える

patcherで引数を利用するにはpatcherargsの出力を利用する必要があったが、 bpatcherでは#1 #2 #3...という埋め込み型の引数を利用することができる。

別ファイルのパッチをサブパッチとして読み込む場合に利用可能だったものが、 内包するパッチでも利用できる。

インスペクタの Argument(s) を編集すると

スペース区切りで左から#1 #2 #3... にそれぞれの値が代入される

引数をsend/receiveの名前にする

send/receiveの名前も引数で与えることができる。

引数に value1 を与えているので s value1になっている

内部で用いるsend/receiveの名前を一意にしたい場合は#0を用いればよいが、 同じ処理をするパッチが複数必要で、それぞれbpatcher内外でsend/receiveを用いたい時にこの方法は有効。

#0を用いてしまうと毎回名前が変化してしまうため、内外でのsend/receiveは困難になる。

この程度ならbpatcheroutletを作るだけでもよいが、 それでは難しい場合もある。

サブパッチに自分の引数をアレンジして利用する

bpatcherの内部にbpatcherを作るといった事はもちろん可能で、 それぞれ引数を利用することも可能。

そしてサブパッチの引数に自身の引数を利用することができる。

パッチ構成

  • パッチ
    • bpatcher parent
      • r #1_child_number(r parent_child_number)
      • bpatcher #1_child(bpatcher parent_child)
        • flonum
        • s #1_number(parent_child_number)

プレゼンテーションモードでサブパッチを展開する

open in presentation にチェックが入っているサブパッチはプレゼンテーションモードで開かれる。 内部埋め込みされているサブパッチも Command + Shift + i でパッチャーインスペクタを開き、 opent in presentation にチェックを入れた後、再度パッチを開き直すか、bpatcherをコピーすると プレゼンテーションモードでサブパッチが表示される。

埋め込んだサブパッチをプレゼンテーションモードで表示している例。 もちろんbpatcher自体をプレゼンテーションモードに登録すれば、メインパッチのプレゼンテーションモードにも表示される。

UI部分を含めてサブパッチを作り、プレゼンテーションでUIだけ表示していろんなパッチで使いまわすことも可能。