Archive for the 'MIKMIDI' Category

2015/11/13 MIKMIDIでMIDIデバイス一覧を取得

MIDIで接続されたデバイス一覧を取得するAppleScriptです。

まず、MIDIデバイスとMacの接続を行うわけですが、これについては安価なUSB-MIDI I/Fが市販されているため、こうしたものを利用するのが手軽でよいでしょう。自分はRolandのUM-ONEを試してみました。

top_l_resized.png

UM-Oneは専用のデバイスドライバをインストールすれば使えるようになります。

次に、AppleScriptからMIDIにアクセスする方法を模索することになります。現時点では3つの方法を見つけています。

1つめは、Apple純正のCoreMIDIを利用する方法。CのAPIなのでAppleScript-Cocoa Bridgeには手に負えない箇所が出てきそうですし、仕様を読んでいると何から何まで自分で記述しないといけないようなので、ちょっとウンザリします。

2つめは、オープンソースのフレームワーク「MIDIKit」(By Randy Weinstein)を利用する方法。いろいろAppleScriptからこづき回してみたところ、接続確認やMIDIデバイスのオンライン状態は調べられたものの、それ以上のことができません。たとえば、MIDIデバイスの名称(name)をAppleScriptから取得しようとするとすべてmissing valueが返ってくるなど、相性の悪さを感じました(日本語環境なのでなおさら未検証だったりするのかも)。

3つめが、今回紹介する同じくオープンソースのフレームワーク「MIKMIDI」(By Andrew Madsen)を利用する方法です。

midistudio.png
▲実験時の機器構成をOS X標準装備の「Audio MIDI設定」アプリで確認したところ。IAC Driverに「GarageBand」という名前のポートを宣言している。

自分がいろいろ試した中では、MIKMIDIが一番各種情報にアクセスしやすい印象を持っています。まだ、MIDI機器の接続状態を調べたぐらいなので、指定のデバイスにメッセージを送ったりできているレベルではありませんが、いろいろ調べてみるとできそうな感じがします。

img_3175.jpg
▲LAN経由でMIDI音源(Sound Canvas for iOS)をつないでみた。まだ、AppleScriptからメッセージを送れてはいない状況

AppleScript名:MIKMIDIでデバイス一覧を取得
– Created 2015-11-13 by Takaaki Naganoya
– 2015 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “MIKMIDI” –mixedinkey-opensource/MIKMIDI
–https://github.com/mixedinkey-opensource/MIKMIDI

set availableMIDIDevices to current application’s MIKMIDIDeviceManager’s sharedDeviceManager()’s availableDevices()
(*
–>  (NSArray) {(MIKMIDIDevice) <MIKMIDIDevice: 0×7f8a5e972a80> IAC Driver:
Entities: {
GarageBand:
Sources: {
<MIKMIDISourceEndpoint: 0×7f8a63a65610> IAC Driver GarageBand,
}
Destinations: {
<MIKMIDIDestinationEndpoint: 0×7f8a61bbc130> IAC Driver GarageBand,
},
}, (MIKMIDIDevice) <MIKMIDIDevice: 0×7f8a5e8d4320>ネットワーク:
Entities: {
}, (MIKMIDIDevice) <MIKMIDIDevice: 0×7f8a638a5fc0> Bluetooth:
Entities: {
}, (MIKMIDIDevice) <MIKMIDIDevice: 0×7f8a59e16360> UM-ONE:
Entities: {
<MIKMIDIEntity: 0×7f8a59ed8990> UM-ONE:
Sources: {
<MIKMIDISourceEndpoint: 0×7f8a61d47950> 新しい外部装置,
}
Destinations: {
<MIKMIDIDestinationEndpoint: 0×7f8a5ecadcf0> 新しい外部装置,
},
}}
*)

set aCount to availableMIDIDevices’s |count|()
–> 4

set availableVDevices to current application’s MIKMIDIDeviceManager’s sharedDeviceManager()’s virtualSources()
–>  (NSArray) {(MIKMIDISourceEndpoint) IAC Driver GarageBand, (MIKMIDISourceEndpoint) 新しい外部装置}

★Click Here to Open This Script