ভলিউম ম্যানেজমেন্ট CarAudioService এ রয়েছে, যা নির্দিষ্ট ভলিউম ব্যবহার করে এই প্রত্যাশায় যে ভলিউমগুলি সফ্টওয়্যারের পরিবর্তে একটি হার্ডওয়্যার পরিবর্ধক দ্বারা HAL-এর নীচে প্রয়োগ করা হয়। CarAudioService ভলিউম গ্রুপের সাথে যুক্ত সমস্ত ডিভাইসে একই লাভ প্রয়োগ করতে আউটপুট ডিভাইসগুলিকে ভলিউম গ্রুপে সংগঠিত করে।
স্থির ভলিউম
AAOS বাস্তবায়ন একটি সফ্টওয়্যার মিক্সারের পরিবর্তে ভলিউম নিয়ন্ত্রণ করতে একটি হার্ডওয়্যার পরিবর্ধক ব্যবহার করে। পার্শ্বপ্রতিক্রিয়া এড়াতে, config_useFixedVolume পতাকাকে true সেট করুন (প্রয়োজনে ওভারলে):
<resources>
<!-- Car uses hardware amplifier for volume. -->
<bool name="config_useFixedVolume">true</bool>
</resources>
যখন config_useFixedVolume পতাকা সেট করা হয় না (বা false তে সেট করা হয়), অ্যাপগুলি সফ্টওয়্যার মিক্সারে স্ট্রিম টাইপ অনুসারে ভলিউম পরিবর্তন করতে AudioManager.setStreamVolume() কল করতে পারে৷ অন্যান্য অ্যাপে সম্ভাব্য প্রভাবের কারণে এবং সফ্টওয়্যার মিক্সারে ভলিউম অ্যাটেন্যুয়েশনের ফলে হার্ডওয়্যার পরিবর্ধক দ্বারা প্রাপ্ত সিগন্যালে কম উল্লেখযোগ্য বিট উপলব্ধ হওয়ার কারণে এটি সর্বদা কাম্য নাও হতে পারে।
ভলিউম গ্রুপ
ভলিউম গ্রুপগুলি একটি অডিও জোনের মধ্যে ডিভাইসগুলির সংগ্রহের জন্য ভলিউমগুলি পরিচালনা করে। প্রতিটি ভলিউম গ্রুপের জন্য, ভলিউম স্বাধীনভাবে নিয়ন্ত্রণ করা যেতে পারে। ফলস্বরূপ লাভগুলি গাড়ির পরিবর্ধক দ্বারা প্রয়োগ করা সংশ্লিষ্ট ডিভাইসগুলিতে কনফিগার করা হয়। ভলিউম সেটিংস ব্যবহারকারীর জন্য বজায় থাকে এবং ব্যবহারকারী সাইন ইন করলে লোড হয়।
ভলিউম গ্রুপ সংজ্ঞায়িত করুন
CarAudioService car_audio_configuration.xml এ সংজ্ঞায়িত ভলিউম গ্রুপ ব্যবহার করে:
<audioZoneConfiguration version="4">
</deviceConfigurations>
<activationVolumeConfigs>
<activationVolumeConfig name="activation_volume_on_boot_config">
<activationVolumeConfigEntry minActivationVolumePercentage="10" maxActivationVolumePercentage="90"
invocationType="onBoot" />
</activationVolumeConfig>
...
</activationVolumeConfigs>
<zones>
<zone name="primary zone" isPrimary="true">
<zoneConfigs>
<zoneConfig name="primary zone config 0" isDefault="true">
<volumeGroups>
<group activationConfig="activation_volume_on_boot_config">
<device address="bus0_media_out">
<context context="music"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
...
</zoneConfigs>
</zone>
</zones>
</audioZoneConfiguration>
প্রতিটি ভলিউম গ্রুপে সংশ্লিষ্ট ঠিকানা সহ এক বা একাধিক আউটপুট ডিভাইস থাকা উচিত। ঠিকানাগুলি audio_policy_configuration.xml এ সংজ্ঞায়িত আউটপুট ডিভাইসগুলির সাথে সঙ্গতিপূর্ণ হওয়া উচিত।
ভলিউম গ্রুপ লাভ কনফিগার করুন
প্রতিটি ভলিউম গ্রুপের সর্বনিম্ন, সর্বোচ্চ, এবং ডিফল্ট লাভের মান রয়েছে সেইসাথে ভলিউম গ্রুপের সাথে যুক্ত ডিভাইসগুলির জন্য audio_policy_configuration.xml এ কনফিগার করা মানগুলির উপর ভিত্তি করে একটি ধাপের আকার রয়েছে।
<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
আরম্ভ করার সময়, ভলিউম গ্রুপ সংশ্লিষ্ট ডিভাইসের লাভের মান পরীক্ষা করে এবং গ্রুপটিকে নিম্নরূপ কনফিগার করে:
- ধাপের আকার। ভলিউম গ্রুপ দ্বারা নিয়ন্ত্রিত সমস্ত ডিভাইসের জন্য একই হতে হবে।
- ন্যূনতম লাভ। গ্রুপের ডিভাইসগুলির মধ্যে সবচেয়ে ছোট ন্যূনতম লাভ।
- সর্বোচ্চ লাভ। গ্রুপের ডিভাইসগুলির মধ্যে সর্বোচ্চ সর্বোচ্চ লাভ।
- ডিফল্ট লাভ। গ্রুপের ডিভাইসগুলির মধ্যে সর্বোচ্চ ডিফল্ট লাভ।
এই মানগুলি যেভাবে কনফিগার করা হয়েছে তার পরিপ্রেক্ষিতে, ভলিউম গ্রুপের সাথে যুক্ত ডিভাইসের জন্য সমর্থিত সীমার বাইরে একটি ভলিউম গ্রুপের লাভ সেট করা সম্ভব। এই ক্ষেত্রে, সেই ডিভাইসের জন্য লাভটি ডিভাইসের সর্বনিম্ন বা সর্বোচ্চ লাভের মান সেট করা হয় যে ভলিউম গ্রুপের মান রেঞ্জের নীচে বা উপরে কিনা তার উপর ভিত্তি করে।
ভলিউম গ্রুপ শনাক্তকারী
XML ফাইলে সংজ্ঞায়িত ক্রমে ভলিউম গ্রুপ রানটাইমে চিহ্নিত করা হয়। একটি অডিও জোনের মধ্যে আইডিগুলি 0 থেকে N-1 পর্যন্ত থাকে, যেখানে N হল সেই জোনে ভলিউম গ্রুপের সংখ্যা৷ এইভাবে, ভলিউম গ্রুপ আইডি জোন জুড়ে অনন্য নয়। এই শনাক্তকারীগুলি ভলিউম গ্রুপের সাথে যুক্ত CarAudioManager API-এর জন্য ব্যবহৃত হয়। যেকোন API যা একটি zoneId ছাড়াই একটি groupId নেয় তা প্রাথমিক অডিও জোনে ডিফল্ট হয়।
মাল্টি-জোন ভলিউম ব্যবস্থাপনা
প্রতিটি অডিও জোনে এক বা একাধিক ভলিউম গ্রুপ থাকার প্রত্যাশিত, এবং প্রতিটি ভলিউম গ্রুপ শুধুমাত্র একটি একক অডিও জোনের সাথে যুক্ত। এই সম্পর্কটিকে car_audio_configuration.xml এর অংশ হিসাবে সংজ্ঞায়িত করা হয়েছে। আরও জানতে, ভলিউম গ্রুপ সংজ্ঞায়িত করুন- এ উপরের উদাহরণটি দেখুন।
প্রতিটি জোনের বর্তমান ভলিউম লেভেল সেই জোনের সাথে যুক্ত ব্যবহারকারীর জন্য বজায় থাকে। এই সেটিংসগুলি জোন-নির্দিষ্ট, যার অর্থ যদি কোনও ব্যবহারকারী প্রাথমিক জোনের সাথে যুক্ত একটি প্রদর্শনে সাইন ইন করে এবং তারপরে একটি সেকেন্ডারি অডিও জোনের সাথে যুক্ত একটি জোনে সাইন ইন করে, প্রথম জোনের জন্য ভলিউম স্তরগুলি লোড করা এবং স্থির থাকে সেকেন্ডারি জোনের থেকে আলাদা৷
সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ ভলিউম
Android 15 গাড়ির অডিও সিস্টেমে উন্নত নিরাপত্তা এবং ব্যবহারকারীর স্বাচ্ছন্দ্যের জন্য ভলিউম গ্রুপ সূচীগুলির উপর নিয়ন্ত্রণ প্রবর্তন করে। গাড়ির অডিও কনফিগারেশনের মধ্যে কনফিগার করা ন্যূনতম এবং সর্বোচ্চ অ্যাক্টিভেশন ভলিউম ব্যবহারের মাধ্যমে এটি অর্জন করা হয় ( ভলিউম গ্রুপ সংজ্ঞায়িত করুন দেখুন)। আপনি গাড়ি পরিষেবা RRO-তে audioUseMinMaxActivationVolume true সেট করে এই বৈশিষ্ট্যটি সক্ষম করতে পারেন।
আপনি activationVolumeConfigs এ একাধিক activationVolumeConfig এন্ট্রি সংজ্ঞায়িত করতে পারেন, যার প্রতিটি আলাদা ন্যূনতম এবং সর্বোচ্চ অ্যাক্টিভেশন কনফিগারেশন উপস্থাপন করে। প্রতিটি activationVolumeConfig :
- গাড়ির অডিও কনফিগারেশন ফাইল জুড়ে একটি অনন্য
nameথাকতে হবে, যাতে এটি পরে ভলিউম গ্রুপে (group) উল্লেখ করা যেতে পারে। - শুধুমাত্র একটি
activationVolumeConfigEntryথাকতে হবে।
প্রতিটি activationVolumeConfig নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
-
minActivationVolumePercentage(পূর্ণসংখ্যা, 0-100, ঐচ্ছিক, ডিফল্ট: 0): শতাংশ হিসাবে সর্বনিম্ন সক্রিয়করণ ভলিউম নির্দিষ্ট করে। -
maxActivationVolumePercentage(পূর্ণসংখ্যা, 0-100, ঐচ্ছিক, ডিফল্ট: 100): শতাংশ হিসাবে সর্বাধিক সক্রিয়করণ ভলিউম নির্দিষ্ট করে। invocationType(স্ট্রিং, ঐচ্ছিক, ডিফল্ট:onPlaybackChanged): সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ ভলিউম প্রয়োগ করা হয় এমন শর্তগুলিকে সংজ্ঞায়িত করে:-
onBoot: বুট করার পর একটি ভলিউম গ্রুপে শুধুমাত্র প্রথম নতুন সক্রিয় প্লেব্যাকে প্রয়োগ করা হয়। -
onSourceChanged: শুধুমাত্র একটি ভলিউম গ্রুপে পরিবর্তিত অ্যাপ বা UID উৎস সহ একটি নতুন সক্রিয় প্লেব্যাকে প্রয়োগ করা হয়েছে৷ -
onPlaybackChanged: একটি ভলিউম গ্রুপে প্রতিটি নতুন সক্রিয় প্লেব্যাকের জন্য প্রয়োগ করা হয়।
-
CarAudioService নিম্নলিখিত বর্তমানে সক্রিয় অডিও সাবকম্পোনেন্টগুলি পর্যবেক্ষণ করে সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ পরিচালনা করে:
- বর্তমান সক্রিয় প্লেব্যাক ট্র্যাক
- বর্তমান কলের অবস্থা
- অডিও কন্ট্রোল এইচএএল থেকে বর্তমান অডিও ফোকাস অনুরোধ যেখানে অডিও কন্ট্রোল এইচএএল থেকে অডিও ফোকাস অনুরোধ সংকেত দেয় যে অ্যান্ড্রয়েডের বাইরে একটি সক্রিয় অডিও প্লেব্যাক ঘটছে
নিম্নলিখিত চিত্রটি সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ ভলিউম পরিচালনার একটি উচ্চ-স্তরের ওভারভিউ দেখায়:

চিত্র 1. সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ ভলিউম পরিচালনা সক্রিয় অডিও ডেটা পাথ।
নির্দিষ্ট minActivationVolumePercentage , maxActivationVolumePercentage , ন্যূনতম এবং সর্বোচ্চ ভলিউম লাভ সূচকের সাহায্যে, আপনি প্রতিটি ভলিউম গ্রুপের জন্য সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ ভলিউম লাভ সূচক গণনা করতে পারেন। CarAudioService প্রতিটি নতুন সক্রিয় প্লেব্যাক নিরীক্ষণ করে এবং নিম্নলিখিত শর্তে সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ ভলিউম প্রয়োগ করে:
- আমন্ত্রণ প্রকারের মিল: প্লেব্যাকের অ্যাক্টিভেশন টাইপ (অডিও ম্যানেজার, অডিও কন্ট্রোল এইচএএল, বা টেলিফোনি ম্যানেজার থেকে প্রাপ্ত) অবশ্যই ভলিউম গ্রুপের সাথে যুক্ত
activationVolumeConfigEntryকনফিগারেন্ট্রিতে উল্লেখিতinvocationTypeসাথে মেলে। ভলিউম সূচক পরিসীমার বাইরে: ভলিউম গ্রুপের বর্তমান ভলিউম লাভ সূচক অবশ্যই সংজ্ঞায়িত অ্যাক্টিভেশন ভলিউম লাভ সূচক পরিসীমার বাইরে পড়তে হবে, বিশেষত, নিম্নলিখিতগুলির মধ্যে একটি সত্য:
সূচকটি গণনাকৃত ন্যূনতম অ্যাক্টিভেশন ভলিউম লাভ সূচকের চেয়ে কম।
বা
সূচকটি গণনাকৃত সর্বাধিক সক্রিয়করণ ভলিউম লাভ সূচকের চেয়ে বেশি।
একটি অ্যাক্টিভেশন মিল দেওয়া হলে, ভলিউম গ্রুপের ভলিউম লাভ সূচক নিম্নলিখিতগুলির একটিতে সামঞ্জস্য করা হবে:
ন্যূনতম অ্যাক্টিভেশন ভলিউম লাভ সূচক ন্যূনতম অ্যাক্টিভেশন ভলিউম লাভ সূচকের চেয়ে কম হলে
বা
সর্বোচ্চ অ্যাক্টিভেশন ভলিউম লাভ সূচক সর্বোচ্চ অ্যাক্টিভেশন ভলিউম লাভ সূচকের চেয়ে বেশি হলে
উপরন্তু, ইভেন্ট টাইপ EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED সহ একটি গাড়ী ভলিউম গ্রুপ ইভেন্ট সমস্ত নিবন্ধিত ভলিউম গ্রুপ ইভেন্ট কলব্যাকে পাঠানো হয়।
ভলিউম কী ইভেন্টগুলি পরিচালনা করুন
অ্যান্ড্রয়েড ভলিউম নিয়ন্ত্রণের জন্য বেশ কয়েকটি কীকোড সংজ্ঞায়িত করে, যার মধ্যে রয়েছে:
-
KEYCODE_VOLUME_UP -
KEYCODE_VOLUME_DOWN -
KEYCODE_VOLUME_MUTE
ডিফল্টরূপে, অ্যান্ড্রয়েড ভলিউম কী ইভেন্টগুলি অ্যাপগুলিতে রুট করে৷ স্বয়ংচালিত বাস্তবায়নগুলিকে এই মূল ইভেন্টগুলিকে CarAudioService দ্বারা প্রক্রিয়া করতে বাধ্য করা উচিত, যা উপযুক্ত হিসাবে setGroupVolume বা setMasterMute কল করে৷ এই আচরণকে জোর করতে, config_handleVolumeKeysInWindowManager পতাকাটিকে true সেট করুন:
<resources>
<bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>
ভলিউম কী ইভেন্টগুলি বর্তমানে কোন অঞ্চলের জন্য অভিপ্রেত এবং প্রাথমিক অডিও জোনের সাথে যুক্ত বলে ধরে নেওয়া হয় তা আলাদা করার কোনও উপায় নেই৷ যখন একটি ভলিউম কী ইভেন্ট প্রাপ্ত হয়, তখন CarAudioService সক্রিয় প্লেয়ারের জন্য অডিও প্রসঙ্গ এনে এবং তারপর সর্বোচ্চ অগ্রাধিকার অডিও প্রসঙ্গের সাথে যুক্ত আউটপুট ডিভাইস ধারণকারী ভলিউম গ্রুপ সামঞ্জস্য করে কোন ভলিউম গ্রুপটি সামঞ্জস্য করতে হবে তা নির্ধারণ করে। CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY এ সংজ্ঞায়িত একটি নির্দিষ্ট ক্রম অনুসারে অগ্রাধিকার নির্ধারণ করা হয়।
বিবর্ণ এবং ভারসাম্য
অডিও কন্ট্রোল এইচএএল-এর উভয় সংস্করণেই গাড়িতে ফেইড এবং ব্যালেন্স সেট করার জন্য এপিআই অন্তর্ভুক্ত। CarAudioManager-এর জন্য সংশ্লিষ্ট সিস্টেম APIগুলি AudioControl HAL-এ মান পাস করে। এই APIগুলির android.car.permission.CAR_CONTROL_AUDIO_VOLUME প্রয়োজন। অডিও কন্ট্রোল এপিআইগুলি হল:
setBalanceTowardRight(float value)স্পিকারের ভলিউমটিকে গাড়ির ডান (+) বা বাম দিকে (-) দিকে সরিয়ে দেয়।- 0.0 কেন্দ্রীভূত
- +1.0 সম্পূর্ণ সঠিক
- -1.0 সম্পূর্ণ বাকি আছে
- -1 থেকে 1 সীমার বাইরের একটি মান একটি ত্রুটি৷
setFadeTowardFront(float value)গাড়ির সামনের (+) বা পিছনে (-) দিকে স্পিকারের ভলিউম স্থানান্তর করে।- 0.0 কেন্দ্রীভূত
- +1.0 সম্পূর্ণ ফরোয়ার্ড
- -1.0 সম্পূর্ণভাবে পিছনে
- -1 থেকে 1 সীমার বাইরের একটি মান একটি ত্রুটি৷
এই মানগুলি কীভাবে প্রয়োগ করা উচিত এবং ব্যবহারকারীদের কাছে কীভাবে মানগুলি প্রদর্শন করা হবে তা আপনি সিদ্ধান্ত নিন। এগুলি মিডিয়াতে বা বোর্ড জুড়ে সমস্ত অ্যান্ড্রয়েড সাউন্ডে কঠোরভাবে প্রয়োগ করা যেতে পারে। অ্যান্ড্রয়েড 11 আউটপুট ডিভাইসগুলিতে অডিও প্রভাব প্রয়োগের জন্য সমর্থনও চালু করেছে। এর সাহায্যে, এই APIগুলির পরিবর্তে উপযুক্ত আউটপুট ডিভাইসগুলিতে অডিও প্রভাবগুলির মাধ্যমে বিকল্পভাবে ফেইড এবং ভারসাম্য পরিচালনা করা সম্ভব।
অডিও হাঁস
অডিও ডাকিং ঘটে যখন গাড়িটি একটি স্ট্রিমের জন্য লাভ কমিয়ে দেয় যাতে একই সাথে অন্য একটি স্ট্রিম বাজানো আরও স্পষ্টভাবে শোনা যায়। AAOS-এ, HAL দ্বারা অডিও ডাকিং প্রয়োগ করা হয়। অ্যান্ড্রয়েডের OS এর বাইরে শব্দের উপর কোন নিয়ন্ত্রণ নেই। অ্যান্ড্রয়েড 11-এ, হাঁস পালনের সিদ্ধান্ত নেওয়ার জন্য HAL-এর কাছে উপলব্ধ প্রধান তথ্য হল দুটি আউটপুট ডিভাইস উভয়েরই সক্রিয় স্ট্রিম আছে কিনা।
কখন হাঁস
HAL দ্বারা হাঁস কীভাবে পরিচালনা করা হয় তা নির্ধারণ করা স্বতন্ত্র OEM-এর উপর নির্ভর করে, আমরা নিম্নলিখিত নির্দেশিকাগুলির সুপারিশ করি৷
যখন দুটি অ্যাপ বা পরিষেবা একসাথে অডিও ফোকাস ধরে রাখে তখন অ্যান্ড্রয়েডে একাধিক স্ট্রিম চালানো হয়। অ্যান্ড্রয়েড কখন সমসাময়িক ফোকাস দিতে পারে তা জানতে, বিধিনিষেধের প্রকারে ইন্টারঅ্যাকশন ম্যাট্রিক্স দেখুন। গাড়ী অডিও প্লাগইন প্রবর্তনের সাথে, এটি আপনার AudioFocus পরিচালনার উপরও নির্ভর করে।
অ্যান্ড্রয়েডের দ্বারা একসাথে মিশ্রিত যেকোন স্ট্রীমগুলি কোনও লাভ প্রয়োগ করার আগে তাই করা হয়। যেমন, যে কোনো স্ট্রীম যা অন্যের সাথে একযোগে খেলার সময় হাঁসকে আলাদা আউটপুট ডিভাইসে রুট করা উচিত যাতে এইচএএল তাদের মিশ্রিত করার আগে হাঁস প্রয়োগ করতে পারে।
প্রস্তাবিত হাঁস আচরণ
নিম্নলিখিত সম্ভাব্য সমসাময়িক মিথস্ক্রিয়া হাঁস পালন সুপারিশ করা হয়.
| মিথস্ক্রিয়া | অ্যাকশন |
|---|---|
EMERGENCY | হাঁস বা SAFETY ছাড়া সবকিছু নিঃশব্দ |
SAFETY | EMERGENCY ছাড়া সবই হাঁস |
NAVIGATION | SAFETY এবং EMERGENCY ছাড়া সবকিছুই হাঁস |
CALL | SAFETY , EMERGENCY , এবং NAVIGATION ছাড়া সবকিছুই হাঁস |
VOICE | হাঁস CALL_RING |
VEHICLE_SOUNDS | আপনি সক্রিয় শব্দের গুরুত্ব নির্ধারণ করুন এবং এটি অন্য শব্দগুলিকে ডাকে কিনা। |
MUSIC এবং ANNOUNCEMENT | সব কিছু দ্বারা হাঁস. ব্যতিক্রম হল স্পর্শ ইন্টারঅ্যাকশন টোন যা SYSTEM_SOUND হিসাবে বাজানো হয়। |
হাঁস যখন বিবেচনা
কিছু অ্যাপ এবং পরিষেবা, যেমন নেভিগেশন বা সহকারী, অ্যাকশন সঞ্চালনের জন্য একাধিক প্লেয়ার ব্যবহার করতে পারে। আউটপুট ডিভাইসের মাধ্যমে ডেটার প্রবাহ বন্ধ হয়ে গেলে আক্রমনাত্মক আনডাকিং এড়িয়ে চলুন যাতে নেভিগেশন থেকে পরবর্তী প্লেব্যাক বা একটি সহকারী অ্যাপ শুরু হওয়ার আগে মিডিয়াটি পূর্ণ ভলিউমে ফিরে না আসে।
পর্যাপ্ত বিচ্ছিন্নতা সহ একাধিক সাউন্ড স্টেজের যানবাহনের জন্য, আপনি হাঁসের পরিবর্তে গাড়ির বিভিন্ন এলাকায় অডিও রুট করতে পারেন। উদাহরণস্বরূপ, ন্যাভিগেশন নির্দেশাবলী চালকের হেডরেস্ট স্পীকারে রাউট করা যেতে পারে যখন একটি সাধারণ ভলিউমে কেবিন জুড়ে সঙ্গীত বাজানো অব্যাহত থাকে।
নিরাপত্তা সমালোচনামূলক শব্দ
Android 11 চালু করেছে HAL অডিও ফোকাস APIs । HAL নিশ্চিত করে যে নিরাপত্তা-সমালোচনামূলক শব্দগুলিকে অন্যান্য শব্দের চেয়ে অগ্রাধিকার দেওয়া হয়। যদি HAL-এর কাছে USAGE_EMERGENCY জন্য অডিও ফোকাস থাকে, তাহলে Android-এর অ্যাপ এবং পরিষেবাগুলি যে সাউন্ড বাজাবে না তার নিশ্চয়তা নেই৷ নিরাপত্তা-সমালোচনামূলক শব্দ বাজানোর জন্য Android থেকে কোন স্ট্রিমগুলি মিশ্র বা নিঃশব্দ করা উচিত তা HAL নির্ধারণ করে৷
ভলিউম সেটিংস UI কনফিগার করুন
AAOS ভলিউম গ্রুপ কনফিগারেশন থেকে ভলিউম সেটিংস UI ডিকপল করে। ভলিউম গ্রুপ লাভ কনফিগার করুন- এ বর্ণিত হিসাবে এগুলি ওভারলেড করা যেতে পারে। এই বিচ্ছেদ নিশ্চিত করে যে ভলিউম গ্রুপের কনফিগারেশন পরিবর্তন হলে কোনো পরিবর্তনের প্রয়োজন নেই।
গাড়ির সেটিংস UI-তে, packages/apps/Car/Settings/res/xml/car_volume_items.xml প্রতিটি সংজ্ঞায়িত AudioAttributes.USAGE সাথে যুক্ত UI উপাদান (শিরোনাম এবং আইকন সংস্থান) থাকে। এই ফাইলটি প্রতিটি VolumeGroup এ থাকা প্রথম স্বীকৃত ব্যবহারের সাথে যুক্ত সংস্থানগুলি ব্যবহার করে সংজ্ঞায়িত VolumeGroups একটি যুক্তিসঙ্গত রেন্ডারিং প্রদান করে৷
উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণটি একটি VolumeGroup সংজ্ঞায়িত করে যেমন voice_communication এবং voice_communication_signalling । কার সেটিংস UI এর ডিফল্ট বাস্তবায়ন voice_communication সাথে যুক্ত সংস্থানগুলি ব্যবহার করে VolumeGroup রেন্ডার করে কারণ এটি ফাইলের প্রথম ম্যাক।
<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
<item car:usage="voice_communication"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="voice_communication_signalling"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="media"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="game"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="alarm"
car:title="@*android:string/volume_alarm"
car:icon="@*android:drawable/ic_audio_alarm"/>
<item car:usage="assistance_navigation_guidance"
car:title="@string/navi_volume_title"
car:icon="@drawable/ic_audio_navi"/>
<item car:usage="notification_ringtone"
car:title="@*android:string/volume_ringtone"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistant"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="notification"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_request"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_instant"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_delayed"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_event"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_accessibility"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_sonification"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="unknown"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>
উপরের কনফিগারেশনে ব্যবহৃত বৈশিষ্ট্য এবং মানগুলি packages/apps/Car/Settings/res/values/attrs.xml এ ঘোষণা করা হয়েছে। ভলিউম সেটিংস UI নিম্নলিখিত VolumeGroup -ভিত্তিক CarAudioManager API ব্যবহার করে:
-
getVolumeGroupCount()কয়টি নিয়ন্ত্রণ আঁকতে হবে তা জানতে। -
getGroupMinVolume()এবংgetGroupMaxVolume()নিম্ন এবং উপরের সীমানা পেতে। -
getGroupVolume()বর্তমান ভলিউম পেতে। -
registerVolumeChangeObserver()ভলিউম পরিবর্তন সম্পর্কে অবহিত করা হবে।
গাড়ী ভলিউম গ্রুপ ইভেন্ট
ভলিউম আপডেট এবং নিঃশব্দ টগলের স্বয়ংচালিত ব্যবহারের ক্ষেত্রে প্রাসঙ্গিক আন্ডারপিনিং রয়েছে যা নির্দিষ্ট অ্যাপের ক্রিয়াগুলি যেমন ভলিউম সেটিংসকে সংজ্ঞায়িত করতে পারে। গাড়ির অডিও স্ট্যাক থেকে বর্তমান ভলিউম এবং নিঃশব্দ কলব্যাক সীমিত প্রাসঙ্গিক তথ্য প্রদান করে। স্বয়ংচালিত ব্যবহারের ক্ষেত্রে এবং ভবিষ্যতের পরিমাপযোগ্যতা আরও ভালভাবে পরিবেশন করার জন্য, Android 14 এ CarVolumeGroupEvent যোগ করা হয়েছে। প্রতিটি ইভেন্ট তিনটি গুরুত্বপূর্ণ ধরনের তথ্য বহন করে:
-
CarVolumeGroupInfoএর তালিকা -
EventTypes(বিট-ম্যাপ করা) -
ExtraInfosতালিকা
CarVolumeGroupInfo
ইভেন্ট কলব্যাকের প্রাপকের কাছে প্রভাবিত গাড়ির ভলিউম গ্রুপ তথ্যের তালিকায় রেডি অ্যাক্সেস রয়েছে। এর মানে হল যে অ্যাপটিকে কার অডিও ফ্রেমওয়ার্কে লেটেস্ট স্টেট পেতে কোনো অতিরিক্ত কল করতে হবে না। এটি UI বা অভ্যন্তরীণ অবস্থা আপডেট করতে প্রাপ্ত CarVolumeGroupInfos ব্যবহার করতে পারে। অ্যাপ্লিকেশানগুলির জন্য এটি সহজ করার জন্য, গাড়ির ভলিউম গ্রুপে পরিবর্তিত দিকগুলিও EventTypes এর অংশ হিসাবে প্রদান করা হয়েছে, যা নীচে ব্যাখ্যা করা হয়েছে৷
ইভেন্টের ধরন
CarVolumeGroupInfo এর কোন দিকটি পরিবর্তিত হয়েছে তা নির্ধারণ করে। অ্যাপগুলি পরিবর্তনগুলি সনাক্ত করতে এবং প্রয়োজনীয় পদক্ষেপ নিতে এটি ব্যবহার করতে পারে৷ উদাহরণস্বরূপ, EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED নির্দেশ করে যে সংশ্লিষ্ট CarVolumeGroups সর্বাধিক ভলিউম লাভ সূচক পরিবর্তিত হয়েছে এবং CarVolumeGroupInfo.getMaxVolumeGainIndex() দ্বারা জিজ্ঞাসা করা যেতে পারে।
নিম্নলিখিত টেবিলটি EventType এবং CarVolumeGroupInfo মধ্যে সম্পর্ক দেখায়।
| ইভেন্ট টাইপ | CarVolumeGroupInfo |
|---|---|
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED | CarVolumeGroupInfo.getVolumeGainIndex() |
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED | CarVolumeGroupInfo.getMinVolumeGainIndex() |
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED | CarVolumeGroupInfo.getMaxVolumeGainIndex() |
EVENT_TYPE_MUTE_CHANGED | CarVolumeGroupInfo.isMuted() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED | CarVolumeGroupInfo.isBlocked() |
EVENT_TYPE_ATTENUATION_CHANGED | CarVolumeGroupInfo.isAttenuated() |
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED | CarVolumeGroupInfo.getAudioAttributes() |
ExtraInfos
কেন CarVolumeGroup পরিবর্তিত হয়েছে সে সম্পর্কে অতিরিক্ত তথ্য প্রদান করে। অ্যাপ্লিকেশানগুলি এই তথ্য ব্যবহার করে অতিরিক্ত প্রসঙ্গ প্রদান করতে ব্যবহারকারীকে সতর্ক করতে বা অবহিত করতে পারে৷ উদাহরণস্বরূপ, EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL তাপ ওভারলোডের কারণে একটি সক্রিয় ক্ষণস্থায়ী ক্ষয় নির্দেশ করে। ব্যবহারকারীরা ভলিউম বাড়ানোর চেষ্টা করলে অ্যাপটি তাদের জানাতে পারে।
আমরা ExtraInfos জন্য কোনো প্রক্রিয়া প্রয়োগ করি না। ExtraInfos উপর ভিত্তি করে প্রক্রিয়াটি নির্ধারণ করা আপনার বিবেচনার উপর ছেড়ে দেওয়া হয়। উদাহরণস্বরূপ, যদি EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED এর কারণে অ্যাটেন্যুয়েশন সক্রিয় থাকে, তাহলে ব্যবহারকারীকে ভলিউম পরিবর্তন করা থেকে আটকাতে আপনি প্রাথমিকভাবে ভলিউম বার UI ফেড করতেও বেছে নিতে পারেন। অন্যরা একটি টোস্ট দেখানোর জন্য বেছে নিতে পারে যে হাঁস সক্রিয় রয়েছে এবং ব্যবহারকারীকে ভলিউম পরিবর্তন করার অনুমতি দেয়।
গাড়ির অডিও ফ্রেমওয়ার্ক প্রস্তাবিত ExtraInfos প্রদান করতে AudioControl HAL IAudioGainCallback উপর নির্ভর করে। আরও জানতে, অডিও গেইন কলব্যাক দেখুন।
CarVolumeGroupEvent স্কেল গাড়ির অডিও ফ্রেমওয়ার্কের ভবিষ্যত চাহিদা মেটাতে। আমরা শুধুমাত্র CarVolumeGroupEvent মাধ্যমে নতুন বৈশিষ্ট্য সমর্থন করতে চাই। আমরা দৃঢ়ভাবে সুপারিশ করি যে অ্যাপ বিকাশকারীরা গ্রুপ ভলিউম পরিচালনা করতে এবং নিঃশব্দ পরিবর্তনগুলি পরিচালনা করতে CarVolumeGroupEvent ব্যবহার করুন।
গাড়ী ভলিউম গ্রুপ ইভেন্ট কলব্যাক
Android 14, বিশেষাধিকারপ্রাপ্ত এবং প্ল্যাটফর্ম অ্যাপগুলিকে নিবন্ধন করতে এবং CarVolumeGroupEvents সম্পর্কে অবহিত করার জন্য একটি নতুন কলব্যাক প্রদান করে৷
কলব্যাকের জন্য নিবন্ধন করতে,
CarAudioManager#registerCarVolumeGroupEventCallback()ব্যবহার করুনকলব্যাক নিবন্ধনমুক্ত করতে,
CarAudioManager#unregisterCarVolumeGroupEventCallback()ব্যবহার করুন
যদি একটি অ্যাপ নতুন CarVolumeGroupEventCallback এবং লিগ্যাসি CarVolumeCallback সাথে নিবন্ধন করে, ইভেন্ট CarVolumeGroupEventCallbacks অগ্রাধিকার দেওয়া হয়। গাড়ির অডিও স্ট্যাক আর CarVolumeCallback ট্রিগার করে না। এটি একই ইভেন্টের জন্য একই অ্যাপে ডুপ্লিকেট ট্রিগার প্রতিরোধ করে।
আমরা দৃঢ়ভাবে সুপারিশ করি যে আপনি গ্রুপ ভলিউম পরিচালনা করতে এবং পরিবর্তনগুলি নিঃশব্দ করতে CarVolumeGroupEventCallback ব্যবহার করুন৷
অডিও লাভ কলব্যাক
Android 13 থেকে, গাড়ির অডিও সিস্টেমে পরিবর্তনের কারণে অডিওকন্ট্রোল HAL ভলিউম স্তরের আপডেটগুলি পরিচালনা করতে একটি অ্যাসিঙ্ক্রোনাস কলব্যাক ট্রিগার করতে পারে।
HAL API
অডিও কন্ট্রোল @2.0 AIDL
AudioControl AIDL HAL এর সংস্করণ 2.0 নিম্নলিখিত API যোগ করে:
| API | উদ্দেশ্য |
|---|---|
IAudioControl#registerGainCallback | AudioControl HAL-এর সাথে IAudioGainCallback এর একটি উদাহরণ নিবন্ধন করে। |
IAudioGainCallback#onAudioDeviceGainsChanged | অসিঙ্ক্রোনাস কলব্যাক অডিও গেইন কনফিগারে পরিবর্তনগুলিকে অবহিত করতে। |
অডিওকন্ট্রোল এইচএএল কলব্যাকে কারণগুলির তালিকা এবং সংশ্লিষ্ট AudioGainConfigInfo অন্তর্ভুক্ত থাকে, যার মধ্যে রয়েছে:
- জোন আইডি
- ডিভাইস পোর্ট ঠিকানা
- ভলিউম সূচক > সূচী একটি সীমাবদ্ধ সূচক বা একটি আপডেট সূচক হতে পারে।
কারণগুলিকে বিস্তৃতভাবে শ্রেণীবদ্ধ করা যেতে পারে:
- সীমাবদ্ধতার কারণ। ভলিউম এবং নিঃশব্দ আচরণে ক্ষণস্থায়ী পরিবর্তন।
- আপডেট কারণ. ভলিউম আচরণ স্থায়ী পরিবর্তন.
বিধিনিষেধের ধরন
AudioControl HAL AIDL V3 হিসাবে, নিম্নলিখিতগুলি সমর্থিত বিধিনিষেধের প্রকার:
- নিঃশব্দ
- ব্লকিং
- সীমাবদ্ধতা
- মনোযোগ
| সক্রিয় সীমাবদ্ধতা | ব্যবহারকারীর দ্বারা ট্রিগার করা ভলিউম পরিবর্তন | ইউজার-ট্রিগার করা মিউট টগল |
|---|---|---|
| নিঃশব্দ | ❌ | ❌ (নিঃশব্দ) ✔ (নিঃশব্দ) |
| ব্লকিং | ❌ | ✔ |
| সীমাবদ্ধতা | ❌ (সীমা ছাড়িয়ে) ✔ (সীমার নিচে) | ✔ |
| মনোযোগ | ✔ | ✔ |
নিষেধাজ্ঞাগুলির মধ্যে অগ্রাধিকার হল নিঃশব্দ > ব্লক করা > সীমাবদ্ধতা > মনোযোগ।
নিঃশব্দ নিষেধাজ্ঞা
নিঃশব্দ সীমাবদ্ধতা হল:
-
Reasons.TCU_MUTE -
Reasons.REMOTE_MUTE
গাড়ির অডিও ফ্রেমওয়ার্ক অভ্যন্তরীণভাবে এই দুটি নিঃশব্দ অবস্থা বজায় রাখে:
ব্যবহারকারী নিঃশব্দ। ব্যবহারকারীর অনুরোধের ভিত্তিতে টগল করা হয়েছে, হয়
CarAudioManagerবা মূল ইভেন্টের মাধ্যমে।HAL নিঃশব্দ।
AudioGainকলব্যাকের মাধ্যমে প্রাপ্ত নিঃশব্দ সীমাবদ্ধতার উপর ভিত্তি করে টগল করা হয়েছে।
সেটিংস অ্যাপের মতো শ্রোতাদের জন্য, ভলিউম-গ্রুপ সামগ্রিক নিঃশব্দ ( CarVolumeGroupInfo.isMuted() ) অবস্থা উপরোক্ত নিঃশব্দগুলির যেকোন একটি সক্ষম করা থাকলে তার উপর ভিত্তি করে হবে৷
যখন HAL নিঃশব্দ সক্রিয় করা হয়, সমস্ত ইনকামিং ভলিউম পরিবর্তন এবং গ্রুপ আনমিউট অনুরোধগুলি সীমাবদ্ধতার সময়কালের জন্য উপেক্ষা করা হয়।
ইন্টারঅ্যাকশন কেস: HAL মিউট সক্রিয় এবং মিউট টগলের জন্য ব্যবহারকারীর অনুরোধ
যখন HAL নিঃশব্দ সক্রিয় করা হয় এবং ব্যবহারকারী নিঃশব্দ নিষ্ক্রিয় করা হয়:
- ভলিউম গ্রুপ সামগ্রিক নিঃশব্দ অবস্থা
trueপরিবর্তিত হয়েছে। - নিঃশব্দ সক্ষম করার জন্য ব্যবহারকারীর অনুরোধগুলি প্রক্রিয়া করা হবে৷
- কারণ: ব্যবহারকারীর গোপনীয়তা রক্ষা করার জন্য ব্যবহারকারীর নিঃশব্দ অনুরোধ সর্বদা সম্মান করা উচিত।
যখন HAL নিঃশব্দ সক্রিয় করা হয় এবং ব্যবহারকারী নিঃশব্দ সক্রিয় করা হয়:
ভলিউম গ্রুপ সামগ্রিক নিঃশব্দ অবস্থা
trueপরিবর্তিত হয়েছে।নিঃশব্দ নিষ্ক্রিয় করার জন্য ব্যবহারকারীর অনুরোধগুলি প্রক্রিয়া করা হবে
NOT৷ ক্যাশ করা ব্যবহারকারীর নিঃশব্দ অবস্থা সক্রিয় থাকে।কারণ: ব্যবহারকারীর আনমিউট অনুরোধগুলি শুধুমাত্র তখনই সম্মানিত হবে যদি কোনো সক্রিয় বিধিনিষেধ না থাকে।
কারণ: আন-মিউট ক্যাশড ইউজার মিউট অনিচ্ছাকৃত শব্দ বিস্ফোরণের কারণ হতে পারে এবং ব্যবহারকারীর নিরাপত্তা বিপন্ন হতে পারে। এটি বিশেষত সত্য যদি নিঃশব্দ অবস্থাটি ইগনিশন চক্র জুড়ে সক্রিয় থাকে যা শব্দ স্তরের উপলব্ধি সম্পর্কে ব্যবহারকারীদের সচেতনতা হ্রাস করে।
ইন্টারঅ্যাকশন কেস: HAL মিউট সক্ষম এবং অক্ষম যখন ব্যবহারকারী নিঃশব্দে কোন পরিবর্তন নেই
HAL মিউট টগল করলে ভলিউম-গ্রুপ সামগ্রিক নিঃশব্দ অবস্থা পরিবর্তন হবে। যাইহোক, এটি ব্যবহারকারীর নিঃশব্দ অবস্থা সরাসরি আপডেট করে না। যখন ব্যবহারকারী নিঃশব্দ নিষ্ক্রিয় করা হয় এবং সক্ষম করার জন্য HAL নিঃশব্দ কলব্যাক প্রাপ্ত হয়:
- ভলিউম গ্রুপ সামগ্রিক নিঃশব্দ অবস্থা
trueপরিবর্তিত হয়েছে। HAL নিঃশব্দ সক্রিয় থাকাকালীন ভলিউম পরিবর্তনের জন্য ব্যবহারকারীর অনুরোধগুলি প্রক্রিয়া করা হবে
NOT৷কারণ: নিঃশব্দ সক্রিয় থাকা অবস্থায় ব্যবহারকারী শব্দ বুঝতে পারে না। ভলিউম পরিবর্তনের অনুমতি দিলে শব্দ বিস্ফোরণ ঘটতে পারে এবং ব্যবহারকারীর নিরাপত্তা বিপন্ন হতে পারে।
কারণ: ভলিউম অ্যাপগুলি কলব্যাকের জন্য নিবন্ধন করতে পারে এবং ব্যবহারকারীর হস্তক্ষেপ ছাড়াই স্বয়ংক্রিয়ভাবে একটি আনমিউট (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)) ট্রিগার করতে পারে, যদি এটি OEM দ্বারা প্রত্যাশিত আচরণ হয়।
যখন ব্যবহারকারী নিঃশব্দ নিষ্ক্রিয় থাকাকালীন HAL নিঃশব্দ নিষ্ক্রিয় করা হয়:
ভলিউম গ্রুপের নিঃশব্দ অবস্থা
falseপরিবর্তিত হয়েছে।কারণ: নিঃশব্দ অবস্থাকে স্টিকি করা এবং ব্যবহারকারীকে আন-মিউট করার অনুরোধ করা ব্যবহারকারীকে অপ্রয়োজনীয়ভাবে বাধা দিতে পারে যখন নিঃশব্দ অবস্থা ঘন ঘন টগল হয়।
ভলিউম পরিবর্তন করার জন্য ব্যবহারকারীদের অনুরোধগুলি স্বাভাবিকভাবে প্রক্রিয়া করা হবে।
ব্লকিং
ব্লকিং সীমাবদ্ধতা হল:
-
Reasons.FORCED_MASTER_MUTE -
Reasons.REMOTE_MUTE -
Reasons.TCU_MUTE।
যখন ব্লকিং বিধিনিষেধ সক্রিয় থাকে, তখন ব্যবহারকারীদের কাছ থেকে অনুরোধ করা হয়:
- পরিবর্তন ভলিউম প্রক্রিয়া করা হয় না .
- টগল মিউট প্রক্রিয়া করা হয়.
সীমাবদ্ধতা
সীমাবদ্ধতা সীমাবদ্ধতা হল:
-
Reasons.THERMAL_LIMITATION -
Reasons.SUSPEND_EXIT_VOL_LIMITATION
যখন সীমাবদ্ধতা বিধিনিষেধ সক্রিয় থাকে, তখন ব্যবহারকারীদের কাছ থেকে অনুরোধ করে:
ভলিউম পরিবর্তন করুন:
- সীমাবদ্ধতার মধ্যে প্রক্রিয়া করা হয়
- উপরে সীমাবদ্ধতা প্রক্রিয়া করা হয় না
টগল মিউট প্রক্রিয়া করা হয়.
মনোযোগ
মনোযোগ সীমাবদ্ধতা হল:
-
Reasons.ADAS_DUCKING -
Reasons.NAV_DUCKING -
Reasons.PROJECTION_DUCKING
যখন অ্যাটেন্যুয়েশন সীমাবদ্ধতা সক্রিয় থাকে, তখন ব্যবহারকারীদের থেকে অনুরোধ করে:
পরিবর্তন ভলিউম প্রক্রিয়া করা হয়. নতুন বর্তমান ভলিউম স্তরটি সংক্ষিপ্ত ভলিউমে সেট করা হয়েছে (পূর্ববর্তী ভলিউমের পরিবর্তে)। ভবিষ্যতে ভলিউম পরিবর্তন এই স্তর থেকে করা হয়.
টগল মিউট প্রক্রিয়া করা হয়.
সূচকে আপডেট করুন
নিম্নলিখিতটি অ্যাসিঙ্ক্রোনাস ভলিউম সূচক আপডেট হিসাবে বিবেচিত হয়: Reasons.EXTERNAL_AMP_VOL_FEEDBACK EXTERNAL_AMP_VOL_FEEDBACK।
এই কারণে, AudioControl HAL নির্দিষ্ট সূচকে ভলিউম গ্রুপ বর্তমান সূচক আপডেট করতে পারে। এটি প্রাথমিকভাবে গাড়ির অডিও ফ্রেমওয়ার্ক থেকে ভলিউম পরিবর্তনের অনুরোধের জন্য অডিও সিস্টেম থেকে প্রতিক্রিয়া হিসাবে ব্যবহৃত হয়। সূচক আপডেটটি সূচীকে সিঙ্ক্রোনাইজ করার জন্য একটি CarVolumeGroupEvent কলব্যাক হিসাবে অ্যাপের সাথে যোগাযোগ করা হয়।
উদাহরণ
ব্যবহারের ক্ষেত্রে: ব্যবহারকারী ভলিউম সূচক 30 এ আপডেট করে
ব্যবহারকারী ভলিউম অ্যাপ ব্যবহার করে ভলিউম সূচক 30 এ পরিবর্তন করে।
এই সূচকটি ভলিউম লাভে রূপান্তরিত হয় এবং অডিও HAL-এ পাঠানো হয়।
Audio HALএর বিক্রেতা বাস্তবায়ন নতুন ভলিউম লাভ গ্রহণ করে এবং অডিও সিস্টেম আপডেট করে (যেমন বাহ্যিক amp)।অডিও সিস্টেম সাড়া দেয় যে ভলিউম লেভেল শুধুমাত্র ইনডেক্স 15 এ আপডেট করা হয়েছে (Android-এর অজানা কারণে)।
AudioControl HALট্রিগারের বিক্রেতা বাস্তবায়ন:IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {..., 15 /* New index */})কার অডিও পরিষেবা কলব্যাক থেকে নতুন সূচক গ্রহণ করে যা অধ্যবসায় এবং ভলিউম অ্যাপে কলব্যাকের জন্য ব্যবহৃত হয়। ব্যবহারকারীর অনুরোধ করা সূচকটি হল 30৷ তবে, অডিও সিস্টেম অ্যাসিঙ্ক্রোনাস প্রতিক্রিয়া সূচকটিকে 15 এ আপডেট করে৷
কেস ব্যবহার করুন: সাসপেন্ড থেকে বেরিয়ে আসার পর প্রথম অডিও প্লেব্যাক
সাসপেন্ডের আগে ভলিউম সূচক 95 এর উচ্চ স্তরে সেট করা হয় (পরিসীমা: [0-99])।
অ্যান্ড্রয়েড সাসপেন্ডে প্রবেশ করে।
একবার অ্যান্ড্রয়েড থাকাকালীন সাসপেন্ড (উদাহরণস্বরূপ, পুনরায় শুরু করুন):
বিক্রেতা
Audio HAL/AudioControl HALস্থানীয়ভাবে অডিও সিস্টেমে 30 এর একটি নিরাপদ সূচক প্রয়োগ করে।বিক্রেতা
AudioControl HALনিরাপদ সূচকের জন্য কলব্যাক ট্রিগার করে:
IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {..., 30 /* safe index */})কার অডিও পরিষেবা কলব্যাক থেকে নতুন সূচী গ্রহণ করে যা অধ্যবসায়ের জন্য ব্যবহৃত হয় এবং ভলিউম অ্যাপে সূচকটি সিঙ্ক্রোনাইজ করার জন্য নিজস্ব কলব্যাকগুলি ব্যবহার করা হয়। সাসপেন্ডের আগে ভলিউম সূচক হল 95৷ যাইহোক, পুনরায় শুরু করার পরে, এই সূচকটি
AudioControl HALবাস্তবায়নকারী দ্বারা 30-এর নিরাপদ ভলিউম স্তরে সেট করা হয়েছে৷
গতিশীল ভলিউম কনফিগারেশন
এই বৈশিষ্ট্যটির জন্য আমরা নিম্নলিখিত প্রাথমিক ব্যবহারের ক্ষেত্রে বিবেচনা করি:
যানবাহন এন্ড-অফ-লাইন (EOL) কনফিগারেশন।
অটোমেকাররা গাড়ির অডিও সিস্টেম সেটআপের উপর ভিত্তি করে ইওএল-এ ভলিউম কনফিগারেশন আপডেট করতে পছন্দ করে। সাধারণত, এটি Android SW ইমেজ আপডেট না করেই একটি সাইডলোড।
অটোমেকারদের একটি পরিষেবা সময়সূচীর সময় ভলিউম কনফিগারেশন আপডেট করতে হতে পারে।
রানটাইম কনফিগারেশন। স্বয়ংচালিত অডিও সিস্টেমগুলি বাহ্যিক পরিবর্ধক কনফিগারেশন সমর্থন করে এবং এই ECUগুলি ভলিউম পরিসীমা কনফিগারেশনগুলি হোস্ট করতে পারে যা বুট করার সময় জিজ্ঞাসা করা হয়।
অন-ডিমান্ড কনফিগারেশন। চাহিদা-ভিত্তিক অডিও বৈশিষ্ট্যগুলির ক্রমবর্ধমান প্রয়োজনকে সমর্থন করার জন্য প্রস্তাবিত যেখানে ব্যবহারকারীরা নির্দিষ্ট সময়ের জন্য বর্ধিত সংকেত প্রক্রিয়াকরণের সদস্যতা গ্রহণ করে। নতুন ভলিউম পরিসীমা কনফিগারেশন একটি সাবস্ক্রিপশনের সময়কালের জন্য বৈধ।
ডিজাইন
গতিশীল ভলিউম কনফিগারেশন তিনটি পর্যায়ে অর্জন করা হয়:
আবিষ্কার। বিক্রেতা AudioControl HAL বাস্তবায়ন বিক্রেতার মালিকানাধীন একটি কাস্টম IPC পদ্ধতির মাধ্যমে নতুন ভলিউম পরিসীমা আপডেট আবিষ্কার করে।
একবার আবিষ্কৃত হলে,
AudioControl::IModuleChangeCallbackমাধ্যমে একটি কলব্যাক তৈরি হয়।আপডেট. গাড়ির অডিও স্ট্যাক নতুন ভলিউম রেঞ্জ সহ ভলিউম গ্রুপ স্টেট আপডেট করে।
ভলিউম পরিসীমা আপডেটের পরে একই ভলিউম স্তর বজায় রাখার প্রচেষ্টা করা হয়। যাইহোক, যদি সূচক সীমার বাইরে পড়ে, বর্তমান ভলিউম সূচক একটি নিরাপদ মান সেট করা হয়। উদাহরণস্বরূপ, কলব্যাকের সময় বিক্রেতা দ্বারা প্রদত্ত ডিফল্ট স্তর।
কলব্যাক।
ভলিউম গ্রুপ রেঞ্জ আপডেটের পরে, গাড়ির অডিও স্ট্যাক
CarVolumeGroupEventCallbackএর মাধ্যমে নিবন্ধিত অ্যাপগুলিতে একটি কলব্যাক ট্রিগার করে।CarVolumeGroupEventআপডেট করাCarVolumeGroupInfo, ইভেন্ট-টাইপ (কি পরিবর্তন হয়েছে) এবং অতিরিক্ত-তথ্য (কেন এটি পরিবর্তিত হয়েছে) বহন করে।

চিত্র 2. গতিশীল ভলিউম কনফিগারেশন।
HAL API
অডিও কন্ট্রোল @ 3.0 AIDL
অডিওকন্ট্রোল এআইডিএল এইচএএল-এর সংস্করণ 3.0 নিম্নলিখিত APIগুলিকে প্রবর্তন করে:
| API | |
|---|---|
| IAudioControl#setModuleChangeCallback | AudioControl HAL-এর সাথে IModuleChangeCallback-এর একটি উদাহরণ সেট করে। |
| IAudioControl#clearModuleChangeCallback | অডিওকন্ট্রোল HAL এর সাথে পূর্বে সেট করা IModuleChangeCallback-এর উদাহরণ সাফ করে। |
| IModuleChangeCallback#onAudioportsChanged | অডিওপোর্টে পরিবর্তনগুলি জানাতে কলব্যাক করুন৷ |
সিকোয়েন্স
ডায়নামিক ভলিউম কনফিগারেশনের সিকোয়েন্স ডায়াগ্রাম নিচে দেখানো হয়েছে।

চিত্র 3. গতিশীল ভলিউম কনফিগারেশনের জন্য সিকোয়েন্স ডায়াগ্রাম।
মূল দিক
এই বৈশিষ্ট্যটি অপ্টিমাইজ করতে, নিম্নলিখিত বিবেচনা করুন।
কলব্যাকের অংশ হিসাবে সরবরাহ করা অডিওপোর্টগুলি অবশ্যই স্বয়ংচালিত বাসের সংজ্ঞার সাথে মেলে:
- ডিভাইস পোর্ট।
IN_DEVICE,OUT_DEVICE - সংযোগ।
BUS - ঠিকানা। অডিও HAL সংজ্ঞায় সংজ্ঞায়িত
- লাভ মোড.
JOINT
- ডিভাইস পোর্ট।
বিক্রেতাদের অবশ্যই অডিও HAL নীতিতে ভলিউম পরিসরের সংজ্ঞাগুলির একটি সুপারসেট সংজ্ঞায়িত করতে হবে এবং গাড়ির বৈকল্পিকগুলির জন্য এটি কাস্টমাইজ করতে কলব্যাক ব্যবহার করতে হবে। আরও তথ্যের জন্য
IModuleChangeCallbacAIDL সংজ্ঞা দেখুন।যখন একাধিক অডিও BUS একই ভলিউম গ্রুপের অন্তর্গত হয়, প্রত্যেকটির অবশ্যই অভিন্ন ভলিউম পরিসীমা সংজ্ঞা থাকতে হবে। এটি করতে ব্যর্থ হলে গাড়ির অডিও ফ্রেমওয়ার্ক নতুন ভলিউম পরিসীমা সংজ্ঞা প্রত্যাখ্যান করে।