本文將說明通用 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 中,這項功能是透過多條連接兩個通訊埠的纜線來達成。
在 MIDI over USB 傳輸中,單一 USB 端點可支援多個埠,每個埠都由 電纜編號 [sic] 識別。根據 USB MIDI 規格,纜線編號會標示端點中的虛擬連接埠。
注意: port number 會是更準確的用詞,因為它可識別通訊埠。
因此,單一 USB 實體線纜可傳輸多組 16 個通道的資料。
平台實作
如前言所述,這些一般 MIDI 概念適用於所有實作。如要瞭解 Android 平台上的概念,請參閱
android.media.midi
的 Android MIDI 使用手冊。