MIDI 架構

本文描述了通用 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 (意味著直接路由到OUTIN )。

USB 和 BLE 等其他傳輸擴展了連接埠概念

一台 MIDI 設備至少有一個OUT連接埠和/或IN連接埠。

MIDI 裝置提供源自每個OUT連接埠的訊息流,並接收到達每個IN連接埠的訊息流。術語“IN”“OUT”當然是相對於一個連接埠而言的;從另一個連接埠的角度來看,相反的術語適用。

聯繫

在 MIDI 1.0 傳輸中,由於電流迴路的性質,一個OUT連接埠最多連接到一個INTHRU連接埠。在 USB 和 BLE 傳輸中,最低層也是如此,儘管實現可能會重新調節訊息流,以便可以將其廣播到多個IN連接埠。

電纜

MIDI 1.0電纜是將OUT連接埠連接到INTHRU連接埠的實體電線束。此電纜僅傳輸資料。

注意:對 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 使用者指南