チュートリアル 23:
シグナルデータの表示

シグナルの値の表示:number~

この章では、シグナルの数値を観察したり、その値をMaxメッセージに変換したりする、いくつかのMSPオブジェクトを紹介します。

・オーディオをオンにしてコンピューターの入力ジャックにサウンドを送って下さい。

パッチャーの一番上にある number~ オブジェクトは、各々のチャネルに届いているシグナルの値を250ミリ秒毎に表示し、meter~ オブジェクトは、直前の250ミリ秒間における振幅値のピークのグラフ表現をアナログLED表示のように示しています。


現在のシグナル値は number~ によって表示され、振幅のピークは meter~ によって表示されます

number~ に届いているシグナルは、表示されるたびにfloatとしてその右側のアウトレットから送信されます。これは、シグナル値のサンプルを取って、他のMaxオブジェクトにメッセージとして送信することが可能であることを意味します。

number~ オブジェクトは、実際に2つのオブジェクトが合わさっているかのようです。シグナル値を受信して右アウトレットから送信するだけでなく、number~ はシグナルを(floatの代わりに)左アウトレットから送り出す浮動小数点ナンバーボックスとしても機能します。

・ MIDIキーボードのモジュレーションホイールを動かすか、"Amplitude"と表示された右側のnumber~ をドラッグして下さい。これは、number~ の左のアウトレットから送信されるシグナルの値をセットします。シグナルは、ezdac~ に送られる振幅をコントロールする2つの *~ オブジェクトの右インレットに接続されています。


number~ へfloatの値を入力すると左アウトレットからのシグナル出力の値をセットします

number~ オブジェクトは、同時に、受信した任意のシグナルを floatに変換して右アウトレットから送信し、受信した任意の float をシグナルに変換して左のアウトレットから送信します。両方のタスクを同時に実行することは可能ですが、一度に表示することができるのは一方の値だけです。number~ によって表示される値は、そのディスプレイモードによって決まります。number~ の左側に小さな波形が表示されている時は「シグナルモニタモード」で、左のインレットから入力されるシグナル値を表示します。小さな矢印が表示されているときは「シグナルアウトプットモード」で、左のアウトレットから送りだされるシグナルの価を表示します。


number~ の2つのディスプレイモード

ロックがかかってないパッチャーで number~ オブジェクトを選択し、ObjectメニューからGet Info... を選ぶことによって、どちらか一方のディスプレイモードに制限することができます。


ディスプレイモードはインスペクタで選択することができます

ディスプレイモードは、少なくとも1つはチェックされていなければなりません。デフォルトでは、上記の例のように両方のモードが許可されています。両方のディスプレイモードが許可されている場合、ロックされたパッチャーで number~ の左側をクリックすると、もう1つのディスプレイモードにスイッチすることができます。number~ の出力は、どちらのディスプレイモードであるかに関わらず続けられます。

チュートリアルパッチでは、number~の2つのディスプレイモードを見ることができます。パッチャーウィンドウの上部にある number~ オブジェクトは、入力シグナルの値を示すために使用されるため、「シグナルモニタモード」になっています。”Amplinude” number~ は、シグナルを送るために使用されていますが、そのシグナル値を見るために「シグナルアウトプットモード」になっています。(シグナルアウトプットモードの場合にのみ、タイプしたり、マウスでドラッグしたりすることによって新しい値を入力できます。)各々のnumber~ は1つの機能を提供するだけなので、Get Info…ダイアログで1つのディスプレイモードに制限されています。

number~ オブジェクトの左側をクリックして下さい。これらは Get Info...でどちらかのモードに制限されているためディスプレイモードは変わりません。

number~ による補間

number~オブジェクトは、便利な付加的機能を持っています。それは、入力値の間の補間を行ない、line~ オブジェクトのようなランプ信号を生成することができるという機能です。 number~ は右インレットでゼロ以外の値を受け取ると、その値をミリ秒で表された時間の長さとして使用し、左インレットに値を受け取った時に、その新しい値との間に直線的な補間を行います。これは、line ~ にリストを送ることと同じです。


number~は古い値から新しい値への直線的なランプシグナルを送ることができます

しかし、line~ と違ってnumber~ は、2回以上補間時間の値を受け取る必要はありません。number~は、補間時間の値を覚えていて、左インレットで受信した各々の新しい値にそれを使用します。この機能は、出力信号の振幅値に不連続な変化を引き起こさないため、"Amplitude" number~ で使用されています。

振幅のピーク値:meter~

meter~ オブジェクトは、定期的に、前の表示以降に受け取った振幅のピーク値を表示します。同時に meter~ は、シグナルのピーク値をfloatとしてアウトレットから送信します。出力される値は、たとえピーク値が負であっても、常に正の値になります。


meter~ はシグナルの振幅のピーク値を表示し、floatとしてアウトレットから送り出します

meter~ は(シグナルの瞬間的な振幅を表示し、出力するnumber~と違って)シグナルの振幅のピークを観察するために便利です。meter~ はオーディオシグナルをターゲットとしているので、受け取ったシグナルが -1から1までの範囲であることを前提としています。その範囲を超えた場合、meter~ は最大値で赤い「クリッピング」LEDを表示します。

・クリッピング表示を見たい場合には、出力信号の振幅を1を上回るまで増加させて下さい(その後、望ましいレベルに戻して下さい)。

meter~が表示を更新する時間のデフォルト間隔は250ミリ秒ですが、表示間隔は interval メッセージによって変えることができます。より長い表示間隔では、出力のビジュアルな表示や数値表示の値を読むために時間の余裕を与えてくれますが、より短い表示間隔では、LED表示をより正確に行ないます。

・パッチャーウィンドウの左下隅にある "Display Interval" と表示されたナンバーボックスの値を変えることで、様々な表示間隔を試してみることができます。

ちなみに、number~ オブジェクトの表示間隔も(Get Info...ダイアログを用いて)同様にセットすることができます。

シグナルを使ってMaxメッセージを生成する:snapshot~

snapshot~ オブジェクトは、number~ の右インレットが行うのと同じように、現在のシグナルの値を送信します。しかし、snapshot~ は、アウトプットのオン/オフを切り替えることができ、bang を送ることによって1つの値を出力させることができます。右インレットにゼロでない値を送ると、snapshot~ は、その値をミリ秒による時間のインターバルとして使用し、左インレットのシグナル値の定期的な報告を開始します。インターバル時間として 0 を送ると、snapshot~ は停止します。

チュートリアルパッチの右半分では、シグナル波形がMIDIデータの生成にどのように利用されるかについての簡単な例を示しています。ここでは、MIDIノートメッセージのピッチ値を得るために、サブオーディオのコサイン波をサンプルしています。

number~ を使って、アウトプットの振幅を0にセットして下さい。パッチの上部にあるナンバーボックスのうち、"Rate" ナンバーボックスを0.14に、"Depth" ナンバーボックスを0.5にセットして下さい。メッセージボックス200をクリックして、snapshot~ による毎秒5回のシグナル値の報告を開始させて下さい。

snapshot~ が毎秒5回のシグナル値を報告しているのに対し、cycle~ オブジェクトの周期はおよそ7秒なので、サイン波の1サイクル毎に35個の音がメロディーとして記述されます。波形の振幅が0.5なので、メロディーは36から84(60±24)の範囲で変動します。

cycle~ に様々な "Rate"、"Depth" の値を与えて実験してみて下さい。snapshot~ が5Hz(200ミリ秒毎に1回)のレートでサンプリングしているため、そのナイキストレートは2.5Hzです。このため、cycle~ の有効な周波数は制限されます(それより大きな周波数は、「折り返されて」しまいます)。0 書かれたメッセージボックスをクリックし、snapshot~ を停止させて下さい。

振幅変調

・トレモロの深さ(depth) を0.5に、トレモロの速さ(rate)をに4セットして下さい。アウトプットの振幅を適当なリスニングレベルまで増加させて下さい。

cycle~ オブジェクトは、4Hzのトレモロによって入力されたサウンドの振幅を変調しています。

・より速い(オーディオ領域の)モジュレーションレートで実験し、振幅変調の音色効果を聞いてみて下さい。モジュレーションデプスを1にセットして、リングモジュレーションを聞いてみて下さい。変調効果をなくすためにデプス(depth)を0にセットして下さい。

シグナルの抜粋を見る:capture~

capture~ オブジェクトは、Maxオブジェクト capture に相当します。capture~ は、多くの信号値(デフォルトで、最後に受け取った4096サンプル)をストアするため、これによって、シグナルの完全な抜粋をテキストとして見ることができます。

・トレモロの深さ(depth)を1に、トレモロの速さ(rate)を172にセットして下さい。capture~ オブジェクトをダブルクリックして、最後の4096サンプルを含んでいるテキストウィンドウを開いて下さい。

このオブジェクトは、時間軸上でシグナルに起きたことを精密に見るために役立ちます。(4096サンプルは44.1kHzのサンプリングレートでおよそ93ミリ秒です。)capture~ にアーギュメントを入力して、どれくらいの数のサンプルを見るかを指定することができます。capture~ は多くのサンプル(Maxのために十分なRAMがあると仮定して)をストアしますが、capture~ のテキストウィンドウに表示できるキャラクタには32,000という限界があります。capture~ が何をストアするかを厳密にコントロールするために、様々なアーギュメントやメッセージが用意されています。詳細は MSP リファレンスマニュアルの記述を参照して下さい。

まとめ

capture~ オブジェクトは、シグナルの短い抜粋をストアしてテキストとして表示します。meter~ オブジェクトは、周期的にシグナルのピーク値を表示し、そのピーク値をfloatとしてアウトレットから送信します。snapshot~ オブジェクトは、シグナルの現在の値を報告するためにfloatの値を送信します。snapshot~bangを受信するたびに信号値を報告します。また、右インレットに 0 でないインターバル時間を受信すると、周期的に信号値を報告することもできます。

number~ オブジェクトは、floatナンバーボックス、sig~snapshot~ のすべてを1つに結合したようなものです。snapshot~ と同様に、左インレットで受信したシグナルは floatとして右アウトレットから送信されます。sig~ と同様に、floatまたはintを左インレットで受信すると、シグナル値をセットして左アウトレットから送信します。これらの動作の両方を同じnumber~ オブジェクトで同時に行うことができますが、number~ が一度に表示できる値は1つだけです。number~ がシグナルモニタモードの場合は入力信号の値を表示します。number~ がシグナルアウトプットモードの場合には出力シグナルの値を表示します。

number~ はまた、line~ オブジェクトのようなシグナル・ランプジェネレーターとして機能することもできます。0 でない値(ミリ秒で補間時間を表します)を右インレットで受信すると、number~ が float を受信するたびに、古い値と新しい値の間を線形に補間するようなシグナルを出力します。

これらのオブジェクトは(sig~peek~avg~のような他のいくつかのオブジェクトと共に)、MSPとMaxのリンクを構成します。これらは、シグナルをMaxメッセージの数値に変換したり、またその逆を行います。

参照

capture~ シグナルをストアし、テキストとして表示します
meter~ ビジュアルなピークレベル・インジケータ
number~ シグナルモニタ、および定数ジェネレータ
snapshot~ シグナル値を数値に変換します