[MaxTips_9] MIDIノートメッセージのランダマイズ

こんにちは、首藤です。
本来のMaxの使い方とも言える、MIDIプログラミングですが、
今回は、ノートメッセージのランダマイズを実現してみたいと思います。

MIDIのノートメッセージは[ノート番号,ベロシティ値]で、
ベロシティ値が0のときはノートオフ、1以上のときはノートオンとなります。
ノートオン時にピッチがランダマイズされても、適切にノートオフできるように、
発音中のノート番号の変換テーブル、発音の有無を調べるためのベロシティテーブルを用意する必要があります。

ノートの入力

maxtips09_01

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

ノートオンの処理

maxtips09_02

処理の流れ

  1. 入力ベロシティ値を格納
  2. ランダムなノート番号を生成
  3. 生成されたノート番号を元に、ベロシティテーブルで発音状況を確認
  4. 発音中であればノートオフ
  5. ベロシティテーブルを更新してノートオンを出力
  6. ノートテーブルを更新

ランダマイズのアルゴリズムは、[p randomNoteNum]の中に組み立てます。

maxtips09_03

ノートオフの処理

maxtips09_04

処理の流れ

  1. ノートテーブルをチェックして、対応するノート番号を取得
  2. ベロシティテーブルをで発音状況を確認
  3. 発音中であればノートオフを出力
  4. ベロシティテーブルを更新

テストしてみる

maxtips09_05

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

maxtips09_06

使い回せるように改造

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

maxtips09_07

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

maxtips09_08

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

maxtips09_10

[randomNoteNum]の中身を目的に合わせて改造します。
今回は、確率や、変動範囲、オクターブなどを、親パッチから受け取れるようにしました。

せっかくなので、ベロシティもランダマイズできるようにしてみます。

maxtips09_09

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

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

maxtips09_13

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

maxtips09_12

サンプルファイルのダウンロード

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>