2011年6月20日 星期一

MIDI Code 在 Windows & Apple - Mac 的差別

同樣是 MIDI out 到 device,Windows 跟 Mac 卻有差別…

-----------------------------
差別一:
例如:一個 Note 「09 90 01 7f」,在 Windows 作輸出時,透過 Bus Hound (監視 USB 通訊的軟體) 來看是底下這樣…
Device  Length    Phase  Data         Description       Delta  Cmd.Phase.Ofs(rep)
------  --------  -----  -----------  ----------------  -----  ------------------
  27.4        64  OUT    09 90 01 7f  ....              5.1sc        28.1.0       
                         00 00 00 00  ....                           28.1.4       
                         00 00 00 00  ....                           28.1.8       
                         00 00 00 00  ....                           28.1.12      
                         00 00 00 00  ....                           28.1.16      
                         00 00 00 00  ....                           28.1.20      
                         00 00 00 00  ....                           28.1.24      
                         00 00 00 00  ....                           28.1.28      
                         00 00 00 00  ....                           28.1.32      
                         00 00 00 00  ....                           28.1.36      
                         00 00 00 00  ....                           28.1.40      
                         00 00 00 00  ....                           28.1.44      
                         00 00 00 00  ....                           28.1.48      
                         00 00 00 00  ....                           28.1.52      
                         00 00 00 00  ....                           28.1.56      
                         00 00 00 00  ....                           28.1.60      

Windows 一次「至少」就傳了 64 bytes 的資料給 device ,後面無用的資料都補 0。

但是 Mac 卻只有傳了…「09 90 01 7f」這 4 個 bytes,並且沒有 0 作結尾。

-----------------------------
差別二:
很多 MIDI Code 要傳輸時,Windows 都是遵照上述的原則,一定會傳出 64 bytes (或許有別的 MIDI API 可以作不一樣長度的輸出,但以音控軟體 Traktor 而言是如此)

但是 Mac 在這個情況下有可能會傳出 4*N 個 bytes,也就是 4、8、12、16…。

------------------------------------
於是在韌體的撰寫上就要特別注意這二個不同的差別來作 MIDI Code 的解析,才能同時相容於 Windows 及 Mac!!!

看起來 Mac 的效能會比較好。

沒有留言:

更高效處理 micro second 的方式

更高效處理 micro second 的方式…  以 STM32 為例… __IO unsigned long sys_tick = 0; void SysTick_Handler(void) {     HAL_IncTick();     sys_tick += (SysTi...