チュートリアル5

基礎:シグナルのオン/オフ切り替え

オーディオの選択的なオン/オフ切り換え

これまで、オーディオ処理のオン・オフを切り換えることができる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 ポップアップメニューを利用する方法。

MSPをスタートするどの方法も、オープンしているすべてのパッチャーウィンドウ及びサブパッチでオーディオをオンにします。1つのパッチャーだけのオーディオ処理のオン/オフを行う方法もあります。

メッセージstartwindowを(startの代わりに)dac~、adc~、ezdac~またはezadc~オブジェクトに送ると、そのオブジェクトが含まれるパッチャーウィンドウとそのサブパッチのオーディオだけがオンになります。また、他のすべてのパッチャーのオーディオはオフになります。startwindowメッセージは、別々のパッチャーで数多くの様々なシグナルネットワークをロードすることを妨げずに、聞きたいパッチャーのオーディオだけをオンにするので、非常に役に立ちます。別々のパッチで様々なシグナルネットワークをカプセル化した場合、それらの多くをロードして使用可能にでき、1度に1つだけをオンにできます。これは、コンピュータの処理パワーに過度の負担をかけるのを避ける手助けとなります。(すべてのMSPヘルプファイルでは、startwindowを利用して、デモンストレーションが同時に他の作品を聞かずに試せるようになっている点に注意して下さい。)

場合によっては、startwindow がstartより適していることもあります。

いくつかのシグナルの内の1つを選択する:selector~

前の章では、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にセットして下さい。オーディオをオンにして下さい。あなたが聞いているいくつかの部分音が基本波と調和していないことに注意して下さい。周波数を上げていくと、折り返された部分音は同じ量だけ下がって来るでしょう。オーディオをオフにして下さい。

シグナル・ネットワークの一部分をオフにする:begin~

これまでに、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~のようなオブジェクトと接続することができます。

パッチャーのオーディオを使用禁止にする:mute~とpcontrol

これまでに、dac~にstartwindowメッセージを送ると、1つのパッチャー及びそのサブパッチでオーディオをオンにし、他のすべてのパッチのオーディオをオフにするということを見ました。他のどこかの部分のオーディオをオンにしたまま、ある特定のサブパッチのオーディオをオフにする方法がさらに2つあります。1つの方法は、制御したいサブパッチのインレットにmute~オブジェクトを接続することです。

特定のサブパッチでのオーディオ処理の停止

サブパッチの音を消すために、上の図のようにサブパッチのインレットにmute~オブジェクトを接続します。mute~は、インレットでゼロ以外のintを受け取ると、サブパッチのすべてのMSPオブジェクトのオーディオ処理を止めます。mute~のインレットに0を送ると、サブパッチの停止を解除します。

*「Square」をポップアップメニューから選び、矩形波を聞くためにオーディオをオンにして下さい。patcher pulsewaveサブパッチを使用禁止にするために、mute~オブジェクトの上にあるトグルをクリックして下さい。サブパッチの停止を解除するために、再び同じトグルをクリックして下さい。

これは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を送ります。

サブパッチでMSPオブジェクトを使用禁止にするもう一つの方法は、pcontrolオブジェクトによるものです。サブパッチと接続されるpcontrolオブジェクトへメッセージenable 0を送ると、そのサブパッチのすべてのMSPオブジェクト及びMIDIオブジェクトを使用禁止にします。これは、サブパッチのパッチャーウィンドウにあるタイトルバーの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 つの音から他の音へスイッチすることができますが、コンピュータは聞こえるサウンドに影響を及ぼす処理だけをするのです。

<-前の章 次の章->

目次へ