MIDI NoteNo & Velocity Macro Patch For Quartz Composer2010年12月28日 20時13分10秒



File Download

(改良のため一時公開停止)


Quartz Composer にデフォルトで用意されているMIDI関連パッチは、非常にシンプルなもので、どのくらいシンプルかと言うと、例えば、ノートナンバーすら、そのままでは出力してくれません。

音名(C3、E4、etc…)ごとに出力ポートはありますが、それぞれのポートからはベロシティが0~1の値で出力されるだけです。


MIDI機器から送信されたノートのノートナンバーとベロシティを1つのポートへ出力するには、そういうパッチを作るしかありません。

JavaScriptですっきりしたパッチを作って公開している人や、海外のサイトにもいくつかカスタムパッチを公開している人がいたので、それを利用させてもらっても良かったのですが、ノートナンバーとベロシティ共に『キーオフ時に必ず出力される " 0 " を通過させるかさせないか』選択したい場合もあって、結局自分で工夫する事にしました。


で、まあ一応できましたが・・これ、JavaScriptならほんの数行で済むわけで、でもJavaScriptの知識が無い私は、こんな力技で作るしかなかったんです。

みっともないですけど、ちょっと壮観でもあるので写真のせます。

嬉しがりで恥知らずの初心者まるだしって事で(笑)

(*現在のものはもう少しすっきりしています)


で、これを纏めたのが下の画像の左端のマクロ。

変換の為の接続をここで作って、さらにこれをマクロに纏めたのが最初の画像です。

(*ここも現在のものはもう少しすっきりしています)


ノートナンバーとベロシティを1つのポートへ出力する為だけに、これって、JavaScriptを使わないにしたって、絶対にもっとスマートなやり方があるはずですよね。

それを教えてもらえるかも、という期待で(恥を忍んで)公開する事にしました。


Add To Library してみましたが、やり方が間違ってるのか出力ポートの無いパッチになってしまうので、ファイルごと公開します。

(この日記の一番上 File Download をクリックすると直ちにダウンロードされます)

ついでに、すぐ確認できるように数値をモニターする部分を作り付けておきました。


全ノートナンバー作るのも大変だったのでC1からE5までです。 

*改良しました。NoteNo=0 (C-2) から NoteNo=119 (B7) まで、QCで可能な全ノート使用できます。


ポートの名称で判ると思いますが、ノートナンバーがそのまま整数で出力されるポートや、0~1に変換や、座標で使いやすいように-1~+1に変換した値を用意してあります。

それから {Without NoteOff Zero} と書かれた所より下、ポート名に (nz) と追記してあるポートからは、キーオフ時にも  " 0 " が出ません。

ここ数日、この機能が一番欲しくて、回転の悪い頭を絞って考え続け、やっと Sample & Hold と Logic(論理演算パッチ)を組み合わせれば可能である事に気づいたのでした。

この部分も含め、もっと洗練された構造を教えて下さると言う方、いらっしゃいましたら何卒宜しくお願いいたします。

あ、ただ、JavaScriptを使わない方法で(笑)


これは公開用に普通の設定にしてありますが、自分用はギターシンセからの制御に最適なように、ノートナンバーもE1(40) から E5(88)まで、つまり6本弦の24フレットギター全音域を、1から49に変換したり、ベロシティ値にバイアスをかけたりしています。


このパッチの問題点は、レガートで弾いた時(先に弾いたノートを離さずに次のノートを弾いた時)には、高い音優先である点です。

中身を見てもらうと判りますが、Math の設定を Max(または Min)にするしかなかったからで、ここを作り替えて「後着優先」にする方法を考え中です。