top of page

MAX 7 MIDI基礎5

ノートメッセージにおいて、ノートオンが送信された後に必ずノートオフが送信されなければ、"音の鳴りっぱなし"という現象が発生する。実際にMIDIを扱うプログラムを進めていると、ノートオンに対応すべき適切なノートオフが送信されないケースもある。

例えば、noteinで受信したノートメッセージのノートナンバーに一定の値を加え、キートランスポーズする際、鍵盤を話す前(ノートオフを送信する前)に変更してしまうと、オフを受信していない前のノートが鳴りっぱなしに鳴ってしまう。

flushオブジェクトを使用することで、この現象を解決することが出来る。

flushオブジェクトは、左右のインレットにノートナンバーx・ベロシティyの数値を受け取ったとき、そのまま通過させるのと同時に、内部に一時的に格納する。この格納された状態で左インレットにbangメッセージを受け取ると、flushオブジェクトは内部に格納していた先程のノートナンバーx・ベロシティyを,

ノートナンバーx・ベロシティ0に変えて出力する。これをnoteoutオブジェクトと組み合わせると、いつでも強制的に鳴りっぱなしのオフにすることができる。

一方、sustainオブジェクトはホールド(鳴りっぱなし)状態を意図的に作り出し、トリガーを受けて解除するものである。一件flushオブジェクトと同じようであるが、sustainはピアノのダンパーペダルのように意識的にその状態を作ったり解除したりする。

ここでは、MIDIコントロールチェンジ64の定義を利用してsustainのコントロールに使用している。サスティンオブジェクトは、受け取ったノートオフを出力せず一時的に格納し、オフになった時に一気に出力する。サスティンの値は、オン127またはオフ0のどちらかのため、ここでは127と同じ値の時にオンを通過するようにしている。

makenoteオブジェクトは、ノートナンバー、ノートオンベロシティ、デュレーション(音の長さ)という3つの要素を受け取って、ノートオフまで至るオブジェクトである。

下のパッチでは、stripnoteオブジェクト(ノートオンのみ通過)と組み合わせて使用している。

しかしながら、チャンネル自体がノートオフ前に変わってしまうと、上記のflushもmakeoutも通用しなくなってしまう。そこで、すべてのMIDIチャンネルに対して全てのノートナンバーでノートオフを強制的に作り出すパッチを作る。

ここではuziオブジェクトを2つ用いて、0〜127の各ピッチ番号に対して、全てがベロシティゼロである[0,0][1,0][2,0][3,0].......[127,0]のリストを16チャンネル分、noteoutオブジェクトに送ることで実行されるパッチである。

最新記事
アーカイブ
タグから検索
bottom of page