Cấu trúc MIDI

Bài viết này mô tả cấu trúc MIDI chung, độc lập với mọi phương thức triển khai nền tảng, API hoặc tính năng dành riêng cho nền tảng.

Khái niệm chính

Sự kiện

Giao thức MIDI được thiết kế để giao tiếp dựa trên sự kiện. Sự kiện là một chỉ báo cho biết rằng có điều gì đó đã xảy ra hoặc sẽ xảy ra vào một thời điểm cụ thể. Các sự kiện MIDI được biểu thị bằng thông báo, các gói thông tin nguyên tử.

Giao thông vận tải

Thông báo MIDI được mã hoá và phân phối qua một lớp truyền tải (viết tắt là transport). Lớp này sẽ gửi dữ liệu MIDI thô đến người nhận, sau đó người nhận sẽ giải mã dữ liệu thành thông báo.

Các phương thức truyền MIDI dựa trên phần cứng bao gồm:

  • Vòng lặp hiện tại MIDI 1.0 với giắc cắm DIN 5 chân
  • USB
  • Bluetooth năng lượng thấp (BLE)

Biểu thị thông báo

Quy cách truyền MIDI mô tả cách truyền tin nhắn. Mặc dù việc đóng gói thông điệp là dành riêng cho phương thức truyền tải ở cấp thấp nhất, nhưng ở cấp cao hơn, các ứng dụng có thể coi một chuỗi thông điệp được sắp xếp theo thời gian là một luồng byte được phân định. Điều này có thể xảy ra vì mỗi thông báo chứa đủ thông tin để xác định tổng chiều dài của thông báo, miễn là bạn biết điểm bắt đầu của ranh giới thông báo.

Hầu hết thông báo MIDI đều ngắn (từ 1 đến 3 byte), nhưng có thể gửi thông báo dài hơn thông qua SysEx.

Dấu thời gian

Dấu thời gian là một nhãn không bắt buộc được đính kèm vào một thông báo tại thời điểm bắt đầu hoặc khi nhận được, tuỳ thuộc vào phương thức truyền tải. Dấu thời gian được biểu thị bằng các đơn vị thời gian như giây hoặc tích tắc.

Nếu không có dấu thời gian rõ ràng, hệ thống phải thay thế dấu thời gian của thông báo ngay trước đó hoặc thời gian hiện tại. Độ chính xác của các dấu thời gian này, dù rõ ràng hay ngầm ẩn, là một khía cạnh quan trọng đối với độ tin cậy của hệ thống dựa trên MIDI.

Dấu thời gian không thuộc giao thức MIDI 1.0. Các API này thường được thêm vào API dành riêng cho nền tảng. Phương thức truyền BLE có dấu thời gian để cho biết thời gian của nhiều thông báo riêng lẻ được gửi trong một gói BLE.

Thiết bị

Thiết bị ngoại vi cung cấp chức năng đầu vào/đầu ra (I/O) cho máy tính. Các thuật ngữ thiết bị ngoại vi MIDIthiết bị MIDI thường đề cập đến mọi mô-đun phần cứng hoặc phần mềm hỗ trợ giao thức MIDI. Trong tài liệu này, thiết bị ngoại vi MIDI đề cập đến thực thể thực và thiết bị MIDI mô tả mô-đun thực sự triển khai MIDI.

Cổng

Cổng là một điểm giao tiếp giữa máy tính và thiết bị ngoại vi.

MIDI 1.0 sử dụng ổ cắm DIN 5 chân cái làm cổng. Mỗi cổng là OUT (nguồn dữ liệu MIDI), IN (bồn lưu trữ dữ liệu MIDI) hoặc THRU (nghĩa là IN được định tuyến trực tiếp đến OUT).

Các phương thức truyền tải khác như USB và BLE mở rộng khái niệm cổng.

Thiết bị MIDI có ít nhất một cổng OUT (Đầu ra), cổng IN (Đầu vào) hoặc cả hai.

Thiết bị MIDI cung cấp(các) luồng tin nhắn bắt nguồn từ mỗi cổng OUT và nhận(các) luồng tin nhắn đến mỗi cổng IN. Các thuật ngữ IN (VÀO) và OUT (RA) tất nhiên là tương ứng với một cổng; từ quan điểm của cổng còn lại, thuật ngữ đảo ngược sẽ được áp dụng.

Kết nối

Trong quá trình truyền MIDI 1.0, cổng OUT kết nối với tối đa một cổng IN hoặc THRU do bản chất của vòng lặp hiện tại. Trong các phương thức truyền tải USB và BLE, điều này cũng đúng ở lớp thấp nhất, mặc dù việc triển khai có thể điều chỉnh lại luồng thông báo để có thể truyền đến nhiều cổng IN.

Cáp

Cáp MIDI 1.0 là một bó dây thực tế kết nối cổng OUT với cổng IN hoặc THRU. Cáp này chỉ truyền dữ liệu.

Lưu ý: Có một số sửa đổi không chuẩn đối với MIDI cung cấp nguồn qua hai chân không dùng đến. Đây được gọi là nguồn phantom.

Cáp USB cũng tương tự, ngoại trừ việc có nhiều loại đầu nối và khái niệm IN/OUT/THRU được thay thế bằng vai trò máy chủ/phần ngoại vi.

Khi hoạt động ở chế độ máy chủ USB, thiết bị lưu trữ sẽ cấp nguồn cho thiết bị ngoại vi MIDI. Hầu hết các thiết bị ngoại vi MIDI nhỏ đều có mức tải một đơn vị USB (100 mA) trở xuống. Tuy nhiên, một số thiết bị ngoại vi lớn hơn hoặc thiết bị ngoại vi có đầu ra âm thanh hoặc đèn cần nhiều năng lượng hơn so với thiết bị lưu trữ có thể cung cấp. Nếu bạn gặp sự cố, hãy thử một thiết bị ngoại vi MIDI khác hoặc một trung tâm USB có nguồn.

Kênh

Mỗi luồng thông báo MIDI được đa kênh hoá giữa 16 kênh. Hầu hết thông báo đều được gửi đến một kênh cụ thể, nhưng có một số loại thông báo không dành riêng cho kênh. Theo thông lệ, các kênh được đánh số từ 1 đến 16, mặc dù được biểu thị bằng các giá trị kênh từ 0 đến 15.

Nếu ứng dụng cần nhiều hơn 16 kênh hoặc có lưu lượng cao hơn mức mà một luồng thông báo có thể hỗ trợ, thì bạn phải sử dụng nhiều cổng.

Trong MIDI 1.0, việc này được thực hiện bằng nhiều cáp kết nối các cặp cổng.

Trong quá trình truyền MIDI qua USB, một điểm cuối USB có thể hỗ trợ nhiều cổng, mỗi cổng được xác định bằng một số cáp [sic]. Theo thông số kỹ thuật USB MIDI, số cáp xác định cổng ảo trong điểm cuối.

Lưu ý: số cổng sẽ là một thuật ngữ chính xác hơn, vì nó xác định một cổng.

Do đó, một cáp USB vật lý có thể truyền nhiều bộ 16 kênh.

Triển khai nền tảng

Như đã lưu ý trong phần giới thiệu, các khái niệm chung về MIDI này áp dụng cho tất cả các phương thức triển khai. Để diễn giải các khái niệm trên nền tảng Android, hãy xem Hướng dẫn sử dụng Android MIDI cho android.media.midi.