【Max 8】AM, RMで振幅を変調する

記事をシェアする:

古くからシンセサイザーで使用されているAmplitude Modulation(AM/振幅変調)、Ring Modulation(RM/リング変調、リング・モジュレーション)をMaxで作ってみましょう。

AM, RMとは

AMラジオ、FMラジオというのを聞いたことがあると思いますが、AMやRMも実は無線による信号伝達に使用される方法です。音声をそのまま電波に乗せると、ノイズが多く聞き取れなかったり複数の音声が混ざってしまうので、AMやRMをかけることで必要な音声だけを取り出すことができます。

このような無線技術の仕組みがシンセサイザーに組み込まれ、音響合成として使用されるようになりました。AM, RMは共に、やや金属的な印象の音になります。

RMを作る

まずは処理が簡単なRing Modulator(RM)を作ってみましょう。

キャリアとモジュレータを作る

キャリアは元となる音声信号です。好きな信号を入れて良いのですが、ここでは学習のために[cycle~]を使用しましょう。モジュレータはサイン波なので同様に[cycle~]を使用します。どちらも周波数を変更できるようにナンバーボックスを接続します。

キャリアとモジュレータをかけ合わせる

これらを[*~]で掛け合わせることで、キャリアとモジュレータが合成されます。これで完成です。[ezdac~]を接続し、キャリアとモジュレータの周波数を変更して音を聞いてみましょう。

音響合成の結果を確認

RMの結果をスペクトラムで確認してみましょう。

RMは元となる信号に対して、モジュレータの周波数をプラス・マイナスした周波数が出力されます。

計算で求めてみましょう。画像ではキャリアが10,000 Hz、モジュレータが5,000 Hzです。キャリア周波数をモジュレータ周波数でプラス・マイナスしてみましょう。

10,000 + 1,500 = 11,500
10,000 – 1,500 = 8,500

で、11,500 Hzと8,500 Hzの2つの周波数に分かれて出力されます。

AMを作る

次にAmplitude Modulation (AM)を作ってみましょう。

キャリアとモジュレータを作る

AMでもキャリアとモジュレータを用意します。RMと同様に今回はキャリアを[cycle~]にしましょう。

モジュレータの振幅を変更する

RMではモジュレータの振幅をそのまま使用していました。つまりRMでは-1~1の範囲で変調していましたが、AMでは0~1の範囲で変調します。

ある範囲のシグナルを異なる範囲にマッピングし直すのに便利なオブジェクトが[scale~]です。今回は-1~1の範囲を0~1の範囲に変更するので[scale~ -1 1 0 1]を使いましょう。

シグナルの振幅を確認するのに[scope~]は便利です。信号が新たにマッピングされたことを確認できます。

キャリアとモジュレータをかけ合わせる

AMと同様にキャリアとモジュレータの信号を[*~]でかけ合わせます。これで完成しました。[ezdac~]を接続し、周波数を変更して出音を聞いてみましょう。

音響合成の結果を確認

AMの結果をスペクトラムで確認してみましょう。

RMでは合成後が山が2つだったのに対し、AMでは3つになりました。AMではキャリアの周波数と、RMで計算した2つの周波数を合わせた3つの周波数が出力されます。

ミックスするパラメータを作る

実際に使用する時はエフェクトのようにして、キャリアに対してミックスする形が多いと思います。それをできるようRM,AMで組み替えてみましょう。

RMの場合

RMでミックスする場合は、ミックスする信号を以下の信号に分けましょう。

  1. キャリアのみ
  2. キャリアとモジュレータを混ぜた信号

これらの信号を1つのパラメータ変更でミックスできるようにします。ナンバーボックスで0~1の数値を送った時に、0で原音のみ、1でRMのみ(0.5でどちらも)出力されるようにします。

キャリアのみをミックス

部分ごとに作っていくと分かりやすいので、まずはキャリアをミックスする部分を作ります。

キャリアに対しミックスのパラメータを与えた時に、0ではボリュームが最大、1では信号が流れないようにします。

まずはボリュームを変更したいので[cycle~]のあとに[*~ 1]を挟みます。エフェクトは付加する形なので、ディフォルトでは音声がそのまま流れるようにアーギュメントは「1」に設定しています。

[*~ 1]の第2インレットに[!- 1.]オブジェクトを繋ぎ、それにミックス値のナンバーボックスを繋ぎました。

[!-]は逆の引き算で、アーギュメントで設定した値を入ってきた数値で引き算します。例えば[!- 1]に対して0を送ると1を、0.2を送ると0.8、1を送ると0を出力します。

これで0~1の数値を送ると、キャリアのボリュームが変更されるようになり、キャリア部分のミックスができるようになりました。

RMをミックス

RMの信号は先程作ったものと同様です。これは単純でボリュームの処理を繋げるだけです。

RMの信号に[*~ 0]を繋げ、それの第2インレットにミックスのナンバーボックスを繋げました。

2つを同時にミックス

2つの処理ができましたので、ミックスの数値を変更しただけでこれらの処理が同時に行われるようにします。重複しているオブジェクトを削除して繋げていきます。

まずは「キャリアのみ」側のミックスのナンバーボックスを削除し、RM側のナンバーボックスを繋ぎました。

次に、キャリアの信号は同じものを使用したいので片方を削除し、もう一つから信号を貰いました。

最後に[ezdac~]を1つ削除し、2つの信号を[+~]で接続し直しました。

最後に整形して終わりです。

AMの場合

AMは2つの信号をミックスするのではなく、モジュレータの振幅を変更するだけです。RMではモジュレータの振幅を0にするとキャリアの信号がならなくなるため、2つの信号に分けていました。

AMとミックス用のナンバーボックスを用意します。

ミックスのナンバーボックスを[scale~ -1 1 0 1]の第5インレットに接続します。ここは出力範囲の最大値の設定になります。0~1を送ることでモジュレータ振幅の最大値も0~1の設定になります。

これで完成です。

実際の使用方法

実際に使用するときは画像のようにキャリアをサンプルにしたり、モジュレータやミックスを[function]や[adsr~]を使ってエンベロープを書くことが多いと思います。

マイクからの信号をキャリアにして、喋るとボイスチェンジャーになって面白いです。

記事をシェアする: