গাড়ির অডিও কনফিগারেশন

Android 10-এ car_audio_configuration.xml car_volumes_groups.xml এবং IAudioControl.getBusForContext প্রতিস্থাপিত হয়েছে। অডিও নীতি ফাইলগুলি, সাধারণত বিক্রেতা পার্টিশনে থাকে, বোর্ডের অডিও হার্ডওয়্যার কনফিগারেশনের প্রতিনিধিত্ব করে। car_audio_configuration.xml এ উল্লেখ করা সমস্ত ডিভাইস অবশ্যই audio_policy_configuration.xml এ সংজ্ঞায়িত করতে হবে।

নীচের চিত্র 1 গাড়ির অডিও পরিষেবা আর্কিটেকচারের একটি উচ্চ-স্তরের ওভারভিউ চিত্রিত করে যেখানে গাড়ি অডিও পরিষেবাটি ডিভাইসের জন্য অডিও সেট আপ করতে গাড়ি অডিও কনফিগারেশন ফাইলটি পড়ে।

গাড়ির অডিও আর্কিটেকচার ওভারভিউ

চিত্র 1. গাড়ির অডিও আর্কিটেকচার ওভারভিউ।

গাড়ির অডিও কনফিগারেশন ফাইলটিকে vendor\etc\ অথবা system\etc\ এ রাখুন, যেখানে vendor\etc\ গাড়ির অডিও পরিষেবার দ্বারা ফাইলের জন্য প্রথম স্থানে অনুসন্ধান করা হয়েছে। গাড়ির অডিও পরিষেবাগুলি অডিও কনফিগারেশন নির্ধারণ করতে car_audio_configuration.xml পড়ে।

গাড়ির অডিও জোন:

  • প্রতিটি অডিও জোনে একটি অনন্য অডিও জোন আইডি থাকে।
  • প্রতিটি অডিও জোন একটি দখলকারী অঞ্চলে ম্যাপ করা যেতে পারে।
  • প্রতিটি জোনের অডিও ক্রিয়া একে অপরের থেকে স্বাধীন:

    • অডিও ফোকাস
    • অডিও রাউটিং
    • অডিও হাঁস
  • গাড়ির ভলিউম গ্রুপ:

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

    • অডিও ডিভাইস ম্যাপিং অডিও প্রসঙ্গ. একটি আউটপুট ডিভাইসে অডিও ব্যবহার ম্যাপ করে এমন একটি অডিও মিশ্রণ তৈরি করতে এটি ব্যবহার করুন।

    • সমস্ত অডিও প্রসঙ্গ একটি জোনের মধ্যে উপস্থাপন করা উচিত। এটি সমস্ত অডিও বৈশিষ্ট্য ব্যবহারের জন্য অডিও রাউটিং সঠিকভাবে সেট আপ করার অনুমতি দেয়।

অডিও প্রসঙ্গ

AAOS অডিওর কনফিগারেশন সহজ করার জন্য, অনুরূপ ব্যবহারগুলিকে CarAudioContexts এ গোষ্ঠীভুক্ত করা হয়েছে। রাউটিং, ভলিউম গ্রুপ, অডিও ফোকাস, এবং ডাকিং ম্যানেজমেন্ট সংজ্ঞায়িত করতে এই অডিও প্রসঙ্গগুলি CarAudioService জুড়ে ব্যবহৃত হয়। AAOS-এ স্ট্যাটিক অডিও প্রসঙ্গগুলি নীচে তালিকাভুক্ত করা হয়েছে।

এই টেবিলটি অডিও প্রসঙ্গ এবং ব্যবহারের মধ্যে ম্যাপিং বর্ণনা করে। হাইলাইট করা সারি একটি নতুন সিস্টেম ব্যবহারের জন্য প্রদান করা হয়.

CarAudio Context সংযুক্ত বৈশিষ্ট্য ব্যবহার
সঙ্গীত UNKNOWN
GAME
MEDIA
নেভিগেশন ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
কল করুন NOTIFICATION_RINGTONE
কল করুন VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
অ্যালার্ম ALARM
বিজ্ঞপ্তি NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
জরুরী EMERGENCY
নিরাপত্তা SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ঘোষণা ANNOUNCEMENT

AAOS রাউটিং সক্ষম করুন

AAOS-ভিত্তিক রাউটিং ব্যবহার করতে, আপনাকে অবশ্যই audioUseDynamicRouting ফ্ল্যাগ true সেট করতে হবে:

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

যখন false , রাউটিং এবং CarAudioService এর অনেক অংশ অক্ষম করা হয় এবং AAOS AudioService ডিফল্ট আচরণে ফিরে আসে।

প্রাথমিক অঞ্চল

ডিফল্টরূপে, সমস্ত অডিও প্রাথমিক জোনে রাউট করা হয়। শুধুমাত্র একটি প্রাথমিক অঞ্চল বিদ্যমান, যা isPrimary="true" বৈশিষ্ট্য দ্বারা কনফিগারেশনে নির্দেশিত হয়। প্রাথমিক জোনটি স্বয়ংক্রিয়ভাবে Audiomanager.PRIMARY_AUDIO_ZONE বরাদ্দ করা হয়েছে৷PRIMARY_AUDIO_ZONE৷

নমুনা কনফিগারেশন (সংস্করণ 2)

উদাহরণস্বরূপ, একটি গাড়ির দুটি জোন থাকতে পারে, একটি প্রাথমিক জোন এবং একটি পিছনের আসনের বিনোদন ব্যবস্থা। এই পরিস্থিতিতে, আপনি একটি সম্ভাব্য car_audio_configuration.xml সংস্করণ 2 নিম্নরূপ ডিজাইন করতে পারেন:

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true">
           <volumeGroups>
               <group>
                   <device address="bus0_media_out">
                       <context context="music"/>
                       <context context="announcement"/>
                   </device>
                   <device address="bus3_call_ring_out">
                       <context context="call_ring"/>
                   </device>
                   <device address="bus6_notification_out">
                       <context context="notification"/>
                   </device>
               </group>
               <group>
                   <device address="bus1_navigation_out">
                       <context context="navigation"/>
                   </device>
                   <device address="bus2_voice_command_out">
                       <context context="voice_command"/>
                   </device>
               </group>
               <group>
                   <device address="bus4_call_out">
                       <context context="call"/>
                   </device>
               </group>
               <group>
                   <device address="bus5_alarm_out">
                       <context context="alarm"/>
                   </device>
               </group>
               <group>
                   <device address="bus7_system_sound_out">
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                   </device>
               </group>
           </volumeGroups>
       </zone>
        <zone name="rear seat zone" audioZoneId="1">
           <volumeGroups>
               <group>
                   <device address="bus100_rear_seat">
                       <context context="music"/>
                       <context context="navigation"/>
                       <context context="voice_command"/>
                       <context context="call_ring"/>
                       <context context="call"/>
                       <context context="alarm"/>
                       <context context="notification"/>
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                       <context context="announcement"/>
                   </device>
               </group>
           </volumeGroups>
    </zones>
</audioZoneConfiguration>

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

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

জিনিসগুলি সহজ রাখতে, সেকেন্ডারি জোন উদাহরণে সমস্ত অডিও প্রসঙ্গ একটি একক ডিভাইস এবং একটি ভলিউম গ্রুপে রাউট করা হয়।

অকুপ্যান্ট জোন অডিও কনফিগারেশন

Android 11-এ, car_audio_configuration.xml দুটি নতুন ক্ষেত্র, audioZoneId এবং occupantZoneId চালু করেছে। আপনি অডিও জোন ব্যবস্থাপনা নিয়ন্ত্রণ করতে audioZoneId ব্যবহার করতে পারেন। আপনি ব্যবহারকারী আইডির উপর ভিত্তি করে রাউটিং কনফিগার করতে occupantZoneId ব্যবহার করতে পারেন।

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

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true" occupantZoneId="0">
         ...
       </zone>
       <zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
         ...
       </zone>
    </zones>
</audioZoneConfiguration>

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

  • প্রাথমিক অঞ্চলের audioZoneId সর্বদা PRIMARY_AUDIO_ZONE আইডি হয়৷ যদি isPrimary="true" সংজ্ঞায়িত করা হয়, তাহলে audioZoneId প্রয়োজন নেই।

  • audioZoneId এবং occupantZoneId নম্বরগুলি পুনরাবৃত্তি করা যাবে না৷

  • audioZoneId এবং occupantZoneId শুধুমাত্র এক থেকে এক ম্যাপিং থাকতে পারে।

অ্যান্ড্রয়েড 14 গাড়ির অডিও কনফিগারেশন

অ্যান্ড্রয়েড 14-এ, AAOS OEM প্লাগইন পরিষেবা চালু করেছে, যা আপনাকে গাড়ির অডিও পরিষেবা দ্বারা তত্ত্বাবধানে অডিও আচরণকে আরও সক্রিয়ভাবে পরিচালনা করতে দেয়। নতুন প্লাগইন পরিষেবাগুলির সাথে, গাড়ির অডিও কনফিগারেশন ফাইলে নিম্নলিখিত পরিবর্তনগুলি যোগ করা হয়েছে:

  • OEM সংজ্ঞায়িত গাড়ী অডিও প্রসঙ্গ
  • নন-প্রাথমিক জোন ডাইনামিক কনফিগারেশন

OEM-সংজ্ঞায়িত গাড়ী অডিও প্রসঙ্গ

একটি নমনীয় অডিও কনফিগারেশন সক্ষম করতে, Android 14-এ, গাড়ির অডিও পরিষেবা অডিও ব্যবহারগুলিকে উপরে সংজ্ঞায়িত স্ট্যাটিক অডিও প্রসঙ্গের থেকে আলাদাভাবে গোষ্ঠীভুক্ত করার অনুমতি দেয়। এই OEM-সংজ্ঞায়িত প্রসঙ্গ car_audio_configuration.xml সংস্করণ 3 ফাইলে সংজ্ঞায়িত করা যেতে পারে।

পরিবর্তে বর্তমানে সংজ্ঞায়িত স্ট্যাটিক অডিও প্রসঙ্গ ব্যবহার করা হয়। OEM-সংজ্ঞায়িত গাড়ির অডিও প্রসঙ্গের সাধারণ বিন্যাস নীচে দেখানো হয়েছে।

OEM প্রসঙ্গগুলির প্রতিটির জন্য একটি name সাথে অডিও অ্যাট্রিবিউট ব্যবহারের একটি তালিকা প্রয়োজন যা প্রসঙ্গে বরাদ্দ করা হয়েছে৷ উপরের উদাহরণে, দুটি প্রসঙ্গ সংজ্ঞায়িত করা হয়েছে:

<carAudioConfiguration version="3">
    <oemContexts>
        <oemContext name="media">
            <audioAttributes>
                <usage value="AUDIO_USAGE_MEDIA" />
    <usage value="AUDIO_USAGE_UNKNOWN"/>
            </audioAttributes>
        </oemContext>
        <oemContext name="game">
            <audioAttributes>
                <usage value="AUDIO_USAGE_GAME" />
            </audioAttributes>
        </oemContext>
...
  • media প্রসঙ্গে AUDIO_USAGE_MEDIA এবং AUDIO_USAGE_UNKNOWN রয়েছে
  • game প্রসঙ্গে শুধুমাত্র AUDIO_USAGE_GAME রয়েছে

প্রসঙ্গটি car_audio_configuration.xml ফাইলের শীর্ষে সংজ্ঞায়িত করা আবশ্যক। যখন OEM প্রসঙ্গগুলি সংজ্ঞায়িত করা হয়, তখন গাড়ির বাকি অডিও কনফিগারেশন আগের মতোই চলতে পারে। গাড়ির অডিও প্রসঙ্গে নিম্নলিখিত নিয়মগুলি প্রযোজ্য:

  • OEM প্রসঙ্গ সংজ্ঞা ঐচ্ছিক. এর পরিবর্তে স্ট্যাটিক অডিও প্রসঙ্গ ব্যবহার করা হয়।

  • প্রসঙ্গ নাম পুনরাবৃত্তি করবেন না.

  • একাধিক প্রসঙ্গে অডিও অ্যাট্রিবিউট ব্যবহার বরাদ্দ করবেন না।

  • AudioAttributes এ সংজ্ঞায়িত সমস্ত অডিও ব্যবহার প্রসঙ্গ তৈরি করতে ব্যবহার করা উচিত।

কঠোরভাবে বলতে গেলে, অডিও ব্যবহারের android.audio.policy.configuration.V7_0.AudioUsage স্ট্রিং উপস্থাপনা অবশ্যই OEM অডিও প্রসঙ্গ সংজ্ঞার জন্য ব্যবহার করা উচিত। ভবিষ্যতে, একটি অ্যান্ড্রয়েড সংস্করণ থেকে অন্য সংস্করণে স্থানান্তরিত করার সময় ত্রুটি কমাতে সবচেয়ে উপযুক্ত প্রেক্ষাপটে নতুন অডিও অ্যাট্রিবিউটের ব্যবহার বরাদ্দ করা হবে।

যদিও OEM-সংজ্ঞায়িত প্রসঙ্গটি OEM প্লাগইন অডিও পরিষেবাকে আরও প্রসারিত করার জন্য চালু করা হয়েছিল, এটি এখনও OEM প্লাগইন পরিষেবা ছাড়াই ব্যবহার করা যেতে পারে। অডিও আচরণ স্ট্যাটিক অডিও পরিষেবার অনুরূপ:

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

  • অডিও ভলিউম কন্ট্রোল অডিও অ্যাট্রিবিউট সেরা মিল নির্ধারণ করতে ব্যবহৃত হয়:

    • OEM-সংজ্ঞায়িত প্রসঙ্গের উপর ভিত্তি করে ভলিউম গ্রুপ।
    • কনফিগার করা স্ট্যাটিক ভলিউম তালিকা থেকে অগ্রাধিকার।
  • অডিও হাঁস আচরণ:

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

    • অডিও অ্যাট্রিবিউট স্ট্যাটিক অডিও ডাকিং ম্যাট্রিক্সের উপর ভিত্তি করে হাঁসের সাথে সম্পর্কিত স্ট্যাটিক প্রসঙ্গ ম্যাপ করতে ব্যবহৃত হয়।

ডায়নামিক অডিও জোন কনফিগারেশন

অ্যান্ড্রয়েড 14-এ, একটি ডায়নামিক অডিও জোন কনফিগারেশন মিটমাট করার জন্য, অডিও জোন নির্ধারণের জন্য গাড়ির অডিও কনফিগারেশন স্কিমাটিও সংস্করণ 3-তে আপডেট করা হয়েছে। নতুন স্কিমার জন্য প্রতিটি জোনের জন্য একটি কনফিগারেশন সেট আপ করা প্রয়োজন।

<carAudioConfiguration version="3">
    <!-- optional OEM context -->
    <oemContexts>
      <oemContext name="media">
        <audioAttributes>
          <usage value="AUDIO_USAGE_MEDIA" />
          <usage value="AUDIO_USAGE_UNKNOWN"/>
        </audioAttributes>
      </oemContext>
      <oemContext name="game">
        <audioAttributes>
          <usage value="AUDIO_USAGE_GAME" />
        </audioAttributes>
      </oemContext>
...
    </oemContexts>
  <zones>
    <zone name="primary zone" isPrimary="true" occupantZoneId="0">
      <zoneConfigs>
        <zoneConfig name="primary zone config 0" isDefault="true">
          <volumeGroups>
            <group>
              <device address="bus0_media_out">
                <context context="media"/>
            <context context="game"/>
                <context context="announcement"/>
              </device>
              <device address="bus6_notification_out">
                <context context="notification"/>
              </device>
            </group>
  ...
      </zoneConfigs>
    </zone
  </zones>

আরও জানতে, device/generic/car/emulator/audio/car_audio_configuration.xml এ সংজ্ঞায়িত সংস্করণ 3 ফাইলটি দেখুন। Android 14 থেকে শুরু করে, প্রাথমিক জোনে শুধুমাত্র একটি (1) কনফিগারেশন থাকতে পারে। অ-প্রাথমিক অঞ্চলে একাধিক কনফিগারেশন থাকতে পারে। গাড়ির অডিও কনফিগারেশনে নিম্নলিখিত নিয়মগুলি প্রযোজ্য:

  • প্রাথমিক অডিও জোনে শুধুমাত্র একটি কনফিগারেশন থাকতে পারে।

  • অ-প্রাথমিক অডিও জোনে একাধিক কনফিগারেশন থাকতে পারে।

  • প্রতিটি অডিও জোন এবং অডিও জোন কনফিগারেশনের জন্য নাম অবশ্যই অনন্য হতে হবে।

  • একটি অডিও জোনের মধ্যে, অডিও কনফিগারেশন ভিন্ন হতে পারে:

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

  • একই ভলিউম গ্রুপের অডিও ডিভাইসে একই অডিও গেইন কনফিগারেশন থাকা উচিত।

  • প্রতিটি অডিও কনফিগারেশনের জন্য সমস্ত অডিও প্রসঙ্গ (OEM বা স্ট্যাটিক) বরাদ্দ করা আবশ্যক।

ফরোয়ার্ড সামঞ্জস্য

যদিও car_audio_configuration.xml এর নতুন সংস্করণগুলি প্রতিটি আপডেটে নতুন বৈশিষ্ট্যগুলি প্রবর্তন করে, আপনি এখনও AAOS-এর নতুন সংস্করণগুলিতে পুরানো ফাইলগুলি ব্যবহার করতে পারেন৷ Android এর নতুন সংস্করণে আপডেট করা OEMগুলি car_audio_configuration.xml ফাইলটি পুনরায় ব্যবহার করতে পারে৷

car_audio_configuration.xml এ থাকা নতুন তথ্যের প্রয়োজন এমন একটি নতুন বৈশিষ্ট্য ব্যবহার করতে, সংস্করণটি আপডেট করতে হবে। সেই ফাইল সংস্করণে সমর্থিত নয় এমন তথ্য সহ একটি পুরানো সংস্করণ ব্যবহার করার চেষ্টা করা গাড়ি পরিষেবা শুরু করার সময় একটি IllegalStateException ফেলে দেয়৷ ব্যতিক্রম বার্তাটিতে কোন তথ্য ব্যবহার করা হয়েছে এবং কোন ন্যূনতম সংস্করণ প্রয়োজন সে সম্পর্কে প্রাসঙ্গিক তথ্য রয়েছে।