オーディオ入出力

MSPでのオーディオ入出力


MSPとコンピュータのオーディオハードウェアのインターフェイスは、dac‾及びadc‾オブジェクト、または同様の機能を持っていてより使いやすいezdac‾及びezadc‾オブジェクトを経由することで行われます。デフォルトでは、MSPはアップルのサウンドマネージャをオーディオ入出力に用います。特別なオーディオハードウエアがなく、アプリケーション間でのオーディオのルーティングの必要もない場合は、特に設定をしなくてもサウンドマネージャドライバによってステレオ、全二重のオーディオ入出力環境が構築されます。

Max/MSPへのオーディオの入出力には、サウンドマネージャの他にも多くの方法があります。これらの方法は、各々「ドライバ」とよばれるものの使用を含んでいます。これは、実際には特別なタイプのMaxオブジェクトです。これらのドライバのいくつかは、サードパーティの(アップル製でない)オーディオハードウエア上でのMSPの使用を容易にします。他のものは、オーディオをMSPと他のアプリケーションとの間でやり取りすることができます。ノンリアルタイムドライバでは、MSPをディスクベースのオーディオプロセッシングとシンセシスシステムとして使用できます。これによって、CPUのリアルタイムな処理能力による制限を取り除くことができます。

MSPのオーディオドライバオブジェクトはMaxの"externals"フォルダの中の"ad"というフォルダにあります。これらのオブジェクトは必ず"ad"フォルダ(オーディオドライバ-audio driverを意味します)に置かなければなりません。それ以外の場合、MSPはこれらを検出することができません。

アプリケーション間のドライバは、Maxアプリケーション内の"audio stuff"フォルダにあります。これらのドライバを使用する場合には、指定された場所に移動させなければなりません。詳細については、この章の後の方で個々のドライバについて述べる中で説明します。

ノート:MSP1.xのオーディオドライバはMSP2では動作しません。MSP1.xのaudiodrivers"フォルダはもはや必要ありません。また、関連するオーディオドライバファイルをMaxアプリケーションのあるディレクトリに置いたり、Maxで使用するために再起動をしたりする必要もありません。ドライバはDSPステータスウィンドウで選択することで使用できるようになっています。(下記を参照して下さい)

それでは、MSPにおける一般的なオーディオ入出力について見ていくことにしましょう。この章の後の方では、MSPに含まれる特定のオーディオドライバについての検討を行います。まず、DSPステータスウィンドウについて、及びそれを使ってMSPがオーディオ入出力を扱うためにオーディオハードウエアの情報を得たりパラメータを設定したりする方法について述べたいと思います。

DSPステータスウィンドウ

MSPのすべてのグローバルなオーディオ・パラメーターは、DSPステータスウィンドウで表示されます。 DSPステータスウィンドウをオープンするには、ロックされたパッチャーウィンドウでdac‾またはadc‾オブジェクトをダブルクリックするだけです。あるいは、[Options]メニューから[DSP Status...]を選択してオープンすることもできます。

DSPステータスウィンドウには、MSPのオーディオ入出力のパラメータを設定するための一連のメニューとチェックボックスが並んでいます。これらの設定はすべて、パッチからも行うことができます(下記参照)が、DSPステータスウィンドウはカレントのオーディオ設定を分かりやすくモニタしてくれます。

ノート:MSP2では、DSPウィンドウは実際にはMaxパッチです(Maxのサブフォルダ"patches"の中の"DSP Status"が呼び出されます)。DSPステータスウィンドウのすべてのパラメータは、adstatusオブジェクトのインスタンスに連結されたメニューまたはチェックボックスに表示されます。adstatusオブジェクトは通常のMSPパッチの中で使用することができるので、特定のパッチのためにオーディオパラメータを明確に指定し、リストアすることができます。また、adstatusオブジェクトはカレントのCPU負荷、ベクタサイズ、サンプリングレート等の情報を得るためにも役立ちます。詳しくは、MSPリファレンスマニュアルのadstatusオブジェクトのページを御覧下さい。

DSPステータスウィンドウの一番上には、MSPのオーディオのオン/オフを切り替えるポップアップメニューがあります。他の方法でオーディオのオン/オフを切り替えると、メニューはカレントの状態を反映して更新されます。

2番目のポップアップメニューはMSPのためのオーディオドライバを確認し、選択することができます。特定のオーディオドライバについてはこの章の後の方で説明します。

None この設定は、MSPのオーディオ処理を遮断します。
SoundManager MSPのデフォルトのオーディオドライバで、アップルのサウンドマネージャとのインターフェイスになります。これは、コンピュータの内臓オーディオや、対応するソフトウェアでサポートされたサードパーティ製のハードウエアインターフェイスに使用できます。
ASIO ASIO(Steinbergによって開発されたクロスプラットフォームのハードウエア標準規格)をサポートするサードパーティ製オーディオインターフェイスを持っている場合、インターフェイスのASIOドライバのコピーをMaxアプリケーションと同じフォルダにある"ASIO Drivers"フォルダに置くことができます。このフォルダには必要なだけのASIOドライバを置くことができ、これらはDSPステータスウィンドウの"Driver"プルダウンメニューに"ASIO"という語に続けて表示されます。
ノート:オーディオインターフェイスがサウンドマネージャとASIOドライバの双方をサポートしている場合、ASIOドライバの使用を推奨します。サウンドマネージャでは使用できないサードパーティ製オーディオインターフェイスの拡張機能がASIOでは使用できるからです。
DirectConnect このドライバはオーディオをDigidesignのPro Toolsアプリケーションに入力(出力はできません)します。Max/MSPとPro Toolsの双方が実行されます。
ReWire このドライバはPropellerhenad Softwareによって開発された規格をサポートします。この場合、サウンド生成アプリケーション(クライアント)から、マルチチャンネルオーディオを他の処理、出力を行うアプリケーション(ミキサ)へ送ることができます。ReWireドライバを選択した場合、Max/MSPはReWireのクライアントアプリケーションとして機能し、ReWireをサポートするアプリケーション(Digital PeformerやCubaseなど)へオーディオを送ります。MSPのホストの
Rewireアプリケーション(Reasonなど)への使用は、rewire‾ オブジェクトを使用することで達成されます。
VST このドライバは、MSP-VSTプラグインの使用を可能にし、オーディオをMSPからVSTコンパチブルホストプログラムに送ります。MSPからVSTパラメータや同期情報とコミュニケートすることもできます。
NonRealTime このドライバは、MSPのノンリアルタイムモードでの動作を可能にします。シンセサイズやオーディオの処理をリアルタイムなプロセッサのパフォーマンスの制限なしに行うことができます。このドライバでは、リアルタイムのオーディオ入出力は使用できません。
いかなる場合でも、オーディオドライバは1つだけ選択することができます。MSPは各々のオーディオドライバの設定を別々にセーブし、Maxを再起動した時には、前回使用されていたオーディオドライバを再度呼び出します。

次の2つのポップアップメニューは、サウンドマネージャまたはASIOドライバを使用している場合にアクティブになります。サウンドマネージャドライバが選択されていると、ポップアップメニューでオーディオ入力ソースの変更ができ、オーディオプレイスルーの設定を可能にします。これらの設定はマッキントッシュモニタとサウンドコントロールパネルで変更することも可能ですが、MSPが起動している間はこれらのメニューによってしか設定できません。より詳しい内容については、後述のサウンドマネージャのについてのセクションを見て下さい。

ASIOが使用されている場合、ポップアップメニューでオーディオハードウエアのクロックソースを設定することができ、MIDI入出力をオーディオI/Oに優先させるかどうかを設定することができます。

DSPステータスウィンドウの次の3つのフィールドは、MSPがカレントで行っているシグナル処理の量をモニタしています。
CPU Utilizationフィールドは、コンピュータのCPUがどのくらいMSPのオーディオ処理に割り当てられているかについての概算を表示しています。PollチェックボックスはCPU Utilizationのオートポーリング機能(毎秒4回チェックされた時点で自動的に更新されます)のオン/オフ切り替えを行います。オートポーリングをオフにした場合、Updateボタンをクリックすることによって、CPU読み出しをマニュアルで更新することができます。

オーディオの各サンプル毎にどのくらいの計算量が必要かのについては、ファンクションコールの数によってだいたいの感じを掴むことができます。次のSignale Usedの数値は、MSPがカレントのシグナルネットワークでシグナルオブジェクトを連結するために必要な内部バッファの数を示しています。これらのフィールドは、オーディオオブジェクトの数や、連結のされ方が変わった時点でアップデートされます。

次の2つのセクションでは、ポップアップメニューによる数値の後にOverrideチェックボックスがあります。これがチェックされている場合、変更された設定はカレントのオーディオドライバの初期設定としてセーブされません。デフォルトでは、すべてのOverrideは使用されない状態になっています。これは、表示されている設定がセーブされ、次にMax/MSPを起動した時に読み込まれることを意味しています。

オーディオサンプリングレートは、Sampling Rate ポップアップメニューで設定することができます。フルレンジオーディオの場合44.1kHzのサンプリングレートを推奨します。低いサンプリングレートを使用した場合、MSPが演算を行うサンプル数が減るためコンピュータの負荷は軽くなります。しかし、同時に周波数域も狭くなります。コンピュータの処理が44.1kHzでは厳しい場合、低いレートを試してみる必要があるでしょう。サウンドマネージャを使用している場合、モニタ&サウンド(訳注:MacOSのバージョンによっては「サウンド」コントロールパネルの場合があります)コントロールパネルを使って入力ソースとサンプリングレートの変更をすることもできますが、MSPは、Maxが実行されている間はこれらのコントロールパネルによるサンプリングレートの変更を無視します。

Vector Size はMSPが一度に演算を行うオーディオサンプル数を示しています。コントロールできるベクタサイズは2種類あります。I/Oベクタサイズ(I/Oは入出力を意味します)はオーディオインターフェイスと一度にやり取りするサンプル数をコントロールします。シグナルベクタサイズはMSPオブジェクトによって一度に計算されるサンプル数を設定します。従って、これはI/Oベクタサイズと同じか、それより小さい値しか取り得ません。シグナルベクタサイズがI/Oベクタサイズより小さい場合、MSPは、演算が必要な1つ1つのI/Oベクタごとに、2つ以上のシグナルベクタの演算を連続して行います。I/Oベクタサイズが256でサンプリングレートが44.1kHzの場合、MSPは1回におよそ5.8ミリ秒のオーディオデータの演算を行います。

I/Oベクタサイズはレイテンシ(処理による遅延:訳注)や全体のパフォーマンスに影響を与えます。小さいベクタサイズでは、MSPは小さい時間のチャンク(ひとかたまり)ごとに演算を行うので、オーディオ入力とオーディオ出力の間に本来的に発生する遅延が減少するかもしれません。一方で別のコンピュータ上の負荷が発生します。MSPは毎回次のベクタ(次のオーディオのチャンク)の演算を行うための準備をするため、全体としては大きいベクタの演算を行う方がプロセッサへの負荷は少ないのです。しかし、これに関しては別の側面があります。MSPは、割り込みによってオーディオベクタの演算を行います。MSPが実行されている時、たまたま行われている業務(例えばワードプロセッサ等)は割り込みをかけられ、オーディオのI/Oベクタサイズ分の演算が行われてプレイされます。その後、コンピュータはスケジュールされた通常の業務に処理を戻します。ベクタサイズが大き過ぎるとコンピュータはわずかな遅れを生じ、コンピュータが予想するよりも処理に長い時間が費やされるため、オーディオの出力時にクリックノイズを伴う可能性が生じます。I/Oベクタサイズを小さくすることは、この問題を解決するかも知れませんが、そうでない場合もあります。見方を変えると、あまり多くの割り込み処理を生成しようとすると、コンピュータはスローダウンしてしまう(現在行っていることを一度セーブし、他のタスクをスタートすることはかなりの負荷を伴う)ということです。一般的に、より小さいI/Oベクタサイズではコンピュータリソースを使用する割合が多くなるということがわかると思います。CPUの処理能力の限界に近いような場合、特定のシグナルネットワークのパフォーマンスを最適化することは、試行錯誤してみるしかないでしょう。そのために、MSPではベクタサイズの選択が可能になっています。

ノート:いくつかのオーディオインタフェイスカードでは、I/Oベクタサイズの選択ができません。また、いくつかのASIOドライバでは、選択されるI/Oベクタサイズが、MSPの現在のASIOサポートで制限される2の累乗の値に一致しないことがあります。いくつかのケースでは、異なったサンプリングレートでASIOドライバを使用することによってこの問題を解決できます。

Overdriveオプションは、Maxのオーバードライブ設定のオン/オフをDSPステータスウィンドウから行うことを可能にします。オーバードライブがイネーブル(使用可能)の場合、Maxのイベントスケジューラは割り込みレベルで動作します。イベントスケジューラはmetroオブジェクトからくり返し送られるbangのトリガのようなもので実行され、同様に直前に受け取ったMIDIデータを送信します。イネーブルでない場合、オーバードライブは内部のより優先度の低いイベントハンドリングループで実行されます。これはプルダウンメニューのようなもので割り込まれます。オーバードライブの使用はOptionsメニューで指定することもできます。一般にオーバードライブはタイミングの精度を改善させますが例外もあります。また、いくつかのサードパーティ製のソフトウェアはオーバードライブがイネーブルの場合、正常に動作しないこともあります。

Scheduler in Audio Interrupt の機能は、オーバードライブがイネーブルの場合に使用できます。この場合、Maxのイベントスケジューラはオーディオのシグナルベクタの分だけ処理を行った直後に動作します。Scheduler in Audio Interrupt をイネーブルにすると、コントロール処理や外部MIDI入力からのトリガによるオーディオイベントのタイミングは大きく改善されます。しかし、タイミングの改善は直接、I/Oベクタサイズの選択と関連しています。それは、スケジューラの外部で起きる、Maxに影響を及ぼすイベント(MIDI入出力など)のインターバルがI/Oベクタサイズによって決定されるからです。シグナルベクタサイズが512の場合、スケジューラは512サンプルごとになり、44.1kHzのサンプリングレートでは11.61秒毎になります。これがタイミングを許容する外部からの制限になります。小さいシグナルベクタサイズ(256,128,64)では、タイミングは「タイト」になると考えられます。これらのすべてのパラメータは演奏しながらでも変更できるので、許容できるような精度とパフォーマンスの組み合わせを実験によって見つけることができます。

コントロールとオーディオの正確な同期が重要でない場合は、Scheduler in Audio Interrupt をチェックしないままにしておいて下さい。シグナル処理のための全体的なCPUパフォーマンスはわずかに向上するでしょう。

Input Channnel 1,Input Channnel 2,Output Channnel 1,Output Channnel 2 と表示されているポップアップメニューは、MSPの最初の2つの論理チャンネル(adc‾オブジェクトの最初の2つのアウトレットとdac‾オブジェクトの最初の2つのインレット)をオーディオドライバが使用している物理チャンネルにマップします。様々なオーディオドライバによって様々なオプション(サウンドマネージャドライバは2つのチャンネルしかサポートしないので、通常はデフォルトのオプションを使用します)追加された論理チャンネルをマップするためには、I/Oマッピングウィンドウを使用します。これは、DSPステータスウィンドウの下方にあるI/O Mappings ボタンをクリックすると見ることができます。(詳細は後述のI/Oマッピングウィンドウについての記述を参照して下さい。)さらに、ユーザのパッチ内のadstatusオブジェクトを使用して、512の論理オーディオI/Oチャンネルを任意にマップすることができます。

Optimize ポップアップメニューでは、MSPでオーディオの演算を行う際に、4(Altivec)d.語戚1つの命令スペースで4つのサンプルを処理することができます。しかし、この方法ですべてのオーディオシグナル処理アルゴリズムが最適化されるわけではありません。(例えば、再帰フィルタアルゴリズムは、ほとんどベクタ最適化の恩恵を被りません。)G4マシンでMSPを使用する場合、このオプションをそのままにしておくことによってCPUユーティライゼイションとパフォーマンスは強化されます。しかし、正確なパフォーマンスの向上は、使用しているアルゴリズムやベクタ最適化に対応したMSPオブジェクトをどのくらい使っているかによります。G4以前のマッキントッシュを使用している場合には、このオプションは何の効果も及ぼしません。

CPU Limit オプションは、MSPにどの位の量までシグナル処理を行うことを許可するかというリミット(コンピュータのCPU使用率のパーセンテージについて表示されます)を指定します。MSPが指定されたCPUリミットを継続的に上回ることがなくなるので、コンピュータは、MSPによってロックアウトされることなしに、他のタスクを実行することができます。しかし、代償として、CPUが指定されたリミットを超えた時にはオーディオ出力にクリック音を生じます。この値を0または100に指定すると、CPU Limit は使用されません。

<-前の章   次の章->