ということで私も完全には理解してないですし教えてほしいことも多いくらいなんですけど、
TouchDesignerの記事書きます。
この方法が正解ではないし私もプログラミング畑の人ではないのでもっと効率の良いシステムの組み方あるとは思うのですがとりあえず私はこうやってます!みたいな記事です。
場合によってですが、
①ひとつのMIDIコンで2つ以上のソフトを動かしたい
(LaunchPadとかだと公式のツールでch分けまではいけますが複雑な動作組みたいときとかにも応用できます)
②ゲームパッドやキーボードショートカットなどの入力をMIDI信号として出したい
③音に反応してMIDI信号を出すようなシステムを作りたい
④なんかプログラミング的に絵を作りたい(音に反応する!のを細かくいじりたい、とかDJさんの体にオブジェクト追従したりとか)
⑤VJシステムを自分なりに組みたい
③-⑤は詳しい人に聞いてください…ですが①-②ならなんとか現場で使えるようにはしたのでどうやってるのか書いてみます。
そもそもTouchDesignerって?。
私も説明できない…
まあ、クリエイティブコーディングとか呼ばれるやつです。
基本的な使い方は下記のサイトにあります。
とりあえず初歩的なやつとして、
・VDJとResolumeをナノコン1台で動かすやつ
・VDJとrekordboxの再生ボタンを連動させるやつ(レコボリリック向け)
つくってみます。
必要なソフト
・TouchDesigner
非商用の範囲なら無料で使えるみたいです。商用のみ料金が発生します。
https://derivative.ca/download
このサイトの「Get TouchDesigner」からPCにあわせてダウンロードしてください。
・LoopBe1
仮想MIDIドライバです。MIDI信号を受け取ったり送ったりできます。
こちらも非商用なら無料です。
一番下のsetuploopbe1 から落とせます。
各ソフトをDLし、インストールしてください。
下準備
loopBeMonを起動します。
TouchdesignerでMIDIコン等の初期設定をします。
1.MIDIコンを使う場合は接続し、TouchDesignerを開く。
2.「Dialogs」→「MIDI Device Mapper」→「Create New Mapping」でMIDIコンを追加します。
3 .信号を変換したいMIDIコンと「LoopBe Internal MIDI」をIn DeviceとOutDeviceに登録します。
ここまででMIDIコンの設定はOKです。
あと、Preferenceより「Stop Playing when Minimized」を✕にします。(これをしないとTouchDesignerがアクティブじゃないときに機能が使えません)
ここまでが初期設定です。
基本的なMIDI信号変換について
実際にMIDIコンの信号を変換してみます。
使うOperator(部品)について軽く説明します。
「MIDI IN」「MIDI OUT」…MIDI信号を受け取ったり拾ったりします。
「Select」…前のCHOPの成分を選んで抜き出します。信号の名前を変える機能
もついてます。
「Merge」…信号を統合します。
1.File→Newで新規プロジェクト作成。
2.右クリック→ADD OperatorからCHOP→「MIDI In」を選んで配置します。
3.MIDIコンの対応させたいキーやフェーダーを動かすとこんな感じで数字が出ます。
127→そのフェーダー等の大きさ
ch11→MIDIチャンネル
ctrl24→MIDIのCCとかNoteとか(どこのボタンを押したかを識別するやつ)
です。
4.右クリック→Add OperatorからCHOP→「Select」を選んで配置し、さきほどのMIDI INとつなげます。
5.Selectの設定画面より以下のように設定します。
Channel Names:右の三角印から反応させたいMIDIコンのボタン等を選びます。(手順3で動いたもの。)
Rename to:ch〇〇c〇〇またはch〇〇n〇〇
(使用していないチャンネルを入れてください。)
c〇〇はCCと呼ばれる信号を出します。
nはNoteと呼ばれる信号を出します。
少し挙動が異なりますがCCはフェーダーやノブ、Noteはボタンにおすすめです。
6.右クリック→Add OperatorからCHOP→「Merge」を選んで配置し、さきほどのSelectとつなげます。
6.右クリック→Add OperatorからCHOP→「MIDI OUT」を選んで配置し、さきほどのMergeとつなげます。
7.MIDIOutを設定します。
まず、「Dest」からDevice IDをさきほどMidi Device Mapperで「LoopBe Internal MIDI」に設定したIDにします。
次に値の補正のため、「Note」「Control」から「Normalize」を「None」にします。
これでとりあえずひとつのキーやフェーダーのMIDI信号変換までできました。
8.複数設定したい場合はSelect2...を同様に作りMergeにつないでいく。
select1まとめて書く方法もありますがRenameトラブル起きやすいみたいなので私はこのほうが好きです
Mergeを使わない書き方もありますが個人的には上の方がRenameの対応がわかりやすかったり機能拡張しやすい気がする・・・
お好みで。
結局midiout1に集約されてればOKです。
これで仮想MIDIコンとして動きます。
例えばVirtualDJで使用したい場合だと、コントローラーに「loop Be Internal MIDI」なるものができています。これが仮想MIDIコンになります。
アサインしたいフェーダー等を動かすと右のところに「12-SLIDER23」等が出るので、そこに設定します。
フェーダーやノブであれば「SLIDER」ですね。
こんなふうにして設定していきます。
使用するときはLoopBe1とTouchDesignerを立ち上げればOKです。
使用例1:ResolumeとVirtualDJをひとつのコントローラーで動かす
通常だとこの動作できないんですがTouchDesignerを通すといけます。
TouchDesignerでこんな感じに組みます。
フェーダーやノブ系は「ch〇〇c○○」系にRename。
ボタンは「ch〇〇n〇〇」系にRename。
これであとはVDJに入りいろいろ設定します。
こんな感じです。
あとはVDJに入り「loop Be Internal MIDI」をMIDIコンとして設定します。
おすすめはこんな感じです。
わたしはBeatJumpと再生停止を振ってます。
スポイトマークで欲しい機能吸い取って前に「deck ○(1,2,left,right)」をつける感じでいい感じにマッピングできるかと。
特にピッチをノブで調整するとやりやすいと思います。
あとはこのままVDJでNanoKontrol2を無効にすれば3-8のフェーダーをResolumeで使うなども可能です。
立ち上げるソフトは多くなりますがUSBハブいらなくなったり荷物減らせるので運用に合う人にはいいかもしれません。
使用例2:VDJとRekordBoxLyricの同時再生
VDJとRekordBoxLyricを同時に再生するボタンなんかもつくれます。
ただしDJ2GO2などのDJコンはVirtualDJとTouchDesigner両方で使えないので、下記のキーボードマッピング変換やNanoPad、LaunchPad等を使うことになるかと思います。
シンプルに信号変更するやつだけ作ります。
今回はCh13をVDJ、Ch14をRekordboxとします。
2つのソフトに「LoopBe Internal MIDI」経由で「Play BUTTON」をマッピングする。
VDJでは下記の通り。Ch名、ノート名ともに1少なく表示されるので注意。
Rekordboxの設定に移る前にTouchDesignerでVDJ側をDisconnectしておきます。
RekordBox側でも「LoopBe Internal MIDI」をMIDIコンとしてPlay Pauseをアサインする。
MIDI OUTもアサインされますが、これが入ってると再生と停止が同時に押される挙動になるので必ず空にしてください。
アサインし終わったら、TDのConnectをもとに戻す。
これで設定したボタンを押すとVDJとRekordBoxが同時再生されます。
使用例3:テンキー・ゲームコントローラー・キーボード等をMIDIコン化する
TouchDesignerにはこれらの入力機能がついてるのでMIDI INの代わりに入れるとMIDIコンになります。
右クリック→「Add Operator」内に「joystick」「keyboard in」などがあるので、それを上同様にSelect→Merge→MIDI OUTとつなげればOKです。ただし、このときの入力値はMIDIコンのときは0-127だったのに対しジョイスティックやキーボードでは0-1のため、MIDI OutのNormalizeを0 to 1にしてください。
あと、ジョイスティックをつかうとき十字キーは-1~1の値を出すことになるので、使いたければ信号を分ける必要があります。
「 Select」で信号を分けて「express」で場合分けして「rename」って感じですね。(たぶんもうちょっと簡単な方法があるはず・・・)
1.右クリック→Add OperatorよりJoyStickを追加。Selectで各ボタンを抜き出す。
A,B,X,Yボタンに関してはこんな感じです。
2.十字キーやスティックはちょっと組みにくいです。
Selectで信号を取り出し、Expressで条件分岐します。
難しく見えますが、me.inputValというのは入力された数字で、それが0以上なら1を、そうでなければ0を吐いてください。という感じです。
これの下に「1 if me.inputVal < 0 else 0」というexpressも追加します。
こんな感じです。
それぞれにRenameを接続し、MIDIコンの信号名「ch〇〇n〇〇」に変換してMergeにつなぎます。
これで十字キーやスティックも扱えます。
全体としてはこんな感じになります。
あとは上記同様、使いたいソフトで「LoopBe Internal MIDI」をMIDIコンとして登録し、ゲームコントローラーをいじるとMIDIコンっぽい動作をします。
工夫すればスティックでフェーダー等もいけるかもですが正直難しい気がする。
FAQ
Q1:VDJとかでLoopBe Internal MIDIを登録してMIDIコンを動かしても反応しない
A1:「下準備」を確認し「LoopBe1のソフトが立ち上がってるかどうか」「Stop Playing when Minimized」が✕になってるかどうかを再確認してください。
また、TDを立ち上げてからMIDIコンをつなぐと反応しないことがあります。
Q2:MIDIコンでノブとかフェーダーとか動かすと一気に動いてしまう
A2:MIDI OutのNormalizeの設定がおかしい可能性があります。
「None」か「0 to 1」の正しい方で設定してみてください。
また、VirtualDJの場合、フェーダーを「ENCORDER」「JOG」「BUTTON」のどれでマッピングするかにより挙動が変わるので、しっくり来るものを選んでください。
Q3:構造が複雑なのでかんたんにしたい
A3:ここまでがわたしの限界・・・なので日本語ページとか読むか有識者に聴いてください・・・
ってことで仮想MIDIコンの作り方でした。応用すればMIDIコン減らせたり、操作しやすくなったりといろいろ便利なので、いろいろ試してみてください。