Max/MSPで大掛かりなパッチを効率的に作るときの覚え書き。
Max/MSP はver.4.6想定。
--------------------------------------------------------------------------------
・一つのサブパッチの中にreceiveをいくつも作らない
  ・receiveの名前は、そのサブパッチの名前と同じものを一つだけつくる
  ・receiveでは[タグ 数値]や[タグ リスト]の形式で受けて、適宜必要に応じてrouteする
  ・結果的に、サブパッチのinlet/outletは0〜1個にとどめることになる
 
・サブパッチに名前をつける時は、役割名で名前をつける。機能名ではなく
  例) ○ [p movieDistributer]
     × [p distbuteMovie]
・複数インスタンスへのメッセージ送信を行う時は、forwardを使う。
   アペンディックス"00"はダミーとする
  
・ある程度内容がfixされたサブパッチは、パッチャーオブジェクト化する。
   patcherと地続きなファイル名にすると、後で修正が必要になったときに両ファイルの間を行き来しやすい。
  例)
    [p documentsender]    // サブパッチ
    → [p_documentsender] // パッチャーオブジェクト
   
・パッチ中でメッセージを編集・加工する必要がある時はshellオブジェクトを活用する。
  ・forループ書く場合、リストの要素を1個ずつ繰り返し処理する場合などはシェルスクリプトで済ませた方が、テストもメンテナンスも圧倒的に楽。
・maxカーネルメッセージを使って、ポリモーフィズムを実践する。
  ・詳細が決まってないときに、とりあえず動かす場合にも使える。
  例)
   [; allplayers read test.mov]   // 同じクラスのインスタンスすべてに送信
   [; player01   read test.mov] // インスタンスを指定して送信
  
   [; allplayers vol 0.] // すべてのメディア制御オブジェクトのボリュームを0に設定する
       // jit.qt.movieなど。@でオブジェクト内部指定するよりハンドリングが楽になる
--------
■メモ
・パッチを開く時に、commandキーとshiftキーの両方を押しておくと、loadbangを無効化できる
・パッチ最上位で何も選択せずGetInfoすると、インクルードしているオブジェクトをmaxウィンドウに出力する