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