MIDI

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

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

กล่าวอย่างเคร่งครัดคือ 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

เลเยอร์การส่งผ่าน ทางกายภาพที่ระบุไว้ใน MIDI 1.0 ต้นฉบับคือลูปกระแสไฟฟ้าที่มีขั้วต่อ DIN 5 พิน

นับตั้งแต่ MIDI 1.0 มีการกำหนดการส่งเพิ่มเติม ซึ่งรวมถึง 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 รองรับการรับส่งข้อมูลผ่าน USB, BLE และการรับส่งข้อมูลเสมือน (ระหว่างแอป) โดยตรง Android รองรับ MIDI 1.0 ผ่านอะแดปเตอร์ภายนอก

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

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

การเปิดใช้การส่งผ่าน MIDI 1.0

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

โหมดโฮสต์ USB

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

การรับส่ง 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

แพตช์จะแสดงตามลำดับการคอมมิตสำหรับทรีของเคอร์เนลที่โปรเจ็กต์ kernel/common สาขา 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/

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

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

BLE

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

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

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

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

แอปสามารถตรวจสอบว่ามีการรองรับ 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