MIDI

মিউজিক্যাল ইন্সট্রুমেন্ট ডিজিটাল ইন্টারফেস (MIDI) হলো কম্পিউটারকে বাদ্যযন্ত্র, মঞ্চের আলো এবং অন্যান্য সময়-ভিত্তিক মিডিয়ার সাথে সংযুক্ত করার একটি আদর্শ প্রোটোকল।

অ্যান্ড্রয়েড ১৩ থেকে ইউএসবি ট্রান্সপোর্টে মিডি ২.০ সাপোর্ট যুক্ত করা হয়েছে। মিডি ২.০ হলো একটি নতুন মিডি স্ট্যান্ডার্ড যা ২০২০ সালে সংজ্ঞায়িত হয়েছে। এই প্রোটোকলটি দ্বিমুখী যোগাযোগ, উচ্চতর রেজোলিউশন এবং প্রপার্টি এক্সচেঞ্জের মতো বৈশিষ্ট্য যোগ করে। প্ল্যাটফর্মে মিডি সাপোর্ট সক্রিয় করা থাকলে ইউএসবি হোস্ট মোডের মাধ্যমে মিডি ২.০ সর্বদা সক্রিয় থাকে। অ্যান্ড্রয়েড ১৫ এবং তার পরবর্তী সংস্করণগুলোতে ভার্চুয়াল ট্রান্সপোর্টের মাধ্যমে মিডি ২.০ সমর্থিত।

কঠোরভাবে বলতে গেলে, MIDI-এর সাথে অডিওর কোনো সম্পর্ক নেই। কিন্তু যেহেতু MIDI সাধারণত সঙ্গীতের সাথে ব্যবহৃত হয়, তাই এই নিবন্ধটি অডিও বিভাগে রাখা হয়েছে।

এনডিকে-এর জন্য মিডি

অ্যান্ড্রয়েড ১০ এমআইডিআই (MIDI) ব্যবহার করে পেশাদার অডিও অ্যাপগুলোকে অ্যান্ড্রয়েড প্ল্যাটফর্মে পোর্ট করা আরও সহজ করে তোলে।

AMidi হলো একটি NDK API যা অ্যাপ ডেভেলপারদের C/C++ কোডের মাধ্যমে MIDI ডেটা প্রেরণ এবং গ্রহণ করার ক্ষমতা দেয়।

অ্যান্ড্রয়েড MIDI অ্যাপগুলো সাধারণত অ্যান্ড্রয়েড MIDI সার্ভিসের সাথে যোগাযোগের জন্য midi API ব্যবহার করে। MIDI অ্যাপগুলো মূলত এক বা একাধিক MidiDevice অবজেক্ট খুঁজে বের করতে, খুলতে ও বন্ধ করতে এবং ডিভাইসের MIDI ইনপুট ও আউটপুট পোর্টের মাধ্যমে প্রতিটি ডিভাইসে ডেটা আদান-প্রদান করতে MidiManager ক্লাসের উপর নির্ভর করে।

পরিবহন

মূল MIDI 1.0-এ নির্দিষ্ট করা ফিজিক্যাল ট্রান্সপোর্ট লেয়ারটি হলো একটি ৫-পিন ডিআইএন কানেক্টরযুক্ত কারেন্ট লুপ।

MIDI 1.0 থেকে, অতিরিক্ত ট্রান্সপোর্ট সংজ্ঞায়িত করা হয়েছে, যার মধ্যে রয়েছে MIDI over USB এবং MIDI over Bluetooth Low Energy (BLE)

অ্যান্ড্রয়েডের জন্য MIDI

অ্যান্ড্রয়েড ইউএসবি অন-দ্য-গো সমর্থন করে, যা একটি অ্যান্ড্রয়েড ডিভাইসকে ইউএসবি পেরিফেরাল চালানোর জন্য ইউএসবি হোস্ট হিসেবে কাজ করার সুযোগ দেয়। ইউএসবি হোস্ট মোড এপিআইগুলো ডেভেলপারদের অ্যাপ্লিকেশন পর্যায়ে ইউএসবি-এর মাধ্যমে মিডি বাস্তবায়ন করার সুযোগ দেয়, কিন্তু সম্প্রতি পর্যন্ত মিডি-এর জন্য কোনো বিল্ট-ইন প্ল্যাটফর্ম এপিআই ছিল না।

অ্যান্ড্রয়েড ৬.০ (মার্শমেলো) সংস্করণ থেকে ডিভাইস নির্মাতারা প্ল্যাটফর্মে ঐচ্ছিক MIDI সাপোর্ট চালু করতে পারেন। অ্যান্ড্রয়েড সরাসরি USB, BLE, এবং ভার্চুয়াল (ইন্টারঅ্যাপ) ট্রান্সপোর্ট সমর্থন করে। অ্যান্ড্রয়েড একটি বাহ্যিক অ্যাডাপ্টারের মাধ্যমে MIDI ১.০ সমর্থন করে।

MIDI API ব্যবহার করে অ্যাপ্লিকেশন প্রোগ্রামিং সম্পর্কে বিস্তারিত জানতে android.media.midi প্যাকেজটি দেখুন।

এই নিবন্ধের বাকি অংশে আলোচনা করা হয়েছে, কীভাবে একজন অ্যান্ড্রয়েড ডিভাইস নির্মাতা প্ল্যাটফর্মটিতে MIDI সাপোর্ট চালু করতে পারেন।

MIDI 1.0 ট্রান্সপোর্ট সক্রিয় করা

MIDI 1.0 বাস্তবায়ন USB হোস্ট মোড এবং USB পেরিফেরাল মোড ট্রান্সপোর্টের জন্য ALSA-এর উপর নির্ভর করে। BLE এবং ভার্চুয়াল ট্রান্সপোর্টের জন্য ALSA ব্যবহৃত হয় না।

ইউএসবি হোস্ট মোড

USB হোস্ট মোডের জন্য MIDI সক্রিয় করতে, প্রথমে সাধারণভাবে USB হোস্ট মোড সমর্থন করুন, এবং তারপর আপনার কার্নেল কনফিগারেশনে CONFIG_SND_RAWMIDICONFIG_SND_USB_MIDI সক্রিয় করুন।

ইউএসবি ইমপ্লিমেন্টার্স ফোরাম, ইনকর্পোরেটেড কর্তৃক প্রকাশিত ‘ ইউনিভার্সাল সিরিয়াল বাস ডিভাইস ক্লাস ডেফিনিশন ফর মিডি ডিভাইসেস রিলিজ ১.০ নভেম্বর ১, ১৯৯৯’ স্ট্যান্ডার্ডের মাধ্যমে মিডি ওভার ইউএসবি ট্রান্সপোর্টকে আনুষ্ঠানিকভাবে সংজ্ঞায়িত করা হয়েছে।

ইউএসবি পেরিফেরাল মোড

ইউএসবি পেরিফেরাল মোডের জন্য MIDI সক্রিয় করতে, আপনাকে আপনার লিনাক্স কার্নেলে drivers/usb/gadget/f_midi.c ফাইলটিকে ইউএসবি গ্যাজেট ড্রাইভারের সাথে একীভূত করার জন্য প্যাচ প্রয়োগ করতে হতে পারে। এই প্যাচগুলি লিনাক্স কার্নেল সংস্করণ ৩.১০-এর জন্য উপলব্ধ। এই প্যাচগুলি এখনও 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 সমর্থন করলে, MIDI over BLE সর্বদা সক্রিয় থাকে।

ভার্চুয়াল (ইন্টারঅ্যাপ)

ভার্চুয়াল (ইন্টারঅ্যাপ) ট্রান্সপোর্ট সর্বদা সক্রিয় থাকে।

বৈশিষ্ট্যটি দাবি করা

অ্যাপগুলো android.software.midi ফিচারটি ব্যবহার করে MIDI সাপোর্টের উপস্থিতি যাচাই করতে পারে।

MIDI সাপোর্ট দাবি করতে, আপনার device.mk ফাইলে এই লাইনটি যোগ করুন:

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

ফিচারটি দাবি করার জন্য প্রয়োজনীয় শর্তাবলী সম্পর্কে তথ্যের জন্য অ্যান্ড্রয়েড কম্প্যাটিবিলিটি ডেফিনিশন ডকুমেন্ট (CDD) দেখুন।

হোস্ট মোডে থাকাকালীন ডিবাগিং

ইউএসবি হোস্ট মোডে থাকাকালীন, ইউএসবি-এর মাধ্যমে অ্যান্ড্রয়েড ডিবাগ ব্রিজ (adb) ডিবাগিং উপলব্ধ থাকে না। বিকল্পের জন্য অ্যান্ড্রয়েড ডিবাগ ব্রিজের ওয়্যারলেস ব্যবহার বিভাগটি দেখুন।