LoginSignup
7
7

More than 5 years have passed since last update.

UnixコマンドをインタフェースとしたMax-外部アプリ間の連携方法

Last updated at Posted at 2013-09-22

Max/MSPから他のアプリケーションに連携する場合, OSCを使うと
処理も軽く, 送受信で処理がブロックしないので, 扱いやすいといいことづくめですが,
連携先のアプリケーションがOSCに対応していることが必須条件です.

連携先がOSCに対応していない場合はUnixコマンドでの連携を検討することになります.

aka.shell オブジェクト を使うと,
Max から Unix コマンドをたたけるようになるので, コマンドラインをインタフェースとして外部アプリケーションと連携することができます。

aka.shell オブジェクトの基本的な使用方法


添付のパッチで基本的な使い方を紹介します.
詳細はパッチ中のコメントを参照してください.

  1. OS 組込コマンドの使用
  2. Mac OS X : afplayを使った音声再生
  3. AppleScript の使用

unixCommandTest.png

サンプルパッチ


以下のコード片をテキストファイルに保存し, Max で開いてください.

unixCommandTest.maxpat
{
    "patcher" :     {
        "fileversion" : 1,
        "appversion" :      {
            "major" : 6,
            "minor" : 0,
            "revision" : 0
        }
,
        "rect" : [ 25.0, 69.0, 937.0, 443.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-28",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 630.5, 132.0, 290.0, 24.0 ],
                    "text" : "3. AppleScriptの使用............................................"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-27",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 341.5, 132.0, 279.0, 24.0 ],
                    "text" : "2. MacOS X: afplayを使った音声再生............."
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-26",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 30.0, 132.0, 332.0, 24.0 ],
                    "text" : "1. OS組込コマンドの使用......................................."
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-25",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 54.0, 78.0, 131.0, 24.0 ],
                    "text" : "3. AppleScriptの使用"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-23",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 249.5, 200.0, 32.5, 18.0 ],
                    "text" : "ls -l"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-24",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 249.5, 221.0, 59.0, 20.0 ],
                    "text" : "tosymbol"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-22",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 146.5, 200.0, 85.0, 18.0 ],
                    "text" : "echo $SHELL"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-21",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 146.5, 221.0, 59.0, 20.0 ],
                    "text" : "tosymbol"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-19",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 54.0, 59.0, 225.0, 24.0 ],
                    "text" : "2. MacOS X: afplayを使った音声再生"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-18",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 249.5, 163.0, 38.0, 18.0 ],
                    "text" : "\"ls -l\""
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-17",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 142.0, 339.0, 70.0, 20.0 ],
                    "text" : "print stdout"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 9.0,
                    "id" : "obj-16",
                    "linecount" : 4,
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 341.5, 41.0, 194.0, 60.0 ],
                    "text" : "※二単語以上からなるコマンドを扱うには、\n ・二重引用符で囲って渡す\n ・[tosymbol]でシンボル化する\nで対処"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-15",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 146.5, 163.0, 93.0, 18.0 ],
                    "text" : "\"echo $SHELL\""
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-14",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 54.0, 41.0, 228.0, 24.0 ],
                    "text" : "1. OS組込コマンドの使用"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 14.0,
                    "id" : "obj-13",
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 30.0, 14.0, 265.0, 27.0 ],
                    "text" : "MaxからUnixコマンドを呼び出すテスト"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Hiragino Maru Gothic Pro W4",
                    "fontsize" : 12.0,
                    "id" : "obj-12",
                    "linecount" : 2,
                    "maxclass" : "comment",
                    "numinlets" : 1,
                    "numoutlets" : 0,
                    "patching_rect" : [ 354.0, 339.0, 217.0, 42.0 ],
                    "text" : "aka.shell の配布元\nhttp://www.iamas.ac.jp/~aka/max/"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-10",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 354.0, 252.0, 59.0, 20.0 ],
                    "text" : "tosymbol"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-9",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 354.0, 224.0, 254.0, 18.0 ],
                    "text" : "afplay /System/Library/Sounds/Submarine.aiff"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-8",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 641.0, 189.0, 59.0, 20.0 ],
                    "text" : "tosymbol"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-7",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 641.0, 163.0, 269.0, 18.0 ],
                    "text" : "osascript -e 'tell application \\\"iTunes\\\" to activate'"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-6",
                    "linecount" : 3,
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 354.0, 163.0, 203.0, 46.0 ],
                    "text" : "\"afplay /System/Library/Sounds/Submarine.aiff\""
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-5",
                    "linecount" : 4,
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 39.0, 339.0, 104.0, 60.0 ],
                    "text" : "\"lrwxr-xr-x@   1 root  wheel        11 May  3  2011 var -> private/var\""
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-4",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 84.0, 163.0, 52.0, 18.0 ],
                    "text" : "whoami"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-3",
                    "maxclass" : "message",
                    "numinlets" : 2,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 39.0, 163.0, 33.0, 18.0 ],
                    "text" : "pwd"
                }

            }
,           {
                "box" :                 {
                    "fontname" : "Arial",
                    "fontsize" : 12.0,
                    "id" : "obj-2",
                    "maxclass" : "newobj",
                    "numinlets" : 1,
                    "numoutlets" : 1,
                    "outlettype" : [ "" ],
                    "patching_rect" : [ 39.0, 298.0, 58.0, 20.0 ],
                    "text" : "aka.shell"
                }

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

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

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

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

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

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

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-21", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-22", 0 ]
                }

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-24", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-23", 0 ]
                }

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

            }
,           {
                "patchline" :               {
                    "destination" : [ "obj-2", 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-2", 0 ],
                    "disabled" : 0,
                    "hidden" : 0,
                    "source" : [ "obj-6", 0 ]
                }

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

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

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

            }
 ],
        "dependency_cache" : [          {
                "name" : "aka.shell.mxo",
                "type" : "iLaX"
            }
 ]
    }

}

参考


PureData には shell オブジェクトが存在し, ほぼ同等の機能を持っています.

7
7
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
7
7