স্থানিক অডিও এবং মাথা ট্র্যাকিং

অ্যান্ড্রয়েড 13 বিক্রেতা-নির্দিষ্ট কাস্টমাইজেশন বা SDK-এর প্রয়োজন ছাড়াই স্থানিক অডিও এবং হেড ট্র্যাকিং সমর্থন করার জন্য OEM-গুলির জন্য একটি আদর্শ উপায় প্রবর্তন করেছে।

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

হেড ট্র্যাকিং ব্যবহারকারীকে তাদের মাথার চারপাশে সিমুলেট করা স্থানিক শব্দ পর্যায়ের প্রকৃতি বুঝতে সাহায্য করে। এই অভিজ্ঞতাটি তখনই কার্যকর হয় যখন লেটেন্সি কম হয়, যেখানে ব্যবহারকারীর মাথা নড়াচড়া করার সময় এবং ভার্চুয়াল স্পিকারের অবস্থান সেই অনুযায়ী চলতে শোনার মধ্যে সময় হিসাবে লেটেন্সি পরিমাপ করা হয়।

Android 13 অডিও পাইপলাইনে সর্বনিম্ন সম্ভাব্য লেটেন্সি পেতে স্থানিক অডিও প্রক্রিয়াকরণ অফার করে স্থানিক অডিও এবং হেড ট্র্যাকিংয়ের জন্য অপ্টিমাইজ করে।

স্থাপত্য

Android 13-এ পরিবর্তিত Android অডিও ফ্রেমওয়ার্ক এবং API সমগ্র ইকোসিস্টেম জুড়ে স্থানিক অডিও প্রযুক্তি গ্রহণের সুবিধা দেয়।

নিম্নলিখিত চিত্রটি Android 13 এর সাথে অডিও পাইপলাইন আর্কিটেকচারে করা স্থানিক অডিও সম্পর্কিত পরিবর্তনগুলিকে চিত্রিত করে:

spatial-audio

চিত্র 1. স্থানিকের সাথে অডিও পাইপলাইন আর্কিটেকচার

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

নিম্নলিখিত চিত্রটি স্থানিক এবং হেড ট্র্যাকিং প্রভাবের জন্য অডিও ফ্রেমওয়ার্কের সিস্টেম আর্কিটেকচারকে চিত্রিত করে:

spatial-sys-arch

চিত্র 2. স্থানিক এবং হেড ট্র্যাকিং সহ সিস্টেম আর্কিটেকচার

সমস্ত স্থানিক অডিও API অ্যাপ স্তরে পাবলিক Spatializer ক্লাসে গোষ্ঠীভুক্ত করা হয়েছে। প্ল্যাটফর্ম এবং সংযুক্ত ডিভাইসের ক্ষমতার উপর ভিত্তি করে স্থানিক-সম্পর্কিত কার্যকারিতা পরিচালনা করতে সিস্টেম UI উপাদানগুলির সাথে অডিও পরিষেবা ইন্টারফেসে SpatializerHelper ক্লাস। অডিও নীতি পরিষেবার নতুন Spatializer শ্রেণীটি OEM, সংযুক্ত ডিভাইস এবং সক্রিয় ব্যবহারের ক্ষেত্রে প্রকাশ করা ক্ষমতাগুলির উপর ভিত্তি করে মাল্টিচ্যানেল মিশ্রণ এবং স্থানিককরণের জন্য প্রয়োজনীয় স্থানিক অডিও গ্রাফ তৈরি এবং নিয়ন্ত্রণ করে। একটি নতুন মিক্সার ক্লাস SpatializerThread মাল্টিচ্যানেল ট্র্যাকগুলিকে মিশ্রিত করে এবং ফলস্বরূপ মিশ্রণটিকে একটি পোস্ট-প্রসেসিং এফএক্স ইঞ্জিনে ফিড করে যা অডিও HAL-এ একটি স্টেরিও আউটপুট রেন্ডার করে। হেড ট্র্যাকিংয়ের জন্য, SpatializerPoseController ক্লাস হেড ট্র্যাকিং, সেন্সর স্ট্যাকের সাথে ইন্টারফেস এবং ইফেক্ট ইঞ্জিনে খাওয়ানো সেন্সর সংকেতগুলিকে একত্রিত ও ফিল্টার করার জন্য কাজ করে। হেড ট্র্যাকিং সেন্সর ডেটা ব্লুটুথ ড্রাইভার থেকে HID প্রোটোকলের মাধ্যমে বহন করা হয়।

অ্যান্ড্রয়েড 13 অডিও পাইপলাইন আর্কিটেকচারে পরিবর্তনগুলি নিম্নলিখিতগুলির উন্নতি করে:

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

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

স্থানিক অডিও API

Android 13 স্থানিক অডিও সিস্টেম এবং বিকাশকারী API অফার করে।

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

বিকাশকারী-মুখী APIগুলির জন্য, Spatializer দেখুন।

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

ব্যবহারকারী প্রতিটি ডিভাইসের জন্য ব্লুটুথ ডিভাইস সেটিংসে স্থানিক অডিও এবং হেড ট্র্যাকিং সক্ষম বা নিষ্ক্রিয় করতে পারে। ব্লুটুথ হেডসেট একটি হেড ট্র্যাকিং সেন্সর প্রকাশ করলেই হেড ট্র্যাকিং সেটিং পাওয়া যায়।

যদি বৈশিষ্ট্যটি সমর্থিত হয় তবে স্থানিক অডিওর জন্য ডিফল্ট সেটিংস সর্বদা চালু থাকে৷ সিস্টেম API-এর সম্পূর্ণ তালিকার জন্য Spatializer.java দেখুন।

নতুন হেড ট্র্যাকিং সেন্সর টাইপ Sensor.TYPE_HEAD_TRACKER সেন্সর ফ্রেমওয়ার্কে যোগ করা হয়েছে এবং সেন্সর HAL দ্বারা ব্লুটুথ বা USB-এর মাধ্যমে একটি গতিশীল সেন্সর হিসাবে উন্মুক্ত করা হয়েছে।

স্থানিক অডিও সংহত করুন

স্থানিক ইফেক্ট ইঞ্জিন বাস্তবায়নের সাথে সাথে, OEM গুলিকে স্থানিক অডিও সমর্থনের জন্য তাদের প্ল্যাটফর্ম কনফিগার করতে হবে।

প্রয়োজনীয়তা

স্থানিক অডিও সংহত করার জন্য নিম্নলিখিত প্রয়োজনীয়তাগুলি অবশ্যই পূরণ করতে হবে:

  • অডিও HAL এবং অডিও DSP অবশ্যই স্থানিক অডিওর জন্য একটি ডেডিকেটেড আউটপুট পাথ সমর্থন করবে।
  • হেড ট্র্যাকিং সহ স্থানিক অডিওর জন্য, হেডফোনগুলিতে অন্তর্নির্মিত হেড ট্র্যাকার সেন্সর থাকতে হবে।
  • ব্লুটুথ হেডসেট থেকে ফোনে HID প্রোটোকলের মাধ্যমে হেড ট্র্যাকিংয়ের জন্য প্রস্তাবিত মানকে বাস্তবায়ন করতে হবে।
  • স্থানিক অডিও সমর্থনের জন্য অডিও HAL v7.1 প্রয়োজন।

নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করে স্থানিক অডিও সংহত করুন:

  1. আপনার device.mk ফাইলে স্থানিক অডিও সমর্থন ঘোষণা করুন, নিম্নরূপ:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    এটি AudioService স্থানিক সমর্থন শুরু করতে দেয়।

  2. audio_policy_configuration.xml এ স্থানিক অডিও মিক্সের জন্য ডেডিকেটেড আউটপুট ঘোষণা করুন, নিম্নরূপ:

    <audioPolicyConfiguration>
      <modules>
       <module>
         <mixPorts>
         <mixPort name="spatializer" role="source"   flags="AUDIO_OUTPUT_FLAG_SPATIALIZER">
           <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT"
             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
    
  3. audio_effects.xml এ স্থানিক প্রভাব লাইব্রেরি ঘোষণা করুন, নিম্নরূপ:

    <audio_effects_conf>
          <libraries>
             <library name="spatializer_lib" path="libMySpatializer.so"/>
              …
             </libraries>
          <effects>
           <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
    
  4. স্থানিক প্রভাব প্রয়োগকারী বিক্রেতাদের অবশ্যই নিম্নলিখিতগুলি মেনে চলতে হবে:

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

      • SPATIALIZER_PARAM_SUPPORTED_LEVELS
      • SPATIALIZER_PARAM_LEVEL
      • SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
      • SPATIALIZER_PARAM_HEADTRACKING_MODE
      • SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
      • SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
      • SPATIALIZER_PARAM_HEAD_TO_STAGE

    আরও তথ্যের জন্য effect_spatializer.h দেখুন।

সুপারিশ

আমরা সুপারিশ করি যে OEMগুলি বাস্তবায়নের সময় নিম্নলিখিত নির্দেশিকাগুলি ব্যবহার করে:

  • ইন্টারঅপারেবিলিটি সহজ করতে এবং লেটেন্সি লক্ষ্য অর্জনের জন্য উপলব্ধ হলে LE অডিও ব্যবহার করুন।
  • রাউন্ড-ট্রিপ লেটেন্সি, সেন্সর মুভমেন্ট ডিটেকশন থেকে হেডফোন দ্বারা প্রাপ্ত অডিও, ভাল UX এর জন্য অবশ্যই 150 ms এর কম হতে হবে।
  • উন্নত অডিও ডিস্ট্রিবিউশন প্রোফাইল (A2DP) সহ ব্লুটুথ (বিটি) ক্লাসিকের জন্য:
    • কম লেটেন্সি কোডেক ব্যবহার করুন, যেমন Opus
    • অডিও HAL- এ লেটেন্সি কন্ট্রোল ফাংশন প্রয়োগ করুন। হেড ট্র্যাকিং বন্ধ থাকা অবস্থায় এটি পাওয়ার এবং পারফরম্যান্স অপ্টিমাইজেশান সক্ষম করে এবং অ-অনুকূল পরিস্থিতিতে হেড ট্র্যাকিং অক্ষম করে।

বৈধতা

স্থানিক অডিও বৈশিষ্ট্যের কার্যকারিতা যাচাই করতে, SpatializerTest.java এ উপলব্ধ CTS পরীক্ষাগুলি ব্যবহার করুন।

স্থানিককরণ বা হেড ট্র্যাকিং অ্যালগরিদমগুলির দুর্বল বাস্তবায়ন সুপারিশগুলিতে তালিকাভুক্ত রাউন্ড-ট্রিপ লেটেন্সি সুপারিশ পূরণ করতে ব্যর্থ হতে পারে৷