MIDI

Giao diện kỹ thuật số cho nhạc cụ (MIDI) là một giao thức tiêu chuẩn để kết nối các máy tính với nhạc cụ, ánh sáng sân khấu và các phương tiện khác theo thời gian.

Kể từ Android 13, tính năng hỗ trợ MIDI 2.0 sẽ được thêm vào phương thức truyền tải USB. MIDI 2.0 là một tiêu chuẩn MIDI mới hơn được xác định vào năm 2020. Giao thức này bổ sung các tính năng như giao tiếp hai chiều, độ phân giải cao hơn và trao đổi thuộc tính. MIDI 2.0 thông qua chế độ máy chủ USB luôn được bật khi bật tính năng hỗ trợ MIDI trên nền tảng.

Nói một cách chính xác, MIDI không liên quan đến âm thanh. Tuy nhiên, vì MIDI thường được dùng với âm nhạc, nên bài viết này được đặt trong phần âm thanh.

MIDI cho NDK

Android 10 giúp bạn dễ dàng chuyển các ứng dụng âm thanh chuyên nghiệp sang nền tảng Android bằng MIDI.

AMidi là một API NDK cho phép các nhà phát triển ứng dụng gửi và nhận dữ liệu MIDI bằng mã C/C++.

Các ứng dụng MIDI trên Android thường sử dụng API midi để giao tiếp với dịch vụ Android MIDI. Các ứng dụng MIDI chủ yếu dựa vào lớp MidiManager để khám phá, mở và đóng một hoặc nhiều đối tượng MidiDevice, đồng thời truyền dữ liệu đến và đi từ mỗi thiết bị thông qua cổng đầu vào và đầu ra MIDI của thiết bị.

Phương tiện vận tải

Lớp truyền tải vật lý được chỉ định trong MIDI 1.0 ban đầu là một vòng lặp hiện tại với đầu nối DIN 5 chân.

Kể từ MIDI 1.0, các phương thức truyền tải bổ sung đã được xác định, bao gồm MIDI qua USB và MIDI qua Bluetooth năng lượng thấp (BLE).

MIDI cho Android

Android hỗ trợ tính năng USB On-The-Go, cho phép thiết bị Android đóng vai trò là máy chủ USB để điều khiển các thiết bị ngoại vi USB. Các API chế độ máy chủ USB cho phép nhà phát triển triển khai MIDI qua USB ở cấp ứng dụng, nhưng cho đến gần đây, chưa có API nền tảng tích hợp nào cho MIDI.

Kể từ bản phát hành Android 6.0 (Marshmallow), nhà sản xuất thiết bị có thể bật tính năng hỗ trợ MIDI không bắt buộc trong nền tảng. Android trực tiếp hỗ trợ USB, BLE và các phương thức truyền ảo (giữa các ứng dụng). Android hỗ trợ MIDI 1.0 thông qua bộ chuyển đổi bên ngoài.

Để biết thông tin chi tiết về cách lập trình ứng dụng bằng API MIDI, hãy xem gói android.media.midi.

Phần còn lại của bài viết này thảo luận về cách nhà sản xuất thiết bị Android có thể bật tính năng hỗ trợ MIDI trong nền tảng.

Bật phương thức truyền MIDI 1.0

Việc triển khai MIDI 1.0 phụ thuộc vào ALSA cho chế độ máy chủ USB và chế độ truyền thiết bị ngoại vi USB. ALSA không được dùng cho BLE và các phương thức truyền ảo.

Chế độ máy chủ USB

Để bật MIDI cho chế độ máy chủ USB, trước tiên, hãy hỗ trợ chế độ máy chủ USB nói chung, sau đó bật CONFIG_SND_RAWMIDICONFIG_SND_USB_MIDI trong cấu hình nhân hệ điều hành.

Phương thức truyền MIDI qua USB được xác định chính thức theo tiêu chuẩn Xác định lớp thiết bị Bus nối tiếp đa năng cho thiết bị MIDI Phiên bản 1.0 ngày 1 tháng 11 năm 1999 do USB Implementers Forum, Inc phát hành.

Chế độ thiết bị ngoại vi USB

Để bật MIDI cho chế độ thiết bị ngoại vi USB, bạn có thể cần áp dụng các bản vá cho nhân Linux để tích hợp drivers/usb/gadget/f_midi.c vào trình điều khiển tiện ích USB. Các bản vá này có sẵn cho nhân Linux phiên bản 3.10. Các bản vá này chưa được cập nhật cho ConfigFs (một cấu trúc mới cho trình điều khiển tiện ích USB) và cũng chưa được hợp nhất ở thượng nguồn kernel.org.

Các bản vá được hiển thị theo thứ tự cam kết cho cây nhân trong dự án kernel/common nhánh android-3.10:

  1. https://android-review.googlesource.com/#/c/127450/
  2. https://android-review.googlesource.com/#/c/127452/
  3. https://android-review.googlesource.com/#/c/143714/

Bạn cũng cần làm một trong những việc sau:

  • Chuyển đến phần Settings > Developer options > Networking (Cài đặt > Tuỳ chọn cho nhà phát triển > Kết nối mạng) rồi đánh dấu vào hộp MIDI trong hộp thoại Select USB Configuration (Chọn cấu hình USB).
  • Khi được gắn vào máy chủ USB, hãy kéo xuống từ đầu màn hình, chọn mục nhập USB for (USB cho) rồi chọn MIDI.

BLE

MIDI qua BLE luôn được bật, miễn là thiết bị hỗ trợ BLE.

Ảo (giữa các ứng dụng)

Chế độ truyền ảo (giữa các ứng dụng) luôn bật.

Xác nhận quyền sở hữu tính năng

Ứng dụng có thể sàng lọc để biết có hỗ trợ MIDI hay không bằng tính năng android.software.midi.

Để xác nhận hỗ trợ MIDI, hãy thêm dòng sau vào device.mk:

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.
midi.xml

Hãy xem Tài liệu định nghĩa về khả năng tương thích (CDD) cho Android để biết thông tin về các yêu cầu để xác nhận quyền sở hữu tính năng.

Gỡ lỗi khi ở chế độ máy chủ

Khi ở chế độ máy chủ USB, bạn sẽ không thể gỡ lỗi Cầu gỡ lỗi Android (adb) qua USB. Hãy xem phần Mức sử dụng không dây của Cầu gỡ lỗi Android để biết phương án thay thế.