August 27, 2017

Please reload

最新記事

MAX 7 MIDI基礎5

August 23, 2017

 

ノートメッセージにおいて、ノートオンが送信された後に必ずノートオフが送信されなければ、"音の鳴りっぱなし"という現象が発生する。実際に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オブジェクトに送ることで実行されるパッチである。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Share on Facebook
Share on Twitter
Please reload

タグから検索
Please reload

アーカイブ
  • SoundCloud Social Icon

■当サイト音源や動画を著作者の許諾なく、営利目的・商用使用することを禁止します。

■著作物を個人的に楽しむ場合などを除き、著作権利者の許諾を得ないで複製 (録音)などを行うことは、著作権法で禁止されています。

Copyright © 2015 kuu-sou sound creations. All Rights Reserved.