MIDI

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

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

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

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

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

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

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

ट्रांसपोर्ट

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

एमआईडीआई 1.0 के बाद, यूएसबी के ज़रिए एमआईडीआई और ब्लूटूथ लो एनर्जी (बीएलई) के ज़रिए एमआईडीआई जैसे अतिरिक्त ट्रांसपोर्ट तय किए गए हैं.

Android के लिए MIDI

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

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

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

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

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

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

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

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

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

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

यूएसबी पेरिफ़ेरल मोड के लिए MIDI चालू करने के लिए, आपको अपने Linux कर्नल में पैच लागू करने पड़ सकते हैं, ताकि 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/

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

  • सेटिंग > डेवलपर के लिए सेटिंग और टूल > नेटवर्किंग पर जाएं. इसके बाद, 'यूएसबी कॉन्फ़िगरेशन चुनें' डायलॉग में, MIDI के लिए दिए गए बॉक्स पर सही का निशान लगाएं.
  • यूएसबी होस्ट से कनेक्ट होने के दौरान, स्क्रीन के सबसे ऊपर से नीचे की ओर स्वाइप करें. इसके बाद, USB for एंट्री को चुनें. इसके बाद, 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 का वायरलेस इस्तेमाल सेक्शन देखें.