UnitySampleProject
GitHub - hikatech/UnityUsbMidiOutSample
目的
- USB接続したMIDI機器(Rorand V-1HD)をUnityから操作したい
環境
- OS: Windows 10 Pro
- Unity: 2018.1.1f1
- MIDI機器: Roland V-1HD(映像スイッチャ)
参考にさせてもらったサイト
- GitHub - keijiro/unity-midi-bridge
- もう完全にKeijiroさんにおんぶにだっこ。お世話になります
- Roland Pro A/V - V-1HD | HD Video Switcher
- RolandのV-1HDをUnityから操作したいので、Remote Control Guideを読みながら進めた
- Summary of MIDI Messages
- 上記Keijiroさんのメソッドに不足していたProgramChangeのコマンドを送れるようにするためにMIDIの仕様をちょっとだけ読んだ。
MIDI OutをUnityで使う
- MIDI機器の適切なドライバをインストールしておく(RolandのV-1HDはここからDL)
- unity-midi-bridgeをダウンロードする
- MIDI機器をPCとつなぐ
- ダウンロードしたmidi-bridgeの中にある[midi-bridge-windows/MidiBridge.exe]を起動
- UnityのプロジェクトにMidiBridge.cs、MidiInput.cs、MidiOut.csをドラッグ&ドロップ
- MidiOut.csにSendProgramChangeを追記
public static class MidiOut
{
// <中略>
public static void SendProgramChange(MidiChannel channel, int controlNumber, float value)
{
int cn = Mathf.Clamp((int)channel, 0, 15);
controlNumber = Mathf.Clamp(controlNumber, 0, 127);
value = Mathf.Clamp(127.0f * value, 0.0f, 127.0f);
MidiBridge.instance.Send(0xc0 + cn, controlNumber, (int)value);
}
}
- 適当なスクリプトを新規に作成(今回はV1HDController.cs)
using UnityEngine;
public class V1HDController : MonoBehaviour {
void Start () {
MidiBridge.instance.Warmup();
Debug.Log("*** input selecttion: 'A'=A-1 | 'S'=A-2***");
}
void Update () {
if (Input.GetKeyDown(KeyCode.A))
{
// source select A-1
MidiOut.SendControlChange(MidiChannel.Ch1, 0, 0);
MidiOut.SendControlChange(MidiChannel.Ch1, 32, 0);
MidiOut.SendProgramChange(MidiChannel.Ch1, 0, 0);
}
if (Input.GetKeyDown(KeyCode.S))
{
// source select A-2
MidiOut.SendControlChange(MidiChannel.Ch1, 0, 0);
MidiOut.SendControlChange(MidiChannel.Ch1, 32, 0);
MidiOut.SendProgramChange(MidiChannel.Ch1, 1, 0);
}
}
}
- 空のGameObjectを作成して、上記スクリプトをアタッチ
- 実行して、'A'キー押下でV1HDの入力A-1、'S'キー押下でV1HDの入力A-2が選択されればMIDI送信成功!(サンプルプロジェクト)
任意のMIDI機器を自在にコントロールしたい
- keijiroさんのMidiBridge.exeを起動して、MIDI機器を操作してみることで、どんなMIDIメッセージが飛んでいるかわかる(便利がすぎる)
- それと同じメッセージをMidiOutで飛ばせばOK(なはず)
- ↑これはV-1HDのA-1パッドを押したときのメッセージ
-----+----------+----+-----------
I/O | Event | Ch | Data
-----+----------+----+-----------
IN | CC | 01 | 0, 0
IN | CC | 01 | 32, 0
IN | Program | 01 | 0
- これと同じメッセージが、'A'キーを押したときに生成されている
おわりに
ヒカテクにコーヒーをおごってみませんか!(投げ銭|Donation)