ওভারভিউ

অ্যান্ড্রয়েড অটোমোটিভ ওএস (AAOS) গাড়ির ইনফোটেইনমেন্ট সিস্টেম হিসেবে কাজ করার জন্য অ্যান্ড্রয়েডের মূল অডিও স্ট্যাকের উপর ভিত্তি করে তৈরি হয়েছে। AAOS ইনফোটেইনমেন্ট সাউন্ডের (অর্থাৎ মিডিয়া, নেভিগেশন এবং কমিউনিকেশন) জন্য দায়ী, কিন্তু চিম এবং সতর্কীকরণ বার্তার জন্য সরাসরি দায়ী নয়, যেগুলোর প্রাপ্যতা এবং সময়ের ব্যাপারে কঠোর নিয়মকানুন রয়েছে।

যদিও AAOS যানবাহনকে অডিও ব্যবস্থাপনায় সাহায্য করার জন্য সংকেত এবং পদ্ধতি সরবরাহ করে, শেষ পর্যন্ত চালক ও যাত্রীদের জন্য কোন শব্দ বাজানো হবে সেই সিদ্ধান্ত যানবাহনকেই নিতে হয়, যাতে নিরাপত্তা-সংক্রান্ত গুরুত্বপূর্ণ শব্দ এবং নিয়ন্ত্রক শব্দগুলো কোনো বাধা ছাড়াই সঠিকভাবে শোনা যায়।

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

যেহেতু অ্যান্ড্রয়েড গাড়ির মিডিয়া অভিজ্ঞতা পরিচালনা করে, তাই রেডিও টিউনারের মতো বাহ্যিক মিডিয়া উৎসগুলোকে অ্যাপের মাধ্যমে উপস্থাপন করা উচিত, যেগুলো সেই উৎসের জন্য অডিও ফোকাস এবং মিডিয়া কী ইভেন্টগুলো সামলাতে পারে।

অ্যান্ড্রয়েড সাউন্ড এবং স্ট্রিম

গাড়ির অডিও সিস্টেম নিম্নলিখিত শব্দ এবং স্ট্রিমগুলি পরিচালনা করে:

image

চিত্র ১. প্রবাহ-কেন্দ্রিক স্থাপত্য চিত্র।

অ্যান্ড্রয়েড অ্যাপগুলো থেকে আসা শব্দগুলো পরিচালনা করে, এবং শব্দের ধরনের ওপর ভিত্তি করে সেই অ্যাপগুলোকে নিয়ন্ত্রণ করে ও HAL-এ থাকা আউটপুট ডিভাইসগুলোতে পাঠিয়ে দেয়।

  • লজিক্যাল স্ট্রিম , যা মূল অডিও পরিভাষায় সোর্স নামে পরিচিত, সেগুলোকে অডিও অ্যাট্রিবিউট দিয়ে ট্যাগ করা হয়।

  • ফিজিক্যাল স্ট্রিম , যা মূল অডিও পরিভাষায় ডিভাইস নামে পরিচিত, মিক্সিংয়ের পরে সেগুলোর কোনো কনটেক্সট তথ্য থাকে না।

নির্ভরযোগ্যতার জন্য, বাহ্যিক শব্দ (যেমন সিটবেল্ট সতর্কীকরণ ঘণ্টা) অ্যান্ড্রয়েডের বাইরে, HAL-এর নিচে অথবা এমনকি পৃথক হার্ডওয়্যারে পরিচালনা করা হয়। সিস্টেম বাস্তবায়নকারীদের অবশ্যই একটি মিক্সার সরবরাহ করতে হবে যা অ্যান্ড্রয়েড থেকে এক বা একাধিক সাউন্ড ইনপুট স্ট্রিম গ্রহণ করে এবং তারপর গাড়ির জন্য প্রয়োজনীয় বাহ্যিক শব্দের উৎসগুলোর সাথে সেই স্ট্রিমগুলোকে উপযুক্ত উপায়ে একত্রিত করে। অ্যান্ড্রয়েডের বাইরে উৎপন্ন শব্দ অ্যান্ড্রয়েডে ফেরত পাঠানোর জন্য অ্যান্ড্রয়েড কন্ট্রোল HAL একটি ভিন্ন ব্যবস্থা প্রদান করে:

  • অডিও ফোকাস অনুরোধ
  • লাভ বা ভলিউমের সীমাবদ্ধতা
  • লাভ এবং ভলিউম পরিবর্তন

অডিও HAL ইমপ্লিমেন্টেশন এবং এক্সটার্নাল মিক্সার নিরাপত্তাজনিত জরুরি বাহ্যিক শব্দগুলো শোনা নিশ্চিত করার, অ্যান্ড্রয়েড-প্রদত্ত স্ট্রিমগুলোকে মিক্স করে উপযুক্ত স্পিকারে পাঠানোর জন্য দায়ী।

অ্যান্ড্রয়েড সাউন্ড

অ্যাপগুলিতে এক বা একাধিক প্লেয়ার থাকতে পারে, যেগুলি স্ট্যান্ডার্ড অ্যান্ড্রয়েড এপিআই (যেমন, ফোকাস নিয়ন্ত্রণের জন্য AudioManager বা স্ট্রিমিংয়ের জন্য MediaPlayer )-এর মাধ্যমে এক বা একাধিক লজিক্যাল অডিও ডেটা স্ট্রিম নির্গত করে। এই ডেটা সিঙ্গেল চ্যানেল মোনো বা ৭.১ সারাউন্ড হতে পারে, কিন্তু এটিকে একটি একক উৎস হিসেবে রাউট ও বিবেচনা করা হয়। অ্যাপ স্ট্রিমটি AudioAttributes-এর সাথে যুক্ত থাকে, যা অডিওটি কীভাবে প্রকাশ করা উচিত সে সম্পর্কে সিস্টেমকে ইঙ্গিত দেয়।

লজিক্যাল স্ট্রিমগুলো AudioService-এর মাধ্যমে পাঠানো হয় এবং উপলব্ধ ফিজিক্যাল আউটপুট স্ট্রিমগুলোর মধ্যে একটিতে (এবং শুধুমাত্র একটিতে) রাউট করা হয়, যার প্রতিটিই AudioFlinger-এর ভেতরের একটি মিক্সারের আউটপুট। অডিও অ্যাট্রিবিউটগুলো একটি ফিজিক্যাল স্ট্রিমে মিক্সড ডাউন হয়ে যাওয়ার পর, সেগুলো আর উপলব্ধ থাকে না।

এরপর প্রতিটি ফিজিক্যাল স্ট্রিম হার্ডওয়্যারে রেন্ডারিংয়ের জন্য অডিও এইচএএল-এ পাঠানো হয়। অটোমোটিভ অ্যাপে, রেন্ডারিং হার্ডওয়্যার হতে পারে লোকাল কোডেক (মোবাইল ডিভাইসের মতো) অথবা গাড়ির ফিজিক্যাল নেটওয়ার্কের ওপারে অবস্থিত কোনো রিমোট প্রসেসর। উভয় ক্ষেত্রেই, প্রকৃত স্যাম্পল ডেটা সরবরাহ করা এবং সেটিকে শ্রাব্য করে তোলাই হলো অডিও এইচএএল ইমপ্লিমেন্টেশনের কাজ।

বাহ্যিক স্রোত

যেসব সাউন্ড স্ট্রিম (সার্টিফিকেশন বা টাইমিং সংক্রান্ত কারণে) অ্যান্ড্রয়েডের মাধ্যমে পাঠানো উচিত নয়, সেগুলো সরাসরি এক্সটার্নাল মিক্সারে পাঠানো যেতে পারে। অ্যান্ড্রয়েড ১১ থেকে, HAL এখন এই এক্সটার্নাল সাউন্ডগুলোর জন্য ফোকাস অনুরোধ করতে পারে, যাতে অ্যান্ড্রয়েডকে জানানো যায় এবং এর ফলে অ্যান্ড্রয়েড মিডিয়া পজ করা বা অন্য কোনো সাউন্ডকে ফোকাস পাওয়া থেকে বিরত রাখার মতো উপযুক্ত ব্যবস্থা নিতে পারে।

যদি এক্সটার্নাল স্ট্রিমগুলো এমন মিডিয়া সোর্স হয় যা অ্যান্ড্রয়েডের তৈরি করা সাউন্ড এনভায়রনমেন্টের সাথে ইন্টারঅ্যাক্ট করবে (উদাহরণস্বরূপ, কোনো এক্সটার্নাল টিউনার চালু করা হলে MP3 প্লেব্যাক বন্ধ করা), তবে সেই এক্সটার্নাল স্ট্রিমগুলোকে একটি অ্যান্ড্রয়েড অ্যাপের মাধ্যমে উপস্থাপন করা উচিত। এই ধরনের একটি অ্যাপ HAL-এর পরিবর্তে মিডিয়া সোর্সের পক্ষ থেকে অডিও ফোকাসের জন্য অনুরোধ করবে এবং অ্যান্ড্রয়েড ফোকাস পলিসির সাথে সামঞ্জস্য রেখে ফোকাস নোটিফিকেশনের জবাবে প্রয়োজন অনুযায়ী এক্সটার্নাল সোর্সটি চালু ও বন্ধ করবে।

অ্যাপটি প্লে এবং পজের মতো মিডিয়া কী ইভেন্টগুলো পরিচালনা করার জন্যও দায়ী। এই ধরনের বাহ্যিক ডিভাইস নিয়ন্ত্রণের জন্য একটি প্রস্তাবিত পদ্ধতি হলো HwAudioSource । আরও জানতে, AAOS-এ একটি ইনপুট ডিভাইস সংযোগ করুন দেখুন।

আউটপুট ডিভাইস

অডিও HAL লেভেলে, AUDIO_DEVICE_OUT_BUS ডিভাইস টাইপটি গাড়ির অডিও সিস্টেমে ব্যবহারের জন্য একটি জেনেরিক আউটপুট ডিভাইস প্রদান করে। এই বাস ডিভাইসটি অ্যাড্রেসেবল পোর্ট সমর্থন করে (যেখানে প্রতিটি পোর্ট একটি ফিজিক্যাল স্ট্রিমের শেষ বিন্দু) এবং আশা করা হয় যে এটিই গাড়িতে একমাত্র সমর্থিত আউটপুট ডিভাইস টাইপ হবে।

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

আউটপুট ডিভাইসগুলিতে অডিও কনটেক্সট নির্ধারণ করা হয় car_audio_configuration.xml ফাইলের মাধ্যমে। আরও জানতে, অডিও পলিসি কনফিগারেশন দেখুন।