MIDI

Musical Instrument Digital Interface (MIDI) เป็นโปรโตคอลมาตรฐานสำหรับการเชื่อมต่อคอมพิวเตอร์กับเครื่องดนตรี ไฟเวที และสื่ออื่นๆ ที่อิงตามเวลา

ตั้งแต่ Android 13 เป็นต้นไป ระบบจะเพิ่มการรองรับ MIDI 2.0 ลงใน Transport USB MIDI 2.0 เป็นมาตรฐาน MIDI ใหม่กว่าที่กำหนดขึ้นในปี 2020 โปรโตคอลนี้เพิ่มฟีเจอร์ต่างๆ เช่น การสื่อสารแบบ 2 ทาง ความละเอียดที่สูงขึ้น และการแลกเปลี่ยนพร็อพเพอร์ตี้ MIDI 2.0 ผ่านโหมดโฮสต์ USB จะเปิดใช้เสมอเมื่อมีการเปิดใช้การรองรับ MIDI ในแพลตฟอร์ม Android 15 ขึ้นไปรองรับ MIDI 2.0 ผ่าน Transport เสมือน

พูดอย่างเคร่งครัดแล้ว MIDI ไม่เกี่ยวข้องกับเสียง แต่เนื่องจากมีการใช้ MIDI กับเพลงโดยทั่วไป บทความนี้จึงอยู่ในส่วนเสียง

MIDI สำหรับ NDK

Android 10 ช่วยให้การย้ายแอปเสียงระดับมืออาชีพที่ใช้ MIDI ไปยังแพลตฟอร์ม Android ทำได้ง่ายขึ้น

AMidi เป็น NDK API ที่ช่วยให้นักพัฒนาแอป สามารถส่งและรับข้อมูล MIDI ด้วยโค้ด C/C++

แอป MIDI ของ Android มักจะใช้ midi API เพื่อสื่อสารกับบริการ MIDI ของ Android แอป MIDI ขึ้นอยู่กับคลาส MidiManager เป็นหลักในการค้นหา เปิด และปิดออบเจ็กต์ MidiDevice อย่างน้อย 1 รายการ รวมถึงส่งข้อมูลไปยังและจากอุปกรณ์แต่ละเครื่องผ่านพอร์ตอินพุตและเอาต์พุต MIDI ของอุปกรณ์

Transport

เลเยอร์ Transport ทางกายภาพที่ระบุไว้ใน MIDI 1.0 ดั้งเดิมคือลูปปัจจุบันที่มีตัวเชื่อมต่อ DIN 5 พิน

นับตั้งแต่ MIDI 1.0 เป็นต้นมา มีการกำหนด Transport เพิ่มเติม ซึ่งรวมถึง MIDI ผ่าน USB และ MIDI ผ่าน บลูทูธพลังงานต่ำ (BLE)

MIDI สำหรับ Android

Android รองรับ USB On-The-Go, ซึ่งช่วยให้อุปกรณ์ Android ทำหน้าที่เป็นโฮสต์ USB เพื่อขับเคลื่อนอุปกรณ์ต่อพ่วง USB ได้ API โหมดโฮสต์ USB ช่วยให้นักพัฒนาแอปสามารถใช้ MIDI ผ่าน USB ในระดับแอปพลิเคชันได้ แต่จนถึงเมื่อไม่นานมานี้ยังไม่มี API แพลตฟอร์มในตัวสำหรับ MIDI

ตั้งแต่ Android 6.0 (Marshmallow) เป็นต้นไป ผู้ผลิตอุปกรณ์สามารถเปิดใช้การรองรับ MIDI ที่ไม่บังคับในแพลตฟอร์มได้ Android รองรับ Transport USB, BLE และ Transport เสมือน (ระหว่างแอป) โดยตรง Android รองรับ MIDI 1.0 ผ่านอะแดปเตอร์ภายนอก

โปรดดูรายละเอียดเกี่ยวกับการเขียนโปรแกรมแอปพลิเคชันด้วย MIDI API ได้ที่ android.media.midi แพ็กเกจ

ส่วนที่เหลือของบทความนี้จะอธิบายวิธีที่ผู้ผลิตอุปกรณ์ Android สามารถเปิดใช้การรองรับ MIDI ในแพลตฟอร์มได้

การเปิดใช้ Transport MIDI 1.0

การใช้งาน MIDI 1.0 ขึ้นอยู่กับ ALSA สำหรับ Transport โหมดโฮสต์ USB และโหมดอุปกรณ์ต่อพ่วง USB ระบบจะไม่ใช้ ALSA สำหรับ Transport BLE และ Transport เสมือน

โหมดโฮสต์ USB

หากต้องการเปิดใช้ MIDI สำหรับโหมดโฮสต์ USB ให้รองรับโหมดโฮสต์ USB โดยทั่วไปก่อน แล้วจึงเปิดใช้ CONFIG_SND_RAWMIDI และ CONFIG_SND_USB_MIDI ในการกำหนดค่าเคอร์เนล

Transport MIDI ผ่าน USB ได้รับการกำหนดอย่างเป็นทางการโดย มาตรฐาน Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 ที่เผยแพร่โดย USB Implementers Forum, Inc.

โหมดอุปกรณ์ต่อพ่วง USB

หากต้องการเปิดใช้ MIDI สำหรับโหมดอุปกรณ์ต่อพ่วง USB คุณอาจต้องใช้แพตช์กับเคอร์เนล Linux เพื่อผสานรวม drivers/usb/gadget/f_midi.c เข้ากับไดรเวอร์อุปกรณ์ USB แพตช์เหล่านี้พร้อมใช้งานสำหรับเคอร์เนล Linux เวอร์ชัน 3.10 แพตช์เหล่านี้ยังไม่ได้อัปเดตสำหรับ ConfigFs (สถาปัตยกรรมใหม่ สำหรับไดรเวอร์อุปกรณ์ USB) และยังไม่ได้ผสานรวมที่เคอร์เนลต้นน้ำ kernel.org

แพตช์จะแสดงตามลำดับการคอมมิตสำหรับทรีเคอร์เนลที่สาขา android-3.10 ของโปรเจ็กต์ kernel/common ดังนี้

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

นอกจากนี้ คุณยังต้องทำอย่างใดอย่างหนึ่งต่อไปนี้

  • ไปที่การตั้งค่า > ตัวเลือกสำหรับนักพัฒนาแอป > ระบบเครือข่าย แล้วเลือกช่องสำหรับ MIDI ในกล่องโต้ตอบเลือกการกำหนดค่า USB
  • ขณะเชื่อมต่อกับโฮสต์ USB ให้ปัดลงจากด้านบนของหน้าจอ เลือกรายการ USB สำหรับ แล้วเลือก MIDI

BLE

MIDI ผ่าน BLE จะเปิดใช้เสมอหากอุปกรณ์รองรับ BLE

เสมือน (ระหว่างแอป)

Transport เสมือน (ระหว่างแอป) จะเปิดใช้เสมอ

การอ้างสิทธิ์ฟีเจอร์

แอปสามารถตรวจสอบการรองรับ MIDI ได้โดยใช้ฟีเจอร์ android.software.midi

หากต้องการอ้างสิทธิ์การรองรับ MIDI ให้เพิ่มบรรทัดนี้ลงใน device.mk

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

โปรดดูข้อมูลเกี่ยวกับข้อกำหนดในการอ้างสิทธิ์ฟีเจอร์ได้ที่ เอกสารนิยามความเข้ากันได้ของ Android (CDD)

การแก้ไขข้อบกพร่องขณะอยู่ในโหมดโฮสต์

ขณะอยู่ในโหมดโฮสต์ USB การแก้ไขข้อบกพร่อง Android Debug Bridge (adb) ผ่าน USB จะไม่พร้อมใช้งาน โปรดดูทางเลือกอื่นได้ที่ส่วน การใช้งานแบบไร้สายของ Android Debug Bridge