MSPの動作:
MaxパッチとMSPシグナル・ネットワーク

イントロダクション

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

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

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


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

左のMaxの例では、ナンバーボックスは float オブジェクトにストアされている数値0.75については何も知りません。ユーザが button をクリックすると、float オブジェクトはストアしている数値を送り出します。ナンバーボックスは値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オブジェクトから受け取ることもできます。(しかし、両方を同時に行うことはできません。)


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

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


カプセル化は、Maxパッチ内の関係を明白にします

MSPの限界

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

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

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

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

  • ・コンピュータのCPUがより速ければ、MSPのパフォーマンスは向上します。PowerPC 604または、より新しいプロセッサを使ったコンピュータを強く推薦します。5300シリーズのような古い PowerBook モデルは特にMSPを実行するためにふさわしくないため、推奨できません。
  • ・MSP は、多くのコンピュータで同時におよそ 8 トラックを問題なく処理することができますが、速いハードディスクと速いSCSI接続によってオーディオファイルの入出力が改善されます。
  • ・バックグラウンドで実行されるプロセス(ファイル共有など)をオフにすることによって、パフォーマンスが向上します。
  • ・オーディオ・サンプリングレートを減らすことは、MSPが計算しなければならない、与えられたサウンドの数値の量を減らすことになります。これは、パフォーマンスの改善(低いサンプリングレートは高い周波数のレスポンスを劣化させますが)につながります。オーディオ・サンプリングレートのコントロールについては、「オーディオの入出力」の章で説明しています。

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

注:パッチがどれくらいプロセッサタイムを使っているかを見るためには、DSP Status ウィンドウの CPU Utilization の値に注目して下さい。Options メニューから DSP Status... を選ぶことによって、このウィンドウが開きます。

MSPの利点

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

  1. ニーズにあったインストゥルメントの設計をしてみて下さい。たとえ、多くのオーディオ装置があるとしても、たぶん、あなたが行おうとイメージしていることのすべてを実行することはできないでしょう。スタジオで容易に得られないような特定のタスクを成し遂げる必要があるとき、それを自分自身で設計することができます。
  2. インストゥルメントを作り、その結果を聞いてみて下さい。ノンリアルタイムによるサウンド合成プログラムでは、必要な方法でサウンド生成をするように考えられたインストゥルメントを定義し、それをコンパイルし、その結果をテストし、多少の調整をし、再コンパイルをし、等の手順となります。MSPでは、インストゥルメントを作りながら、変更したものを聞くことができ、プロセスをよりインタラクティブにします。
  3. 体を使ったコントロールと、その結果としてのオーディオの関係を作り出してみて下さい。多くの商用インストゥルメントでは、リアルタイムにパラメーターを変更することができないか、複雑なMIDIコントロールのセットによってだけ変更可能です。Maxでは、MSPシグナルネットワークで変更したいパラメータそのものに、簡単にMIDIデータを接続でき、MIDIによってコントロールしているサウンドの状況を正確に知ることができます。
  4. オーディオ処理を、コンポジションやパフォーマンスに組み込んでみて下さい。あなたの音楽における仕事の中で、Maxを使って、自動的な作曲プログラムの創作やコンピュータを利用したパフォーマンスを行っているのならば、すぐにでもそのプログラムにオーディオ処理を取り入れることができます。あなたの声とレコーディング済みのサンプルとを、パフォーマンスの特定の時点で自由にクロスフェードする必要があったりしませんか?MSPオブジェクトを使って、このようなことを1つのMIDIメッセージをトリガとして実行できるようなMaxパッチを書くことができます。、

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

参照

オーディオ I/O MSP のオーディオ入出力