Max/MSPから他のアプリケーションに連携する場合, OSCを使うと
処理も軽く, 送受信で処理がブロックしないので, 扱いやすいといいことづくめですが,
連携先のアプリケーションがOSCに対応していることが必須条件です.
連携先がOSCに対応していない場合はUnixコマンドでの連携を検討することになります.
aka.shell オブジェクト を使うと,
Max から Unix コマンドをたたけるようになるので, コマンドラインをインタフェースとして外部アプリケーションと連携することができます。
aka.shell オブジェクトの基本的な使用方法
添付のパッチで基本的な使い方を紹介します.
詳細はパッチ中のコメントを参照してください.
- OS 組込コマンドの使用
- Mac OS X : afplayを使った音声再生
- AppleScript の使用
サンプルパッチ
以下のコード片をテキストファイルに保存し, 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 オブジェクトが存在し, ほぼ同等の機能を持っています.