ラベル USB の投稿を表示しています。 すべての投稿を表示
ラベル USB の投稿を表示しています。 すべての投稿を表示

2021年8月16日月曜日

Unityアセット「MIDI Plugin for Mobile devices」をリリースしました

Unity向けプラグインをアセットストアにてリリースしました。 
この記事ではプラグインの機能について紹介します。

機能

このプラグインはMIDIイベントの送受信機能をUnityのモバイル(iOS/Android)プロジェクトに追加します。
  • MIDIイベントの受信と送信
    • MIDI 1.0に定義されている、全ての種類のMIDIメッセージを扱うことができます。
  • USB MIDI
    • Android のみ
  • Bluetooth MIDI (BLE MIDI)
    • iOS と Android
  • Apple Network MIDI (RTP-MIDI)
    • iOS のみ

Android ベースの VRデバイスにも対応

プラグインはOculus Quest 2のような、AndroidベースのVRデバイスでも動作します。実世界のMIDI機器と呼応するVRオブジェクトを簡単に作成できます。VR世界のキューブを指したときにMIDIモジュールから音を出したり、その逆に実世界のMIDIキーボードを演奏したときにVR上のオブジェクトに反応させることができます。

サンプルシーンを試す

プラグインのインストール

  • Unity Asset Storeからプラグインをインストールします。
  • iOS または Androidのプラットフォームを選択し、サンプルシーンを含めてビルドします。
    • サンプルシーン 「MidiSampleScene.unity」は Assets/MIDI/Samples/Scenes ディレクトリにあります。
    • プラグインはUnity Editorでは動かないので、アプリバイナリをビルドして、実際のデバイスにインストールする必要があります。

MidiSampleScene

アプリでサンプルシーンを開くと、いくつかのGUIが現われます。
左のウィンドウではMIDIデバイスを選択し、いくつかのMIDIメッセージを送信できます。
右のウィンドウでは受信したMIDIメッセージが確認できます。

MIDIデバイスとの接続

  • Android
    • USB / Bluetooth MIDIデバイスは自動的に発見、接続されてGUIの「Device」のリストに表示されます。
  • iOS
    • Apple Network MIDIデバイスは自動的に接続され、GUIの「Device」のリストに表示されます。
    • アプリが起動したときにBluetooth MIDIデバイスを選択します。
これらの初期化処理は MidiManager クラスの InitializeMidi メソッドに実装されています。

新しい機器の接続 / 切断 のイベントは IMidiDeviceEventHandler インタフェースを実装することで受信できます。
デバイス名はMidiManager クラスの GetDeviceName メソッドで取得できます。デバイス名をまだ受信できていない場合、空(null)になっている場合があります。

MIDI イベントの送信

MIDIイベントの送信処理のコードはこのように記述します。 

MIDI イベントの受信

MIDIイベントの受信処理のコードはこのように記述します。

オープンソース

パッケージ内のいくつかの部分はオープンソースプロジェクトです。以下のリストはパッケ0ージの依存ライブラリです。
全てのリポジトリは自作のものです。機能のリクエストや不具合報告など、githubにてお気軽にご連絡ください。

2021年8月14日土曜日

Published Unity asset: MIDI Plugin for Mobile devices

I published a new plugin asset for Unity at the Store. 
This article explains about this plugin's features.

Features

This plugin enables MIDI event transceive functions to mobile Unity project(iOS/Android)
  • MIDI Event Receiving and Sending
    • The plugin can treat the all kind of MIDI events defined in MIDI 1.0.
  • USB MIDI
    • Android only
  • Bluetooth MIDI (BLE MIDI)
    • both of iOS and Android
  • Apple Network MIDI (RTP-MIDI)
    • iOS only

Works with Android-based VR devices

This plugin also work with Android-based VR devices, such as Oculus Quest 2. It can easily create app that VR objects interact with real MIDI instruments. When I pointed an cube in the VR world, the real-world MIDI module plays a sound. And vice versa, When I play real-world keyboard, the VR objects will be interacted with playing MIDI note.

How to try with a sample scene

Install the plugin

  • Install the plugin from Unity Asset Store.
  • Select the app's platform; iOS or Android, and build the app with sample scene.
    • The sample scene 'MidiSampleScene.unity' is found at Assets/MIDI/Samples/Scenes directory.
    • The plugin doesn't work with Unity Editor, so you should build the app binary and install it into the real devices.

MidiSampleScene

Start app with Sample scene, some GUI will be appeared.
The left window is for selecting MIDI device, and sending some MIDI messages.
The right window is for viewing received MIDI messages.

Connect with MIDI devices

  • Android
    • USB / Bluetooth MIDI devices will be automatically detected, connected, and displayed on GUI 'Device' list.
  • iOS
    • Apple Network MIDI devices are automatically connected and displayed on GUI 'Device' list.
    • Select Bluetooth MIDI devices at the first time the app launched.
These initializations are implemented at InitializeMidi method in MidiManager class.

New connection / disconnection events can be received by implementing IMidiDeviceEventHandler interface.
The device's name can be got from GetDeviceName method in MidiManager class. The device's name may sometimes empty(null) if the name has not noticed yet.

Sending MIDI events

The implementation for sending MIDI events will be like this. 

Receiving MIDI events

The implementation for receiving MIDI events will be like this.

Open Source

Some parts of this package are Open Source project. The below list are dependency libraries in the package.
All repositories below are owned by me, feel free to feature request or issue reporting.

2012年12月26日水曜日

[Android Advent Calendar] 自作のUSBデバイスを、Androidで動かす

Android Advent Calendar 2012/12/26(表) 向けの記事です。裏は@l_b__さんです。

今年の後半にかけてAndroidのUSBホスト周りに少し詳しくなってきた、@kshojiです。Android USB MIDI Driverなどというものを作って公開しております。

USBデバイスを自分で作って、Android側でドライバを書いたら、好きなデバイスを作ってAndroidで自由に動かせて、楽しいんじゃないかなー。ということで、今回この記事を書いてみます。
TwitterのTLで尋ねてみると、USB HIDなデバイスが今時の流行っぽいので、それに乗ってみることにします。USBデバイスの自作と、そのデバイスに対応するアプリ作成の参考になれば嬉しいです。

AndroidがUSBホストに対応

Android OS 3.1からUSBホスト機能に対応して、アプリで、JavaのAPIを使ってUSBデバイスのドライバが書けるようになりました。LinuxのデバイスドライバといえばC(libusb)で書く、もしくはカーネル側をいじるという印象があるので、これはすごく画期的なことだと思います。なんといっても、Javaはとっつきやすいですから。

Android SDKにもUSBミサイルランチャを操作するサンプルが付いています。USBミサイルランチャは色々な環境でサンプルとして使われているようです。

注:必ずしもUSBデバイスであればなんでも認識する、というわけではないようです。HTC J ButterflyではUSB HIDなデバイスは認識しましたが、USB MIDIなデバイスは認識しませんでした。

AndroidでのUSBホストの使いかた

Android の USBホストの公式ドキュメントはこちらからどうぞ。

githubのリポジトリにこの記事用のコード一式を置いてみました。
いちおう、見通しがよくなるようにしているつもりです。
…と言っても、AbstractDeviceActivityクラスあたりから見ていくと、なんとなくわかるかな、程度ですが。WTFPLにしてあるので、煮るなり焼くなりお好きにどうぞ。

2012年12月23日日曜日

[変態Advent Calendar] 実機TAS-codingコントローラを作る

ファミコン用実機TASコントローラとかも作っているkshojiです。
変態Advent Calendarへは初参戦となります。やらしくお願いします。

TASとは?

→ 詳しくはニコニコ大百科のTASの項目あたりがオススメです。

大雑把に言えば「最速でゲームをクリアする」ために必要な再現用データを作る、という競技です。
RAM書き換えなどのズルをしていないので「実機で再現できる」というのがポイントです。
実機で再現できるので、つまり、実際に実機で再生させるプロジェクトというのもいくつか存在します。

実機TASコントローラを作ろう

以前、ファミコン実機でTASるコントローラを作ったこともあり、その連想でなにか出来ないか模索してみました。

今回はエンジニア向けっぽい変態ネタということで、Tool Assisted Speed-codingのコントローラを作ってみます。codingでもあり、typingでもありますが。
「自動キー入力するUSBキーボード」を自作する感じになります。

ちなみに今回のTASのルールとしては、プログラムのソースコードを入力し終わるまで、としています。

まずは、完成したものがこちらにあるので、動画を観てみましょう。
ご覧の通り、エディタの表示が追いつかないほどの変態高速入力となっております。

2012年11月2日金曜日

複数PCの楽器アプリ同士を繋ぐUSB MIDIケーブルを作ってみた

AndroidタブレットとMacを接続して演奏してみたかったので、USB MIDIクライアントを2つ結合したものを作ってみました。
近い将来、これを使ってAndroidタブレット用のPCDJコントローラでも作れたらいいな、という感じです。

方針

今回は、AVRのV-USBを使って、USB MIDIを扱います。ソースコードはMICO-MOCOを参考にしました。

MICO-MOCOではUSB MIDI→レガシーMIDIに変換する必要があったので、送受信を含めるとATtiny2313のメモリには収まらなかったのですが、今回のものは「USB MIDIのプロトコルをそのままブリッジする」という作りになっているため、プロトコル変換処理をばっさり省略できています。
MIDIを介さない利点として「31250baudでシリアル通信する必要がない」という点が挙げられます。クロックが最速20MHzのものを選択できるので、取りこぼしが少なくなることが期待できます(今回の試作では、16MHz/125000baudで通信しています)。送受信用のバッファは短かいですし、USB MIDIのプロトコルそのままなので、MIDIのパケット長はレガシーMIDIよりも長くなっていますが…。

Android USB MIDI Driverのご紹介

Android USB MIDI Driverって?

「Android 3.1 (API Level 12)以降向けの、USB MIDIを使うためのライブラリ」です。
Android 3系のタブレットや、Android4系のスマートフォンを使って、特に改造やroot化することなしに、USB MIDI対応の楽器や機器を繋げることができるようになります。

注意:端末がUSB Host機能に対応している必要があります。USB Host対応端末であっても、USB MIDI機器が認識しない場合があります。

USB MIDI対応デバイスの例:キーボード、電子ピアノ、シンセサイザー、音源モジュールなどの楽器・コントローラ、変換ケーブルなどのPC用MIDIインタフェースなど。

ライブラリのソースコードは、こちらのgithubリポジトリからダウンロードできます。Apache ライセンス バージョン 2.0です。
https://github.com/kshoji/USB-MIDI-Driver

応用アプリの例

  • (楽器のほうの)キーボードを使ってプレゼンを操作
  • 演奏をディスプレイ上にリアルタイムで可視化
  • TENORI-ON/monomeのようなインタラクティブなシーケンサー
  • 加速度やジャイロなどのセンサーを使用したコントローラ
などなど…

2012年10月17日水曜日

仮想マシン上のAndroidでUSBホストを使う

Android SDKに含まれるエミュレータはUSBデバイスの接続に対応していません。
「android-x86」のLiveCDイメージを使うことで、USBホストのテストがPC上で可能になります。
今回はVMWare FusionとVirtualBoxで動かしてみました。


  • ISOイメージをこちらからダウンロードします。「new version here」というリンクのもの(android-x86-vm-20120130.iso.gz)を使用しました。→ http://www.buildroid.org/blog/?p=86 
  • 新しい仮想マシンをセットアップし、CDドライブにLiveCDを指定してVMを開始します。
  • 「Live CD - Run Android-x86 without installation」を選択して、Androidを起動します。
  • VirtualBoxの場合、「Machine」メニューから「Disable Mouse Integration」をチェックします。
  • VMware/VirtualBoxの「ネットワークアダプタ」のモードを「ブリッジ(自動設定)」「Bridged Adapter」に変更します。
  • Android側の「Terminal Emulator」アプリを開き、以下のコマンドを実行します。固定IPを設定するので、LAN内で空いているIPアドレスを確認しておいてください。(今回は192.168.1.111とします)。
$ su
# ifconfig eth0 192.168.1.111 up



  • ホストOS上から、下記のコマンドを実行します。
$ adb connect 192.168.1.111

これで、仮想マシンのAndroidとadbが接続され、Eclipseなどからアプリが流しこめます。
仮想マシン側にUSBデバイスを接続することで、そのデバイスをAndroidで使用することができます。