एमआईडीआई आर्किटेक्चर

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

खास कॉन्सेप्ट

इवेंट

MIDI प्रोटोकॉल को इवेंट के हिसाब से कम्यूनिकेशन के लिए डिज़ाइन किया गया है. इवेंट से पता चलता है कि किसी तय समय पर कुछ हुआ है या होगा. MIDI इवेंट को मैसेज से दिखाया जाता है. ये मैसेज, जानकारी के छोटे-छोटे बंडल होते हैं.

परिवहन

MIDI मैसेज को ट्रांसपोर्ट लेयर के ज़रिए कोड में बदला जाता है और डिलीवर किया जाता है. इसे ट्रांसपोर्ट भी कहा जाता है. यह ट्रांसपोर्ट लेयर, पाने वाले को रॉ MIDI डेटा भेजता है. इसके बाद, वह डेटा को मैसेज में बदल देता है.

हार्डवेयर पर आधारित MIDI ट्रांसपोर्ट में ये शामिल हैं:

  • 5-पिन DIN कनेक्टर वाला MIDI 1.0 करंट लूप
  • यूएसबी
  • ब्‍लूटूथ निम्‍न ऊर्जा (BLE)

मैसेज का दिखाया गया तरीका

MIDI ट्रांसपोर्ट स्पेसिफ़िकेशन में, मैसेज भेजने का तरीका बताया गया है. मैसेज को पैकेज करने का तरीका, सबसे निचले लेवल पर ट्रांसपोर्ट के हिसाब से तय होता है. हालांकि, ऊपर के लेवल पर ऐप्लिकेशन, मैसेज के क्रम को समय के हिसाब से तय करके, उसे बाइट स्ट्रीम के तौर पर मार्क कर सकते हैं. ऐसा इसलिए किया जा सकता है, क्योंकि हर मैसेज में मैसेज की कुल लंबाई तय करने के लिए ज़रूरत के मुताबिक जानकारी होती है. हालांकि, इसके लिए यह ज़रूरी है कि मैसेज की शुरुआत की जानकारी हो.

ज़्यादातर एमआईडीआई मैसेज छोटे (एक से तीन बाइट) होते हैं. हालांकि, SysEx की मदद से, लंबे मैसेज भेजे जा सकते हैं.

टाइमस्टैंप

टाइमस्टैंप एक वैकल्पिक लेबल है. इसे मैसेज भेजने या पाने के समय, मैसेज से अटैच किया जाता है. हालांकि, यह ट्रांसपोर्ट के हिसाब से अलग-अलग हो सकता है. टाइमस्टैंप को समय की यूनिट में दिखाया जाता है, जैसे कि सेकंड या टिक.

अगर टाइमस्टैंप नहीं दिया गया है, तो सिस्टम को पिछले मैसेज के टाइमस्टैंप या मौजूदा समय का इस्तेमाल करना चाहिए. इन टाइमस्टैंप की सटीक जानकारी, MIDI पर आधारित सिस्टम की भरोसेमंदता का एक अहम पहलू है. भले ही, यह जानकारी साफ़ तौर पर दी गई हो या न दी गई हो.

टाइमस्टैंप, MIDI 1.0 प्रोटोकॉल का हिस्सा नहीं हैं. इन्हें अक्सर प्लैटफ़ॉर्म के हिसाब से बनाए गए एपीआई के हिस्से के तौर पर जोड़ा जाता है. BLE ट्रांसपोर्ट में टाइमस्टैंप होते हैं, ताकि एक BLE पैकेट में भेजे गए कई अलग-अलग मैसेज के समय की जानकारी दी जा सके.

डिवाइस

पैरिफ़रल, कंप्यूटर के लिए इनपुट/आउटपुट (I/O) की सुविधा देता है. एमआईडीआई पेरिफ़रल और एमआईडीआई डिवाइस शब्द, आम तौर पर ऐसे किसी भी हार्डवेयर या सॉफ़्टवेयर मॉड्यूल को रेफ़र करते हैं जो एमआईडीआई प्रोटोकॉल के साथ काम करता है. इस दस्तावेज़ में, एमआईडीआई पेरिफ़रल से किसी डिवाइस के बारे में पता चलता है और एमआईडीआई डिवाइस से उस मॉड्यूल के बारे में पता चलता है जो असल में एमआईडीआई को लागू करता है.

पोर्ट

पोर्ट, कंप्यूटर और पेरिफ़रल के बीच इंटरफ़ेस पॉइंट होता है.

MIDI 1.0, पोर्ट के तौर पर फ़ीमेल 5-पिन डीआईएन सॉकेट का इस्तेमाल करता है. हर पोर्ट, OUT (MIDI डेटा का सोर्स), IN (MIDI डेटा के लिए सिंक), या THRU (इसका मतलब है कि IN, जो सीधे OUT पर भेजा जाता है) में से कोई एक होता है.

यूएसबी और बीएलई जैसे अन्य ट्रांसपोर्ट, पोर्ट कॉन्सेप्ट को बढ़ाते हैं.

MIDI डिवाइस में कम से कम एक OUT पोर्ट, IN पोर्ट या दोनों होने चाहिए.

MIDI डिवाइस, हर OUT पोर्ट से आने वाले मैसेज की स्ट्रीम उपलब्ध कराता है और हर IN पोर्ट से आने वाले मैसेज की स्ट्रीम पाता है. IN और OUT शब्द, किसी एक पोर्ट के हिसाब से होते हैं. दूसरे पोर्ट के हिसाब से, इन शब्दों का उलटा इस्तेमाल किया जाता है.

कनेक्शन

MIDI 1.0 ट्रांसपोर्ट में, मौजूदा लूप की वजह से OUT पोर्ट, ज़्यादा से ज़्यादा एक IN या THRU पोर्ट से कनेक्ट होता है. यूएसबी और बीएलई ट्रांसपोर्ट में, सबसे निचली लेयर पर भी यही बात लागू होती है. हालांकि, लागू करने से मैसेज स्ट्रीम की स्थिति फिर से बदल सकती है, ताकि उसे कई IN पोर्ट पर ब्रॉडकास्ट किया जा सके.

केबल

एमआईडीआई 1.0 केबल, तारों का एक बंडल होता है. यह OUT पोर्ट को IN या THRU पोर्ट से जोड़ता है. केबल से सिर्फ़ डेटा ट्रांसफ़र होता है.

ध्यान दें: MIDI में ऐसे बदलाव किए गए हैं जो स्टैंडर्ड नहीं हैं. इन बदलावों की वजह से, इस्तेमाल में न आने वाले दो पिन से पावर सप्लाई होती है. इसे फ़ैंटम पावर कहा जाता है.

यूएसबी केबल भी इसी तरह की होती है. हालांकि, इसमें कई तरह के कनेक्टर होते हैं. साथ ही, IN/OUT/THRU कॉन्सेप्ट को होस्ट/पैरफ़िरियल की भूमिका से बदल दिया जाता है.

यूएसबी होस्ट मोड में काम करते समय, होस्ट डिवाइस, MIDI डिवाइस को पावर देता है. ज़्यादातर छोटे MIDI डिवाइसों को एक यूएसबी यूनिट लोड (100 mA) या उससे कम लोड की ज़रूरत होती है. हालांकि, कुछ बड़े पेरिफ़रल या ऑडियो आउटपुट या लाइट वाले पेरिफ़रल के लिए, होस्ट डिवाइस से ज़्यादा पावर की ज़रूरत होती है. अगर आपको समस्याएं आ रही हैं, तो कोई दूसरा MIDI पेरिफ़रल या पावर वाला यूएसबी हब आज़माएं.

चैनल

हर MIDI मैसेज स्ट्रीम को 16 चैनलों में मल्टीप्लेक्स किया जाता है. ज़्यादातर मैसेज किसी खास चैनल के लिए होते हैं. हालांकि, कुछ मैसेज ऐसे होते हैं जो किसी चैनल के लिए नहीं होते. आम तौर पर, चैनलों को एक से 16 तक नंबर दिया जाता है. हालांकि, चैनल की वैल्यू शून्य से 15 तक होती है.

अगर ऐप्लिकेशन को 16 से ज़्यादा चैनलों या एक मैसेज स्ट्रीम के मुकाबले ज़्यादा थ्रूपुट की ज़रूरत है, तो एक से ज़्यादा पोर्ट का इस्तेमाल करना होगा.

MIDI 1.0 में, यह काम कई केबल की मदद से किया जाता है. ये केबल, पोर्ट के जोड़े को आपस में जोड़ती हैं.

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

ध्यान दें: पोर्ट नंबर एक ज़्यादा सटीक शब्द होता, क्योंकि इससे पोर्ट की पहचान की जा सकती है.

इसलिए, एक यूएसबी केबल में 16 चैनलों के एक से ज़्यादा सेट हो सकते हैं.

प्लैटफ़ॉर्म लागू करना

जैसा कि शुरुआत में बताया गया है, MIDI के ये सामान्य सिद्धांत, लागू करने के सभी तरीकों पर लागू होते हैं. Android प्लैटफ़ॉर्म पर कॉन्सेप्ट के बारे में जानने के लिए, android.media.midi के लिए Android MIDI उपयोगकर्ता गाइड देखें.