チュートリアル 2

基礎:アジャスタブル・オシレータ

アンプリファイア: *~

聞くためのシグナル(dac~に送り出すシグナル)は-1.0〜+1.0までの振幅範囲でなければなりません。この範囲を超えている値は、dac~によって(-1または1に)クリップされます。これは、サウンドの(ほとんどの場合非常に欠陥となる)ディストーションを引き起こします。いくつかのオブジェクト(例えばcycle~)も、デフォルトでは同じ範囲で値を出力します。

cycle~のデフォルト出力の振幅は1です

シグナルのレベルをコントロールするためには、単に各サンプルに係数を掛ければよいだけです。例えば、シグナルの振幅を半分にするためには、0.5を掛けます。(シグナルの振幅を2で割っても数学上は同じですが、コンピュータにとって乗算は除算より効率的な計算法です。)

係数をかけて調整された振幅

時間上で連続的にシグナルの振幅を変更したいとき、*~の右のインレットに係数のためのシグナルを送ることができます。*~の右のインレットの値を連続的に変えることによって、サウンドをフェードイン、フェードアウトさせたり、クレッシェンドやディミヌエンドなどの効果をつくることができます。しかし、振幅の急激な変化はシグナルの不連続性を引き起し、結果としてクリックノイズ(プチッというような雑音)を発生させてしまいます。

瞬間的な振幅の変化はシグナルにノイズによる歪みを生じます

その理由から、振幅を変更するために、各々のサンプル値がよりなめらかに(だいたい数ミリセカンド間隔で線的に)変わっていくようなシグナルを利用すると、たいてい良い結果を生みます。

ライン・セグメント・ジェネレータ:line~

振幅の瞬間的な変化(それは、シグナルの欠陥となる歪みを引き起こします。)の代わりに、5ミリ秒ごとに1.0から0.5まで徐々に変化するシグナルを*~の右側のインレットに与えると、振幅変化の最初と最後の間の各サンプルの値を補い、なめらかな振幅変化を作ることができます。

line~を用いた5ミリ秒ごとの線的な振幅の変化

line~オブジェクトは、Maxオブジェクトlineと同じような機能を持ちます。line~の左のインレットは、目的の値とそれに達するまでの所要時間(ミリ秒で)を受け取ります。line~は、現在の値から目的の値まで直線的に変化するように各サンプルの適当な中間値を計算します。line~とlineの1つの重要な違いは、line~が目的の値と所要時間の入力をfloatで受け入れることができるということです。

技術的な詳細:シグナル全体におけるどんな増幅も、それが変化しているときには絶えず多少の歪みをもたらします。(オリジナルのシグナルと比べて、波形はその間に、実際に変更されます)。この歪みが欠陥と感じられるかどうかは、変化がどの程度突然か、振幅の変化がどの程度大きいか、オリジナルの波形がどの程度複雑かに左右されます。すでに複雑なシグナルにもたらされるわずかな歪みは、聞き手にとってあまり気にならないかもしれません。逆に、オリジナルのシグナルがとても純粋な場合、ほんのわずかの歪みでも、それが部分音を付け加えてしまうために音色の変化を引き起こします。

上の例では、サイン波の音の振幅は5ミリ秒で半分(6dB)に減少しています。振幅が減少するにつれて、わずかな音色の変化を聞き取る人がいるかも知れませんが、その変化はクリックノイズを引き起こすほど突然ではありません。他方、もしサイン波の音の振幅が5ミリ秒で8倍(18dB)に増加したとしたら、その変化はパーカッションのアタックのように聞こえるくらい強烈です。

5ミリ秒での8倍の振幅増加はパーカッションのような効果を生みます

アジャスタブル オシレータ

実例パッチは、オシレータの増幅を調節するためのアジャスタブル(可変)アンプを作るために、*^とline~の組み合わせを用いています。packオブジェクトは目標となる振幅値に到達時間を追加するので、振幅のあらゆる変化には100ミリ秒を費やします。オシレータの周波数を変更するためのナンバーボックスも用いられています。

周波数と増幅が可変なオシレータ

どんなMaxメッセージが送り出されるよりも前に、シグナルネットワークはすでにデフォルト値を持つことに注意して下さい。cycle~オブジェクトは指定された周波数1000Hzを持ち、line~オブジェクトはデフォルトの初期値0を持ちます。たとえ*~が右のインレットを初期化するためにあらかじめ引数を持っていたとしても、line~が絶えず値を与え続けているので、その右オペランドは0のままでしょう。

*Amplitudeナンバーボックスを利用して、好みのレベルにボリュームをセットし、サウンドをスタートさせるためにAudio On/Offと記されたトグルスイッチをクリックして下さい。ナンバーボックスを使って、周波数と増幅を変化させて下さい。サウンドを止めるためにもう一度トグルスイッチをクリックして下さい。

フェードインとフェードアウト

line~と*~の組み合わせは、オーディオのオン/オフ・スイッチを入れるときに発生するクリックを避けるのを助けました。トグルスイッチから送られる1と0(”on”と”off”)のメッセージは、start、stopメッセージがdac~に送り出されるのと同様に、要求された振幅までボリュームフェーダを上げ、そして0まで下げるような効果のために利用されます。この方法では、サウンドは、瞬間的にオンになるというより、むしろ穏やかにフェードイン、フェードアウトしています。

On、OffメッセージはDACのstart、stopの前にオーディオのフェードイン、アウトを行います

オーディオがオフになる直前に、トグルスイッチからの0はpackオブジェクトに送られ、オシレータボリュームの100ミリ秒でのフェードアウトを開始します。また、100ミリ秒のディレイは、フェードアウトを発生させるために、dac~にstopメッセージが送られる前にもたらされます。オーディオがオンになる直前に、要求された振幅値はトリガーされ、ボリュームのフェードインを開始します。;この場合、実際には、フェードインはdac~がスタートする直後まで開始しません。(実際のプログラムでは、start、stopメッセージボックスは、ユーザが直接それらをクリックしないように、ビューから隠されるか、サブパッチでカプセル化されるでしょう。)

まとめ

1以外の数値をオーディオ・シグナルの各サンプルに乗じることで、振幅は変更されます。;従って、*~オブジェクトはアンプとしての機能を持ちます。振幅の突然の強烈な変化はクリックノイズを引き起こすので、他のシグナルによって振幅をコントロールして、より段階的なフェードを得ることは多くの場合賢明なやり方です。ラインセグメントジェネレータline~は、Maxオブジェクトlineに類似していて、シグナル・ネットワークに対して線形に変化する値を与えるのに適しています。line~と*~の組み合わせは、シグナルの全体の振幅を制御するエンベロープを作るために利用できます。

<-前の章 次の章->

目次へ