チュートリアル 1

基礎:テストトーン

チュートリアルの各章のサンプルプログラム(パッチ)を開くためには、MaxのFileメニューからOpen...を選んで、読んでいる章と同じ番号のドキュメントをMSPチュートリアルフォルダから探し出して下さい。該当のチュートリアルサンプルプログラム(パッチ)のPatcher ウィンドウだけが開いていることがベストです。

* "Tutorial01"というファイルをオープンして、トーンをテストして下さい。

MSPオブジェクトはまるでMAXオブジェクトのよう

MSPオブジェクトは、コンピュータによって演奏されるディジタルオーディオ(すなわちサウンド)を処理します。MSPオブジェクトは、Maxオブジェクトと全く同じ外観をしていて、インレット、アウトレットを同様に持っています。そして、Maxオブジェクト同様、パッチコードで接続されます。MSPオブジェクトは、MAXオブジェクトと同じ方法(Patcherウィンドウのオブジェクトボックスにオブジェクト名をタイプする)で作ることができ、同じPatcherウィンドウでMAXオブジェクトと全く問題なく共存します。

...しかし、それらは、ちょっと違います

相互接続するMSPオブジェクトのパッチは、普通のMaxオブジェクトによるものと少し違った働きをします。

違いを考える一つの方法は、MSPオブジェクトは標準的なMaxオブジェクトに比べ非常に速く働いているものと考えることです。MSPオブジェクトはハイファイ音声信号(一般に1秒につき44,100)を生成するのに十分な数値を作り出す必要があるので、標準的なMaxオブジェクトによって使用されるミリ秒単位のスケジュールより速く働かなればなりません。

違いについて考える有益なもう一つの方法はこうです。MSPオブジェクトによるパッチを(標準的なMAXパッチのように)イベントが特定の瞬間に発生するプログラムとして考えずに、むしろシンセサイザ、サンプラ、またはエフェクトプロセッサの設計の記述として捉えることです。各MSPオブジェクトは、そのアウトレットに接続されている他のオブジェクトに絶えず数値を送りだしている「数式」のようなものです。時間内のどんな瞬間ででも、この「式」は結果を持ち、それはオーディオ・シグナルの瞬間的な振幅になります。相互接続するMSPオブジェクトのアンサンブルを、しばしば「シグナル・ネットワーク」と呼ぶ理由がここにあります。

標準的なMaxオブジェクトで作られたパッチが、あるオブジェクトから他のオブジェクトにメッセージを送るきっかけになる何か(マウス・クリック、入力MIDIメッセージ、その他)が発生するまで働かず、何もしないのに対して、MSPオブジェクトによるシグナル・ネットワークは常に(オンの瞬間からオフの瞬間まで)アクティブで、すべてのオブジェクトは、その瞬間瞬間のサウンドのための適切な振幅を計算するために絶えず情報をやりとりしています。

...それで、それらの外見はちょっと違います

すべてのMSPオブジェクトの名前は、ティルド文字(~)で終わります。この文字(これは正弦波のサイクルのように見える)は、MSPオブジェクトを他のMaxオブジェクトと区別するのを助けるインジケータのような役目を果します。

MSPオブジェクト間のパッチコードにはストライプがあります。これは、MSPシグナル・ネットワークと、休んでいるMaxパッチを区別するための手助けになります。

MSPオブジェクトはストライプのパッチコードで接続されます

デジタル_アナログコンバータ:dac~

デジタル・アナログコンバータ(DAC)は、一連のデジタルオーディオシグナルの「離散的な数値」を、スピーカを働かせるための「連続的に変動する電圧」に変換する、コンピュータの一部です。

コンピュータでサウンドを生成するためにデジタル信号を計算したならば、DACに数値を送り出さなければなりません。そのためにMSPにはdac~と呼ばれるオブジェクトがあり、普通はどんなシグナル・ネットワークにおいても終端のオブジェクトです。これは、聞こうとするシグナルを入力として受取ります。dac~は、オーディオ出力に利用可能なチャンネルと同じ数のインレットを持っています。サウンドマネージャを利用して、PowerPCのオーディオ・ハードウェアから直接サウンドを出力する場合、出力チャンネルは2つなので、dac~のインレットも2つあります。(より高性能なサウンド出力ハードウェアを使用している場合、他のチャンネルを指定するために引数をタイプできます。)

dac~はシグナルを演奏します

重要!何かを聞くためには、dac~がゼロ以外の振幅のシグナルを受信していなければなりません。dac~は-1.0〜1.0の範囲での値の受信を前提にしています。サウンドが演奏されるとき、その範囲を超える値はディストーション(波形の歪み)を引き起こします。

ウェーブテーブル・シンセシス:cycle~

周期的な波形を作るために最もよい方法は、cycle~を使うことです。このオブジェクトは、「ウェーブテーブルシンセシス」として知られている技術を利用します。cycle~は指定されたレートで512個の数値によるリストを読み通し、最後まで読み終えるとまたリストの最初に戻ってループします。これは、周期的に反復する波形をシミュレートします。

cycle~には、あらかじめ用意した値のリスト(オーディオファイルの形式)を読むように指定することができます。また、もし何も指定しない時、cycle~は振幅1のコサイン波の1サイクルを表す自分自身のテーブルを読みます。チュートリアル3では、あなたが自分で用意した波形を用いる方法を教えます。ここでは、コサイン波の波形を使用します。

振幅1によるコサイン波の1サイクルを記述している512の数のグラフ

cycle~は、左のインレットで周波数値(Hz)を受け取り、要求された周波数でシグナルを送り出すためにどれくらい速くリストを読まなければならないかを決定します。

技術的な詳細:cycle~は、次の基本式を利用して、連続する各々のサンプルのためにどのくらいリストを進むステップの距離をとるべきかについて計算します。

I=fL/R

Iがリストを進む時に増加する量、fはシグナルの周波数、Lはリストの長さ(この場合512)、Rは、オーディオ・サンプリングレートです。cycle~は”補間オシレータ”と言えますが、これは、Iが与えられたサンプルのリストの整数インデックスに正確に一致しない場合、cycle~は該当する出力値を探し出すために、リストの中の最も近い2つの数値の間で補間を行うということを意味します。ウェーブテーブル・オシレータで補間を実行することは、オーディオ品質の実質的な改良になります。他のMSPオブジェクトが非常に高品質の(そして、より多くの計算を要する)多項式補間を利用するのに対して、cycle~オブジェクトは線形補間を利用します。

デフォルトでは、cycle~は0Hzの周波数を持っています。そのため、シグナルを聞くには、オーディオ領域の周波数値を与える必要があります。これは、サンプルパッチの場合のように数値を引数として入力するか、左のインレットに数値を送るか、或いは左のインレットに他のMSPオブジェクトを接続することによって可能になります。

シグナル処理のスタートとストップ

オーディオのオンとオフを切り替えるには、dac~オブジェクト(またはadc~オブジェクト- 後の章で説明)の左のインレットに、Maxメッセージのstart及び、stop(または1及び0)を送ります。どのdac~またはadc~オブジェクトにstart、stopを送った場合でも、すべてのシグナルネットワークを使用可または使用不可にします。

可能な限りシンプルなシグナルネットワーク

dac~はシグナル・ネットワークの一部分ですが、startやstopのような特定のMaxメッセージを理解します。MSPオブジェクトの多くはこのように機能し、オーディオシグナルと同じように特定のMaxメッセージを受け取ります。

*オーディオアンプ(またはアンプ内臓スピーカ)を最小のセッティングにして、startメッセージボックスをクリックして下さい。オーディオアンプを、適当と思われる最大のセッティングに調節したら、stopメッセージボックスをクリックして、そのうるさいテスト音をオフにして下さい。

トラブルシューティング

この実例パッチでdac~をスタートさせても、コンピュータから出力される音が何も聞こえない時は、アンプのレベルセッティング、オーディオ機器の接続、そしてMAXフォルダにすべての該当するファイルがあるかどうかを確認して下さい。また、「モニタ&サウンド」(または「サウンド」)コントロールパネルのサウンド出力レベル、(コンピュータの内蔵スピーカーを使用している場合には)スピーカのボリュームがミュートされていないかどうかを確認して下さい。オーディオカードを使用している場合は、MaxウィンドウをチェックしてMSPがカードにアクセスする際のエラーが報告されていないかどうか確認して下さい。

まとめ

MSPオブジェクトが接続されたシグナルネットワークは、オーディオインストゥルメントを記述します。インストゥルメントのデジタル・アナログコンバータは、dac~オブジェクトによって表されます;dac~が音を出力するには、ゼロ以外の振幅(-1.0〜1.0の範囲で)のシグナルを受信していなければなりません。cycle~オブジェクトは、与えられた周波数値によって決定されるレートで、512の振幅のリストから周期的に値を読み通すウェーブテーブル・オシレータです。シグナル処理のオン/オフは、どのdac~(またはadc~)オブジェクトにstart(またはstop)メッセージを送ることによっても行うことができます。

* 次の章へ進む前にPatcherウィンドウを閉じて下さい。

<-前の章 次の章->

目次へ