見出し画像

【Unity】MIDIコントローラーで遊ぶ

MIDIコントローラーの入力をUnityで受け取って値を反映させてみたいと思います。

動作環境

Unity 2020.3.12f1
Windows10

1. MIDIコントローラー

コンパクトでドラムパットとノブが付いているAKAI LPD8を使いました。MIDIコントローラーであれば何でも大丈夫です。

コントローラーをPCに接続し、デバイスマネージャーの「サウンド、ビデオ、およびゲームコントローラー」で認識されていることを確認します。

スクリーンショット 2021-07-25 123523

2. MIDIプラグインのインストール

MIDIコントローラーを接続しただけではUnityからは使用できないため、keijiro氏のMIDI Jackを使ってUnityから扱えるようにします。

READMEを読むとMIDI Jackに代わるプラグインとして同氏によるMinisが新しく提供されているようです。しかしながら、MinisはUnityの新しい入力システムの「Input System」をベースにして作られているため、今回は旧来の「Input Manager」でも動作するMIDI Jackを使っていきます。

Unityプロジェクトへは提供されているunitypackageをインポートします。インポートが完了したらUnityエディタのメニューの[Window] > [MIDI Jack]を選択します。

スクリーンショット 2021-07-25 113834_New

そうするとMIDI Jackのウィンドウが開くので、MIDIコントローラーを操作してログにメッセージが表示されるか確認します。

スクリーンショット 2021-07-25 121658

3. スクリプト

以下のスクリプトを適当なオブジェクトにアタッチします。

using UnityEngine;
using MidiJack;

public class Controller : MonoBehaviour {
   
   void Start() {
       
   }


   void Update() {
       
   }

   private void OnEnable() {
       MidiMaster.noteOnDelegate += NoteOn;
       MidiMaster.noteOffDelegate += NoteOff;
       MidiMaster.knobDelegate += KnobOn;
   }

   private void OnDisable() {
       MidiMaster.noteOnDelegate -= NoteOn;
       MidiMaster.noteOffDelegate -= NoteOff;
       MidiMaster.knobDelegate -= KnobOn;
   }

   private void NoteOn(MidiChannel channel, int note, float velocity) {
       Debug.Log("NoteOn: " + channel + ", " + note + ", " + velocity);
   }

   private void NoteOff(MidiChannel channel, int note) {
       Debug.Log("NoteOff: " + channel + ", " + note);
   }

   private void KnobOn(MidiChannel channel, int knob, float value) {
       Debug.Log("Knob: " + channel + ", " + knob + ", " + value);
   }
}

OnEnable()でパッドの押し下げ、押し上げとノブの値が変更されたときに呼び出される関数を設定しています。

4. 実行

UnityエディタのPlayボタンを押し、MIDIコントローラーを操作してコンソールにログが表示されれば成功です。

スクリーンショット 2021-07-25 124701

以下はムービングライトを配置してライブっぽい演出をしてみた様子です。

5. おわりに

MIDIコントローラーをUnityで扱えるようになると、ノブによる微妙な調整やパッドの大きさやインジケーターによる分かりやすさなど、手動による操作性が大幅に向上します。

MIDIコントローラーはVJやDJ、バーチャルライブ、インスタレーションではよく使われているようなので、様々なリアルタイム演出に活用してみてください。🌱

(最近、keijiro氏のライブラリを扱う記事が多い...感謝!)

6. 参考


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