เครื่องดนตรีดิจิทัล อินเทอร์เฟซ (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 จะใช้ API ของ
midi
เพื่อสื่อสารกับบริการ Android MIDI MIDI
แอปต่างๆ จะใช้คลาส
MidiManager
เป็นหลักในการค้นพบ เปิด และปิด
MidiDevice
อย่างน้อย 1 รายการ
ของ Google ได้ แล้วส่งข้อมูลไปและกลับจากอุปกรณ์แต่ละเครื่องผ่านพอร์ตอินพุตและเอาต์พุต MIDI ของอุปกรณ์
การขนส่ง
การขนส่งทางกายภาพ เลเยอร์ ที่ระบุใน MIDI 1.0 ดั้งเดิมคือการวนซ้ำปัจจุบันกับ ขั้วต่อ DIN 5 ขา
ตั้งแต่ MIDI 1.0 มีการกำหนดการขนส่งเพิ่มเติม รวมถึง MIDI ผ่าน USB และ MIDI มากกว่า บลูทูธพลังงานต่ำ (BLE)
MIDI สำหรับ Android
Android รองรับ USB โหมดเดินทาง ซึ่งช่วยให้อุปกรณ์ 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
ในเคอร์เนล
การกำหนดค่า ดูการกำหนดค่าเคอร์เนลของ Android
การส่ง 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 แพตช์เหล่านี้ยังไม่ได้อัปเดตสำหรับ
ConfigF
(สถาปัตยกรรมใหม่
สำหรับไดรเวอร์แกดเจ็ต USB) หรือไม่ก็ผสานรวมที่อัปสตรีม
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 ในกล่องโต้ตอบ Select USB Configuration
- ขณะที่เชื่อมต่อกับโฮสต์ USB ให้ดึงลงจากด้านบนของหน้าจอ และเลือกรายการ USB สำหรับ แล้วเลือก MIDI
BLE
MIDI over 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 เพื่อใช้แทน