Musical Instrument Digital Interface (MIDI) คือโปรโตคอลมาตรฐานสำหรับการเชื่อมต่อคอมพิวเตอร์กับเครื่องดนตรี แสงบนเวที และสื่ออื่นๆ ที่เน้นเวลา
ตั้งแต่ Android 13 เป็นต้นไป ระบบจะเพิ่มการรองรับ MIDI 2.0 ลงในการรับส่ง USB MIDI 2.0 เป็นมาตรฐาน MIDI เวอร์ชันใหม่ที่กำหนดขึ้นในปี 2020 โปรโตคอลนี้เพิ่มฟีเจอร์ต่างๆ เช่น การสื่อสาร 2 ทาง ความละเอียดที่สูงขึ้น และการแลกเปลี่ยนพร็อพเพอร์ตี้ ระบบจะเปิดใช้ MIDI 2.0 ผ่านโหมดโฮสต์ USB เสมอเมื่อเปิดใช้การรองรับ MIDI ในแพลตฟอร์ม
ในทางเทคนิคแล้ว 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 ของอุปกรณ์
การขนส่ง
เลเยอร์การรับส่งที่ระบุใน 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 สำหรับอุปกรณ์ MIDI เวอร์ชัน 1.0 วันที่ 1 พ.ย. 1999 ที่เผยแพร่โดย USB Implementers Forum, Inc
โหมดอุปกรณ์ต่อพ่วง USB
หากต้องการเปิดใช้ MIDI สำหรับโหมดอุปกรณ์ต่อพ่วง USB คุณอาจต้องติดตั้งแพตช์ในเคอร์เนล Linux เพื่อผสานรวม drivers/usb/gadget/f_midi.c
เข้ากับไดรเวอร์แกดเจ็ต USB แพตช์เหล่านี้ใช้ได้กับเคอร์เนล Linux เวอร์ชัน 3.10 แพตช์เหล่านี้ยังไม่ได้รับการอัปเดตสำหรับ ConfigFs (สถาปัตยกรรมใหม่สำหรับไดรเวอร์อุปกรณ์ USB) และยังไม่ได้ผสานรวมที่ upstream kernel.org
แพตช์จะแสดงตามลำดับการคอมมิตสำหรับต้นไม้เคอร์เนลในโปรเจ็กต์ kernel/common
สาขา android-3.10
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
นอกจากนี้ คุณยังต้องดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้ด้วย
- ไปที่การตั้งค่า > ตัวเลือกสำหรับนักพัฒนาแอป > เครือข่าย แล้วเลือกช่อง MIDI ในกล่องโต้ตอบเลือกการกำหนดค่า USB
- ขณะที่เสียบอยู่กับโฮสต์ USB ให้ดึงลงจากด้านบนของหน้าจอ เลือกรายการ USB for แล้วเลือก 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