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 máy tính với nhạc cụ, đèn 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 qua 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 tài sản. Chế độ máy chủ lưu trữ MIDI 2.0 qua USB luôn được bật khi chế độ hỗ trợ MIDI được bật trên nền tảng. MIDI 2.0 qua các cổng truyền ảo được hỗ trợ trong Android 15 trở lên.
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 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 bằng MIDI sang nền tảng Android.
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ác cổng đầu vào và đầu ra MIDI của thiết bị.
Vận chuyển
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 dòng điện với giắc cắm 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 cả MIDI qua USB và MIDI qua Bluetooth năng lượng thấp (BLE).
MIDI cho Android
Android hỗ trợ USB On-The-Go, cho phép thiết bị Android hoạt động như một USB host để điều khiển các thiết bị ngoại vi USB. Các API chế độ máy chủ lưu trữ 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, không 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), các 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 hỗ trợ trực tiếp các phương thức truyền dữ liệu USB, BLE và ảo (giữa các ứng dụng). Android hỗ trợ MIDI 1.0 thông qua một bộ chuyển đổi bên ngoài.
Để biết thông tin chi tiết về 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 các phương thức truyền MIDI 1.0
Việc triển khai MIDI 1.0 phụ thuộc vào ALSA cho các phương thức truyền ở chế độ USB host và chế độ thiết bị ngoại vi USB. ALSA không được dùng cho các phương thức truyền BLE và phương thức truyền ảo.
Chế độ USB Host
Để bật MIDI cho chế độ máy chủ lưu trữ USB, trước tiên, hãy hỗ trợ chế độ máy chủ lưu trữ USB nói chung, sau đó bật CONFIG_SND_RAWMIDI
và CONFIG_SND_USB_MIDI
trong cấu hình nhân của bạn.
Giao thức MIDI qua USB được xác định chính thức theo tiêu chuẩn Định nghĩa về lớp thiết bị cổng buýt 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 xuất bản.
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 thiết bị USB. Các bản vá này có trong phiên bản kernel Linux 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 thiết bị USB), cũng như chưa được hợp nhất tại kernel.org nguồn gốc.
Các bản vá được hiển thị theo thứ tự cam kết cho cây nhân tại dự án kernel/common
nhánh android-3.10
:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
Bạn cũng cần thực hiện 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 > 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 kết nối với máy chủ USB, hãy kéo xuống từ đầu màn hình, chọn mục 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.
Qua mạng (interapp)
Phương thức truyền tải ảo (giữa các ứng dụng) luôn được bật.
Yêu cầu cấp quyền sử dụng tính năng
Các ứng dụng có thể kiểm tra sự hiện diện của tính năng hỗ trợ MIDI bằng cách sử dụng tính năng android.software.midi
.
Để khai báo tính năng hỗ trợ MIDI, hãy thêm dòng này 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 để khai báo tính năng này.
Gỡ lỗi khi ở chế độ lưu trữ
Khi ở chế độ máy chủ lưu trữ USB, bạn sẽ không thể gỡ lỗi bằng Cầu gỡ lỗi Android (adb) qua USB. Hãy xem phần Sử dụng không dây của Cầu gỡ lỗi Android để biết một lựa chọn thay thế.