Chapter 15:
MSP 開発の基本

この後のいくつかの章では、MSP シグナル処理環境の API を使った、Max の シグナル処理エクスターナルの書き方について述べます。MSP エクスターナルは Max エクスターナルと非常によく似ていますが、シグナル処理に特有な2つの機能が追加されています。その第1は、1つ、または複数のオーディオバッファ上でシグナル処理を行うパフォームルーチン(パフォームメソッド)です。MSP は、オブジェクトのパフォームルーチンへの呼出しを、シグナルバッファによって連結されたDSPコールチェインに組み入れます。あなたが書く必要がある第2の追加メソッドは、MSP が DSP コールチェインを組み立て、あなたのオブジェクトに dsp メッセージを送信する際に呼び出されるもので、MSP に対しあなたのパフォームルーチンのアドレスと必要な引数を報告します。私たちはこれを、dsp メソッドと呼んでいます。

パフォームルーチンと dsp メソッドに加え、初期化を行うために必要な呼出しである、new instance と free というルーチンがあります。あなたがノーマルオブジェクトを書くか、ユーザインターフェイスオブジェクトを書くかによって、呼出しには2つのセットが存在します。しかし、dspメソッド、およびパフォームメソッドを書くことについては、ノーマルオブジェクトとユーザインターフェイスオブジェクトの間での違いはありません。

MSP ライブラリ

ここで述べられている MSP 関数は、Max Audio Library と呼ばれる共有ライブラリの中にありますが、これは、Max 4 / MSP 2 では Max/MSP アプリケーションの中に含まれています。この共有ライブラリはシグナル処理オブジェクトによって使用されるいくつかの関数とグローバルをエクスポートします。また、シグナルオブジェクトのグラフ構造を、関数呼出しのシリーズに変換し、オーディオ I/O およびインターフェイス、シグナルバッファの管理を取り扱います。

MSP プロジェクトを作る

あなたのソースファイルや、使用するリソースファイルに加え、次のようなファイルをインクルードする必要があります。

  • MaxAudioLib stub ライブラリ


  • MaxLib stub ライブラリ


  • InterfaceLib stub ライブラリ


  • MathLib (603-非互換だが、より高速な数学ルーチンを使いたい場合には、libmoto)


  • MSL ShLibRuntime.Lib (CodeWarrior 5 およびそれ以前のバージョンの場合には、MWCRuntime.Lib)


  • 新しいサウンドマネージャルーチンを使用したい場合には、SoundLib


これらは常に必要というわけではありあせんが、必要がないのに MathLib、や SoundLib をインクルードしてしまったとしても、何の問題もありません。そのため、これらをインクルードしておくのはうまい方法であると 言えます。

開発プロジェクトを作る際には、Chapter 2 を参照して下さい。とはいえ、ソフトウェア開発キットに含まれている MSP プロジェクトのサンプルの1つのコピーを修正するほうが簡単です。PPC プロジェクトの設定では、すべての適切なファイルがインクルードされ、あなたのオブジェクトの名前を除いては正しいセッティングになっています。あなた自身のプロジェクトを作成する(または、既存のプロジェクトを拡張する)場合、CodeWarrior のアクセスパス、あるいは MPW のインクルード変数に、MSP インクルードフォルダを追加しなければなりません。

プロジェクトリソースファイル

上に掲げたライブラリ、およびあなたの書いたソースファイルに加え、作法に則った MSP プロジェクトは最低2つの項目を含むリソースファイルを持っています。その第1は オブジェクトの assist メソッドによって用いられる STR# リソース(これに関して馴染みがない場合は、chapter 5 を参照して下さい)、そして68K の若干のコードを含む mAxL リソースです。ロードされる際、このコードはオブジェクトが 68K プロセッサで動作しないことを報告します。この動作を行なう mAxL リソースはソフトウェア開発キットの MSP includesフォルダにの中に含まれるnono.68K ファイルの中にあり、これを利用することができます。nono.68K を ResEdit で開き、mAxL リソースをあなたのプロジェクトのリソースファイルにコピーして下さい。その後、あなたのプロジェクトファイルでリソースを選択し、Resource メニューから Get Resource Info... を選んでください。リソース ID は特に重要ではありませんが、名前は "nono" からあなたのオブジェクトの名前に変更しなければなりません。68K Max は、mAxL リソースの名前を使ってあなたのオブジェクトを見つけ出します。

mAxL リソースを追加することによって、コレクティブや、スタンドアロンアプリケーションの内部にある場合でも、あなたの PowerPC オブジェクトを検索することができるようになります。MSP エクスターナルオブジェクトによって作られているスタンドアロンアプリケーションを見ると、その中に含まれる個々のエクスターナルごとに1つずつ、一連の小さな mAxL リソースがあることがわかります。