本文描述了通用 MIDI 架構,獨立於任何平台實作、API 或特定於平台的功能。
關鍵概念
活動
MIDI 協定是為基於事件的通訊而設計的。事件是在指定時間發生或將要發生某事的指示。 MIDI 事件由訊息(原子訊息包)表示。
運輸
MIDI 訊息透過傳輸層(簡稱傳輸)進行編碼和傳遞,該傳輸層將原始 MIDI 資料傳送給接收者,然後接收者將資料解碼為訊息。
基於硬體的 MIDI 傳輸包括:
- 附5 針 DIN連接器的 MIDI 1.0 電流環路
- USB
- 低功耗藍牙 (BLE)
訊息表示
MIDI 傳輸規格描述如何傳送訊息。儘管訊息的打包在最低層級上是特定於傳輸的,但在較高層級上,應用程式可以將按時間排序的訊息序列視為已劃界的位元組流。這是可能的,因為每個訊息都包含足夠的資訊來確定訊息的總長度,前提是訊息邊界的起點已知。
大多數 MIDI 訊息都很短(一到三個位元組),但可以透過SysEx發送更長的訊息。
時間戳
時間戳是在訊息發出時或接收時附加到訊息的可選標籤,具體取決於傳輸方式。時間戳以時間單位表示,例如秒或刻度。
如果沒有明確的時間戳,系統必須取代前一個訊息的時間戳記或當前時間。這些時間戳記的準確性,無論是顯式的還是隱式的,都是基於 MIDI 的系統可靠性的一個重要面向。
時間戳不是 MIDI 1.0 協定的一部分。它們通常作為特定於平台的 API 的一部分添加。 BLE 傳輸具有時間戳,用於指示一個 BLE 資料包內發送的多個單獨訊息的時序。
裝置
週邊設備為電腦提供輸入/輸出 (I/O) 功能。術語MIDI 週邊設備和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 連接線與此類似,只是有多種連接器類型,且IN / OUT / THRU概念被主機/週邊角色取代。
在 USB 主機模式下運作時,主機裝置會向 MIDI 週邊設備供電。大多數小型 MIDI 週邊僅承受一個 USB 單元負載 (100 mA) 或更少。然而,一些較大的周邊,或具有音訊輸出或燈光的周邊,需要比主機設備所能提供的更多的電力。如果您遇到問題,請嘗試其他 MIDI 週邊裝置或主動 USB 集線器。
頻道
每個 MIDI 訊息流在 16 個通道之間重複使用。大多數訊息都針對特定管道,但也有一些訊息類型並非特定於管道。按照慣例,通道編號為 1 到 16,但通道值表示為 0 到 15。
如果應用程式需要超過 16 個通道或高於一個訊息流可以支援的吞吐量,則必須使用多個連接埠。
在 MIDI 1.0 中,這是透過連接連接埠對的多條電纜來完成的。
在 USB 上的 MIDI 傳輸中,單一 USB 端點可以支援多個端口,每個端口都由電纜編號[原文如此] 標識。根據 USB MIDI 規範,電纜編號可識別端點內的虛擬連接埠。
注意:連接埠號碼是一個更準確的術語,因為它標識了一個連接埠。
因此,一條 USB 實體電纜可以承載多於一組的 16 個通道。
平台實施
如簡介中所述,這些通用 MIDI 概念適用於所有實作。有關 Android 平台上概念的解釋,請參閱android.media.midi
的 Android MIDI 使用者指南。