MIDI

म्यूज़िकल इंस्ट्रुमेंट डिजिटल इंटरफ़ेस (एमआईडीआई), एक स्टैंडर्ड प्रोटोकॉल है. इसका इस्तेमाल करके, कंप्यूटर को संगीत वाले इंस्ट्रुमेंट, स्टेज की लाइटिंग, और समय के हिसाब से चलने वाले दूसरे मीडिया से कनेक्ट किया जा सकता है.

Android 13 में, यूएसबी ट्रांसपोर्ट में MIDI 2.0 की सुविधा जोड़ी गई है. MIDI 2.0, MIDI का नया स्टैंडर्ड है. इसे 2020 में तय किया गया था. इस प्रोटोकॉल में, दोनों तरफ़ से कम्यूनिकेशन, ज़्यादा रिज़ॉल्यूशन, और प्रॉपर्टी एक्सचेंज जैसी सुविधाएं जोड़ी गई हैं. अगर प्लैटफ़ॉर्म पर एमआईडीआई की सुविधा चालू है, तो यूएसबी होस्ट मोड के ज़रिए एमआईडीआई 2.0 हमेशा चालू रहता है.

असल में, MIDI का ऑडियो से कोई लेना-देना नहीं है. हालांकि, एमआईडीआई का इस्तेमाल आम तौर पर संगीत के साथ किया जाता है. इसलिए, इस लेख को ऑडियो सेक्शन में रखा गया है.

एनडीके के लिए एमआईडीआई

Android 10 की मदद से, MIDI का इस्तेमाल करके, Android प्लैटफ़ॉर्म पर प्रोफ़ेशनल ऑडियो ऐप्लिकेशन को आसानी से पोर्ट किया जा सकता है.

AMidi एक ऐसा NDK API है जो ऐप्लिकेशन डेवलपर को C/C++ कोड की मदद से, MIDI डेटा भेजने और पाने की सुविधा देता है.

Android एमआईडीआई ऐप्लिकेशन, आम तौर पर Android एमआईडीआई सेवा के साथ इंटरैक्ट करने के लिए, midi एपीआई का इस्तेमाल करते हैं. एमआईडीआई ऐप्लिकेशन, एक या उससे ज़्यादा MidiDevice ऑब्जेक्ट को खोजने, खोलने, और बंद करने के लिए मुख्य रूप से MidiManager क्लास पर निर्भर करते हैं. साथ ही, वे डिवाइस के एमआईडीआई इनपुट और आउटपुट पोर्ट के ज़रिए, हर डिवाइस से डेटा भेजते और पाते हैं.

परिवहन

ओरिजनल MIDI 1.0 में बताई गई फ़िज़िकल ट्रांसपोर्ट लेयर, 5-पिन डीआईएन कनेक्टर वाला करंट लूप है.

MIDI 1.0 के बाद, ट्रांसपोर्ट के अन्य तरीके तय किए गए हैं. इनमें यूएसबी के ज़रिए MIDI और Bluetooth Low Energy (BLE) के ज़रिए MIDI शामिल हैं.

Android के लिए एमआईडीआई

Android पर यूएसबी ऑन-द-गो की सुविधा काम करती है. इसकी मदद से, Android डिवाइस को यूएसबी होस्ट के तौर पर इस्तेमाल किया जा सकता है, ताकि यूएसबी डिवाइसों को कनेक्ट किया जा सके. USB होस्ट मोड एपीआई की मदद से, डेवलपर ऐप्लिकेशन लेवल पर, USB के ज़रिए MIDI को लागू कर सकते हैं. हालांकि, हाल ही तक MIDI के लिए कोई प्लैटफ़ॉर्म एपीआई नहीं था.

डिवाइस बनाने वाली कंपनियां, Android 6.0 (Marshmallow) रिलीज़ से, प्लैटफ़ॉर्म में MIDI की वैकल्पिक सुविधा चालू कर सकती हैं. Android, यूएसबी, बीएलई, और वर्चुअल (इंटरऐप्लिकेशन) ट्रांसपोर्ट के साथ सीधे तौर पर काम करता है. Android, बाहरी अडैप्टर की मदद से MIDI 1.0 के साथ काम करता है.

MIDI API की मदद से ऐप्लिकेशन प्रोग्रामिंग के बारे में ज़्यादा जानने के लिए, android.media.midi पैकेज देखें.

इस लेख के बाकी हिस्से में बताया गया है कि Android डिवाइस बनाने वाली कंपनी, प्लैटफ़ॉर्म में MIDI की सुविधा कैसे चालू कर सकती है.

एमआईडीआई 1.0 ट्रांसपोर्ट की सुविधा चालू करना

यूएसबी होस्ट मोड और यूएसबी पेरिफ़रल मोड ट्रांसपोर्ट के लिए, MIDI 1.0 को लागू करना ALSA पर निर्भर करता है. ALSA का इस्तेमाल, बीएलई और वर्चुअल ट्रांसपोर्ट के लिए नहीं किया जाता.

यूएसबी होस्ट मोड

USB होस्ट मोड के लिए MIDI को चालू करने के लिए, सबसे पहले सामान्य तौर पर USB होस्ट मोड चालू करें. इसके बाद, अपने कर्नेल कॉन्फ़िगरेशन में CONFIG_SND_RAWMIDI और CONFIG_SND_USB_MIDI को चालू करें.

यूएसबी के ज़रिए एमआईडीआई ट्रांसफ़र की सुविधा को आधिकारिक तौर पर, यूएसबी इंप्लीमेंटर्स फ़ोरम, इंक के पब्लिश किए गए स्टैंडर्ड, यूनिवर्सल सीरियल बस डिवाइस क्लास डेफ़िनिशन फ़ॉर एमआईडीआई डिवाइसेस रिलीज़ 1.0 नवंबर 1, 1999 के ज़रिए तय किया गया है.

यूएसबी पेरिफ़रल मोड

यूएसबी पेरिफ़रल मोड के लिए MIDI चालू करने के लिए, आपको अपने Linux kernel में पैच लागू करने पड़ सकते हैं, ताकि drivers/usb/gadget/f_midi.c को यूएसबी गैजेट ड्राइवर में इंटिग्रेट किया जा सके. ये पैच, Linux कर्नेल के वर्शन 3.10 के लिए उपलब्ध हैं. इन पैच को अब तक ConfigFs (यूएसबी गैजेट ड्राइवर के लिए एक नया आर्किटेक्चर) के लिए अपडेट नहीं किया गया है. साथ ही, इन्हें अपस्ट्रीम 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/

आपको इनमें से कोई एक काम भी करना होगा:

  • सेटिंग > डेवलपर के लिए सेटिंग > नेटवर्क पर जाएं और USB कॉन्फ़िगरेशन चुनें डायलॉग में, MIDI के लिए बॉक्स को चुनें.
  • यूएसबी होस्ट से कनेक्ट होने के बाद, स्क्रीन पर सबसे ऊपर से नीचे की ओर खींचें और छोड़ें. इसके बाद, यूएसबी के लिए एंट्री चुनें और फिर एमआईडीआई चुनें.

BLE

अगर डिवाइस पर बीएलई काम करता है, तो बीएलई पर एमआईडीआई हमेशा चालू रहता है.

वर्चुअल (इंटरऐप्लिकेशन)

वर्चुअल (इंटरऐप्लिकेशन) ट्रांसपोर्ट हमेशा चालू रहता है.

सुविधा पर दावा करना

ऐप्लिकेशन, android.software.midi सुविधा का इस्तेमाल करके, एमआईडीआई की सुविधा मौजूद है या नहीं, यह पता लगा सकते हैं.

एमआईडीआई की सुविधा के लिए दावा करने के लिए, अपने device.mk में यह लाइन जोड़ें:

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.
midi.xml

इस सुविधा पर दावा करने से जुड़ी ज़रूरी शर्तों के बारे में जानने के लिए, Android कंपैटबिलिटी डेफ़िनिशन डॉक्यूमेंट (सीडीडी) देखें.

होस्ट मोड में डीबग करना

यूएसबी होस्ट मोड में, यूएसबी के ज़रिए Android Debug Bridge (adb) डीबगिंग की सुविधा उपलब्ध नहीं है. इसके विकल्प के तौर पर, Android Debug Bridge के वायरलेस इस्तेमाल सेक्शन को देखें.