[MaxTips_9] MIDIノートメッセージのランダマイズ
こんにちは、首藤です。
本来のMaxの使い方とも言える、MIDIプログラミングですが、
今回は、ノートメッセージのランダマイズを実現してみたいと思います。
MIDIのノートメッセージは[ノート番号,ベロシティ値]で、
ベロシティ値が0のときはノートオフ、1以上のときはノートオンとなります。
ノートオン時にピッチがランダマイズされても、適切にノートオフできるように、
発音中のノート番号の変換テーブル、発音の有無を調べるためのベロシティテーブルを用意する必要があります。
ノートの入力

noteinオブジェクト等で入力されたベロシティ値から、
ノートオン・ノートオフで処理を分岐します。
ノートオンの処理

処理の流れ
- 入力ベロシティ値を格納
- ランダムなノート番号を生成
- 生成されたノート番号を元に、ベロシティテーブルで発音状況を確認
- 発音中であればノートオフ
- ベロシティテーブルを更新してノートオンを出力
- ノートテーブルを更新
ランダマイズのアルゴリズムは、[p randomNoteNum]の中に組み立てます。

ノートオフの処理

処理の流れ
- ノートテーブルをチェックして、対応するノート番号を取得
- ベロシティテーブルをで発音状況を確認
- 発音中であればノートオフを出力
- ベロシティテーブルを更新
テストしてみる

実際に試してみると、ノート番号がランダマイズされ、
ノートオフ時にはちゃんと対応するノート番号が出力されていると思います。

使い回せるように改造
作ったものをパッチャーオブジェクトとして再利用できるように、
tableオブジェクトの名前に[#0_]を加えます。

こうすると、このパッチが他のパッチから呼び出されたときに、#0の部分に固有の番号が割り振られ、
ローカル変数としてtableオブジェクトを参照できます。

ランダマイズ部分をいじってみる

[randomNoteNum]の中身を目的に合わせて改造します。
今回は、確率や、変動範囲、オクターブなどを、親パッチから受け取れるようにしました。
せっかくなので、ベロシティもランダマイズできるようにしてみます。

入力のベロシティ値に[p randomVelocity]を挟みます。

入力ベロシティを確率や変動範囲でコントロールできるようにしました。

親パッチから数値を受け取れるように入力をつけて、Maxサーチパス内に保存すると、
パッチャーオブジェクトとして、いつでも使い回せるようになります。

No comments yet. Be the first.
Leave a reply
