Object Oriented Programming(オブジェクト指向プログラミング)とは
Max/MSPは”オブジェクト”という名のボックスの接続、組み合わせによってプログラムを作り上げていくため、比較的オブジェクト指向という考え方が浸透しているソフトウェアですが、Maxのようにグラフィカルにオブジェクト同士をパッチ式で接続していくアプローチがオブジェクト指向と呼ばれるわけではありません。
オブジェクト指向とはオブジェクトと呼ばれる機能の部品でソフトウェアを構成させるものでありますが、一般的にポリモフィズム (多態性、多相性)、カプセル化、クラスの継承の機能や特徴を活用し作成の効率化をはかったプログラミング技法のことをいいます。
オブジェクト指向の場合、各オブジェクトごとの細かい仕組みを知らなくても、メッセージを送るとどのような結果をもたらすのかだけを把握さえしていれば、あとはそれらを相互に組み合わせるだけでプログラムを作成することが可能になります。
このことによる飛躍的な作業効率アップがMaxが多くのインスタレーションやコンサートの現場で利用される要因です。
オブジェクト指向において理解すべき仕組み
- オブジェクトに蓄えられる情報、データを表現する仕組み。
- 他のオブジェクトにメッセージを配送する仕組み。
- 受け入れ可能な各種メッセージに対応して、処理する事柄を記述する仕組み(メソッド)。
- オブジェクト間の関係を整理分類して系統立てる仕組み。
- 必要なオブジェクトを作成・準備する仕組み。
- 不要なオブジェクトを安全に破棄する仕組み。
今後のプログラミングの流れとしてはオブジェクト指向を補完するエージェント指向やアスペクト指向といった方法論や、Ruby、Python、Groovyといった動的言語 (Dynamic Language) もますます普及していき、コンピュータ音楽にも応用される事例が増えてゆくでしょう。
尚、スーパーコライダーやProce55ingなどテキストベースの言語ではオブジェクト指向的にプログラムを作成することも、手続き型言語的に作成することも可能となっています。
Object(オブジェクト)とは
オブジェクトとはプログラミングを専門にしていない音楽家にとってはなじみのない表現法ですが、例えばギターというと弾く、磨く、叩くなどの操作が考えられます。このような操作の対象を表現するのがオブジェクト(この場合ギター)だと言えます。
しかし、我々はギターの作り方、構造などを詳しく知らなくても演奏することが可能です。
同じようにMax/MSPプログラミングにおいては各オブジェクト自体のソースや構造を知らなくても操作法さえわかれば正しく利用することが可能です。このような点がオブジェクト指向プログラミングの最大のメリットでもあります。
上のプログラムはMax/MSPチュートリアルのNo.1、通称”Hello World”と呼ばれるプログラムです。プログラミング言語を学ぶにあたって多くの場合一番最初に動かすのが”Hello World”の文字列を標準出力するプログラムです。画面左下の緑枠で囲まれている[print]という箱がオブジェクトと呼ばれるものです。
(Hello!)に当たる部分はMax/MSPにおいてはメッセージと呼ばれます。
オブジェクトはメッセージを受け取り何らかの処理をするパーツです。その処理の方法はオブジェクトによって異なります。
Max Window
printオブジェクトはmessageオブジェクトやnumberオブジェクトから送信される内容を第一インレットで受信し、Max Windowに出力するオブジェクトです。この流れがMax/MSPプログラミングの最も基本的なパッチングになります。
各オブジェクト同士はワイヤーで連結することで関連づけることができ、どのような情報を受け取るとオブジェクトはどのような処理を行うのかは各々定義されています。
print.helpの画面
各オブジェクトの操作法はEditモードでオプションを押しながらオブジェクトをクリックすることで、Helpファイルが起動し必要情報を調べることができます。
このようなコンパクトなウインドウが開きます。
right-to-left, bottom-to-top
グラフィカルなオブジェクト指向プログラミング環境であるMax/MSPにおいて、処理の実行順序は案外わかりづらいものです。しかし、ここをあいまいにしてしまうと後に大きなプログラムを作った場合のデバッグに苦労することになります。
上の画像にあるようにオブジェクトは同時に信号を受け取った場合、どのような順番で処理を行うかがあらかじめMaxによって定義されています。
それがright-to-left, bottom-to-topの規則です。オブジェクトを配置する際は、視野性だけでなく実行順序も考えながら配置しなければならない点がMaxの特徴でもあります。
特にbangの実行順序はMaxのプログラミングにおいては把握しずらい箇所であり、バグの元になるため極力[trigger]オブジェクトなどを使用してbangが送信される順番を制御することが重要です。
triggerオブジェクトのインレットに接続されたbangメッセージを叩くと、右から順に処理が実行されます。これはオブジェクトのleft to rightの配置制限に関わらず同時刻に発生する複数のbangの実行順序を決定できます。
triggerオブジェクトのアウトレット数はtriggerの後に続くアーギュメントの数だけ出現します。
上の例の場合はb i f l s drizzle 2 0.5の8個のアーギュメントがあるため、アウトレットも8つ出現します。
triggerの実行結果はmax windowに表示されます。右アウトレットから順に実行されたことがわかるでしょう。
triggerオブジェクトとはアーギュメントによって特徴付けられたフォーマットでメッセージを右アウトレットから左アウトレットに向かって順番に実行していく機能を持ちます。
Max/MSP, オブジェクト指向プログラミング関連参考文献
Max 6+Gen
Cycling ’74/MI7 Japan |
Composing Music with Computers (Music Technology) Eduardo Miranda Focal Press 2001-06-13 |
Designing Audio Objects for Max/MSP and Pd (Computer Music and Digital Audio Series) Eric Lyon David Zicarelli A-R Editions 2012-10 |
Electronic Music and Sound Design – Theory and Practice with Max/Msp – Volume 1 Alessandro Cipriani Maurizio Giri Contemponet 2010-01 |
Introduction to Computer Music Nick Collins Wiley 2010-02-09 |
Computer Music: Synthesis, Composition, and Performance Charles Dodge Thomas A. Jerse Schirmer Books 1997-07-02 |
Designing Sound Andy Farnell The MIT Press 2010-08-20 |