kiến trúc MIDI

Bài viết này mô tả kiến ​​trúc MIDI chung, độc lập với mọi hoạt động triển khai nền tảng, API hoặc các tính năng dành riêng cho nền tảng.

Ý chính

Sự kiện

Giao thức MIDI được thiết kế để liên lạc dựa trên sự kiện. Sự kiện là dấu hiệu cho thấy điều gì đó đã xảy ra hoặc sẽ xảy ra tại một thời điểm nhất định. Các sự kiện MIDI được thể hiện bằng các tin nhắn , các gói thông tin nguyên tử.

Chuyên chở

Tin nhắn MIDI được mã hóa và gửi qua lớp vận chuyển , viết tắt là vận chuyển , 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 tin nhắn.

Việc truyền tải MIDI dựa trên phần cứng bao gồm:

  • Vòng lặp dòng điện MIDI 1.0 với đầu nối DIN 5 chân
  • USB
  • Bluetooth năng lượng thấp (BLE)

Đại diện tin nhắn

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

Hầu hết các tin nhắn MIDI đều ngắn (một đến ba byte), tuy nhiên vẫn có khả năng gửi các tin nhắn dài hơn qua SysEx .

Dấu thời gian

Dấu thời gian là nhãn tùy chọn được đính kèm vào tin nhắn lúc ban đầu hoặc khi nhận được, tùy thuộc vào việc vận chuyển. Dấu thời gian được biểu thị bằng đơn vị thời gian như giây hoặc tích tắc .

Trong trường hợp 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 tin nhắn 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 ẩn ý, ​​là một khía cạnh quan trọng về độ tin cậy của hệ thống dựa trên MIDI.

Dấu thời gian không phải là một phần của giao thức MIDI 1.0. Chúng thường được thêm vào như một phần của API dành riêng cho nền tảng. Việc vận chuyển BLE có dấu thời gian để biểu thị thời gian của nhiều tin nhắn riêng lẻ được gửi trong một gói BLE.

Thiết bị

Thiết bị ngoại vi cung cấp khả năng vào/ra (I/O) cho máy tính. Thuật ngữ thiết bị ngoại vi MIDIthiết bị MIDI thường đề cập đến bất kỳ mô-đun phần cứng hoặc phần mềm nào 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ể vật lý và thiết bị MIDI mô tả mô-đun thực sự triển khai MIDI.

Cổng

Cổng là đ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 (chìm cho 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 tiện vận chuyển 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 , cổng IN 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 . Tất nhiên, các thuật ngữ INOUT chỉ liên quan đến một cổng; từ quan điểm của cổng khác, điều khoản ngược lại được áp dụng.

Sự liên quan

Trong truyền tải MIDI 1.0, một cổng OUT kết nối với tối đa một cổng IN hoặc THRU do tính chất của vòng lặp hiện tại. Trong quá trình truyền tải USB và BLE, điều tương tự 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 tin nhắn để nó có thể được phát tới nhiều cổng IN .

Cáp

Cáp MIDI 1.0 là bó dây vật lý kết nối cổng OUT với cổng IN hoặc THRU . Cáp chỉ mang dữ liệu.

Lưu ý: Có những sửa đổi không chuẩn đối với MIDI cung cấp năng lượng qua hai chân không sử dụng. Đây được gọi là sức mạnh ảo .

Cáp USB cũng tương tự, ngoại trừ có rất 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ủ/ngoại vi.

Khi hoạt động ở chế độ máy chủ USB, thiết bị chủ 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 nhận một tải đơ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 chiếu sáng, yêu cầu nhiều năng lượng hơn mức thiết bị chủ có thể cung cấp. Nếu bạn gặp sự cố, hãy thử thiết bị ngoại vi MIDI khác hoặc bộ chia USB được cấp nguồn.

Kênh

Mỗi luồng tin nhắn MIDI được ghép kênh giữa 16 kênh . Hầu hết tin nhắn đều hướng tới một kênh cụ thể nhưng có những loại tin nhắn không dành riêng cho kênh nào. Thông thường, 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 thông lượng cao hơn mức mà một luồng tin nhắn có thể hỗ trợ thì phải sử dụng nhiều cổng.

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

Trong truyền tải MIDI qua USB, một điểm cuối USB duy nhất 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 của USB MIDI, số cáp xác định cổng ảo bên trong điểm cuối.

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

Do đó, một cáp vật lý USB có thể mang nhiều hơn một 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 MIDI chung này áp dụng cho tất cả các cách triển khai. Để giải thích các khái niệm trên nền tảng Android, hãy xem Hướng dẫn sử dụng MIDI Android dành cho android.media.midi .