MIDI

เครื่องดนตรีดิจิทัล อินเทอร์เฟซ (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:

  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 ในกล่องโต้ตอบ 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 เพื่อใช้แทน