課金せずにVirtualDJでMIDIコントローラーを使用する方法


はじめに


411です。普段はアニソン(原曲)DJとしてちまちま活動していますが、昨今の人手不足の煽りを受けて、最近VJを始めました。経験は浅いしPCがしょぼいのでほぼポン出ししかできません。そんな人間が偉そうに書いています(ちなみに書いている時点で現場0)。


さて、VirtualDJ(以下VDJ、ここではVJとDJを兼ねた人のことではない)でポン出しVJをする際、多くの方がマウスとキーボードマッピングで頑張っていることだと思います。しかし、マウスでは操作精度に難がありますし、キーボードでは直感的にツマミ類をいじることはできません。MIDIコントローラーを持っている方はこう思うことがあるかもしれません。


VDJでコントローラーを使いたい!


ところが、 VDJでコントローラーを使いたい! となったとき、ネックになるのが金額です。VDJのライセンスを購入する必要がありますが、2024年1月23日時点では最低でも$49かかるようです。

少なくとも筆者の手が出る値段ではありませんでした。


そういうわけで、タイトルの通り、VDJに一銭も払うことなくコントローラーを使用できるよう環境を作ったので、どのくらい需要があるかはわかりませんが、メモとして残しておきます。



おおまかに何を行うかというと、

  • MIDI信号をキーボード入力に変換するソフト

  • VDJのキーボードマッピング機能

この2つを利用して、無理矢理MIDIコンの操作をVDJに入力 します。


INOMUSICAさんのこの記事を悪用するものだと言えば、わかりやすいかもしれません。


このとき、以下に挙げるメリット・デメリットがあります。

メリット

  • MIDIコントローラー以外にお金を使わない

  • VDJでMIDIコントローラーを使用することができる


デメリット

  • Windows PC限定

  • 動作が多少不安定

  • マッピングできる操作・数に制約がある

  • セッティングがかなりめんどくさい

  • ルーティングが複雑

  • なんか恥ずかしい

(デメリットのほうが大きそう)



用意するもの


  • MIDIコントローラー

この記事では怪しい中華製の「WORLDE EASYCONTROL.9」というコントローラー(6k~8kくらい)を使用していますが、特に理由がなければ、よくおすすめされているKORGのnanoKONTROL2などを使用するのが良いかと思います。価格も大して変わらないです。


WORLDE EASYCONTROL.9
ちなみに私は9ch縦フェーダーと横フェーダーに惹かれて買いました。横フェなんてVDJのためにあると言っても過言ではないと思います。(あとnanoコンはユーザーが多すぎてなんか面白くない
KORG nanoKONTROL2
VJ機材 定番中の定番


EASYCONTROL.9は現状特に問題なく使用できていますが、パーツの精度はあまり良いとは言えないですし、何か不具合が起きたとき、ソフトと設定だけでなくコントローラーも疑う羽目になります。特に理由がなければ、動作が安定しているまともなメーカーのものを買うのが安泰です。

EASYCONTROL.9のレビューが少なすぎて困ったので、買って1か月くらいで気になった点だけここに少し書いておきます。私のように中華機材が大好きな人は参考にしてください。

ツマミと目盛りの可動域が少しずれている(0/127は問題なく出力される)。フェーダーを素早く動かすと信号が飛ぶことがある。
チャンネルが混線しているという情報を書いていた人も見ましたが、私の個体ではそのようなことは起きていません。特に不満なく使えています。


  • Virtual DJ

VDJのインストールについては詳しく解説されているサイトが大量に転がっていると思うので割愛します。キーボードマッピングを変更するので、バックアップは取っておいてください。

キーボードマッピングの設定ファイル(XMLファイル)は、デフォルトでは 'Documents/VirtualDJ/Mappers/' 内に保存されていると思います。


  • Midikey2Key

"MIDI信号をキーボード入力に変換するソフト" です。リンクから適当にインストールしてください。

"MIDI信号をキーボード入力に変換するソフト" は複数試しましたが、Midikey2Key以外では触れる設定が少なく、VDJのボタンやフェーダーにまともに割り当てられませんでした。もっといいのがあったら教えてください。


ちなみにバグもあったりするらしい。(↓全く知らない人のツイート)

筆者の環境では、作成したプリセットを読み込んでも初回はうまく動作せず、毎度ソフトを再起動する必要がありました。


  • Orakuin

キー入力を可視化するソフトです。必須ではありませんが、うまく動かない時の原因特定などに非常に役に立ちます。

Orakuin使用時


  • Excel

言わずと知れた表計算ソフト、Excel。フェーダーのマッピングを考えている人は、パラメーターがちょっと変わっただけのスクリプトなんてわざわざ書くのは馬鹿らしいので、Excelを使いましょう。持っていない人はGoogle スプレッドシートで代用できると思います。オートフィル最高 ❗


このあたりの準備が終わったら、VDJの設定に入ります。



VDJのマッピング


機能の絞り込み

VDJのキーボードマッピング機能を使って、コントローラーを使いたい操作にショートカットを割り当てていきます。ここでは、フェーダーもMIDI信号のそれぞれの値に一つずつショートカットを割り当てます。

つまり、コントローラーのフェーダーが0~127(00~7F)の信号を出力するとき、理想的には128個のショートカットキーを用意して、VDJのフェーダーに一つづつマッピングを行えれば、MIDIマッピングと同等の効果を得られます。


とはいえ、キーの数には限りがあります。ショートカットキーに使用できるのはせいぜいCtrl・Shift・Alt・A~Z・0~9・F1~12くらいです( '.' や ';' などの記号類はMidikey2Key→VDJ間でうまく機能しないようです)。

まして、数本のフェーダーに設定するなんてとてもできません。そこで、フェーダーの解像度を落とすか、機能を制限する対処が必要になります。(上記デメリットで「マッピングできる操作・数に制約がある」と書いたのはこのためです。)

筆者はコントローラーの10フェーダーのうち3本をVDJに使用し、VDJのクロスフェーダーと左右のピッチフェーダーに割り当てていますが、クロスフェーダーは0~100%で33段階(3.125%刻み)、ピッチフェーダーはそれぞれ90~110%で11段階(2%刻み)として実装しています。


どうしても操作にMIDIコンが必要なVDJのパラメーターは何か、よく検討しておきましょう。

※ボタンからMIDI信号を送る場合は、ボタンとショートカットキーが一対一となるので、そこまでマッピングを圧迫しません。頑張ってボタンで代用するというのも一つの手です。



マッピングファイルの書き込み

必要なショートカットやパラメーターの割り振りが決まったら、実際にVDJのマッピングを行います。

といっても、VDJの設定画面から一つ一つマップを設定するのは正直しんどいです。そこで、先ほどバックアップを取ってもらったのと同じ、キーボードマッピング用のxmlファイルを、Excelを利用しながら作成します。


クロスフェーダーのマッピング
	<map value="CTRL+SHIFT+A" action="crossfader 0%" />
	<map value="CTRL+SHIFT+B" action="crossfader 3.125%" />
	<map value="CTRL+SHIFT+C" action="crossfader 6.25%" />
	<map value="CTRL+SHIFT+D" action="crossfader 9.375%" />
	<map value="CTRL+SHIFT+E" action="crossfader 12.5%" />
	<map value="CTRL+SHIFT+F" action="crossfader 15.625%" />
	<map value="CTRL+SHIFT+G" action="crossfader 18.75%" />
	<map value="CTRL+SHIFT+H" action="crossfader 21.875%" />
	<map value="CTRL+SHIFT+I" action="crossfader 25%" />
	<map value="CTRL+SHIFT+J" action="crossfader 28.125%" />
	<map value="CTRL+SHIFT+K" action="crossfader 31.25%" />
	<map value="CTRL+SHIFT+L" action="crossfader 34.375%" />
	<map value="CTRL+SHIFT+M" action="crossfader 37.5%" />
	<map value="CTRL+SHIFT+N" action="crossfader 40.625%" />
	<map value="CTRL+SHIFT+O" action="crossfader 43.75%" />
	<map value="CTRL+SHIFT+P" action="crossfader 46.875%" />
	<map value="CTRL+SHIFT+Q" action="crossfader 50%" />
	<map value="CTRL+SHIFT+R" action="crossfader 53.125%" />

スクリプトの記法については、VDJ公式等を参照してください。



マッピングの確認

xmlファイルが作成できたら、VDJを再起動してマッピングを読み込みます。実際にキーボードを押して、想定した通りの動作ができるか、確認しましょう。



Midikey2Keyの設定


画面のみかた

MIDIコントローラーを接続してからMidikey2Keyを開きます。

メインウィンドウ


File→Newを選択し、設定ファイル(以下「カスタム」)を作成します。場所は多分どこでも大丈夫です。このカスタムを設定して使用する、という流れになります。

カスタムの作成


「Midi devices」のインプットで使用するコントローラーを選んだら、右上の「Start」ボタンを押してMIDI信号の受け取りを始めます。ログを利用して設定するので、「Log To Window」にチェックを入れます。

コントローラーのボタンやフェーダーに触るとMIDI信号が送信され、
送られたデータの一覧が表示される

これで、Midikey2Keyが利用できるようになりました。



手動で設定する方法

コントローラーのボタンに「T」というキーを与えることを考えます。

使いたいボタンを押下して離すと、以下のようなデータが送られました。
(※ログファイルを生成して取り出したものなので、ウィンドウに表示されるログとは上下が逆で、上→下で古→新となっています。)

DATA  | STS  | CMD | CH | DATA1 | DATA2 | DESCRIPTION

B0177F|  B0  |  B0 | 01 |  17   |  7F   | CNTL ContinuousControllerNo23 Val=127
B01700|  B0  |  B0 | 01 |  17   |  00   | CNTL ContinuousControllerNo23 Val=0

B00117からは、ボタンを押したとき127(7F)、ボタンを離したとき0(00)の2回、データが送られています。


ボタンを押したとき、つまり1回目に送られるVal=127のログをダブルクリックするとキーをアサインするウィンドウが表示されます。

キー設定画面


キーを設定して、「Wait for NoteOff」にチェックを入れます。これが外れていると、ボタンを離したときにも同じデータが送信されてしまいます。

設定したらSave


メモ帳などを起動してボタンを押してみると、「t」が入力されています。アルファベットのほか、数字(D0~9)、F1~12、Ctrl、Shift、Alt、Winキーなど様々なキーが設定できるようです。

正常に動作


これで、Midikey2KeyでMIDI信号の変換設定が完了しました。設定を変更するたびに、iniファイルは更新されるようです。

次に、iniファイルを直接書き換えて設定する方法を示します。



設定ファイルの書き込み

設定ウィンドウを逐一開くのはかなりの手間なので、iniファイルを直接編集して一括で設定します。

ただし、Midikey2Key公式はこれを推奨していませんので、各自の判断で行ってください。

Note: The first time you exit MidiKey2Key after you did some things with it, it will generate a folder named "Midikey2Key" in your documents-folder. The file settings.ini keeps all program-settings, like i.e. its last window-position and all your programmed actions too. It is not recommended, to edit this file manually!

https://midikey2key.de/help.php


前述の方法でいくつかテストを行ってカスタムを作成し、それを参考にしながら新しくiniファイルを作成します。

Tips
ボタンの設定時→Wait for NoteOffにチェック(Hold=1)
フェーダーの設定時→Wait for NoteOffのチェックを外す(Hold=0)
ただし、フェーダーの端(Val=0,127)はHold=1に設定しておくと安定するようです。


Microsoft Excel オートフィル様
[Action120]
Data=B03C7C
Name=crossfader100
Comment=horizontal_fader Val=124
Keyboard=Control+Shift+F7
WindowState=0
SendMidi=0
ControllerAction=0
KeyboardB=Control+Shift+F7
Multiplier=1
KeyboardDelay=0
TS=0
Start=
Arguments=
SendMidiCommands=
SendMidiCommandsB=
Hold=0
[Action121]
Data=B03C7D
Name=crossfader100
Comment=horizontal_fader Val=125
Keyboard=Control+Shift+F7
WindowState=0
SendMidi=0
ControllerAction=0
KeyboardB=Control+Shift+F7
Multiplier=1
KeyboardDelay=0
TS=0
Start=
Arguments=
SendMidiCommands=
SendMidiCommandsB=
Hold=0

筆者の環境では、フェーダー3本+ボタン10個+ツマミ1個に対して計128個のショートカットを設定しました。ただしこれは一対一でなく、フェーダーの値が124~127に対して「Ctrl+Shift+F7」を出力する、といった重複をもたせています。
※先述の通り、このコントローラーは値が飛ぶことがあり、確実に1回は反応させるための設定なので、精度の高いコントローラーでは不要かもしれません。



動作確認


ここまで終わったら、実際にVDJとMidikey2Keyを立ち上げ、コントローラーの動作が正常に伝わるか確認しましょう。

起動する順番はコントローラー接続→Midikey2Key→VDJです。Midikry2Keyを立ち上げて前章で作成したカスタムを読み込みますが、大抵一度目はまともに動かないので、一度ソフトを再起動して、読み込み直します。


Orakuinなどもうまく利用しながら、期待した通りの動作ができるか試します。

内田真礼さん



おまけ


筆者はVDJの映像をSpoutでOBSに飛ばして運用しています。OBS-midi-mgではMIDI THRU機能が使えるので、これを利用して、OBSとVDJを同時にコントロールしています。

MIDI THRUとは、入力されたMIDI信号を分配し、そのままスルー出力を行う機能です。1つのMIDI信号で、複数の機器を操作することができます。


OBS-midi-mgでTHRU OUTをloopMIDI(仮想MIDIケーブル)に入れ、Midikey2KeyではloopMIDIからMIDI信号を受け取るよう設定します。このときコントローラーから出るMIDI信号は、下図のようにソフト間を経由します。

黒の実線(二重線)がMIDI信号、矢印が信号の向きを示す。
OBSから送られる「MIDI OUT」は "返し" のようなもので、
コントローラーの点灯などに使用される。


このように信号を伝えることで、VDJがアクティブになっているとき、1台のコントローラーでVDJとOBSを同時に操作できるようになります。

また、Midikey2Keyからも入力されたMIDI信号を出す(THRU OUTではなくただのMIDI OUT)設定ができるので、更に他のアプリケーションに信号を送ることもできます。


ここに映像信号の流れを加えると、こうなります。これが現在の私のVJ環境です(2024/1)。

なんでもExcelで解決するタイプ。こういうのに適したアプリあったら教えてください。



おわりに


半分くらいMidikey2Keyのマニュアルだった気がしますが、だいたいこんな感じです。みなさんの何かしらの参考になっていれば幸いです。


おわり


この記事が気に入ったらサポートをしてみませんか?