LoginSignup
4
5

More than 5 years have passed since last update.

Max/MSP : ラベル変更できる print オブジェクトを作る

Last updated at Posted at 2013-12-15

Max/MSPの小ネタ。
パッチのデバッグでもっともよく使われるであろう [print] オブジェクトを取り上げます。

[print] オブジェクトのラベルは変えられない

引数(アーギュメント)を使って、Max ウィンドウ上のラベル (※1) を指定することは、
Max のチュートリアルNo.2で初出となっているとおり、マスターすべき初歩中の初歩ですが、
意外なことにパッチの実行時にラベルを変更する手段がありません。

printObject.png

[+] や [forward] といったオブジェクトでは set 123send foo といったメッセージをインレットに送ることで、パッチ実行中に処理対象を変更することができますが、このような使いかたが [print] オブジェクトでもできるとデバッグが効率的にできるのではないか (※2)

・・・ということで、リファレンスやフォーラム過去記事をあたってみましたが、それらしい事例やエクスターナルは見当たりませんでした (※3) 。

ラベル変更できる [print] オブジェクトがほしい

そうなると対処としては、

  • エクスターナルで実現する ( mxo もしくは mxj )
  • アブストラクションで実現する

という選択になってきますが、今回はアブストラクションとして使う想定でパッチを書いてみました。ひとまず処理の流れが書ければ mxo なり mxj 、js なりのコードに起こしやすいと思われるためです。

代替 print オブジェクトの使い方と内容

まず、使いかたはこんな感じ(画像)。
右インレットを増設して、ここで set newLabelName 的なメッセージを受け付けるようにします。

Screen shot 2013-12-16 at 1.56.30.png

次に、アブストラクションの中身(画像)。

Screen shot 2013-12-16 at 1.49.37.png

実装のメインは右インレットで受けたメッセージの取り回しです。

結局のところ[print] の引数を動的に変える、ことを [thispatcher] によるパッチスクリプティングで対処しています。

テストしていてうまく動かないケースがあったので、対症療法的に [pipe] や [delay] でタイミングの調整をしています(苦しい)。引数なしで [_print ] をつかうとラベルが "0" になってしまうのも苦しいところ。

注釈

※1: リファレンス中では "identifier" また "name of object" といった呼ばれかたをしているようです。
※2: たとえば、異なる引数を指定したアブストラクションをパッチ中で複数使ったり、[poly~] のパッチの動作を外側から観察したいときなど。
※3: Pd の print オブジェクトも同様で、右インレットや set メッセージの受け口は用意されていません。

パッチファイル

キャプチャにも使用しているパッチ(2つ)を添付します。

テストパッチ

_changeLabelTest.maxpat
{
    "patcher" :     {
        "fileversion" : 1,
        "appversion" :      {
            "major" : 6,
            "minor" : 0,
            "revision" : 0
        }
,
        "rect" : [ 38.0, 112.0, 574.0, 312.0 ],
        "bglocked" : 0,
        "openinpresentation" : 0,
        "default_fontsize" : 12.0,
        "default_fontface" : 0,
        "default_fontname" : "Arial",
        "gridonopen" : 0,
        "gridsize" : [ 15.0, 15.0 ],
        "gridsnaponopen" : 0,
        "statusbarvisible" : 2,
        "toolbarvisible" : 1,
        "boxanimatetime" : 200,
        "imprint" : 0,
        "enablehscroll" : 1,
        "enablevscroll" : 1,
        "devicewidth" : 0.0,
        "description" : "",
        "digest" : "",
        "tags" : "",
        "boxes" : [             {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-4",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 89.0, 204.0, 181.0, 18.0 ],
                    "text" : "put Ethel back in the refrigerator"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-2",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 172.0, 241.0, 73.0, 20.0 ],
                    "text" : "print aLabel"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 14.0,
                    "id" : "obj-10",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 53.0, 56.0, 359.0, 27.0 ],
                    "text" : "[print]の代替オブジェクトを使って、ラベルを変更する"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-8",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 325.0, 115.0, 132.0, 18.0 ],
                    "text" : "set ANOTHER_LABEL"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-6",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 325.0, 91.0, 111.0, 18.0 ],
                    "text" : "set ALTER_LABEL"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-3",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 89.0, 91.0, 181.0, 18.0 ],
                    "text" : "put Ethel back in the refrigerator"
                }

            }
,           {
                "box" :                 {
                    "color" : [ 1.0, 1.0, 0.4, 1.0 ],
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-1",
                    "maxclass" : "newobj",
                    "numinlets" : 2,
                    "numoutlets" : 0,
                    "patching_rect" : [ 172.0, 157.0, 129.0, 20.0 ],
                    "text" : "_print INITIAL_LABEL"
                }

            }
 ],
        "lines" : [             {
                "patchline" :               {
                    "destination" : [ "obj-1", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-3", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-2", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-4", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-1", 1 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-6", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-1", 1 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-8", 0 ]
                }

            }
 ],
        "dependency_cache" : [          {
            }
 ]
    }

}

代替 [print] オブジェクト。

_print.maxpat
{
    "patcher" :     {
        "fileversion" : 1,
        "appversion" :      {
            "major" : 6,
            "minor" : 0,
            "revision" : 0
        }
,
        "rect" : [ 207.0, 79.0, 867.0, 431.0 ],
        "bglocked" : 0,
        "openinpresentation" : 0,
        "default_fontsize" : 12.0,
        "default_fontface" : 0,
        "default_fontname" : "Arial",
        "gridonopen" : 0,
        "gridsize" : [ 15.0, 15.0 ],
        "gridsnaponopen" : 0,
        "statusbarvisible" : 2,
        "toolbarvisible" : 1,
        "boxanimatetime" : 200,
        "imprint" : 0,
        "enablehscroll" : 1,
        "enablevscroll" : 1,
        "devicewidth" : 0.0,
        "description" : "",
        "digest" : "",
        "tags" : "",
        "boxes" : [             {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-8",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 608.0, 380.0, 74.0, 24.0 ],
                    "text" : "// 後片付け"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-19",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 289.0, 65.0, 43.0, 18.0 ],
                    "text" : "set #1"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-9",
                    "maxclass" : "newobj",
                    "numinlets" : 0,
                    "numoutlets" : 1,
                    "outlettype" : [ "bang" ],
                    "patching_rect" : [ 289.0, 380.0, 65.0, 20.0 ],
                    "text" : "closebang"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-15",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 608.0, 328.0, 50.0, 24.0 ],
                    "text" : "// 接続"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-14",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 608.0, 130.0, 122.0, 24.0 ],
                    "text" : "// オブジェクト消去"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-12",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 608.0, 227.0, 122.0, 24.0 ],
                    "text" : "// オブジェクト生成"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-49",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 187.5, 130.0, 122.0, 18.0 ],
                    "text" : "script delete _print01"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-51",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 160.5, 328.0, 197.0, 18.0 ],
                    "text" : "script connect _inlet01 0 _print01 0"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-13",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 214.0, 255.0, 374.0, 18.0 ],
                    "text" : "script newobject newobj @text \"print #1\" @varname _print01"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-11",
                    "maxclass" : "newobj",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "bang" ],
                    "patching_rect" : [ 160.5, 301.0, 37.0, 20.0 ],
                    "text" : "del 4"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-10",
                    "maxclass" : "newobj",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 174.0, 175.0, 43.0, 20.0 ],
                    "text" : "pipe 2"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-3",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 131.0, 0.0, 223.0, 24.0 ],
                    "text" : "ラベル変更可能な [print] オブジェクト"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-84",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 3,
                    "outlettype" : [ "bang", "", "bang" ],
                    "patching_rect" : [ 160.5, 101.0, 46.0, 20.0 ],
                    "text" : "t b l b"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-78",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 174.0, 200.0, 90.0, 20.0 ],
                    "text" : "sprintf print %s"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-56",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 1,
                    "outlettype" : [ "bang" ],
                    "patching_rect" : [ 289.0, 41.0, 60.0, 20.0 ],
                    "text" : "loadbang"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-18",
                    "maxclass" : "newobj",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 174.0, 227.0, 373.0, 20.0 ],
                    "text" : "sprintf script newobject newobj @text \\\"%s %s\\\" @varname _print01"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-7",
                    "maxclass" : "newobj",
                    "numinlets" : 2,
                    "numoutlets" : 2,
                    "outlettype" : [ "", "" ],
                    "patching_rect" : [ 160.5, 76.0, 57.0, 20.0 ],
                    "text" : "route set"
                }

            }
,           {
                "box" :                 {
                    "comment" : "",
                    "id" : "obj-6",
                    "maxclass" : "inlet",
                    "numinlets" : 0,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 160.5, 41.0, 25.0, 25.0 ]
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-5",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 2,
                    "outlettype" : [ "", "" ],
                    "patching_rect" : [ 187.5, 380.0, 69.0, 20.0 ],
                    "save" : [ "#N", "thispatcher", ";", "#Q", "end", ";" ],
                    "text" : "thispatcher"
                }

            }
,           {
                "box" :                 {
                    "comment" : "",
                    "id" : "obj-4",
                    "maxclass" : "inlet",
                    "numinlets" : 0,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 131.0, 41.0, 25.0, 25.0 ],
                    "varname" : "_inlet01"
                }

            }
 ],
        "lines" : [             {
                "patchline" :               {
                    "destination" : [ "obj-78", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-10", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-51", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-11", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-13", 1 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-18", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-5", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-18", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-7", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-19", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-5", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-49", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-5", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-51", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-19", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-56", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-7", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-6", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-84", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-7", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-18", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-78", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-10", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-84", 1 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-11", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-84", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-49", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-84", 2 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-49", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-9", 0 ]
                }

            }
 ],
        "dependency_cache" : [  ]
    }

}
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5