これまで、オーディオ処理のオンとオフを切り換えることができる2つの方法を見てきました。
1) dac~、adc~、ezdac~、ezadc~ オブジェクトへ start または stop メッセージを送る方法。
2) ezdac~、ezadc~ オブジェクトをクリックする方法。
そして、まだ述べていない2つの方法があります。:
3) dac~、adc~、ezdac~、ezadc~ オブジェクトへ int を送る方法。0 はstopと同じもので、ゼロ以外の数値は start と同じものです。
4) dac~、adc~ オブジェクトをダブルクリックしてDSP ステータス・ウィンドウをオープンし、そのAudio on/off ポップアップメニューを利用する方法。Options メニューから DSP Status... を選んで DSP ステータス・ウィンドウを開くこともできます。
MSPをスタートするどの方法も、オープンしているすべてのパッチャーウィンドウおよびサブパッチでオーディオをオンにします。1つのパッチャーだけのオーディオ処理のオン/オフを行う方法もあります。
メッセージ startwindow を(startの代わりに)dac~、adc~、ezdac~、ezadc~ オブジェクトに送ると、そのオブジェクトが含まれるパッチャーウィンドウとそのサブパッチのオーディオだけがオンになります。また、他のすべてのパッチャーのオーディオはオフになります。startwindow メッセージは、様々なパッチャーで数多くの様々なシグナルネットワークをロードすることを妨げずに、聞きたいパッチャーのオーディオだけをオンにするので、非常に役に立つものです。別々のパッチで様々なシグナルネットワークをカプセル化した場合、それらの多くをロードして使用可能にでき、1度に1つだけをオンにできます。これは、コンピュータの処理パワーに過度の負荷をかけることを避ける手助けとなります(すべてのMSPヘルプファイルでは、startwindowを 利用して、デモンストレーションが同時に他の作品を聞かずに試せるようになっている点に注意して下さい)。
場合によっては、startwindow が start より適していることもあります。
前の章では、gate~オブジェクトを利用して、シグナルがいくつかの可能な行き先のうちの1つへ送られるのを見ました。シグナルの行き先を指定するために役に立つもう1つのオブジェクトは selector~ です。これは、Maxオブジェクト switch に相当します。異なるいくつかのシグナルを selector~ に送ることができますが、そのうちの1つだけ(または全く何もなし)がアウトレットから送り出されます。selector~ の左インレットは、他のどのインレットを開くかを指定する int を受け取ります。開かれたインレットからだけシグナルが受信され、アウトレットから出力されます。
左インレットの数値がどのインレットを開くかを決定します
gate~ と同様、シグナルをselector~ によって切り替えることは、送り出されているシグナルに不要なクリック音を起こすような、非常に急激な変化を引き起こす可能性があります。そのため、このようなクリック音を避けようと思う場合には、オーディオがオフ、またはすべての入力シグナルのレベルが 0 の場合にだけ、オープンするインレットを変更することがベストです。
チュートリアルパッチでは、selector~ は異なる4つの古典的なシンセサイザの波形(サイン波、ノコギリ波、三角波、または矩形波)のうちの1つを選ぶために使用されています。umenuは、波形の名前を持ち、要求されたインレットを開くために selector~ のコントロールインレットへ該当する数値を送信します。
・波形をポップアップメニューから選び、その後、startwindow メッセージをクリックして下さい。ポップアップメニューを使って、4つの異なった波形の音を聞いてみて下さい。stop メッセージをクリックして、オーディオをオフにして下さい。
技術的な詳細:ノコギリ波はすべての倍音を含みますが、その各々の振幅は倍音の次数の逆数に比例します。基本波(第1次倍音)が振幅Aを持つ場合、第2次倍音は振幅A/2、第3倍音は振幅A/3・・・、になります。矩形波はノコギリ波スペクトルの奇数次の倍音だけを含んでいます。三角波は基本波の奇数次倍音だけを含みますが、その各々の振幅は倍音の次数の逆数の2乗に比例します。基本波が振幅Aを持つ場合、第3次倍音は振幅A/9、第5次倍音は振幅A/25・・・、になります。
このパッチでの波形は理想的な形状であり、帯域を限られたバージョンではない点に注意して下さい。すなわち、音の倍音(高周波成分)を制限しているものは何もないということです。ノコギリ波やパルス波はより豊かな音であるため、倍音が簡単にナイキスト・レートを上回り、オーディオ(可聴周波数)領域に折り返される可能性があります。折り返された「倍音」は意図されたスペクトルに含まれず、結果として倍音関係でないスペクトルになってしまいます。具体的な例をあげると、2,500Hzで理想的な矩形波を演奏する場合、最初の4つの部分音だけが44.1kHzのサンプリング・レートで正確に表すことができます。他の倍音(部分音)の周波数は22,050Hzであるナイキスト・レートを上回り、基音とは調和しない周波数で可聴周波数領域に折り返されます。例えば、8番目の部分音(第15次倍音)は、37,500Hzの周波数を持ち、折り返されて6,600Hzの音として聞くことができますが、この周波数は2500の倍数ではありません。(そして、その振幅は基音よりおよそ24dB小さいだけです。)矩形波の他の部分音も同様に折り返されます。
ナイキスト周波数を超える倍音(部分音)は折り返されます
・ ポップアップメニューから矩形波を選び、周波数を2500Hzにセットして下さい。オーディオをオンにして下さい。あなたが聞いているいくつかの部分音が基本波と調和していないことに注意して下さい。周波数を上げていくと、折り返された部分音は同じ量だけ下がって来るでしょう。オーディオをオフにして下さい。
これまでに、selector~ そしてgate~ オブジェクトが、シグナルネットワークの特定の部分を選択的に聞くために利用できることを見てきました。無視されているシグナルネットワークの一部(例えばselector~ の閉じられたインレットに入っているネットワークのあらゆる部分)は、たとえそれが効果的に切り離されていても、実行され続けています。これは、たとえ、聞こえている音に影響を与えないとしても、MSPがシグナルネットワークのその部分のために、必要なすべての数値を計算し続けるということを意味します。コンピュータ処理上これは資源の浪費であり、実際に、ある特定の時間において必要ないシグナルネットワークの部分の処理を停止できることが望ましいでしょう。
begin~ オブジェクトが、シグナルネットワークの一部分の初めに置かれ、その部分が selector~ あるいは gate~オブジェクトのインレットへ行く場合、selector~ やgate~ がそのシグナルを無視しているときには、ネットワークのその部分のためのすべての計算は完全に停止されます。これは、チュートリアルパッチのサイン波のシグナルとノコギリ波のシグナルを比較するところで示されています。
サイン波が選択された時、ノコギリ波のための処理は完全にオフにされます
上の例の場合のように、selector~ の最初のシグナルインレットが選ばれると、他のシグナルインレットは無視されます。そのため、begin~ と selector~ の間のすべてのオブジェクト(この場合 sig~、*~、phasor~オブジェクト)で計算は中止されます。line~ オブジェクトは begin~ から始まるオブジェクトのチェインではないため、他のオブジェクトが停止された場合でも実行され続けます。
・"Sawtooth" をポップアップメニューから選んで周波数を440Hzにセットし、オーディオをオンにして下さい。line~ オブジェクの上のメッセージボックスをクリックして下さい。line~ は10 秒間で1オクターブ上下するグリッサンドを作ります。再びそれをクリックし、グリッサンドを2秒間進行させて下さい。そして、ポップアップメニューを利用して、selector~ をオフにして下さい。5秒間待って、スイッチをノコギリ波に戻して下さい。グリッサンドは下降の途中にあるでしょう。この結果は、line~ オブジェクトが sig~、*~、phasor~ が止められている時でも動き続けていることを示しています。グリッサンドが終わったら、オーディオをオフにして下さい。
begin~ と、selector~(またはgate~)の組み合わせは、1つのサブパッチから他のパッチへの場合でも完璧に動作します。
・patcher triangle オブジェクトをダブルクリックして、その内容を見て下さい。
patcher triangle オブジェクトの内容
ここで、begin~ オブジェクトはサブパッチに、そしてselector~ はメインパッチにあります。しかしこの場合でも、この組み合わせは間のオブジェクトの処理をストップさせるために働きます。三角波を生成するMSPオブジェクトはないため、cycle~ が buffer~にロードされたAIFFファイルの三角波の1サイクルを読みます。
begin~ は、selector~ によってオフになった場合に停止されるシグナル・ネットワークの一部分のための、インジケータのような役割を果たします。実際、begin~ から出力されるものは 0 の定数シグナルです。そのため 0 のシグナルが適切なすべてのシグナル・ネットワークで begin~ を利用することができます。その値は、シグナルインレットで他のシグナルと加算することができ(この場合、それは他のシグナルに何も加えません)、また、sig~ やnoise~ のように、シグナル入力を無視するにも関わらず、シグナル入力を受信することは可能なオブジェクトと接続することができます。
これまでに、dac~ に startwindow メッセージを送ると、1つのパッチャーおよびそのサブパッチでオーディオをオンにし、他のすべてのパッチのオーディオをオフにするということを見ました。他のどこかの部分のオーディオをオンにしたまま、ある特定のサブパッチのオーディオをオフにする方法がさらに2つあります。1つの方法は、制御したいサブパッチのインレットに mute~ オブジェクトを接続することです。
特定のサブパッチでのオーディオ処理の停止
サブパッチの音を消すために、上の図のようにサブパッチのインレットにmute~ オブジェクトを接続します。mute~ は、インレットでゼロ以外の整数(int)を受け取ると、サブパッチのすべてのMSPオブジェクトのオーディオ処理を止めます。mute~ のインレットに0を送ると、サブパッチの停止を解除します。
・"Square" をポップアップメニューから選び、矩形波を聞くためにオーディオをオンにして下さい。patcher pulsewaveサブパッチを使用不可にするために、mute~ オブジェクトの上にある toggle をクリックして下さい。サブパッチの停止を解除するために、再び同じ toggle をクリックして下さい。
これは begin~、selector~ オブジェクトを利用した場合と似ていますが、mute~ オブジェクトではサブパッチ全部を使用不可にします。(同様に使い方も少し異なっています。「ミュート」の言葉通り、mute~ に0以外の整数(int)を送るとオーディオをオフにする効果があり、0の場合はオーディオをオンにします。)
チュートリアルのサンプルパッチで、patcher pulsewave の出力を selector~ へ接続した上に、サブパッチの音を消すために mute~ オブジェクト使用しているのは、実際はやりすぎです。しかし、ここではその違いを示しています。selector~ は patcher pulsewave サブパッチからのシグナルの流れを遮断できますが、サブパッチのMSPオブジェクトは(begin~ オブジェクトがその始点にないため)実行し続けます。mute~ オブジェクトは、begin~ とselector~ を使わずに、実際にサブパッチでの処理を止めることができます。
・ patcher pulsewave オブジェクトをダブルクリックして、その内容を見て下さい。
サイクルの半分は1、もう半分は0を出力します
ここでは、矩形波オシレータを作るために、単純に <~ 0.5(<~ は、Maxオブジェクト < のMSP版です。)のインレットへ phasor~(0から1まで)の出力を送り出します。各サイクルの前半の phasor~ の出力は0.5未満なので、<~ オブジェクトは1を送ります。サイクルの後半の phasor~ の出力は0.5を超えるので、<~ オブジェクトは0を送ります。
<~ オブジェクトと outlet の間にある pass~ オブジェクトは、サブパッチャーがミュートされたときに生じる予期しないノイズを防ぐためになくてはならないものです。このオブジェクトは、サブパッチャーがミュートされない場合にはそのインプットを単にアウトプットから出力し、ミュートされた場合には 0 シグナルを出力します。pass~ オブジェクトはミュートされる可能性のあるパッチャーの outlet の前に置く必要があります。
サブパッチでMSPオブジェクトを使用不可にするもう一つの方法は、pcontrol オブジェクトによるものです。サブパッチと接続された pcontrol オブジェクトへメッセージ enable 0 を送ると、そのサブパッチのすべてのMSPオブジェクト、およびMIDIオブジェクトを使用不可にします。メッセージ enable 1は、そのサブパッチのMIDIおよびオーディオオブジェクトを再び使用可能にします。
pcontrol はサブパッチのMIDI、およびオーディオオブジェクトを使用不可、使用可にできます
patcher harmonicsサブパッチは、本質的にメインパッチから独立した完全なシグナル・ネットワークを含んでいます。初期状態では、メインパッチのシグナルネットワークからのサウンドと衝突しないように、 pcontrol を使って、このサブパッチを使用不可にしています。(メインパッチがロードされる時に、loadbang が pcontrol へ enable 0 メッセージの送信を行い、サブパッチのMSPオブジェクトを使用不可にしていることに注意して下さい。)
・オーディオをオフにして、patcher harmonics オブジェクトを使用可にするために、その上のトグルをクリックして下さい。そして、patcher harmonics オブジェクトをダブルクリックして、内容を見て下さい。
このサブパッチは、8つの倍音関係にあるサイン波を結合して、倍音(n次)の各々の振幅が1/2nと比例するような複雑な音を作ります。これらは倍音関係にあるので、合計は基本波の周波数を持ちます。
patcher harmonicsサブパッチによって作られる波形
8つの周波数は聴覚心理学的に一緒に溶け合って、基本振動数による一つの複合音として聞こえます。次のような点は興味深く、注目に値します。それは、たとえ基音が取り去られても、他の7つの倍音(高調波成分)の和はまだその基本振動数の音に聞こえること、また、音量の変化、音色の変化だけが知覚され、ピッチの変化は知覚されないということです。
同じ音の基音を取り去っても、依然として同じ周期を持ちます
・ startwindowメッセージをクリックして、サブパッチのオーディオをスタートさせて下さい。selector~ に0、1を送って、基本振動数を取り去り、また取り替えてみて下さい。stop をクリックしてオーディオをオフにして下さい。
dac~(またはadc~)に startwindow メッセージを送ると、dac~ を含むパッチャーウィンドウ及びそのサブパッチでオーディオ処理をスタートさせます。そして、その他のパッチのオーディオ処理をオフにします。サブパッチのインレットと連結された mute~ オブジェクトは、そのサブパッチのすべてのMSPオブジェクトを使用禁止にするために使用できます。サブパッチのインレットと接続された pcontrol オブジェクトへの enable 0 というメッセージも、そのサブパッチのすべてのMSPオブジェクトを使用不可にするために使うことができます。(これはサブパッチですべての MIDIオブジェクトをも使用不可にします。)
selector~ オブジェクトを使用して、いくつかのシグナルから1つを選んでアウトレットから送ったり、受信するすべてのシグナルの流れを遮断することができます。begin~ オブジェクトのアウトレットと selector~ オブジェクト(または gate~ オブジェクト)のインレットの間のシグナルの流れに接続されたMSPオブジェクトは、selector~ のインレットが閉じられると完全にシグナル・ネットワークから切り離されます。
これらの方法はどれも、与えられたシグナル・ネットワークにあるすべてのMSPオブジェクトから1つのサブセットを(またはいくつかの異なるネットワークのうちの1つを)選んで演奏するために有効です。たくさんのシグナル・ネットワークをロードすることができますが、1度に1つだけが使用可能になります。この方法によって、すばやく1 つの音から他の音へスイッチすることができますが、コンピュータは聞こえるサウンドに影響を及ぼす処理だけを実行します。
begin~ | シグナルネットワークのスイッチ可能な部分の定義 |
mute~ | サブパッチのシグナル処理を使用不可にします |
pass~ | ミュートされたサブパッチャーのノイズを除去します |
pcontrol | パッチャー内のサブウィンドウの開閉を行ないます |
selector~ | いくつかの入力のうちの 1 つをアウトレットに割り当てます |