গাড়ির অডিও পরিষেবা গাড়ির ক্ষেত্রে ব্যবহারের সুবিধার্থে কোর অডিও ডায়নামিক অডিও নীতি ব্যবহার করে।
প্রতিটি যাত্রীর জন্য পৃথক অডিও প্লেব্যাক, মাল্টি-জোন অডিও হিসাবে উল্লেখ করা হয়, যেখানে প্রতিটি জোন শব্দের সমসাময়িক প্লেব্যাকের জন্য অনুমতি দেয়।
ডায়নামিক অডিও জোন কনফিগারেশন।
যাত্রী প্রাথমিক জোন অডিও কাস্ট.
যাত্রীর অডিও আয়না।
প্রতিটি ব্যবহারের ক্ষেত্রে, গাড়ির অডিও পরিষেবা স্বয়ংক্রিয়ভাবে অডিওকে নির্দিষ্ট আউটপুট ডিভাইসে রুট করতে গতিশীল অডিও নীতি ব্যবহার করে।
মাল্টি-জোন অডিও
মাল্টি-জোন অডিও একাধিক ব্যবহারকারীকে একই সাথে AAOS-এর সাথে ইন্টারঅ্যাক্ট করতে সক্ষম করে। আউটপুট ডিভাইসের একটি সেট একটি জোনের সাথে যুক্ত, এবং প্রতিটি জোন অডিও ফোকাস এবং ভলিউম স্তর বজায় রাখে। যাত্রীরা তাদের অডিও শুনতে পারে যখন ড্রাইভার প্রাথমিক জোনের অন্য একটি উৎস (সাধারণত, প্রধান কেবিন) শোনে।
মাল্টি-জোন অডিও আর্কিটেকচার
চিত্র 1. গাড়ির অডিও পরিষেবা আর্কিটেকচার।
গাড়ির অডিও জোন হল অডিও আউটপুট, অডিও ফোকাস এবং অন্যান্য অডিও সেটিংসের একটি বিমূর্ততা, যেগুলো সবই স্বাধীনভাবে পরিচালনা করা যায়। রাউটিং উদ্দেশ্যে, প্রতিটি জোন অডিও নীতি কনফিগারেশনে সাজানো অডিও আউটপুট বাস ডিভাইসের একটি সেট হিসাবে সংজ্ঞায়িত করা হয়। প্রতিটি অডিও জোনের সংজ্ঞার জন্য ডিভাইসগুলি আলাদা। চিত্র 1-এ, বাস ডিভাইস 1 থেকে 5 জোন শূন্যের অন্তর্গত, বাস ডিভাইস 6 থেকে 8 জোন এক এবং বাস ডিভাইস 9 থেকে 11 জোন দুই এর অন্তর্গত।
গাড়ির অডিও কনফিগারেশন
সাধারণত, আউটপুট ডিভাইসগুলি একটি অডিও জোনে বরাদ্দ করা হয়। প্রতিটি অডিও জোন car_audio_configuration.xml
এ সংজ্ঞায়িত করা হয়েছে। নিম্নলিখিত কোড স্নিপেট চিত্র 1 এর জন্য একটি গাড়ী অডিও কনফিগারেশন দেখায়:
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGoups>
<group>
<device address="bus_1">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_2">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_6">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_7">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
...
...
</zones>
</carAudioConfiguration>
occupantZoneId
হল একটি গাড়ি পরিষেবা সংজ্ঞা যা CarOccupantZoneManager
দ্বারা পরিচালিত হয়। এটি গাড়িতে একটি নির্দিষ্ট আসনের অবস্থানে গাড়িতে থাকা ব্যবহারকারীর জন্য একটি ম্যাপিং সংজ্ঞায়িত করতে ব্যবহৃত হয়। CarOccupantZoneService
এছাড়াও অকুপ্যান্ট জোন থেকে ডিসপ্লে, অন্যান্য পেরিফেরাল, এবং ব্যবহারকারী একবার ডিসপ্লেতে লগ ইন করলে ম্যাপিংকে সংজ্ঞায়িত করে। একটি অডিও জোন আছে:
একটি অডিও জোন আইডি এবং একটি অকুপ্যান্ট জোন আইডি৷
- অডিও জোনকে অকুপ্যান্ট জোনে ম্যাপ করে (সিট, ডিসপ্লে এবং অন্যান্য পেরিফেরিয়াল)
- লগ ইন করার পরে একটি অডিও জোন সহ কোন ব্যবহারকারী আইডি বরাদ্দ করা হয়েছে তা ম্যাপ করুন৷
অডিও কনফিগারেশনের একটি তালিকা। প্রতিটি অডিও কনফিগারেশনে ভলিউম গ্রুপের একটি সেট থাকে। প্রতিটি ভলিউম গ্রুপ অডিও বাস ডিভাইসের একটি সেট আছে.
যখন ভলিউম পরিবর্তন করা হয়, একটি গ্রুপের সমস্ত অডিও ডিভাইস একই ভাবে নিয়ন্ত্রিত হয়।
প্রতিটি অডিও ডিভাইস অডিও বৈশিষ্ট্য একটি তালিকা বরাদ্দ করা হয়. এই তথ্যটি ভিন্নভাবে বরাদ্দ করা অডিও বৈশিষ্ট্যের সাথে অডিও নীতির মিশ্রণ তৈরি করতে ব্যবহৃত হয়।
এই কনফিগারেশনটি বিভিন্ন অডিও অ্যাট্রিবিউট ব্যবহারকে প্রতিটি জোনের বিভিন্ন আউটপুট ডিভাইসে রাউট করার অনুমতি দেয়। ব্যবহারের ক্ষেত্রে নির্ভর করে, বিভিন্ন শব্দ একযোগে বাজতে পারে। উদাহরণস্বরূপ, আপনি সমস্ত স্পীকারে মিডিয়া সাউন্ড বাজানোর জন্য প্রধান কেবিন (প্রাথমিক জোন) কনফিগার করতে বেছে নিতে পারেন কিন্তু নেভিগেশন সাউন্ড শুধুমাত্র ড্রাইভারের কাছাকাছি স্পীকারে। সাউন্ডের সমসাময়িক প্লেব্যাকের সাথে, প্রধান কেবিন মিডিয়া শুনতে থাকে যখন ড্রাইভারের কাছে নেভিগেশন সরবরাহ করা হয়।
মাল্টি-জোন অডিও যাত্রী লগইন কর্মপ্রবাহ
নীচের ক্রম চিত্রটি অডিও রাউটিং সক্ষম করার প্রবাহ দেখায় যখন একজন যাত্রী তাদের নিজ নিজ ডিসপ্লেতে লগ ইন করেন:
চিত্র 2।
এই ক্রমানুসারে, ব্যবহারকারীর লগইনটি অকুপ্যান্ট জোন পরিষেবার মাধ্যমে গাড়ির অডিও পরিষেবাতে প্রচারিত হয়।
গাড়ির অডিও পরিষেবা (একটি নির্দিষ্ট অডিও জোনের জন্য) ব্যবহারকারীর ডিভাইসের সম্পর্কগুলি সরাতে
AudioPolicy#removeUserIdDeviceAffinity
API ব্যবহার করে৷ এই API একটি ব্যবহারকারী আইডি লাগে. এই ক্ষেত্রে, আগের জোন এর ব্যবহারকারী.AudioPolicy#setUserIdDeviceAffinity
API নতুন ব্যবহারকারীকে একটি জোনে বরাদ্দ করে, যা একটি নির্দিষ্ট জোন কনফিগারেশনের জন্য ব্যবহারকারী আইডি এবং সমস্ত ডিভাইস নেয়।
ডায়নামিক জোন কনফিগারেশন
Android 14-এ, OEM-কে যাত্রীদের জন্য বিভিন্ন সেট ডিভাইস কনফিগার করার অনুমতি দেওয়ার জন্য ডায়নামিক জোন কনফিগারেশন চালু করা হয়েছে। ব্যবহারের কেসটি পিছনের সিটের যাত্রীদের পিছনের সিটের হেডরেস্ট স্পিকার এবং পিছনের সিটের হেডফোন পেরিফেরালের মধ্যে স্যুইচ করতে দেয়।
এই ক্ষেত্রে, দুটি কনফিগারেশন প্রয়োজন। পিছনের সিটের হেডরেস্ট এবং হেডফোন পেরিফেরালের জন্য একটি করে। একটি নির্দিষ্ট ব্যবহারকারীর জন্য অডিও একবারে শুধুমাত্র একটি কনফিগারেশনে রাউট করা হয়।
চিত্র 3. ডায়নামিক জোন কনফিগারেশন ওয়ার্কফ্লো।
চিত্র 3 ডায়নামিক জোন কনফিগারেশন কর্মপ্রবাহের জন্য আর্কিটেকচারকে চিত্রিত করে। অডিও জোন 1-এ দুটি কনফিগারেশন রয়েছে, Config 0
এবং Config 1
, যা যথাক্রমে আউটপুট ডিভাইস স্পিকার এবং হেডরেস্টের সাথে যুক্ত।
লগ ইন করার পরে, ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে ডিফল্ট কনফিগারেশন বরাদ্দ করা হয়। যখন ব্যবহারকারী কনফিগারেশন পরিবর্তন করতে নির্বাচন করেন, সাধারণত একটি সিস্টেম UI এর মাধ্যমে, গাড়ি অডিও পরিষেবা দুটি কনফিগারেশনের মধ্যে সুইচ কার্যকর করে। এইভাবে, আউটপুট ডিভাইসটি Z1 স্পিকার এবং Z1 হেডরেস্টের মধ্যে স্যুইচ করা হয়।
নীচের কোড স্নিপেট এই গতিশীল জোন কনফিগারেশনের জন্য সেটআপ দেখায়।
<carAudioConfiguration version="3">
<zones>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="Zone 1 Config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_100">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
<zoneConfig name="Zone 1 Config 1">
<volumeGroups>
<group>
<device address="bus_101">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
</zones>
অডিও কনফিগারেশন পরিচালনার সুবিধার্থে গাড়ির অডিও ম্যানেজার কনফিগারেশনগুলি পরিচালনা করার জন্য APIs প্রকাশ করে:
- কোয়েরি কনফিগারেশন একটি জোন উপলব্ধ.
- ক্যোয়ারী বর্তমানে একটি জোনের জন্য কনফিগারেশন সেট করেছে।
- একটি ভিন্ন কনফিগারেশনে স্যুইচ করুন।
একটি সিস্টেম UI অ্যাপ বা পরিষেবা এই API ব্যবহার করে অডিও জোনের কনফিগারেশন পরিচালনা করতে পারে যেমন চিত্র 4 এ দেখানো হয়েছে। ক্যোয়ারী এপিআই যাত্রীদের কাছে দুটিকে প্রকাশ করে। ব্যবহারকারী পছন্দসই কনফিগারেশনের জন্য একটি কমান্ড ট্যাপ করে একটি ভিন্ন কনফিগারেশন নির্বাচন করতে পারেন।
চিত্র 4. ডাইনামিক জোন কনফিগারেশন ওয়ার্কফ্লো।
প্রাথমিক জোন যাত্রী অডিও কাস্ট
প্রাইমারি জোন প্যাসেঞ্জার অডিও কাস্ট হল একটি ফিচার যা Android 14 এ চালু করা হয়েছে যাতে যাত্রীরা প্রাথমিক জোনে তাদের মিডিয়া অডিও কাস্ট করতে পারে। এই পদ্ধতিতে যাত্রীর মিডিয়া অডিও মূল কেবিনে কাস্ট করা যেতে পারে যখন ড্রাইভার সম্পূর্ণ নিয়ন্ত্রণে থাকে।
নীচের চিত্রটি প্রাথমিক জোনের যাত্রী মিডিয়া অডিও কাস্টের জন্য আর্কিটেকচারের একটি সরলীকৃত সংস্করণ দেখায়।
চিত্র 5. ডাইনামিক জোন কনফিগারেশন ওয়ার্কফ্লো।
চিত্রটি দেখায় যে ড্রাইভারের জন্য মিডিয়া আউটপুট ডিভাইসটি যাত্রীর সাথে ভাগ করা হয়েছে, এটি কেবল তখনই ঘটে যখন যাত্রী প্রাথমিক জোন মোডে কাস্ট করেন৷ ডাইনামিক অডিও নীতিটি ড্রাইভারের জন্য অডিও রাউটিং পরিচালনা করতেও ব্যবহৃত হয় তবে ড্রাইভারের জন্য ডিভাইসের সম্পর্কগুলিতে কোনও পরিবর্তন প্রয়োগ করা হয় না। যাত্রীর জন্য আউটপুট ডিভাইসের তালিকা নিম্নরূপ পরিবর্তিত হয়:
- যাত্রীদের জন্য মিডিয়া আউটপুট ডিভাইস ডিভাইসের তালিকা থেকে সরানো হয়েছে
- ড্রাইভারের জন্য মিডিয়া আউটপুট ডিভাইস ডিভাইসের তালিকায় যোগ করা হয়েছে
- যাত্রী অডিও জোনের জন্য অবশিষ্ট আউটপুট ডিভাইস ডিভাইসের তালিকায় থাকে
ডিভাইসের এই নতুন তালিকাটি যাত্রীকে AudioPolicy#setUserIdDeviceAffinity
API দ্বারা বরাদ্দ করা হয়েছে। API-এ পাস করা প্যারামিটারগুলি হল ডিভাইসের তালিকা এবং যাত্রী ব্যবহারকারী আইডি। যখন অডিও সিস্টেমের অডিও নীতি পরিষেবা জিজ্ঞাসা করে যে যাত্রীর সাথে যুক্ত একটি মিডিয়া ট্র্যাকের জন্য কোন অডিও মিশ্রণটি নির্বাচন করা হবে, তখন প্রাথমিক অঞ্চলের সাথে যুক্ত মিডিয়া অডিও মিশ্রণটি নির্বাচন করা হয়৷
প্রাথমিক জোন অডিও কাস্টের জন্য একটি মূল প্রয়োজনীয়তা হল প্রাথমিক জোনের মিডিয়া আউটপুট ডিভাইসটিকে অন্যান্য অডিও অ্যাট্রিবিউট ব্যবহার থেকে আলাদা করা। অন্যথায়, অডিও মিশ্রণ নির্মাণের সময়, অন্যান্য অডিও গুণাবলী মিশ্রণে যোগ করা হয়। যখন মিশ্রণ নির্বাচন অডিও সিস্টেম দ্বারা সঞ্চালিত হয়, তখন মিশ্রণের সাথে সংযুক্ত সমস্ত শব্দ প্রধান কেবিনে প্লেব্যাকের জন্য নির্বাচন করা হয়।
প্যাসেঞ্জার জোন অডিও মিরর
অডিও মিরর বৈশিষ্ট্য যাত্রীদের অডিও শেয়ার করতে সক্ষম করে। মিরর বৈশিষ্ট্যটি প্রতিটি অডিও জোনে অডিও ডেটা নকল করে যাতে সমস্ত যাত্রী একই অডিও শুনতে পারে। এই ক্ষেত্রে, অডিও ফোকাস অডিও মিররিংয়ের সাথে জড়িত যাত্রীদের সাথে শেয়ার করা হয়।
অডিও মিরর রাউটিং
অডিও মিররিং সক্ষম করার জন্য ন্যূনতম দুই যাত্রীর প্রয়োজন। ফলস্বরূপ, শুধুমাত্র দুটি যাত্রী অডিও জোন সহ একটি অডিও কনফিগারেশনের জন্য একটি মিরর আউটপুট ডিভাইসের প্রয়োজন হবে। উপরের সংজ্ঞা দিয়ে, দুটি সমবর্তী মিররিং সেশন শুরু করা যেতে পারে।
নীচের চিত্রটি দুটি যাত্রীর মধ্যে মাল্টি-জোন অডিও মিররিংয়ের জন্য একটি সরলীকৃত চিত্র দেখায়। উভয় যাত্রীর অডিও একটি অডিও মিরর ডিভাইস, bus_1000
এ রাউট করা হয়। অডিও HAL উৎস অঞ্চলে সংকেত নকল করে।
চিত্র 6. ডাইনামিক জোন কনফিগারেশন ওয়ার্কফ্লো।
যাত্রীরা মিররিং মোডে থাকলেই এই রাউটিং সক্ষম হয়৷ যদি না হয়, অডিও জোনের জন্য সংশ্লিষ্ট ডিভাইসগুলি যাত্রীদের জন্য বরাদ্দ করা হয়। যখন একজন যাত্রীর জন্য মিররিং প্রথম সক্রিয় করা হয়, তখন AudioPolicy#setUserIdDeviceAffinity
API রাউটিং পরিবর্তন করে:
- যাত্রীদের জন্য মিডিয়া আউটপুট ডিভাইস ডিভাইসের তালিকা থেকে সরানো হয়েছে।
- ডিভাইসের তালিকায় মিরর আউটপুট ডিভাইস যোগ করা হয়েছে।
- যাত্রী অডিও জোনের জন্য অবশিষ্ট আউটপুট ডিভাইস ডিভাইসের তালিকায় থাকে।
ডিভাইসের তালিকার সাথে, ডিভাইসের আপডেট করা তালিকা এবং যাত্রীর ব্যবহারকারীর আইডি সহ API কল করা হয়। নিচের ছবিটি অডিও মিরর ওয়ার্কফ্লো এর একটি সিকোয়েন্স ডায়াগ্রাম প্রদান করে।
চিত্র 7. অডিও মিরর ওয়ার্কফ্লো।
চিত্র 7-এ, অডিও মিররিং পরিচালনার জন্য গাড়ির অডিও ম্যানেজারের APIগুলিকে মিডিয়া সিস্টেম পরিষেবা থেকে ডাকা হয়েছে৷ বিশেষত, ব্যবহারকারী 1 এবং ব্যবহারকারী 2, CarAudioManager#enableMirrorForAudioZones
এর জন্য অডিও মিররিং সক্ষম করতে API।
গাড়ির অডিও পরিষেবা উপরে বর্ণিত হিসাবে ব্যবহারকারী যাত্রীদের জন্য অডিও রাউটিং কনফিগার করে৷ গাড়ির অডিও পরিষেবা অডিও HAL-কে একটি সংকেত পাঠায় যাতে মিরর ডিভাইস থেকে অডিও কনফিগার এবং অনুলিপি করা হয় সংশ্লিষ্ট অঞ্চলে।
উপরের ছবিতে, গাড়ির অডিও পরিষেবা mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
পাঠায়
কোথায়,
bus_1000
হল উৎস বাস এবং bus_10
এবং bus_20
হল গন্তব্য বাস।
সিকোয়েন্স ডায়াগ্রামে দেখানো হয়নি হল AudioManager#setParameters
API-এর মাধ্যমে পাঠানো সংকেত, যা অডিও পরিষেবার মাধ্যমে HAL-এ পৌঁছায়।
অডিও মিরর নিষ্ক্রিয় করার পরে, নিম্নলিখিত সংকেত পাঠানো হয়, mirroring_src=bus_1000;mirroring=off
। অডিও মিররিং সক্ষম না থাকলে অডিও ডুপ্লিকেশন অক্ষম করতে এই সংকেতটি HAL দ্বারা ব্যবহার করা যেতে পারে। অডিও মিররিং ডিভাইসগুলিকে সংজ্ঞায়িত করার জন্য, গাড়ির অডিও কনফিগারেশন ফাইলটিতে mirroringDevices
নামে একটি বিভাগ রয়েছে, যেমনটি নীচের স্নিপেটে দেখানো হয়েছে৷
এই স্নিপেটে, দুটি মিররিং ডিভাইস সংজ্ঞায়িত করা হয়েছে, bus_1000
এবং bus_2000
, যাতে চারজন যাত্রী অডিও মিররিং ব্যবহার করতে পারে।
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>