33
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Bluetooth Low EnergyAdvent Calendar 2014

Day 1

MIDI over BLE を試してみる(CoreAudioKit)

Last updated at Posted at 2014-11-30

本記事は Bluetooth Low Energy Advent Calendar 2014 の1日目の記事となります。

##MIDI over Bluetooth LE とは?

今までこうだったのが、

midi_0_r1_c1.jpg

MIDI over BLE によって、こうなります。

midi_1_r1_c1.jpg

どういうことかというと、BLEを使ってワイヤレスでMIDIを送受信できる、ということです。

接続してしまえば、普通のMIDI機器と同等に取り扱えます。

##CoreAudioKit

iOS 8 で新規追加されたフレームワーク。

iOS Dev Centerで "CoreAudioKit" で検索しても 「No Documents Found」と言われてしまう(2014年12月1日現在)、謎に包まれたフレームワークです。

midi_2.jpg

個々のクラス名で検索するとかろうじていくつかのドキュメントが引っかかってきますが、その中でちょっとでも全容把握に役立ちそうなのは「iOS 8.0 API Diffs」だけ。。

###CoreAudioKit の 全API

クラスは4つしかないので、ここに「iOS 8.0 API Diffs」に載っていた全APIを載せておきます。

####CABTMIDICentralViewController.h

  • CABTMIDICentralViewController

####CABTMIDILocalPeripheralViewController.h

  • CABTMIDILocalPeripheralViewController

####CAInterAppAudioSwitcherView.h

  • CAInterAppAudioSwitcherView
  • -[CAInterAppAudioSwitcherView contentWidth]
  • -[CAInterAppAudioSwitcherView setOutputAudioUnit:]
  • CAInterAppAudioSwitcherView.showingAppNames

####CAInterAppAudioTransportView.h

  • CAInterAppAudioTransportView
  • CAInterAppAudioTransportView.connected
  • CAInterAppAudioTransportView.currentTimeLabelFont
  • CAInterAppAudioTransportView.enabled
  • CAInterAppAudioTransportView.labelColor
  • CAInterAppAudioTransportView.pauseButtonColor
  • CAInterAppAudioTransportView.playButtonColor
  • CAInterAppAudioTransportView.playing
  • CAInterAppAudioTransportView.recordButtonColor
  • CAInterAppAudioTransportView.recording
  • CAInterAppAudioTransportView.rewindButtonColor
  • -[CAInterAppAudioTransportView setOutputAudioUnit:]

##iOS側の実装

まず CoreAudioKit を import して、

@import CoreAudioKit;

CABTMIDICentralViewController, CABTMIDILocalPeripheralViewController というビューコントローラに遷移できるように実装しておきます。

- (IBAction)centralBtnTapped:(id)sender {
    
    CABTMIDICentralViewController *midiCentralCtr = [[CABTMIDICentralViewController alloc] init];
    [self.navigationController pushViewController:midiCentralCtr animated:YES];
}

- (IBAction)peripheralBtnTapped:(id)sender {

    CABTMIDILocalPeripheralViewController *midiPeripheralCtr = [[CABTMIDILocalPeripheralViewController alloc] init];
    [self.navigationController pushViewController:midiPeripheralCtr animated:YES];
}

どちらも UIViewController のサブクラスで、CABTMIDICentralViewController を使うとアプリはセントラル側としてふるまい、MIDI over BLE をサポートしているペリフェラルデバイスをスキャン、接続することができるようになります。

また CABTMIDILocalPeripheralViewController を使うと、アプリは ペリフェラル側としてふるまい、サービスをアドバタイズ します(=MIDI over BLE をサポートしているセントラルデバイスによって発見・接続できるようになる)。

どちらもパブリックなプロパティ・メソッドは持っていません

とりあえずコードは以上。

##Mac側の準備

###MIDI Studio の起動

/Applications/Utilities フォルダに、「Audio MIDI 設定.app」というアプリがあるので、起動します。

メニューの、[ウィンドウ] > [MIDI スタジオを表示] から MIDI スタジオを起動します。

###スキャン/アドバタイズの開始

Bluetooth の設定アイコンをダブルクリックすると、

midistudio0.jpg

Bluetooth設定ウィンドウが表示されます。

midistudio1.jpg

スキャンは自動的に開始されています。ペリフェラルとしてアドバタイズする場合は、「アドバタイズ」ボタンをクリックします。

midistudio2.jpg

アドバタイズを開始すると、ボタン名が「アドバタイズを停止」に変わります。

##接続する:iOS(セントラル)→ Mac(ペリフェラル)

Mac側でアドバタイズを開始し、iOS 側で CABTMIDICentralViewController を表示すると、次のようにペリフェラルである Mac がリストに出てきます。

midi_3.jpg

「i」ボタンをタップすると次のような画面に遷移し、

midi_4.jpg

ConnectのスイッチをOnにすると・・・繋がらない・・・

コンソールには

Connecting to peripheral with UUID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ...

と出て、接続を試みてはいるのですが、しばらくするとスイッチが自動的にoffの方に戻ります・・・どなたか接続できない原因/接続方法などわかる方、ご教示いただけますと幸いです・・・!

##接続する:Mac(セントラル)→ iOS(ペリフェラル)

iOS側で CABTMIDILocalPeripheralViewController を立ち上げると、次のような画面になります。

midi_5.jpg

「Advertise MIDI Service」セルにあるスイッチをオンにすると、アドバタイズが開始されます。

その後 Mac側のMIDIスタジオの画面を見ると、アドバタイズ開始したiOSデバイスが発見されています。

midistudio3.jpg

ここで「接続」ボタンをクリックすると、iOSデバイス側では CABTMIDILocalPeripheralViewController での STATUS の表示が「Connected to {セントラル名}. Advertising disabled.」に変わり、Mac側では、MIDIスタジオにペリフェラルのアイコンが追加されます。

midistudio4.jpg

この状態で、MIDIデータ出力ポートを選べるMacアプリからMIDIを送信し、

midi_mac.jpg

iOS側ではMIDIを受け取れるアプリで受信すると、

midi_ios.jpg

上記のようにMIDIがワイヤレスで受け取れていることが確認できます。

###(追記)

本記事では別アプリを使用しましたが、下記で紹介されているアプリが MIDI over BLE を試すのによさそう。(まだ試してない)

##参考資料

33
31
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?