Contenu connexe
Plus de Takashi Toyoshima (7)
楽しいロリコン
- 4. 開発環境
● The BLOCKS SDK w/the JUCE framework
○ C++ library for native (mobiles/desktop)
○ ホスト側アプリ+LittleFootコンパイル・転送
● Cycling ‘74 Max 7
○ visual programming
● BLOCKS Dashboard (macOS / Windows)
○ IDE & simple programming language/model
○ LittleFoot管理・コンパイル・転送
- 7. プロトコル調査
● SYSEX
○ 基本的な部分はSDKなどから窺い知ることができるが詳細が未公開で辛い
○ プロトコルは秘密ではないが将来変わるかもしれないとの事だが ……
○ Web MIDIから使うためにSYSEXの詳細を調べてみた
● 調査方法
○ macOSからBLE MIDIをアドバタイズ
■ Lightpad Block TESTという名前を仕様(本家の末尾 4Bはシリアル末尾)
○ iPhoneアプリ(NOISE)を騙してBLOCKSだと思わせて接続
○ iPhoneからmacOSに流れてくるMIDIメッセージをWeb MIDIでモニタ・解析
- 8. 基本的な流れ
1. 接続
○ この時点ではBLOCKSはタッチ操作に合わせた CCしか投げてこない
2. ホスト→デバイス:トポロジー報告依頼
○ SYSEXを使った低レベル通信のトリガーになるようだ
3. デバイス→ホスト
○ トポロジー報告
4. デバイス→ホスト
○ 定期的なハートビート報告の開始( 1秒程度の間隔)
5. (ホスト→デバイス:LittleFootプログラム転送)
6. (ホスト→デバイス:カスタムメッセージ)
7. デバイス(w/LittleFootプログラム)
- 11. SYSEXの詳細: data
32-bits: 機器起動からのtimestamp [msec] (デバイス→ホストのみ)
7-bits: メッセージタイプ(メッセージ方向ごとに違うID)
● 以下、タイプ毎に異なるデータが並ぶ
● メッセージ長のような、未知のメッセージがあっても読み飛ばせるような
仕組みは存在せず、全てがデバイス・ホスト間で既知である事を想定し
ている
● bit長は7の倍数でも8の倍数でも縛られておらず完全に任意
● 合計で7の倍数bit長にならなかった場合は0パディングされる
● メッセージは複数続く事もあるようだ(まだ見たことはない)
- 12. SYSEXの詳細: dataにおけるbitの詰め方
● リトルエンディアン
● 単一バイトに収まらない場合、下位ビットから順に格納する
● 上位ビットが余ったら、次のデータが詰め込まれる
例:8-bitsのデータが2つ(A[7:0]、B[7:0])続く場合
Byte N
Byte N+1
Byte N+2
0 A6 A5 A4 A3 A2 A1 A0
0 B5 B4 B3 B2 B1 B0 A7
0 B7 B6