Musical Instrument Digital Interface (MIDI) เป็นโปรโตคอลมาตรฐานสำหรับการเชื่อมต่อระหว่างคอมพิวเตอร์กับเครื่องดนตรี ไฟเวที และสื่ออื่นๆ
พูดอย่างเคร่งครัด MIDI ไม่เกี่ยวข้องกับเสียง แต่เนื่องจาก MIDI มักใช้กับเพลง บทความนี้จึงอยู่ในส่วนเสียง
MIDI สำหรับ NDK
Android 10 ช่วยให้พอร์ตแอปเสียงระดับมืออาชีพได้ง่ายขึ้นโดยใช้ MIDI ไปยังแพลตฟอร์ม Android
AMidi
คือ NDK API ที่ช่วยให้นักพัฒนาแอปสามารถส่งและรับข้อมูล MIDI ด้วยรหัส C/C++
แอป Android MIDI มักใช้ midi
API เพื่อสื่อสารกับบริการ Android MIDI แอป MIDI ขึ้นอยู่กับคลาส MidiManager
เป็นหลักในการค้นหา เปิด และปิดออบเจ็กต์ MidiDevice
อย่างน้อยหนึ่งรายการ และส่งผ่านข้อมูลไปยังและจากแต่ละอุปกรณ์ผ่านพอร์ตอินพุตและเอาต์พุต 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 และเสมือน (ระหว่างแอพ) โดยตรง Android รองรับ MIDI 1.0 ผ่านอะแดปเตอร์ภายนอก
สำหรับรายละเอียดเกี่ยวกับการเขียนโปรแกรมแอปพลิเคชันด้วย MIDI API โปรดดูแพ็คเกจ android.media.midi
ส่วนที่เหลือของบทความนี้กล่าวถึงวิธีที่ผู้ผลิตอุปกรณ์ Android สามารถเปิดใช้งานการสนับสนุน MIDI ในแพลตฟอร์มได้
เปิดใช้งานการขนส่ง
การใช้งาน MIDI ขึ้นอยู่กับ 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 for MIDI Devices Release 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
branch 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 สำหรับ จากนั้นเลือก 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 สำหรับทางเลือกอื่น