シンセサイザーで複数の音を鳴らすには、その数分のオシレーターを用意する必要があります。しかしMaxで素直にそれを作るにはオブジェクトが多くなりすぎて管理が大変になります。[poly~]オブジェクトを使用すればオシレーター部分を1つ用意して、いくつにも複製することが可能です。
目次
オシレーター・パッチを作る
ノートナンバーでオシレーターをコントロール
ノートナンバーを受けたら[mtof]を使用して周波数に変換します。周波数の数値は[cycle~]に送ります。
エンベロープを描く
[function]オブジェクトに図のようなエンベロープを描きます。
ノートナンバーと[mtof]に間に[t i b]を挟み、ノートナンバーを受けたらエンベロープを描くようにします。[cycle~]の音量は[*~]でエンベロープの値と乗算されて、カーブが描かれます。
入出力を設定する
これまで作った処理は[poly~]の中で使用されます。[poly~]にノートナンバーを出力すると、音声を出力するような処理にしたいので、インとアウトを設定します。
ノートナンバーとなるナンバーボックスに[in 1]を、[*~]を[out~ 1]に繋げました。[in 1]は[poly~]の第1インレットに入力したメッセージが入ってきます。[out~ 1]は[poly~]の第1アウトレットに出力します。
[thispoly~]にシグナルを送ると、いまこのオシレーターは使用されているかどうかを[poly~]に教えることができます。音声が流れていれば使用中、流れていなければ使用していないことになります。
保存する
ここまでできたらパッチを保存します。
「synth.maxpat」という名前で保存してください。
コントロール・パッチを作る
それでは[poly~]を扱う側のパッチを作っていきます。
パッチの保存
新しいパッチ・ウィンドウを作ってください。そしてそれを、先程のsynth.maxpatと同じ階層に保存してください。
「poly-synth.maxpat」という名前で保存しました。同じ階層にあるパッチは、パッチ上ですぐに呼び出すことができます。
[poly~]を置く
[poly~ synth 16]というオブジェクトを作ってください。この「synth」は同じ階層に保存した「synth.maxpat」のファイル名です。「16」は複製するオシレーターの数になります。
[poly~]にエラーがなければオブジェクトが生成されます。ダブルクリックすると先程作ったパッチが見られます。
鍵盤を作る
[kslider]を用意します。MIDIキーボードを使用したい方は[notein]を用意し、図のように接続してください。
ノートオンの情報だけを抜き出したいので[stripnote]に接続し、ノートナンバーを取得します。
[poly~]にノートナンバーを送る
[poly~]にノートナンバーを送る際に「note ノートナンバー値」という形式にすると、ポリフォニー化できるようになります。
ノートナンバーを[prepend note]に繋ぎ「note ノートナンバー値」のメッセージになるようにします。それを[poly~]に繋ぎます。
音量をコントロール
ポリフォニックが同時になると音量が大きくなりますので、コントロールできるよう[live.gain~]に接続します。[poly~]のアウトを[live.gain~]の第1インに接続し、第1アウトを[ezdac~]のLRに接続してください。
[live.gain~]はMax for Liveのオブジェクトですが、レベルの確認とコントロールが1つのオブジェクトでできるので便利です。
これで完成となります。鍵盤(kslider)を操作してポリフォニックになっていることを確認してください。