MIDI

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 :

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