মিউজিক্যাল ইন্সট্রুমেন্ট ডিজিটাল ইন্টারফেস (MIDI) হল বাদ্যযন্ত্র, স্টেজ লাইটিং এবং অন্যান্য সময়-ভিত্তিক মিডিয়ার সাথে কম্পিউটারকে আন্তঃসংযোগ করার জন্য একটি আদর্শ প্রোটোকল।
Android 13 থেকে শুরু করে, USB ট্রান্সপোর্টে MIDI 2.0 সমর্থন যোগ করা হয়েছে। MIDI 2.0 হল একটি নতুন MIDI মান যা 2020 সালে সংজ্ঞায়িত করা হয়েছে৷ এই প্রোটোকলটি দ্বিমুখী যোগাযোগ, উচ্চতর রেজোলিউশন এবং সম্পত্তি বিনিময়ের মতো বৈশিষ্ট্যগুলিকে যুক্ত করে৷ ইউএসবি হোস্ট মোডের মাধ্যমে MIDI 2.0 সর্বদা সক্রিয় থাকে যখন প্ল্যাটফর্মে MIDI সমর্থন সক্রিয় থাকে৷
কঠোরভাবে বলতে গেলে, MIDI অডিওর সাথে সম্পর্কিত নয়। কিন্তু যেহেতু MIDI সাধারণত সঙ্গীতের সাথে ব্যবহৃত হয়, তাই এই নিবন্ধটি অডিও বিভাগে রাখা হয়েছে।
NDK-এর জন্য MIDI
Android 10 MIDI ব্যবহার করে পেশাদার অডিও অ্যাপগুলিকে Android প্ল্যাটফর্মে পোর্ট করা সহজ করে তোলে।
AMidi
হল একটি NDK API যা অ্যাপ ডেভেলপারদের C/C++ কোড সহ MIDI ডেটা পাঠানো ও গ্রহণ করার ক্ষমতা দেয়।
Android MIDI অ্যাপগুলি সাধারণত Android MIDI পরিষেবার সাথে যোগাযোগ করতে midi
API ব্যবহার করে। MIDI অ্যাপ্লিকেশানগুলি প্রাথমিকভাবে এক বা একাধিক MidiDevice
অবজেক্ট আবিষ্কার, খুলতে এবং বন্ধ করতে এবং ডিভাইসের MIDI ইনপুট এবং আউটপুট পোর্টের মাধ্যমে প্রতিটি ডিভাইসে এবং থেকে ডেটা পাস করতে MidiManager
ক্লাসের উপর নির্ভর করে।
পরিবহন
আসল MIDI 1.0-এ নির্দিষ্ট ফিজিক্যাল ট্রান্সপোর্ট লেয়ার হল 5-পিন DIN কানেক্টর সহ একটি বর্তমান লুপ।
MIDI 1.0 থেকে, অতিরিক্ত পরিবহন সংজ্ঞায়িত করা হয়েছে, যার মধ্যে USB-এর উপর MIDI এবং ব্লুটুথ লো এনার্জি (BLE) এর উপর MIDI।
অ্যান্ড্রয়েডের জন্য MIDI
অ্যান্ড্রয়েড ইউএসবি অন-দ্য-গো সমর্থন করে, যা একটি অ্যান্ড্রয়েড ডিভাইসকে USB পেরিফেরালগুলি চালানোর জন্য একটি USB হোস্ট হিসাবে কাজ করার অনুমতি দেয়৷ ইউএসবি হোস্ট মোড এপিআই ডেভেলপারদের অ্যাপ্লিকেশন স্তরে ইউএসবি-এর মাধ্যমে MIDI প্রয়োগ করার অনুমতি দেয়, কিন্তু সম্প্রতি পর্যন্ত MIDI-এর জন্য কোনও অন্তর্নির্মিত প্ল্যাটফর্ম API ছিল না।
Android 6.0 (Marshmallow) রিলিজ দিয়ে শুরু করে, ডিভাইস নির্মাতারা প্ল্যাটফর্মে ঐচ্ছিক MIDI সমর্থন সক্ষম করতে পারে। Android সরাসরি USB, BLE এবং ভার্চুয়াল (ইন্টারঅ্যাপ) পরিবহন সমর্থন করে। অ্যান্ড্রয়েড একটি বাহ্যিক অ্যাডাপ্টারের মাধ্যমে MIDI 1.0 সমর্থন করে৷
MIDI API-এর সাথে অ্যাপ্লিকেশন প্রোগ্রামিং সম্পর্কে বিশদ বিবরণের জন্য, android.media.midi
প্যাকেজটি দেখুন।
এই নিবন্ধের বাকি অংশে আলোচনা করা হয়েছে যে কীভাবে একটি অ্যান্ড্রয়েড ডিভাইস নির্মাতা প্ল্যাটফর্মে MIDI সমর্থন সক্ষম করতে পারে।
MIDI 1.0 পরিবহন সক্ষম করা হচ্ছে
MIDI 1.0 বাস্তবায়ন USB হোস্ট মোড এবং USB পেরিফেরাল মোড পরিবহনের জন্য ALSA এর উপর নির্ভর করে। ALSA BLE এবং ভার্চুয়াল পরিবহনের জন্য ব্যবহার করা হয় না।
ইউএসবি হোস্ট মোড
USB হোস্ট মোডের জন্য MIDI সক্ষম করতে, প্রথমে সাধারণভাবে USB হোস্ট মোড সমর্থন করুন এবং তারপর আপনার কার্নেল কনফিগারেশনে CONFIG_SND_RAWMIDI
এবং CONFIG_SND_USB_MIDI
সক্ষম করুন৷ অ্যান্ড্রয়েড কার্নেল কনফিগারেশন দেখুন।
ইউএসবি পরিবহনের উপর MIDI আনুষ্ঠানিকভাবে ইউএসবি ইমপ্লিমেন্টার্স ফোরাম, ইনকর্পোরেটেড দ্বারা প্রকাশিত MIDI ডিভাইস রিলিজ 1.0 নভেম্বর 1, 1999 স্ট্যান্ডার্ডের জন্য ইউনিভার্সাল সিরিয়াল বাস ডিভাইস ক্লাস সংজ্ঞা দ্বারা সংজ্ঞায়িত করা হয়েছে।
ইউএসবি পেরিফেরাল মোড
USB পেরিফেরাল মোডের জন্য MIDI সক্ষম করতে, USB গ্যাজেট ড্রাইভারের সাথে drivers/usb/gadget/f_midi.c
সংহত করার জন্য আপনাকে আপনার Linux কার্নেলে প্যাচ প্রয়োগ করতে হতে পারে। এই প্যাচগুলি লিনাক্স কার্নেল সংস্করণ 3.10-এর জন্য উপলব্ধ। এই প্যাচগুলি এখনও ConfigFs (USB গ্যাজেট ড্রাইভারের জন্য একটি নতুন আর্কিটেকচার) এর জন্য আপডেট করা হয়নি, অথবা upstream 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/
এছাড়াও আপনাকে নিম্নলিখিতগুলির যেকোনো একটি করতে হবে:
- সেটিংস > বিকাশকারী বিকল্প > নেটওয়ার্কিং- এ যান এবং ইউএসবি কনফিগারেশন নির্বাচন ডায়ালগে MIDI-এর জন্য বাক্সটি চেক করুন।
- USB হোস্টের সাথে সংযুক্ত থাকাকালীন, স্ক্রিনের উপরের দিক থেকে নীচে টানুন, এর জন্য USB এন্ট্রি নির্বাচন করুন এবং তারপরে MIDI নির্বাচন করুন৷
বিএলই
MIDI ওভার BLE সর্বদা সক্রিয় থাকে, যদি ডিভাইসটি 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) দেখুন।
হোস্ট মোডে থাকাকালীন ডিবাগিং
USB হোস্ট মোডে থাকাকালীন, Android ডিবাগ ব্রিজ (adb) USB-এর মাধ্যমে ডিবাগিং অনুপলব্ধ৷ একটি বিকল্পের জন্য অ্যান্ড্রয়েড ডিবাগ ব্রিজের ওয়্যারলেস ব্যবহার বিভাগটি দেখুন।
,মিউজিক্যাল ইন্সট্রুমেন্ট ডিজিটাল ইন্টারফেস (MIDI) হল বাদ্যযন্ত্র, স্টেজ লাইটিং এবং অন্যান্য সময়-ভিত্তিক মিডিয়ার সাথে কম্পিউটারকে আন্তঃসংযোগ করার জন্য একটি আদর্শ প্রোটোকল।
Android 13 থেকে শুরু করে, USB ট্রান্সপোর্টে MIDI 2.0 সমর্থন যোগ করা হয়েছে। MIDI 2.0 হল একটি নতুন MIDI মান যা 2020 সালে সংজ্ঞায়িত করা হয়েছে৷ এই প্রোটোকলটি দ্বিমুখী যোগাযোগ, উচ্চতর রেজোলিউশন এবং সম্পত্তি বিনিময়ের মতো বৈশিষ্ট্যগুলিকে যুক্ত করে৷ ইউএসবি হোস্ট মোডের মাধ্যমে MIDI 2.0 সর্বদা সক্রিয় থাকে যখন প্ল্যাটফর্মে MIDI সমর্থন সক্রিয় থাকে৷
কঠোরভাবে বলতে গেলে, MIDI অডিওর সাথে সম্পর্কিত নয়। কিন্তু যেহেতু MIDI সাধারণত সঙ্গীতের সাথে ব্যবহৃত হয়, তাই এই নিবন্ধটি অডিও বিভাগে রাখা হয়েছে।
NDK-এর জন্য MIDI
Android 10 MIDI ব্যবহার করে পেশাদার অডিও অ্যাপগুলিকে Android প্ল্যাটফর্মে পোর্ট করা সহজ করে তোলে।
AMidi
হল একটি NDK API যা অ্যাপ ডেভেলপারদের C/C++ কোড সহ MIDI ডেটা পাঠানো ও গ্রহণ করার ক্ষমতা দেয়।
Android MIDI অ্যাপগুলি সাধারণত Android MIDI পরিষেবার সাথে যোগাযোগ করতে midi
API ব্যবহার করে। MIDI অ্যাপ্লিকেশানগুলি প্রাথমিকভাবে এক বা একাধিক MidiDevice
অবজেক্ট আবিষ্কার, খুলতে এবং বন্ধ করতে এবং ডিভাইসের MIDI ইনপুট এবং আউটপুট পোর্টের মাধ্যমে প্রতিটি ডিভাইসে এবং থেকে ডেটা পাস করতে MidiManager
ক্লাসের উপর নির্ভর করে।
পরিবহন
আসল MIDI 1.0-এ নির্দিষ্ট ফিজিক্যাল ট্রান্সপোর্ট লেয়ার হল 5-পিন DIN কানেক্টর সহ একটি বর্তমান লুপ।
MIDI 1.0 থেকে, অতিরিক্ত পরিবহন সংজ্ঞায়িত করা হয়েছে, যার মধ্যে USB-এর উপর MIDI এবং ব্লুটুথ লো এনার্জি (BLE) এর উপর MIDI।
অ্যান্ড্রয়েডের জন্য MIDI
অ্যান্ড্রয়েড ইউএসবি অন-দ্য-গো সমর্থন করে, যা একটি অ্যান্ড্রয়েড ডিভাইসকে USB পেরিফেরালগুলি চালানোর জন্য একটি USB হোস্ট হিসাবে কাজ করার অনুমতি দেয়৷ ইউএসবি হোস্ট মোড এপিআই ডেভেলপারদের অ্যাপ্লিকেশন স্তরে ইউএসবি-এর মাধ্যমে MIDI প্রয়োগ করার অনুমতি দেয়, কিন্তু সম্প্রতি পর্যন্ত MIDI-এর জন্য কোনও অন্তর্নির্মিত প্ল্যাটফর্ম API ছিল না।
Android 6.0 (Marshmallow) রিলিজ দিয়ে শুরু করে, ডিভাইস নির্মাতারা প্ল্যাটফর্মে ঐচ্ছিক MIDI সমর্থন সক্ষম করতে পারে। Android সরাসরি USB, BLE এবং ভার্চুয়াল (ইন্টারঅ্যাপ) পরিবহন সমর্থন করে। অ্যান্ড্রয়েড একটি বাহ্যিক অ্যাডাপ্টারের মাধ্যমে MIDI 1.0 সমর্থন করে৷
MIDI API-এর সাথে অ্যাপ্লিকেশন প্রোগ্রামিং সম্পর্কে বিশদ বিবরণের জন্য, android.media.midi
প্যাকেজটি দেখুন।
এই নিবন্ধের বাকি অংশে আলোচনা করা হয়েছে যে কীভাবে একটি অ্যান্ড্রয়েড ডিভাইস নির্মাতা প্ল্যাটফর্মে MIDI সমর্থন সক্ষম করতে পারে।
MIDI 1.0 পরিবহন সক্ষম করা হচ্ছে
MIDI 1.0 বাস্তবায়ন USB হোস্ট মোড এবং USB পেরিফেরাল মোড পরিবহনের জন্য ALSA এর উপর নির্ভর করে। ALSA BLE এবং ভার্চুয়াল পরিবহনের জন্য ব্যবহার করা হয় না।
ইউএসবি হোস্ট মোড
USB হোস্ট মোডের জন্য MIDI সক্ষম করতে, প্রথমে সাধারণভাবে USB হোস্ট মোড সমর্থন করুন এবং তারপর আপনার কার্নেল কনফিগারেশনে CONFIG_SND_RAWMIDI
এবং CONFIG_SND_USB_MIDI
সক্ষম করুন৷ অ্যান্ড্রয়েড কার্নেল কনফিগারেশন দেখুন।
ইউএসবি পরিবহনের উপর MIDI আনুষ্ঠানিকভাবে ইউএসবি ইমপ্লিমেন্টার্স ফোরাম, ইনকর্পোরেটেড দ্বারা প্রকাশিত MIDI ডিভাইস রিলিজ 1.0 নভেম্বর 1, 1999 স্ট্যান্ডার্ডের জন্য ইউনিভার্সাল সিরিয়াল বাস ডিভাইস ক্লাস সংজ্ঞা দ্বারা সংজ্ঞায়িত করা হয়েছে।
ইউএসবি পেরিফেরাল মোড
USB পেরিফেরাল মোডের জন্য MIDI সক্ষম করতে, USB গ্যাজেট ড্রাইভারের সাথে drivers/usb/gadget/f_midi.c
সংহত করার জন্য আপনাকে আপনার Linux কার্নেলে প্যাচ প্রয়োগ করতে হতে পারে। এই প্যাচগুলি লিনাক্স কার্নেল সংস্করণ 3.10-এর জন্য উপলব্ধ। এই প্যাচগুলি এখনও ConfigFs (USB গ্যাজেট ড্রাইভারের জন্য একটি নতুন আর্কিটেকচার) এর জন্য আপডেট করা হয়নি, অথবা upstream 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/
এছাড়াও আপনাকে নিম্নলিখিতগুলির যেকোনো একটি করতে হবে:
- সেটিংস > বিকাশকারী বিকল্প > নেটওয়ার্কিং- এ যান এবং ইউএসবি কনফিগারেশন নির্বাচন ডায়ালগে MIDI-এর জন্য বাক্সটি চেক করুন।
- USB হোস্টের সাথে সংযুক্ত থাকাকালীন, স্ক্রিনের উপরের দিক থেকে নীচে টানুন, এর জন্য USB এন্ট্রি নির্বাচন করুন এবং তারপরে MIDI নির্বাচন করুন৷
বিএলই
MIDI ওভার BLE সর্বদা সক্রিয় থাকে, যদি ডিভাইসটি 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) দেখুন।
হোস্ট মোডে থাকাকালীন ডিবাগিং
ইউএসবি হোস্ট মোডে থাকাকালীন, অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) ইউএসবিতে ডিবাগিং অনুপলব্ধ। একটি বিকল্পের জন্য অ্যান্ড্রয়েড ডিবাগ ব্রিজের ওয়্যারলেস ব্যবহার বিভাগটি দেখুন।