म्यूज़िकल इंस्ट्रुमेंट डिजिटल इंटरफ़ेस (एमआईडीआई), एक स्टैंडर्ड प्रोटोकॉल है. इसकी मदद से, कंप्यूटर को संगीत वाले इंस्ट्रुमेंट, स्टेज की लाइटिंग, और समय के हिसाब से चलने वाले दूसरे मीडिया से कनेक्ट किया जा सकता है.
Android 13 में, यूएसबी ट्रांसपोर्ट में MIDI 2.0 की सुविधा जोड़ी गई है. MIDI 2.0, एमआईडीआई का नया स्टैंडर्ड है. इसे साल 2020 में तय किया गया था. इस प्रोटोकॉल में दो-तरफ़ा कम्यूनिकेशन, बेहतर रिज़ॉल्यूशन, और प्रॉपर्टी एक्सचेंज जैसी सुविधाएं जोड़ी जाती हैं. अगर प्लैटफ़ॉर्म पर एमआईडीआई की सुविधा चालू है, तो यूएसबी होस्ट मोड के ज़रिए एमआईडीआई 2.0 हमेशा चालू रहता है.
असल में, MIDI का ऑडियो से कोई लेना-देना नहीं है. हालांकि, एमआईडीआई का इस्तेमाल आम तौर पर संगीत के साथ किया जाता है. इसलिए, इस लेख को ऑडियो सेक्शन में रखा गया है.
NDK के लिए एमआईडीआई
Android 10 की मदद से, MIDI का इस्तेमाल करके, Android प्लैटफ़ॉर्म पर प्रोफ़ेशनल ऑडियो ऐप्लिकेशन को आसानी से पोर्ट किया जा सकता है.
AMidi
एक NDK API है. इससे ऐप्लिकेशन डेवलपर, C/C++ कोड की मदद से MIDI डेटा भेज और पा सकते हैं.
Android MIDI ऐप्लिकेशन, आम तौर पर Android एमआईडीआई सेवा से संपर्क करने के लिए,
midi
एपीआई का इस्तेमाल करते हैं. एमआईडीआई ऐप्लिकेशन, एक या उससे ज़्यादा
MidiDevice
ऑब्जेक्ट को खोजने, खोलने, और बंद करने के लिए मुख्य रूप से
MidiManager
क्लास पर निर्भर करते हैं. साथ ही, वे डिवाइस के एमआईडीआई इनपुट और आउटपुट पोर्ट के ज़रिए, हर डिवाइस से डेटा भेजते और पाते हैं.
परिवहन
ओरिजनल MIDI 1.0 में बताई गई फ़िज़िकल ट्रांसपोर्ट लेयर, 5-पिन डीआईएन कनेक्टर वाला करंट लूप है.
MIDI 1.0 के बाद, ट्रांसपोर्ट के अन्य तरीके तय किए गए हैं. इनमें यूएसबी के ज़रिए MIDI और ब्लूटूथ स्मार्ट (बीएलई) के ज़रिए MIDI शामिल हैं.
Android के लिए एमआईडीआई
Android पर यूएसबी ऑन-द-गो की सुविधा काम करती है. इसकी मदद से, Android डिवाइस को यूएसबी होस्ट के तौर पर इस्तेमाल करके, यूएसबी डिवाइसों को चलाया जा सकता है. USB होस्ट मोड एपीआई की मदद से, डेवलपर ऐप्लिकेशन लेवल पर, USB के ज़रिए MIDI को लागू कर सकते हैं. हालांकि, हाल ही तक MIDI के लिए, प्लैटफ़ॉर्म में पहले से मौजूद कोई एपीआई नहीं था.
Android 6.0 (Marshmallow) रिलीज़ के बाद से डिवाइस बनाने वाली कंपनियां, इस प्लैटफ़ॉर्म में एमआईडीआई की सुविधा को चालू कर सकती हैं. हालांकि, इस प्लैटफ़ॉर्म का इस्तेमाल करना ज़रूरी नहीं है. Android, यूएसबी, बीएलई, और वर्चुअल (इंटरऐप्लिकेशन) ट्रांसपोर्ट के साथ सीधे तौर पर काम करता है. Android, बाहरी अडैप्टर की मदद से MIDI 1.0 के साथ काम करता है.
MIDI API की मदद से ऐप्लिकेशन प्रोग्रामिंग के बारे में ज़्यादा जानने के लिए, android.media.midi
पैकेज देखें.
इस लेख के बाकी हिस्से में, Android डिवाइस बनाने वाली कंपनी के लिए, प्लैटफ़ॉर्म में MIDI की सुविधा चालू करने का तरीका बताया गया है.
एमआईडीआई 1.0 ट्रांसपोर्ट की सुविधा चालू करना
यूएसबी होस्ट मोड और यूएसबी पेरिफ़रल मोड ट्रांसपोर्ट के लिए, MIDI 1.0 को लागू करना ALSA पर निर्भर करता है. ALSA का इस्तेमाल, बीएलई और वर्चुअल ट्रांसपोर्ट के लिए नहीं किया जाता.
यूएसबी होस्ट मोड
अगर आपको यूएसबी होस्ट मोड के लिए एमआईडीआई की सुविधा चालू करनी है, तो सबसे पहले यूएसबी होस्ट मोड की सुविधा सामान्य रूप से दें. इसके बाद, कर्नेल कॉन्फ़िगरेशन में CONFIG_SND_RAWMIDI
और CONFIG_SND_USB_MIDI
को चालू करें. Android Kernel कॉन्फ़िगरेशन देखें.
यूएसबी के ज़रिए एमआईडीआई ट्रांसफ़र की सुविधा को आधिकारिक तौर पर, यूएसबी इंप्लीमेंटर्स फ़ोरम, इंक के पब्लिश किए गए स्टैंडर्ड, यूनिवर्सल सीरियल बस डिवाइस क्लास डेफ़िनिशन फ़ॉर एमआईडीआई डिवाइसेस रिलीज़ 1.0 नवंबर 1, 1999 के ज़रिए तय किया गया है.
यूएसबी पेरिफ़ेरल मोड
यूएसबी पेरिफ़रल मोड के लिए MIDI चालू करने के लिए, आपको अपने Linux kernel में पैच लागू करने पड़ सकते हैं, ताकि drivers/usb/gadget/f_midi.c
को यूएसबी गैजेट ड्राइवर में इंटिग्रेट किया जा सके. ये पैच, Linux kernel के वर्शन 3.10 के लिए उपलब्ध हैं. इन पैच को अब तक ConfigFs (यूएसबी गैजेट ड्राइवर के लिए एक नया आर्किटेक्चर) के लिए अपडेट नहीं किया गया है. साथ ही, इन्हें अपस्ट्रीम kernel.org में मर्ज भी नहीं किया गया है.
पैच, प्रोजेक्ट kernel/common
के android-3.10
शाखा में मौजूद कर्नेल ट्री के लिए, कमिट किए जाने के क्रम में दिखाए जाते हैं:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- 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 के वायरलेस इस्तेमाल सेक्शन को देखें.