チュートリアル 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 ポップアップメニューを利用する方法。Options メニューから DSP Status... を選んで DSP ステータス・ウィンドウを開くこともできます。

MSPをスタートするこれらの方法は、いずれも開いているすべてのパッチウィンドウと、そのサブパッチのオーディオをオンにします。さらに、単独のパッチのオーディオ処理のオン、オフを切り替える方法もあります。

メッセージ 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秒間待ってからもう一度ノコギリ波に戻して下さい。グリッサンドは下降の途中にあるでしょう。これは、sig~*~phasor~ が停止している場合でも line~ オブジェクトが動き続けていることを示しています。グリッサンドが終わったら、オーディオをオフにして下さい。

begin~ と、selector~(またはgate~)の組み合わせは、あるサブパッチから他のパッチへの場合でも完璧に動作します。

patcher triangle オブジェクトをダブルクリックして、その内容を見て下さい。


patcher triangle オブジェクトの内容

ここで、begin~ オブジェクトはサブパッチの中に、そしてselector~ はメインパッチにあります。しかしこの場合でも、2つのオブジェクトの組み合わせによって、その間にあるオブジェクトの処理を停止させる動作が行なわれます。三角波を生成するMSPオブジェクトはないため、三角波の1サイクルから成るAIFFファイルを buffer~に読込み、これを cycle~ によって読み通すようにしてあります。

begin~ は、selector~ によってオフにされたときに停止させる部分的なシグナル・ネットワークに対してインジケータのような役割を果たします。実際、begin~ から出力されるものは 0 の定数シグナルです。そのため 、0 シグナルの使用が適切であれば、シグナル・ネットワークの中の任意の場所で begin~ を利用することが可能です。この値は、シグナルインレットで他のシグナルと加算することができます(この場合、他のシグナルに何も加えません)。また、シグナル入力を受信することが可能で、その入力を無視するような sig~ noise~ といったオブジェクトに接続することも可能です。20080904

パッチャーのオーディオを無効にする:mute~とpcontrol

これまでに、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 を使って、このサブパッチを使用不可にしています。(メインパッチがロードされる時に、loadbangpcontrolenable 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 つをアウトレットに割り当てます