MIDI

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

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

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

MIDI สำหรับ NDK

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

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

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

การขนส่ง

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

ตั้งแต่ MIDI 1.0 ได้มีการกำหนดการขนส่งเพิ่มเติม รวมถึง MIDI ผ่าน USB และ MIDI ผ่าน Bluetooth Low Energy (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 และเสมือน (interapp) โดยตรง 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 ในการกำหนดค่าเคอร์เนลของคุณ ดู การกำหนดค่าเคอร์เนล Android

การขนส่ง MIDI ผ่าน USB ถูกกำหนดอย่างเป็นทางการโดย Universal Serial Bus Device Class Definition สำหรับอุปกรณ์ MIDI รุ่น 1.0 วันที่ 1 พฤศจิกายน 1999 ซึ่งเผยแพร่โดย USB Implementers Forum, Inc.

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

หากต้องการเปิดใช้งาน MIDI สำหรับโหมดอุปกรณ์ต่อพ่วง USB คุณอาจจำเป็นต้องใช้แพตช์กับเคอร์เนล Linux ของคุณเพื่อรวม drivers/usb/gadget/f_midi.c เข้ากับไดรเวอร์อุปกรณ์ USB โปรแกรมแก้ไขเหล่านี้พร้อมใช้งานสำหรับเคอร์เนล Linux เวอร์ชัน 3.10 โปรแกรมแก้ไขเหล่านี้ยังไม่ได้รับการอัปเดตสำหรับ ConfigF (สถาปัตยกรรมใหม่สำหรับไดรเวอร์อุปกรณ์ USB) และไม่ได้รวมเข้าด้วยกันที่ upstream 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

เบล

MIDI ผ่าน BLE จะถูกเปิดใช้งานเสมอ โดยที่อุปกรณ์รองรับ BLE

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

การขนส่งเสมือน (interapp) เปิดใช้งานอยู่เสมอ

การอ้างสิทธิ์คุณสมบัติ

แอพสามารถคัดกรองการรองรับ 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 สำหรับทางเลือกอื่น