Posts in Category: MIDI

CoreMIDIの勉強

なんか去年末からごにょごにょやってたんだけど、いろいろあって遅々として進まず。
勉強するには手を動かしてコード書くのがイチバンですよねやっぱ。

CoreMIDIはぱっとみデバイス(Device,Entity,Endpoint)の関係性がいまいちわからずもやもやしてたんですが
自分なりに関係性を図に書いてみました。

CoreMIDIの図(修正)

App側からはClientオブジェクトを作成し、これを通してMIDIデバイスとやりとりするわけですが
デバイス内のEntityがいまいちわからず。
Entity内には実際のMIDI入出力ポート(Endpoint)のSource(MIDI IN) Destination(MIDI OUT)が入っています。

よくあるMIDI IN 2 /MIDI OUT 2 みたいなMIDIインターフェースで手持ちのEDIROL UM-2Gなんかだと
Entity内にそれぞれIN 2コ/OUT 2コなんて構成になってると思いきや
IN 1/OUT 2の入ったEntityが2つ という構成になってました。

MIDI Device(UM-2G)
 |
 ◆-Entity 1 –IN 1 (Source) / OUT 1 (Destination)
 |
 ◆-Entity 2 –IN 1 (Source) / OUT 1 (Destination)

また、Device,Entity,Endpoint はそれぞれユニークなIDが振られているため、永続化に使えるのか?と想像してます。

OSXでは一度接続したMIDI機器の情報は保存される模様で、つなげていなくても全デバイス取得すると取得できちゃったりします。
ただ、Entityプロパティのオフライン情報で実際の接続の有無が確認できる模様。
iPadではこんなことはなく、MIDI機器外すと全デバイス情報もクリアされちゃうみたいです。

CoreMIDIイニシャライズの流れとしては

1 Clientオブジェクトの作成
2 Inportオブジェクト、Outportオブジェクトを作成
3 MIDI受信コールバック関数をInportオブジェクトへ登録(送信のみはいらない)
4 NotificationコールバックをClientへ登録(これは適宜)
5 受信したいEndpoint(Source)とInportオブジェクトをコネクト

これでMIDI受信すると受信コールバックが呼ばれます。
送信はMIDIパケットリストを作成し、Endpoint(Destination)を指定して送信します。

受信したいEndpoint、送信先のEndpointは総じて全部まるっこ指定してるようです。
細かく制御することも可能だと思います。

とりあえずの勉強の成果としてちょっとCoreMIDI Objective-Cラッパーを作ってみました。
ちょとアプリに組み込もうとして作ったものですけど。

受信したMIDIメッセージに対応したデリゲートと
送信用のメソッド組み込んでます。
自分の使いそうなのだけですけど。(つかうってもNote ON/OFF と CCくらい)

初めてGitHub使ってみたけどうまくいけてるんだろか。。。

RTCMidiLib

それにしてもiPadだとCoreMIDIでバッグはほんとやりにくい!
ビルド/デバッグのたびにMacかMIDIインターフェースにつなぎ変えないといけないし
そもそもデバッガ使えない!
プリントデバッグではなく実機でのUITextViewデバッグ!

激しく参考にさせていただいてます
Objective-Audio
http://objective-audio.jp/cat54/core-midi-mac/

Share on Facebook

Castalian(未来楽器)がすごい

こちらのnucodeさん、たまたまTwitterでお知り合いになった方なんですが
nucodeさんも自分と同じ時期(より前かも)に自前マルチタッチに取り組んでいて
FTIRではなくIRレーザーを使うなかなか興味深いアイデアで構築していました。

現状「マルチタッチ」の構築や制作は今となってはなんの新鮮味もないし、
とりあえず作っただけというものばかりで正直今更感があるんですけど
こちらに関しては、ハード制作云々よりも「マルチタッチだからこそできるコンテンツ」という意味で
こりゃもーはっきしいって飛び抜けてます。
iPhoneなどはある程度お膳立てがあってのものですが
全部自前で、さらにマルチタッッチを生かしたコンテンツというのはいままで見たことないし
しかも認識エンジンまでオールAS3の力技。AS3恐るべし。

自分らが作ったもはいわゆる「筆」や「イラレのパス」みたいなものであって
要はそれで何を描くかというのがなかったのを痛感ししてたので
初めて見たときはレベル違いすぎて吹いてしまったw。
もー自作マルチタッチはハード制作じゃなく中身で勝負の段階になりました。

だってもー単純にかっこいいし使って遊びたくなっちゃいますよね。

今週こちらのイベントで見られそーです(とプレッシャーをかけちゃったりなんかしてw)
http://tokyomax.jp/

nucodeさん


CASTALIAN / New concept Audio Visual Touch Sequencer from nucode on Vimeo.

Share on Facebook

ただいまiPhoneアプリ作ってます。

iOSCです。

ベタですねー。
これはOpen Sound Controlプロトコルを送信するiPhone/Touchアプリケーションです。

・ライブなどで誤操作を防ぐのに、ボタンなどはサイズを大きめに
・パーツの外観やOSCメッセージをカスタマイズできるように
・さらに別個のホストPCを同時に制御できるマルチホスト機能
などが特徴かなー。

最初はほんとにごくごく単純なOSCアプリケーションにするつもりが
次期バージョンも視野に入れて作ってたら徐々に機能増えていってしまいました。
およそ形になってきたのでそろそろApp Storeへ一所懸命申請準備中。

昨日、共同でiPhoneアプリを作っている人の家でデモ動画撮ってきました。

先日作ったAVR-OSCの具体例
別にナイトライダーに特別な思い入れはないんですが
安く手に入ったのでAVR-OSC載っけてiPhoneでワイヤレスコントロール。
アクセスポイントは2階から。
実はWi-PortはアドホックでもOKなのですが、iPhoneってどうしてもアクセスポイントがないとだめみたい。
要はラジコンなんだけど、
「非JB iPhoneで非PCをコントロール」することがロマンですねー。とっくに先人はいるけど。

こちらはマルチホストの実例
2台のMacにMax/MSPの同じパッチ、同じOSCメッセージで起動。
ただしIPアドレスは別。
iOSCの各ボタン、スライダーにはそれぞれのIP(host)を振り分けてOSCメッセージを登録することができるので
このような複数台同時操作が可能です。

これはAbleton Liveの実演
LiveにはOSC機能がないので、OSC-MIDIブリッジのOSCulatorを使用しました。
いずれOSC-MIDIブリッジもつくらないといけないなーと思ってるんですが。
TouchPadでエフェクト変えていますが、
X軸、Y軸それぞれ単独でOSCメッセージを投げています。
なので、Padをより汎用的に使えると思います。

音源、というかLiveのネタは友人のR3のmorphを借用しちゃいました。

Share on Facebook

iPhoneとWiPortのOSC通信(ひとまず成功)

iPhoneからUDPを送ってるだけなのでできるとは思ったけど
WiPortのシリアル出力がどんな感じになるかイマイチわからんかったので
実際に購入してやってみた。

テストセットはブレットボードにて
WiPortは面実装コネクタじゃないとあかんので、若松にて専用基板も購入。
これも2列のピンヘッダなのでさらにゲタ履かせ、ついでに通信確認のLEDも付けてみた。
WiPort <-> iPhone communicaton via OSC

それにしてもアンテナの同軸がWiPortのケースに干渉しててとっても気持ち悪い。。。。
これってどーなのさ??
あとで加工しとかなきゃ。
WiPort <-> iPhone communicaton via OSC

でもって、WiPortの設定は、基本的な設定(自分IP,ポートなど)、無線LAN(アドホックとか)、シリアルポート(ここでUDP、相手IP、相手ポートなどの設定をする)
これくらいでよかったんだけど、なんかよくわからなかったので
winにて説明書通りに設定。
仮想COMポートで(win用ドライバ)通信できることを確認。要はWiFiがちゃんと設定できてるか確認したかった。

これができてからmacにてUDPなどの設定を。
そーすると、こんな感じでiPhoneと繋がりました。
これはiPhoneから出しているMIDI用のOSCメッセージ
なんとなくMIDIっぽいメッセージで
WiPort <-> iPhone communicaton via OSC

こちらは実際の動画
ちょっと遅いのは、WiPortのシリアルポートの設定を9600bpsにしちゃったもんで。
あとで速くしてやってみる。

とはいえ、べつにOSCじゃなくてもいいんだよね。
iPhoneの通信部分を作るの面倒だったんで実装済みのOSC送信でやったんだけど。
しかもiPhone側のOSC受信はまだ未実装なので、iPhoneからデータおくりっぱ。
やっぱ相互通信できるようにちゃんとやらないばねえ。

ひとまずWiPortと通信できるってことで、これ何を意味するかとゆーと
iPhoneはMacやWinのPCと通信するのが基本だけど、
WiPort使うことで、こんどは非PCのワンチップマイコンと通信できるようになりますわ。
いわばスタンドアローンな機器(非PC)を無線制御できるようになるとゆー。
Bluetoothやシリアルポートが(正攻法で)利用できないとなると唯一外界と繋ぐ方法は無線LANしかないし
無線LAN-シリアルブリッジのWiPortが使える意味は、iPhpneを汎用デバイスとしてつかいたい
自分にとってはなかなか大きいのでした。

まだまだ不明なとこもあるから、さらに検証しとこ。

Share on Facebook

iPhone MIDIコン

てなわけで仮に作ってみた
JailBreakは必要無し。

いちおMacとiPhoneで無線LAN経由で動くけど
Ableton LiveはOSC対応じゃないので
OSCをMIDIに変換するOccamというOSC-MIDIブリッジを起動させておきます。
OSC対応のReaktorとかならブリッジなしの直でコントロールできるかも。

UIはほんとテキトー。。。。
それにしてもiPhoneのスライダーってなんでこんなに反応悪いんだろう???

iPhoneからOSCでMIDIメッセージぽいのを送信
Mac側でOccamを起動させておく
でAbleton LiveではoccamというMIDIデバイスが認識しているはず。
あとはLive側でフツーにMIDIアサインすればおっけい。

Occamはそのままだとビルドできんかったのでちょこちょこいじる。
あとiPhoneで数値をOSC送信するとみごと化けるので
赤松先生のところを参考にエンディアン変換してから送信

つぎはiPhoneのサンプルを参考にしてボンジュール対応にしたいすね。

iPhone MIDI Controller

Share on Facebook