MSPの動作

MaxのパッチとMSPの「シグナルネットワーク」


イントロダクション

Maxオブジェクトは、パッチコードを通してお互いにメッセージを送ることによって通信しています。これらのメッセージは、ユーザによるアクション(マウスクリック、MIDIノートの受信等)への応答として、あるいはイベントが起ることが予定されている場合(metro、delay等)に、特定の瞬間に送られます。

MSPオブジェクトは、同じようにパッチコードによって接続されますが、それら相互の通信はその概念から違っています。MSPオブジェクトは、メッセージを送るために経路を確立するというよりは、むしろ接続されたオブジェクトの間の関係を確立するものであると言えます。そして、その関係はすべての瞬間瞬間に必要なオーディオ情報を計算するために使用されています。このMSPオブジェクトの形状は「シグナル・ネットワーク」として知られています。

次の例は、メッセージが送られるMaxパッチと、常に関係が確立され続けているシグナルネットワークの違いを示しています。

Maxメッセージは特定の瞬間に発生します。:MSPオブジェクトは絶えまなく通信しています

左のMaxの例では、number boxはfloatオブジェクトにストアされている数値0.75については何も知りません。ユーザがbuttonをクリックすると、floatオブジェクトはストアしている数値を送り出します。number boxは値0.75を受け取り、表示し、送り出すだけです。しかし、右のMSPの例では、シグナルネットワークの一部として接続されている各々のアウトレットは、絶えず方程式のために現在の値を与え続けています。そのため、特別なMaxメッセージが送られなくても、*‾オブジェクトは2つのsig‾オブジェクトからの出力を受け取っています。そして、*‾オブジェクトのアウトレットに接続されたどのオブジェクトも積の値0.75を受信しています。

MSPシグナル・ネットワークについて考えるためのもう一つの方法は、Maxより速い(オーディオ)レートで実行されるパッチの一部とみなすことです。Maxやユーザがパッチのシグナル部分に直接影響を及ぼすことができるのはミリ秒単位でだけです。MSPによる実行及び計算はこれらのミリ秒のインターバルの間で起こります。このように(非常に速いパッチとして)シグナルネットワークを考える場合でも、MSPオブジェクトが、メッセージ「送信」し「受信」し続けていると考えることは意味のあることです。(たとえ、これらのメッセージがMaxが理解できない位速く送られているとしてもです。)そのため、send、receive、input、output、といった、標準的なMaxの用語を、MSPオブジェクトについても同様に使います。

オーディオ・レートとコントロール・レート

Maxにおける基本的な(そして最小の)イベントのスケジューリング時間の単位はミリ秒(0.001秒)です。この速さ(毎秒1000回)は、一般にシンセサイザのような外部デバイス、またはQuickTimeムービーのようなビジュアル効果に対して使用するどのような種類のコントロールにおいても充分な速さです。

しかし、デジタルオーディオは、もっと速いレート(一般にオーディオの1チャンネルにつき毎秒44,100回)で処理されなければなりません。MSPはこれを処理を進める基準として扱い、オーディオの次の数ミリ秒を生成するために必要なすべての数値を計算します。これらの演算は、シグナルネットワークの形態に基づく各々のオブジェクトごとに行われます。

オシレータ(cycle‾)、及び他のオシレータ(phasor‾)によって制御されるアンプ(*‾)

この例では、周波数2000Hzのコサイン波オシレータ(cycle‾オブジェクト)は、スケールされた(サンプルごとに*‾オブジェクトの持つ数値を掛けられた)振幅を持ち、DAコンバータ(dac‾)に送られます。1秒ごとに、phasor‾オブジェクトからの(サブオーディオー低周波)ノコギリ波は0〜1まで増加する値による連続した傾斜を送り出します。この増加する値はオーディオ波形の各サンプル毎に*‾の右オペランドとして使用され、結果として2000Hzの音は1秒毎に無音状態から最大振幅まで直線的ににフェードインします。オーディオの各ミリ秒毎に、MSPはおよそ44のサンプル値(44,100Hzのオーディオサンプルレートを仮定した場合)を生成しなければなりません。そのため、サンプル毎に各オシレータから該当する値を探し、その2つの値を乗じて、出力サンプルを作り出さなければなりません。

多くのMSPオブジェクトはミリ秒で表される入力値を受け入れますが、その場合でも、オーディオ・サンプリングレートでサンプルを計算しています。Maxメッセージはずっと遅く伝わり、その速さは、しばしば「コントロール」レートと呼ばれます。事実上、2つの違った速さの動作が存在すると考えることは、役に立つでしょう。:Maxのミリ秒単位のスケジュールによる、遅い「コントロール」レート、そして、より速いオーディオ「サンプル」レートです。

ノート:Maxでは、時間を浮動小数点によってミリ秒単位で指定することができるので、スケジューラの解像度はどのくらいの実行速度によるかによって変化します。正確なコントロールレートは、後で簡単に触れる多くのMSP のセッティングによって設定されます。しかし、スケジューラで実行される「コントロール」機能を使ってオーディオを処理することは、MSPの専用のオーディオオブジェクトを使用する場合に比べて、はるかに非効率的です。

MaxとMSPのリンク

MaxとMSPのリンク(そして、コントロールレートとオーディオレートの変換)のために、いくつかのMSPオブジェクトが特に用意されています。これらのオブジェクト(例えばsig‾やline‾)は、インレットでMaxメッセージを受取りますが、アウトレットはシグナルネットワークに接続されます。;また、逆に、いくつかのオブジェクト(例えばsnapshot‾など)はシグナルネットワークに連結されていて、シグナルネットワークの特定の点での値を見る(peekする)ことができます。(ただし、1ミリ秒に1回の速度でしかできません。)

Maxメッセージをシグナルネットワークに供給、またはシグナルからMaxメッセージを獲得します

これらのオブジェクトは非常に重要です。それは、Max及びユーザがシグナルネットワーク内で起こることを直接コントロールできるようにするからです。

シグナルの振幅に関するユーザ・インタフェース・コントロール

いくつかのMSPオブジェクトのインレットはシグナルとMaxメッセージの双方を入力として受け取ることができます。それらはシグナルネットワークの一部として接続され、Maxメッセージによる命令や変更をもまた受け取ります。例えば、dac‾(デジタル−アナログコンバータ)オブジェクトは、オーディオシグナルの演奏のオン/オフを、Maxメッセージのstartとstopによって切り替えます。

いくつかのMSPオブジェクトはオーディオシグナルとMaxメッセージを同じインレットで受信できます

そして、cycle‾(オシレータ)オブジェクトは周波数をMaxのfloatまたはintメッセージで受け取ることができますが、また、周波数を他のMSPオブジェクトから受け取ることもできます。(しかし、両方を同時に行うことはできません。なぜなら、オーディオ入力は絶えず値を供給し続けていると考えられるので、floatやintのメッセージは直ちに置き換えられてしまうからです。)

いくつかのMSPオブジェクトはMaxメッセージまたはシグナルを同じ目的のために受信できます

このように、Maxパッチ(または、サブパッチ)がMaxオブジェクトとMSPオブジェクトの双方を含むことができるということがわかります。構成をわかりやすくするために、シグナルネットワークのようなまとまりを持つプロセスを、他のMaxパッチからは1つのオブジェクトとして見えるようなサブパッチにカプセル化することは、しばしば役に立ちます。

カプセル化すると、Maxパッチ内の関係が明白になります

MSPの限界

これまでの説明から、ディジタルオーディオ処理がたくさんの「ナンバクランチング(数値演算処理)」を必要とすることは明らかです。コンピュータは、サウンドのチャンネル1つにつき毎秒数万のサンプル値を生成しなければなりません。そして、各々のサンプルはシグナルネットワークの複雑さによって、多くの演算を必要とします。さらに、「リアルタイム」オーディオを作り出すためには、サンプルは少なくとも演奏されるのと同じ時間で計算されなければならないのです。 

この複雑なリアルタイム・サウンド・シンセシスを、汎用パーソナルコンピュータで行うことは、PowerPCのような十分に速いプロセッサが導入されるまでは、全く問題外でした。しかしPowerPCでさえ、このタイプのナンバクランチングはプロセッサの多くの対応を必要とします。そのためコンピュータがMSPで処理できる量の限界を認識していることは重要なことです。

MIDIシンセサイザとは異なり、MSPはコンピュータがリアルタイムで演算するには複雑すぎるようなものでも設計できるほどの柔軟性を持っています。その結果オーディオの歪み、コンピュータのレスポンスの低下、また極端な場合にはクラッシュを引き起こします。

コンピュータによってプロセッサの処理能力は様々であり、可能なシグナルネットワークの構成は非常に多様なので、オーディオ処理の複雑さがMSPが扱えるものであるかどうか正確に述べるのは難しいことです。ここでは、いくつかの一般的な原則を示します。

* コンピュータのCPUがより速ければ、MSPのパフォーマンスは向上します。PowerPC 604または、より新しいプロセッサ を使ったコンピュータを強く推薦します。PowerBook5300シリーズのような古いPowerBookは特に、MSPを実行するのに適していないので推薦できません。

* Maxアプリケーションにより多くのRAMを割り当てることによってMSPで利用できるバッファメモリを増やすことができ、より多くのオーディオ・データを取り扱うことができます。

* 速いハードディスクと速いSCSI接続は、オーディオ・ファイルの入出力を改善します。とはいえ、MSPはほとんどのコンピュータ上でおよそ8トラックまで問題なく扱えます。

* アップルトークや、プロセッサの時間を使う他の同様な処理をを切ることによって、MSPのパフォーマンスを改善することができます。ファイル共有や、他のネットワーク集中型の他のアップルトーク処理は、サウンドマネージャを使用している場合MSPをフリーズさせる可能性があり、出力にクリック音を生じます。

* オーディオ・サンプリングレートを減らすことは、MSPが計算しなければならない、与えられたサウンドの数値の量を減らすことになります。これは、パフォーマンスの改善(低いサンプリングレートは高い周波数のレスポンスを劣化させますが)につながります。オーディオサンプリングレートのコントロールについては、「オーディオ入出力」の章で論議されます。

MSPインストゥルメントを設計する場合、いくつかのオブジェクトは、他のものより集中したコンピュータの使用を必要とするということを心に留めておかなければなりません。シンプルな少しの演算命令だけを行うようなオブジェクト(例えば、sig‾、line‾、+‾、-‾、*‾、phasor‾など)はコンピュータにとっての負担は多くありません。(しかし、/‾はより負担がかかります。)ファンクション・テーブルから数値を探したり、値の補間を行うようなオブジェクト(cycle‾等)はあまり多くの計算を必要としないので、同様に、あまり負担にはなりません。最も負担の大きいオブジェクトは、サンプル毎に多くの計算を必要とするもの:フィルタ(reson‾、biquad‾)、スペクトルアナライザ(fft‾、ifft‾)、そしてplay‾、groove‾、comb‾、tapout‾といったオブジェクトで、パラメータを連続したシグナルでコントロールする場合です。処理の効率については、チュートリアルで更に論議されます

ノート:パッチがどの程度プロセッサの時間を費やしているかを見るには、DSPステータスウィンドウの「CPU Utilization」を参照してください。これは、OptionsメニューからDSP STatus...を選択すると、DSPステータスウィンドウを開くことができます。

MSPの利点

PowerPCは汎用コンピュータで、商用のサンプラやシンセサイザのようにサウンド処理に特化されたものではありません。そのため、概して、それらと同じレベルのパフォーマンスを期待することはできません。しかし、必要とする特定のシンセシスやプロセッシングに合致した比較的シンプルなインストゥルメント設計を行う場合や、新しいオーディオ処理を実験する場合においては、非常に便利なインストゥルメント構築環境であると言えます。

1. ニーズにあったインストゥルメントの設計をしてみて下さい。たとえ、多くのオーディオ装置があるとしても、たぶん、あなたが行おうとイメージしていることのすべてを実行することはできないでしょう。スタジオで容易に得られないような特定のタスクを成し遂げる必要があるとき、それを自分自身で設計することができます。

2. インストゥルメントを作り、その結果を聞いてみて下さい。非リアルタイムなサウンドシンセシスプログラムでは、望んだ方法でサウンド生成をするように考えられたインストゥルメントを定義し、それをコンパイルし、その結果をテストし、多少の調整をし、再コンパイルをし、‥‥といった手順になります。MSPでは、インストゥルメントを作りながら、変更したものを聞くことができ、プロセスをよりインタラクティブにします。

3. 体を使ったコントロールと、その結果としてのオーディオの関係を作り出してみて下さい。多くの商用インストゥルメントでは、リアルタイムにパラメーターを変更することができないか、複雑なMIDIコントロールのセットによってだけ変更可能です。Maxでは、MSPシグナルネットワークで変更したいパラメータそのものに、簡単にMIDIデータを接続でき、MIDIによってコントロールしているサウンドの状況を正確に知ることができます。

4. オーディオ処理を、コンポジションやパフォーマンスに組み込んでみて下さい。あなたの音楽における仕事の中で、Maxを使って、自動的な作曲プログラムの創作やコンピュータを利用したパフォーマンスを行っているのならば、すぐにでもそのプログラムにオーディオ処理を取り入れることができます。あなたの声とレコーディング済みのサンプルとを、パフォーマンスの特定の時点で自由にクロスフェードする必要があったりしませんか?MSPオブジェクトを使って、このようなことを1つのMIDIメッセージをトリガとして実行できるようなMaxパッチを書くことができます。、

このようないくつかのアイデアは、MSPチュートリアルで説明されています。