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 máy tính với các nhạc cụ, ánh sáng sân khấu và các phương tiện đa phương tiện khác theo thời gian.

Kể từ Android 13, phương thức truyền tải USB hỗ trợ MIDI 2.0. 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 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 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 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 này.

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 đối với chế độ máy chủ USB và việc truyền tải chế độ thiết bị ngoại vi USB. ALSA không được dùng cho BLE và các phương thức truyền tải ả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. Xem phần Cấu hình hạt nhân Android.

Phương thức truyền MIDI qua USB được xác định chính thức theo tiêu chuẩn Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 (Xác định lớp thiết bị bus nối tiếp đa năng cho thiết bị MIDI, bản phát hành 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 Chọn cấu hình USB.
  • Khi đã cắm 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 cho, sau đó chọn MIDI.

BLE

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

Ảo (tương tác)

Phương thức truyền ảo (giữa các ứng dụng) luôn được bật.

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

Các ứng dụng có thể sàng lọc sự hiện diện của chế độ hỗ trợ MIDI bằng tính năng android.software.midi.

Để xác nhận 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) với 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ế.