ভলিউম ব্যবস্থাপনা

ভলিউম ম্যানেজমেন্ট 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 নিম্নলিখিত বর্তমানে সক্রিয় অডিও সাবকম্পোনেন্টগুলি পর্যবেক্ষণ করে সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ পরিচালনা করে:

  • বর্তমান সক্রিয় প্লেব্যাক ট্র্যাক
  • বর্তমান কলের অবস্থা
  • অডিও কন্ট্রোল এইচএএল থেকে বর্তমান অডিও ফোকাস অনুরোধ যেখানে অডিও কন্ট্রোল এইচএএল থেকে অডিও ফোকাস অনুরোধ সংকেত দেয় যে অ্যান্ড্রয়েডের বাইরে একটি সক্রিয় অডিও প্লেব্যাক ঘটছে

নিম্নলিখিত চিত্রটি সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ ভলিউম পরিচালনার একটি উচ্চ-স্তরের ওভারভিউ দেখায়:

image

চিত্র 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 এ সংজ্ঞায়িত একটি নির্দিষ্ট ক্রম অনুসারে অগ্রাধিকার নির্ধারণ করা হয়।

বিবর্ণ এবং ভারসাম্য

অডিও কন্ট্রোল এইচএএল-এর উভয় সংস্করণেই গাড়ির মধ্যে ফেইড এবং ব্যালেন্স সেট করার জন্য API অন্তর্ভুক্ত। 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-এর নিরাপদ ভলিউম স্তরে সেট করা হয়েছে৷

গতিশীল ভলিউম কনফিগারেশন

এই বৈশিষ্ট্যটির জন্য আমরা নিম্নলিখিত প্রাথমিক ব্যবহারের ক্ষেত্রে বিবেচনা করি:

  1. যানবাহন এন্ড-অফ-লাইন (EOL) কনফিগারেশন।

    • অটোমেকাররা গাড়ির অডিও সিস্টেম সেটআপের উপর ভিত্তি করে ইওএল-এ ভলিউম কনফিগারেশন আপডেট করতে পছন্দ করে। সাধারণত, এটি Android SW ইমেজ আপডেট না করেই একটি সাইডলোড।

    • অটোমেকারদের একটি পরিষেবা সময়সূচীর সময় ভলিউম কনফিগারেশন আপডেট করতে হতে পারে।

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

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

ডিজাইন

গতিশীল ভলিউম কনফিগারেশন তিনটি পর্যায়ে অর্জন করা হয়:

  • আবিষ্কার। বিক্রেতা 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 নীতিতে ভলিউম পরিসরের সংজ্ঞাগুলির একটি সুপারসেট সংজ্ঞায়িত করতে হবে এবং গাড়ির বৈকল্পিকগুলির জন্য এটি কাস্টমাইজ করতে কলব্যাক ব্যবহার করতে হবে। আরও তথ্যের জন্য IModuleChangeCallbac AIDL সংজ্ঞা দেখুন।

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

,

ভলিউম ম্যানেজমেন্ট 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 নিম্নলিখিত বর্তমানে সক্রিয় অডিও সাবকম্পোনেন্টগুলি পর্যবেক্ষণ করে সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ পরিচালনা করে:

  • বর্তমান সক্রিয় প্লেব্যাক ট্র্যাক
  • বর্তমান কলের অবস্থা
  • অডিও কন্ট্রোল এইচএএল থেকে বর্তমান অডিও ফোকাস অনুরোধ যেখানে অডিও কন্ট্রোল এইচএএল থেকে অডিও ফোকাস অনুরোধ সংকেত দেয় যে অ্যান্ড্রয়েডের বাইরে একটি সক্রিয় অডিও প্লেব্যাক ঘটছে

নিম্নলিখিত চিত্রটি সর্বনিম্ন এবং সর্বাধিক সক্রিয়করণ ভলিউম পরিচালনার একটি উচ্চ-স্তরের ওভারভিউ দেখায়:

image

চিত্র 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 -তে সংজ্ঞায়িত একটি নির্দিষ্ট ক্রমের ভিত্তিতে নির্ধারিত হয়।

বিবর্ণ এবং ভারসাম্য

অডিওকন্ট্রোল এইচএএল এর উভয় সংস্করণে গাড়িতে বিবর্ণ এবং ভারসাম্য স্থাপনের জন্য এপিআই অন্তর্ভুক্ত রয়েছে। অডিওকন্ট্রোল এইচএএল -তে ক্যারাউডিওম্যানেজার পাস মানগুলির জন্য সংশ্লিষ্ট সিস্টেম এপিআই। এই এপিআইগুলির জন্য 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 আউটপুট ডিভাইসে অডিও প্রভাব প্রয়োগের জন্য সমর্থনও চালু করেছে। এটির সাথে, এই এপিআইগুলির পরিবর্তে উপযুক্ত আউটপুট ডিভাইসে অডিও প্রভাবগুলির মাধ্যমে বিকল্পভাবে বিবর্ণ এবং ভারসাম্য পরিচালনা করা সম্ভব।

অডিও হাঁস

অডিও হাঁসটি ঘটে যখন গাড়িটি একটি স্ট্রিমের জন্য লাভ হ্রাস করে যাতে একই সাথে অন্য স্ট্রিম বাজানো আরও স্পষ্টভাবে শোনা যায়। এএওএস -এ, অডিও ডাকিং এইচএল দ্বারা প্রয়োগ করা হয়। অ্যান্ড্রয়েডের ওএসের বাইরে শব্দগুলির উপর কোনও নিয়ন্ত্রণ নেই। অ্যান্ড্রয়েড 11 -এ, হাঁস সিদ্ধান্ত নেওয়ার জন্য এইচএএল -এর কাছে উপলব্ধ প্রধান তথ্য হ'ল দুটি আউটপুট ডিভাইস উভয়ই সক্রিয় স্ট্রিম রয়েছে কিনা।

হাঁস কখন

এইচএএল দ্বারা কীভাবে হাঁসটি পরিচালনা করা হয় তা নির্ধারণ করার জন্য এটি পৃথক OEM এর উপর নির্ভর করে, আমরা নিম্নলিখিত নির্দেশিকাগুলি সুপারিশ করি।

  • অ্যান্ড্রয়েডে বাজানো একাধিক স্ট্রিম সাধারণত ঘটে যখন দুটি অ্যাপ্লিকেশন বা পরিষেবা একই সাথে অডিও ফোকাস রাখে। অ্যান্ড্রয়েড কখন একযোগে ফোকাস দিতে পারে তা শিখতে, সীমাবদ্ধতার ধরণের ক্ষেত্রে ইন্টারঅ্যাকশন ম্যাট্রিক্স দেখুন। গাড়ি অডিও প্লাগইন প্রবর্তনের সাথে সাথে এটি আপনার অডিওফোকাস পরিচালনার উপরও নির্ভর করে।

  • অ্যান্ড্রয়েড দ্বারা মিশ্রিত যে কোনও স্ট্রিমগুলি কোনও লাভ প্রয়োগের আগে তাই করা হয়। যেমনটি, অন্যের সাথে একই সাথে খেললে যে কোনও স্ট্রিমকে ডাকা করা উচিত তা পৃথক আউটপুট ডিভাইসগুলিতে চালিত করা উচিত যাতে এইচএল তাদের মিশ্রণের আগে হাঁস প্রয়োগ করতে পারে।

নিম্নলিখিতগুলি সম্ভাব্য একযোগে ইন্টারঅ্যাকশন হাঁস সুপারিশ করা হয়।

মিথস্ক্রিয়া অ্যাকশন
EMERGENCY SAFETY বাদে সমস্ত কিছু হাঁস বা নিঃশব্দ
SAFETY EMERGENCY ব্যতীত সবকিছু হাঁস
NAVIGATION SAFETY এবং EMERGENCY ব্যতীত সবকিছু হাঁস
CALL SAFETY , EMERGENCY এবং NAVIGATION ব্যতীত সবকিছু হাঁস
VOICE হাঁস CALL_RING
VEHICLE_SOUNDS আপনি সক্রিয় শব্দটির গুরুত্ব নির্ধারণ করেন এবং এটি অন্যান্য শব্দকে হাঁস দেয় কিনা।
MUSIC এবং ANNOUNCEMENT সবকিছু দ্বারা ducked। ব্যতিক্রমগুলি হ'ল SYSTEM_SOUND হিসাবে খেলানো স্পর্শ ইন্টারঅ্যাকশন টোন।

হাঁস যখন বিবেচনা

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

যথেষ্ট পরিমাণে বিচ্ছিন্নতা সহ একাধিক শব্দ পর্যায়ে থাকা যানবাহনের জন্য, আপনি হাঁসের পরিবর্তে গাড়ির বিভিন্ন অঞ্চলে অডিও রুট করতে পারেন। উদাহরণস্বরূপ, নেভিগেশন নির্দেশাবলী একটি সাধারণ ভলিউমে কেবিন জুড়ে সংগীত খেলতে থাকাকালীন ড্রাইভারের হেডরেস্ট স্পিকারগুলিতে যেতে পারে।

সুরক্ষা সমালোচনামূলক শব্দ

অ্যান্ড্রয়েড 11 এইচএল অডিও ফোকাস এপিআই প্রবর্তন করেছে। এইচএএল নিশ্চিত করে যে সুরক্ষা-সমালোচনামূলক শব্দগুলি অন্যান্য শব্দগুলির চেয়ে অগ্রাধিকার দেওয়া হয়। যদি এইচএএলটি USAGE_EMERGENCY জন্য অডিও ফোকাস রাখে তবে এটি গ্যারান্টিযুক্ত নয় যে অ্যান্ড্রয়েডের অ্যাপ্লিকেশনগুলি এবং পরিষেবাগুলি শব্দ খেলবে না। এইচএএল নির্ধারণ করে যে অ্যান্ড্রয়েড থেকে কোন স্ট্রিমগুলি সুরক্ষা-সমালোচনামূলক শব্দগুলি খেলতে মিশ্রিত করা উচিত বা নিঃশব্দ করা উচিত।

ভলিউম সেটিংস ইউআই কনফিগার করুন

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

গাড়ী সেটিংস ইউআই -তে, packages/apps/Car/Settings/res/xml/car_volume_items.xml প্রতিটি সংজ্ঞায়িত AudioAttributes.USAGE সাথে যুক্ত ইউআই উপাদানগুলি (শিরোনাম এবং আইকন রিসোর্স) রয়েছে। এই ফাইলটি প্রতিটি VolumeGroup থাকা প্রথম স্বীকৃত ব্যবহারের সাথে সম্পর্কিত সংস্থানগুলি ব্যবহার করে সংজ্ঞায়িত VolumeGroups যুক্তিসঙ্গত রেন্ডারিংয়ের জন্য সরবরাহ করে।

উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণটি voice_communication এবং voice_communication_signalling সহ একটি VolumeGroup সংজ্ঞায়িত করে। সিএআর সেটিংসের ডিফল্ট বাস্তবায়ন ইউআই 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 -এ ঘোষণা করা হয়। ভলিউম সেটিংস ইউআই নিম্নলিখিত VolumeGroup ভিত্তিক কেরৌডিওম্যানেজার এপিআই ব্যবহার করে:

  • কতগুলি নিয়ন্ত্রণ আঁকতে হবে তা শিখতে getVolumeGroupCount()
  • নিম্ন এবং উপরের সীমানা পেতে getGroupMinVolume() এবং getGroupMaxVolume()
  • বর্তমান ভলিউম পেতে getGroupVolume()
  • ভলিউম পরিবর্তনের বিষয়ে অবহিত করা উচিত registerVolumeChangeObserver()

গাড়ির ভলিউম গ্রুপ ইভেন্ট

ভলিউম আপডেট এবং নিঃশব্দ টগলের স্বয়ংচালিত ব্যবহারের ক্ষেত্রে প্রাসঙ্গিক আন্ডারপিনিং রয়েছে যা নির্দিষ্ট অ্যাপ্লিকেশনগুলির ক্রিয়াগুলি যেমন ভলিউম সেটিংসের মতো সংজ্ঞায়িত করতে পারে। গাড়ী অডিও স্ট্যাক থেকে বর্তমান ভলিউম এবং নিঃশব্দ কলব্যাক সীমিত প্রাসঙ্গিক তথ্য সরবরাহ করে। স্বয়ংচালিত ব্যবহারের কেস এবং ভবিষ্যতের স্কেলিবিলিটি আরও ভালভাবে পরিবেশন করতে, কারভলিউমগ্রুপভেন্ট অ্যান্ড্রয়েড 14 এ যুক্ত করা হয়েছে। প্রতিটি ইভেন্ট তিনটি সমালোচনামূলক ধরণের তথ্য বহন করে:

  • CarVolumeGroupInfo ইনফোর তালিকা
  • EventTypes (বিট ম্যাপযুক্ত)
  • ExtraInfos তালিকা

কারভলিউমগ্রুপ ইনফো

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

ইভেন্টটাইপস

CarVolumeGroupInfo ইনফোর কোন দিকটি পরিবর্তিত হয়েছে তা নির্ধারণ করে। অ্যাপ্লিকেশনগুলি পরিবর্তনগুলি সনাক্ত করতে এবং প্রয়োজনীয় ক্রিয়াগুলি নিতে এটি ব্যবহার করতে পারে। উদাহরণস্বরূপ, EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED ইঙ্গিত দেয় যে সম্পর্কিত CarVolumeGroups সর্বাধিক ভলিউম লাভ সূচক পরিবর্তিত হয়েছে এবং CarVolumeGroupInfo.getMaxVolumeGainIndex() দ্বারা অনুসন্ধান করা যেতে পারে।

নিম্নলিখিত টেবিলটি EventType এবং 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()

এক্সট্রেনফোস

CarVolumeGroup কেন পরিবর্তিত হয়েছে সে সম্পর্কে অতিরিক্ত তথ্য সরবরাহ করে। অ্যাপ্লিকেশনগুলি ব্যবহারকারীকে অভিনয় করতে বা অবহিত করার জন্য অতিরিক্ত প্রসঙ্গ সরবরাহ করতে এই তথ্যটি ব্যবহার করতে পারে। উদাহরণস্বরূপ, EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL তাপ ওভারলোডের কারণে একটি সক্রিয় ক্ষণস্থায়ী মনোযোগ নির্দেশ করে। অ্যাপ্লিকেশনটি যদি ভলিউম বাড়ানোর চেষ্টা করে তবে অ্যাপটি ব্যবহারকারীকে অবহিত করতে পারে।

আমরা ExtraInfos জন্য কোনও প্রক্রিয়া প্রয়োগ করি না। ExtraInfos উপর ভিত্তি করে প্রক্রিয়াটি নির্ধারণ করার জন্য এটি আপনার বিবেচনার ভিত্তিতে বাকি রয়েছে। উদাহরণস্বরূপ, যদি EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED কারণে মনোযোগ সক্রিয় থাকে তবে ব্যবহারকারীকে ভলিউম পরিবর্তন করতে বাধা দিতে আপনি প্রাথমিকভাবে ভলিউম বার ইউআইকে ম্লান করতেও বেছে নিতে পারেন। অন্যরা এমন একটি টোস্ট দেখানোর বিকল্প বেছে নিতে পারে যে হাঁস সক্রিয় রয়েছে এবং ব্যবহারকারীকে ভলিউম পরিবর্তন করতে দেয়।

সিএআর অডিও ফ্রেমওয়ার্কটি প্রস্তাবিত ExtraInfos সরবরাহ করতে অডিওকন্ট্রোল হাল IAudioGainCallback উপর নির্ভর করে। আরও জানতে, অডিও লাভ কলব্যাক দেখুন।

CarVolumeGroupEvent স্কেলগুলি গাড়ি অডিও ফ্রেমওয়ার্কের ভবিষ্যতের চাহিদা মেটাতে। আমরা কেবল CarVolumeGroupEvent মাধ্যমে নতুন বৈশিষ্ট্যগুলি সমর্থন করার ইচ্ছা করি। আমরা দৃ strongly ়ভাবে সুপারিশ করি যে অ্যাপ বিকাশকারীরা গ্রুপের ভলিউম এবং নিঃশব্দ পরিবর্তনগুলি পরিচালনা করতে CarVolumeGroupEvent ব্যবহার করুন।

গাড়ির ভলিউম গ্রুপ ইভেন্ট কলব্যাক

অ্যান্ড্রয়েড 14, CarVolumeGroupEvents সম্পর্কে নিবন্ধভুক্ত এবং অবহিত করার জন্য সুবিধাযুক্ত এবং প্ল্যাটফর্ম অ্যাপ্লিকেশনগুলির জন্য একটি নতুন কলব্যাক সরবরাহ করে।

  • কলব্যাকের জন্য নিবন্ধন করতে, CarAudioManager#registerCarVolumeGroupEventCallback() ব্যবহার করুন

  • কলব্যাকটি নিবন্ধভুক্ত করতে, CarAudioManager#unregisterCarVolumeGroupEventCallback() ব্যবহার করুন

যদি কোনও অ্যাপ নতুন CarVolumeGroupEventCallback এবং লিগ্যাসি CarVolumeCallback সাথে নিবন্ধভুক্ত করে, ইভেন্টটি CarVolumeGroupEventCallbacks অগ্রাধিকার দেওয়া হয়। গাড়ি অডিও স্ট্যাক আর CarVolumeCallback ট্রিগার করে না। এটি একই ইভেন্টের জন্য একই অ্যাপ্লিকেশনটিতে সদৃশ ট্রিগারগুলিকে বাধা দেয়।

আমরা দৃ strongly ়ভাবে সুপারিশ করি যে আপনি গ্রুপের ভলিউম এবং নিঃশব্দ পরিবর্তনগুলি পরিচালনা করতে CarVolumeGroupEventCallback ব্যবহার করুন।

অডিও লাভ কলব্যাক

অ্যান্ড্রয়েড 13 থেকে, অডিওকন্ট্রোল এইচএল গাড়ি অডিও সিস্টেমে পরিবর্তনের কারণে ভলিউম স্তরের আপডেটগুলি পরিচালনা করতে একটি অ্যাসিঙ্ক্রোনাস কলব্যাক ট্রিগার করতে পারে।

হাল এপিআই

অডিওকন্ট্রোল @2.0 এইডএল

অডিওকন্ট্রোল এইডল হাল এর সংস্করণ 2.0 নিম্নলিখিত এপিআই যুক্ত করেছে:

API উদ্দেশ্য
IAudioControl#registerGainCallback অডিওকন্ট্রোল এইচএএল এর সাথে IAudioGainCallback একটি উদাহরণ নিবন্ধন করে।
IAudioGainCallback#onAudioDeviceGainsChanged অডিও লাভ কনফিগারেশনে পরিবর্তনগুলি অবহিত করতে অ্যাসিঙ্ক্রোনাস কলব্যাক।

অডিওকন্ট্রোল এইচএল কলব্যাকের মধ্যে কারণগুলির তালিকা এবং সম্পর্কিত AudioGainConfigInfo অন্তর্ভুক্ত রয়েছে, যা রয়েছে:

  • জোন আইডি
  • ডিভাইস পোর্ট ঠিকানা
  • ভলিউম সূচক> সূচক হয় একটি সীমাবদ্ধ সূচক বা আপডেট সূচক হতে পারে।

কারণগুলি বিস্তৃতভাবে শ্রেণিবদ্ধ করা যেতে পারে:

  • সীমাবদ্ধতার কারণ। ভলিউম এবং নিঃশব্দ আচরণে ক্ষণস্থায়ী পরিবর্তন।
  • কারণ আপডেট। ভলিউম আচরণে স্থায়ী পরিবর্তন।

সীমাবদ্ধতা প্রকার

AudioControl HAL AIDL V3 হিসাবে, নিম্নলিখিতগুলি সমর্থিত বিধিনিষেধের ধরণগুলি রয়েছে:

  • নিঃশব্দ
  • ব্লকিং
  • সীমাবদ্ধতা
  • মনোযোগ
সক্রিয় সীমাবদ্ধতা ব্যবহারকারী-ট্রিগার ভলিউম পরিবর্তন ব্যবহারকারী-ট্রিগার নিঃশব্দ টগল
নিঃশব্দ ❌ (অবিবাহিত)

✔ (নিঃশব্দ)
ব্লকিং
সীমাবদ্ধতা ❌ (সীমা ছাড়িয়ে)

✔ (সীমা অধীনে)
মনোযোগ

বিধিনিষেধগুলির মধ্যে অগ্রাধিকার হ'ল নিঃশব্দ> ব্লকিং> সীমাবদ্ধতা> মনোযোগ।

নিঃশব্দ বিধিনিষেধ

নিঃশব্দ বিধিনিষেধগুলি হ'ল:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

সিএআর অডিও ফ্রেমওয়ার্ক অভ্যন্তরীণভাবে এই দুটি নিঃশব্দ রাজ্য বজায় রাখে:

  • ব্যবহারকারী নিঃশব্দ। ব্যবহারকারীর অনুরোধের ভিত্তিতে টগল করা হয়, হয় CarAudioManager বা কী ইভেন্টগুলির মাধ্যমে।

  • হাল নিঃশব্দ। AudioGain কলব্যাকের মাধ্যমে প্রাপ্ত নিঃশব্দ বিধিনিষেধের ভিত্তিতে টগলড।

সেটিংস অ্যাপের মতো শ্রোতাদের কাছে, ভলিউম-গ্রুপের সামগ্রিক নিঃশব্দ ( CarVolumeGroupInfo.isMuted() ) রাজ্যটির উপর ভিত্তি করে উপরোক্ত দুটি নিঃশব্দ সক্ষম করা থাকলে তার উপর ভিত্তি করে তৈরি করা হবে।

যখন হাল নিঃশব্দটি সক্ষম করা থাকে, তখন সমস্ত আগত ভলিউম পরিবর্তন এবং গ্রুপ আনমুটে অনুরোধগুলি নিষেধাজ্ঞার সময়কালের জন্য উপেক্ষা করা হয়।

ইন্টারঅ্যাকশন কেস: হাল নিঃশব্দ সক্রিয় এবং নিঃশব্দ টগলের জন্য ব্যবহারকারীর অনুরোধ

যখন হাল নিঃশব্দ সক্ষম করা হয় এবং ব্যবহারকারী নিঃশব্দ অক্ষম থাকে:

  • ভলিউম গ্রুপ সামগ্রিক নিঃশব্দ রাষ্ট্রকে true পরিবর্তিত করা হয়েছে।
  • নিঃশব্দ সক্ষম করতে ব্যবহারকারীর কাছ থেকে অনুরোধগুলি প্রক্রিয়া করা হবে।
    • কারণ: ব্যবহারকারীদের গোপনীয়তা সংরক্ষণের জন্য ব্যবহারকারীর নিঃশব্দ অনুরোধগুলি সর্বদা সম্মানিত করা উচিত।

যখন হাল নিঃশব্দ সক্ষম করা হয় এবং ব্যবহারকারী নিঃশব্দ সক্ষম হয়:

  • ভলিউম গ্রুপ সামগ্রিক নিঃশব্দ রাষ্ট্রকে true পরিবর্তিত করা হয়েছে।

  • নিঃশব্দে অক্ষম করার জন্য ব্যবহারকারীর কাছ থেকে অনুরোধগুলি প্রক্রিয়া করা হবে NOT । ক্যাশেড ব্যবহারকারী নিঃশব্দ রাষ্ট্র সক্ষম রয়েছে।

    • কারণ: ব্যবহারকারীর অবিচ্ছিন্ন অনুরোধগুলি কেবল তখনই সম্মানিত হবে যদি কোনও সক্রিয় বিধিনিষেধ নেই।

    • কারণ: আন-মিটিং ক্যাশেড ব্যবহারকারী নিঃশব্দে অনিচ্ছাকৃত শব্দ বিস্ফোরণ এবং ব্যবহারকারীর সুরক্ষাকে বিপন্ন করতে পারে। এটি বিশেষত সত্য যদি নিঃশব্দ রাষ্ট্রটি ইগনিশন চক্র জুড়ে সক্ষম হয় যা ব্যবহারকারীদের শব্দ স্তরের উপলব্ধি সম্পর্কে সচেতনতা হ্রাস করে।

ইন্টারঅ্যাকশন কেস: ব্যবহারকারী নিঃশব্দে কোনও পরিবর্তন নেই এমন সময় হাল নিঃশব্দ সক্ষম এবং অক্ষম

টগলিং হাল মিউটে ভলিউম-গ্রুপ সামগ্রিক নিঃশব্দ রাষ্ট্র পরিবর্তন করবে। তবে এটি সরাসরি ব্যবহারকারী নিঃশব্দ রাষ্ট্র আপডেট করে না। যখন ব্যবহারকারী নিঃশব্দটি অক্ষম থাকে এবং সক্ষম করার জন্য হাল নিঃশব্দ কলব্যাক প্রাপ্ত হয়:

  • ভলিউম গ্রুপ সামগ্রিক নিঃশব্দ রাষ্ট্রকে true পরিবর্তিত করা হয়েছে।
  • ব্যবহারকারীর কাছ থেকে পরিবর্তন ভলিউম পরিবর্তন করার অনুরোধগুলি প্রক্রিয়া করা হবে NOT যখন হাল নিঃশব্দ সক্ষম করা থাকে।

    • কারণ: নিঃশব্দ সক্ষম থাকাকালীন ব্যবহারকারী শব্দ বুঝতে পারবেন না। ভলিউম পরিবর্তনের অনুমতি দেওয়ার ফলে একটি শব্দ বিস্ফোরণ এবং ব্যবহারকারীর সুরক্ষা বিপন্ন হতে পারে।

    • কারণ: ভলিউম অ্যাপ্লিকেশনগুলি কলব্যাকগুলির জন্য নিবন্ধন করতে পারে এবং একটি আনমুটে ট্রিগার করতে পারে (Caraudiomanager.setvolumegroupmute (...,/* Mute =*/ সত্য, ..)) স্বয়ংক্রিয়ভাবে ব্যবহারকারীর হস্তক্ষেপ ছাড়াই, যদি এটি OEM দ্বারা প্রত্যাশিত আচরণ হয়।

যখন হাল নিঃশব্দটি অক্ষম থাকে যখন ব্যবহারকারীর নিঃশব্দ অক্ষম থাকে:

  • ভলিউম গ্রুপ নিঃশব্দ রাষ্ট্রকে 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

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

উদাহরণ

কেস ব্যবহার করুন: ব্যবহারকারী ভলিউম সূচক 30 এ আপডেট করে

  • ব্যবহারকারী ভলিউম সূচকটি 30 এ পরিবর্তন করতে ভলিউম অ্যাপটি ব্যবহার করে।

  • এই সূচকটি ভলিউম লাভে রূপান্তরিত হয় এবং অডিও এইচএলে প্রেরণ করা হয়।

  • Audio HAL বিক্রেতার বাস্তবায়নগুলি নতুন ভলিউম লাভ পান এবং অডিও সিস্টেমটি আপডেট করুন (বাহ্যিক এএমপি -র মতো)।

  • অডিও সিস্টেম প্রতিক্রিয়া জানায় যে ভলিউম স্তরটি কেবল সূচক 15 এ আপডেট করা হয়েছে (অ্যান্ড্রয়েডের অজানা কারণে)।

  • 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 এর নিরাপদ ভলিউম স্তরে সেট করা আছে।

গতিশীল ভলিউম কনফিগারেশন

এই বৈশিষ্ট্যের জন্য আমরা নিম্নলিখিত প্রাথমিক ব্যবহারের কেসগুলি বিবেচনা করি:

  1. যানবাহন শেষ-লাইন (ইওএল) কনফিগারেশন।

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

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

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

  3. অন-চাহিদা কনফিগারেশন। চাহিদা-ভিত্তিক অডিও বৈশিষ্ট্যগুলির ক্রমবর্ধমান প্রয়োজনকে সমর্থন করার জন্য প্রস্তাবিত যেখানে ব্যবহারকারীরা কিছু সময়ের জন্য বর্ধিত সিগন্যাল প্রসেসিংয়ে সাবস্ক্রাইব করে। নতুন ভলিউম রেঞ্জের কনফিগারেশনগুলি সাবস্ক্রিপশনের সময়কালের জন্য বৈধ।

ডিজাইন

গতিশীল ভলিউম কনফিগারেশন তিনটি পর্যায়ে অর্জন করা হয়:

  • আবিষ্কার। বিক্রেতা অডিওকন্ট্রোল এইচএল বাস্তবায়ন বিক্রেতার মালিকানাধীন একটি কাস্টম আইপিসি প্রক্রিয়াটির মাধ্যমে নতুন ভলিউম রেঞ্জ আপডেটগুলি আবিষ্কার করে।

    একবার আবিষ্কার হয়ে গেলে, AudioControl::IModuleChangeCallback মাধ্যমে একটি কলব্যাক তৈরি করা হয়।

  • আপডেট. গাড়ি অডিও স্ট্যাক নতুন ভলিউম রেঞ্জ সহ ভলিউম গ্রুপের রাজ্যগুলিকে আপডেট করে।

    একই ভলিউম স্তর পোস্ট ভলিউম রেঞ্জ আপডেট বজায় রাখার চেষ্টা করা হয়। তবে, যদি সূচকটি সীমা ছাড়িয়ে যায় তবে বর্তমান ভলিউম সূচকটি একটি নিরাপদ মানতে সেট করা আছে। উদাহরণস্বরূপ, কলব্যাকের সময় বিক্রেতার দ্বারা সরবরাহ করা ডিফল্ট স্তর।

  • কলব্যাক

    • পোস্ট ভলিউম গ্রুপ রেঞ্জ আপডেটগুলি, গাড়ি অডিও স্ট্যাক CarVolumeGroupEventCallback মাধ্যমে নিবন্ধিত অ্যাপ্লিকেশনগুলিতে একটি কলব্যাক ট্রিগার করে।

    • CarVolumeGroupEvent আপডেটেড CarVolumeGroupInfo , ইভেন্ট-টাইপ (কী পরিবর্তিত হয়েছে) এবং অতিরিক্ত-ইনফো (কেন এটি পরিবর্তিত হয়েছে) বহন করে।

ইমেজ

চিত্র 2। গতিশীল ভলিউম কনফিগারেশন।

হাল এপিআই

অডিওকন্ট্রোল @ 3.0 এইডএল

অডিওওকন্ট্রোল এইডল এইচএল এর সংস্করণ 3.0 নিম্নলিখিত এপিআইগুলির সাথে পরিচয় করিয়ে দেয়:

API
Iaudiocontrol#SetModulechangecallback অডিওকন্ট্রোল এইচএল এর সাথে ইমোডুলেচেনজেকালব্যাকের একটি উদাহরণ সেট করে।
Iaudiocontrol#ক্লিয়ারমোডুলেচেনজেকালব্যাক অডিওকন্ট্রোল হালের সাথে আগে সেট করা ইমোডুলেচেনজেকালব্যাকের উদাহরণটি সাফ করে।
আইমোডুলেচেনক্যালব্যাক#ওনোডিওপোর্টসচ্যাঞ্জড অডিওপোর্টগুলিতে পরিবর্তনগুলি অবহিত করতে কলব্যাক

সিকোয়েন্স

গতিশীল ভলিউম কনফিগারেশনের সিকোয়েন্স ডায়াগ্রামটি নীচে প্রদর্শিত হবে।

ইমেজ

চিত্র 3। গতিশীল ভলিউম কনফিগারেশনের জন্য সিকোয়েন্স ডায়াগ্রাম।

মূল দিক

এই বৈশিষ্ট্যটি অনুকূল করতে, নিম্নলিখিতগুলি বিবেচনা করুন।

  • কলব্যাকের অংশ হিসাবে সরবরাহিত অডিওপোর্টগুলি অবশ্যই স্বয়ংচালিত বাসের সংজ্ঞাটির সাথে মেলে:

    • ডিভাইস পোর্ট। IN_DEVICE , OUT_DEVICE
    • সংযোগ। BUS
    • ঠিকানা। অডিও হাল সংজ্ঞাতে সংজ্ঞায়িত
    • লাভ মোড। JOINT
  • বিক্রেতাদের অবশ্যই অডিও এইচএল নীতিমালায় ভলিউম রেঞ্জের সংজ্ঞাগুলির একটি সুপারসেট সংজ্ঞায়িত করতে হবে এবং গাড়ির বৈকল্পিকগুলির জন্য এটি কাস্টমাইজ করতে কলব্যাকটি ব্যবহার করতে হবে। আরও তথ্যের জন্য IModuleChangeCallbac এইডএল সংজ্ঞা দেখুন।

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