android midi 分析,MIDI 架构 | Android 开源项目 | Android Open Source Project
本文將介紹不依賴于任何平臺實現、API 或平臺專用功能的通用 MIDI 架構。
主要概念
事件
該 MIDI 協議專為基于事件的通信而設計。
事件表示已經發生或即將在特定時間發生的事情。MIDI 事件用信息(原子式信息包)表示。
傳輸
MMIDI 信息通過傳輸層(簡稱“傳輸”)進行編碼和傳遞,傳輸層會將原始 MIDI 數據發送給接收者,以便接收者隨后將數據解碼為信息。
基于硬件的 MIDI 傳輸包括:
使用 5 針 DIN 連接器的 MIDI 1.0 電流回路
USB
藍牙低功耗 (BLE)
信息呈現方式
MIDI 傳輸規范介紹了信息的傳遞方式。
盡管在最低級別信息的封裝是特定于傳輸層進行的,但是在較高級別,應用可以將按時間排序的信息序列視為已劃分界線的字節流。
這可能是因為,只要已知信息邊界的起點,則每條信息都會包含足夠的信息來確定其總長度。
大多數 MIDI 信息都比較短(一到三個字節),不過您可以通過 SysEx 實現較長的信息。
時間戳
時間戳是在發出或接收信息時(具體取決于傳輸)附加到信息中的可選標簽。時間戳用時間單位表示,例如秒或滴答聲。
在沒有顯式時間戳的情況下,系統必須替換緊挨著的上一條信息或當前時間的時間戳。這些時間戳(無論顯式或隱式)的準確性是影響基于 MIDI 的系統的可靠性的重要因素。
時間戳不是 MIDI 1.0 協議的組成部分,它們通常會被添加為平臺專用 API 的一部分。BLE 傳輸有時間戳,用于表明一個 BLE 數據包內多條信息各自的發送時間。
設備
外圍設備為計算機提供輸入/輸出 (I/O) 功能?!癕IDI 外圍設備”和“MIDI 設備”這兩個術語通常指支持 MIDI 協議的各種硬件或軟件模塊。
在本文中,“MIDI 外圍設備”指物理實體,“MIDI 設備”指實際實現 MIDI 的模塊。
端口
端口是計算機和外圍設備之間的接口點。
MIDI 1.0 使用 5 針 DIN 母頭插座作為端口。
端口有三種:OUT(MIDI 數據的源)、IN(MIDI 數據的接收器)或 THRU(表示直接路由到 OUT 的 IN)。
USB 和 BLE 等其他傳輸端口是端口概念的延伸。
MIDI 設備擁有至少一個 OUT 端口、一個 IN 端口,或同時具有這兩個端口。
MIDI 設備提供源自每個 OUT 端口的信息流,并接收抵達每個 IN 端口的信息流。
當然,術語 IN 和 OUT 是相對于一個端口而言的;對于一個端口是輸入,對于另一個端口則是輸出,反之亦然。
連接
在 MIDI 1.0 傳輸層中,由于電流回路的性質,一個 OUT 端口最多能連接一個 IN 或 THRU 端口。
在 USB 和 BLE 傳輸層中,最底層的情況也是如此(盡管您可以通過實現修復信息流,以便它能廣播到多個 IN 端口)。
線纜
MIDI 1.0 線纜是連接 OUT 端口和 IN 或 THRU 端口的實體線束,
僅用于傳輸數據。
注意:有一種針對 MIDI 的非標準修改,可以通過兩個未使用的針腳供電,稱為“幻象電源”。
USB 線纜和 MIDI 1.0 線纜類似,不過它有多種連接器類型,并且 IN/OUT/THRU 概念被替換為主機/外圍設備角色。
在 USB 主機模式下操作時,主機設備會為 MIDI 外圍設備供電。大多數小型 MIDI 外圍設備使用一個 USB 單元負載 (100mA) 或者更少電量,而一些較大型的外圍設備或配有音頻輸出或指示燈的外圍設備所需的電量會超出主機設備能夠提供的電量。
如果您遇到問題,請嘗試其他 MIDI 外圍設備或有電源的 USB 集線器。
通道
每個 MIDI 信息流均在 16 個通道間進行多路復用。
大多數信息都針對特定通道,不過也有些信息類型不針對特定通道。
按照慣例,盡管通道值用 0 到 15 表示,但通道按 1 到 16 進行編號。
如果應用需要超過 16 個通道,或者需要的吞吐量超過一個信息流所能支持的限度,則必須使用多個端口。
在 MIDI 1.0 中,可使用多根線纜連接端口對來實現上述目的。
在使用 USB 傳輸的 MIDI 中,單個 USB 端點可以支持多個端口,每個端口用線纜編號 [sic] 標識。
根據 USB MIDI 規范,線纜編號可標識端點中的虛擬端口。
注意:在標識端口時,端口編號是一個更為準確的術語。
這樣一來,單個 USB 實體線纜就可以承載 16 個以上的通道。
平臺實現
如簡介中所述,這些通用 MIDI 概念適用于所有實現。有關 Android 平臺上的概念的解釋說明,請參閱針對 android.media.midi 的 Android MIDI 用戶指南。
總結
以上是生活随笔為你收集整理的android midi 分析,MIDI 架构 | Android 开源项目 | Android Open Source Project的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信支付收银台功能上线了
- 下一篇: Android studio打包app(