vvvvでMIDIを使う

Pocket

音と同期するならMIDIが便利だ!

と、別にMIDI自体新しい技術ではないし今更感が満載だけど、前回のライブで使用したところ、
本当に便利だし楽しいという感想。
もっとMIDIを活用したい。

前回のライブではキーボードからMIDIデータを送ってもらったが、
その時はこんなセッティングをしてみた。
[キーボード]->[MIDIケーブル(5m)]->[延長アダプタ]->[MIDIインタフェース]->[PC]


MIDIインタフェースはUSBでPCに接続する。接続してドライバーをインストールすればすぐにvvvvで使えるようになった。
ちょっと苦戦というかライブ前日まで慌てていたのがMIDIインタフェースとMIDIケーブルをつなげる延長アダプタがなかなか手に入らなかったこと。
都内の楽器屋さんを何店舗か尋ねたけどどこにも置いておらず、店員さんに聞いてもそんな商品は見たことない、と言われる始末。(ネットで調べたらあったけど(;’∀’))
結局、Amazonで購入。ライブ前日に届きなんとか間に合った!

ライブではMIDIのデータ自体を受信したか否かをトリガーに何か映像を出す、
みたいな本当に単純な使い方しか出来ていなかった。
MIDIデータには音階や音の強さなどの色々な情報が入っているので、
ちょっとMIDIについて勉強して使いこなせるようになりたい、ということで今回はvvvvでMIDIを使ってみる。

ちなみに、これはvvvv Advent Calendarの2日目の記事となっている。
これを書いている時点ではまだ数枠余っているのでどうぞお気軽に是非参加してみてください。

MIDI入門

ひとまず、MIDIには次の様な情報が含まれているというのを覚えておく。

Channel: 楽器ごとに分れていたりする。1~16がある。
Note: 音階。0~127がある。
Velocity: 音の強弱(鍵盤を叩いたときの強さ)。
Note On/Off: Noteの受信開始/終了の合図。
Gate Time: Note OnからNote Offまでの長さ。
ControlChange: 音の大きさなど。
ProgramChange: 音色の切り替え。

以下のサイトが参考になった! ありがとうございましたm(__)m

MIDIについて詳しく書かれているサイト
MIDIメッセージ一覧
Noteの対応表

MIDIデータを送るために今回使った機器はこちら。
KORG USB MIDIコントローラー NANO PAD2

割と安価で、タッチパッドもついている優れもの。
専用のEditorをインストールすれば、送信するMIDI情報の編集が可能になる。
例えば、MIDIデータを送るChannelを変更したり、ボタンにNoteを割り当てたり。
どの操作をするとどんなMIDI情報が送信されるのかはこのEditorを使ってみるとわかりやすい。
nanopad2editor2
nanopad2editor1

vvvvでMIDIを使う

MIDIについてはvvvvの公式ドキュメントもあるし、サンプルパッチも充実しているので、
何かデータ来てるなー、というところまではすぐに試せると思う。
http://vvvv.org/documentation/howto-midi
サンプルパッチは
{vvvvインストールフォルダ}\girlpower\IO\Midi
以下に沢山ある。

vvvvのMIDI関連のノードを見ると、大きくMIDIを受信するノードと送信するノードの2種類に分けられる。
個人的にMIDIを送信するモチベーションは無いので、主にMIDIを受信するノードについて調べた。
演奏と同期させるくらいなら次の3つのノードについて知っていればひとまずは大丈夫かなと思う。

  • MidiNote
  • MidiController
  • MidiShort

MidiNote

MidiNoteはNoteの情報を受け取ることができる。
OutputピンにはVelocityが出力される。
以下はNote番号37にVelocity=0.6457を受信したときの例。
簡単!
midi_received

MidiController

CCを受け取るためのノード。
正直CCはあまりライブ中には使わないかもしれないなぁ。。。(本当に?)

以下はCCを受け取った時の例。
Nano Pad 2ではタッチパッドをぐりぐりすると(初期設定では)CCを送ることができるようになっている。

midi_cc_received

MidiShort

Note On/Off、Gate TimeはMidiShortノードを使うと便利。
このノードの出力はMIDI初心者にはちょっとわかりづらい。

以下はMidiShortでNote On/Offを受け取った時の例。
(Velocityを比較するために左にMidiNoteも置いている。)
上がNote Onで下がNote Off。

midi_note_on_off

まずMessageピン。
Note Onの時、144という数字が出力される。16進数で変換すると80。
これの意味はMIDIメッセージ一覧を参考にすると、
チャンネルボイスメッセージの欄に”第一バイト=9n hex”ならば”ノートオン”と書かれている。
90という数字が出力されているので、
Channel=0だとわかる。

次に、Data1ピン。
37と出力されている。
また先ほどのサイトを参考にすると、
チャンネルボイスメッセージの第2バイトにノート番号と書かれているので、
37番のNoteを受信したことがわかる。

そして、Data2ピン。
これも先ほどのサイトを参考にすると、
チャンネルボイスメッセージの第3バイトにベロシティと書かれているのでVelocity情報が出力されていることがわかる。
ただ、この数字の範囲は0~127らしい。
MidiNoteノードではVelocityは0~1の範囲で出力される様なので、
Mapを使って0~1を0~127の範囲に割り当ててみると、
MidiNoteとMidiShortで値が一致していることがわかる。

最後にTimestampピン。
名前の通りタイムスタンプが出力されているのでNote Onの時とNote Offの時の値を比較すれば、
Gate Timeが出せそうだ。

試しにパッチを書いてみた

MIDI入門としてはざっとこの様なところだろう。
折角なので学んだことを活かしてパッチを書いてみた結果がこちら。

circles.zip

Velocityの大きさによって円の大きさを変えている部分と、
Note Onを判定して円を表示している部分が前回からの進歩かな、ちょっとだけ。

ということで、以上vvvvでMIDI入門でした。

(余談)

本題とずれるがやっぱりまだvvvvのパラダイムが腑に落ちていない。。。
たったこれっぽっちのパッチだが(MIDIとは関係ない部分で)すごい時間がかかってしまった。
Spreadsを扱っていると、クラスでカプセル化しないで数種類の配列を添え字で管理している様なやりにくさを感じる。Spreadsの本質を理解してないのだろうか。不安な気持ちになる笑
今回の円の様に出現->成長->消滅みたいなライフサイクルを持ったものを考えたときについつい円クラスを作ってSizeだのAgeだのは各インスタンスでそれぞれ管理して欲しくなる。
そう感じたときはノードではなくてコードを書くべきなのかしら(^^;)

あとAsRowとかAsStringとかでよくわからないことをやっている部分があるがこれはΦが来た時に挙動がおかしくなるのをどうにかしたくてこんなことになっている。
“isΦ”的なノードは無いだろうか笑

コメントを残す

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

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください