स्पेशल ऑडियो और हेड ट्रैकिंग

Android 13 में, ओईएम को वेंडर के हिसाब से पसंद के मुताबिक बनाने या SDK टूल की ज़रूरत के बिना, स्पेशल ऑडियो और हेड ट्रैकिंग की सुविधा देने का स्टैंडर्ड तरीका मिलता है.

स्पेशल ऑडियो एक ऐसी टेक्नोलॉजी है जिसका इस्तेमाल, सुनने वाले व्यक्ति के आस-पास साउंड फ़ील्ड बनाने के लिए किया जाता है. स्पेशल ऑडियो की मदद से, लोग चैनलों और अलग-अलग आवाज़ों को उन पोज़िशन में सुन पाते हैं जो प्लेबैक के लिए इस्तेमाल किए गए ऑडियो डिवाइस के ट्रांसड्यूसर की फ़िज़िकल पोज़िशन से अलग होती हैं. उदाहरण के लिए, स्पेशल ऑडियो की मदद से, लोग हेडफ़ोन पर मल्टीचैनल साउंडट्रैक सुन पाते हैं. स्पेशल ऑडियो का इस्तेमाल करके, हेडफ़ोन इस्तेमाल करने वाले लोग अपने सामने बातचीत सुन सकते हैं. साथ ही, अपने पीछे सराउंड इफ़ेक्ट सुन सकते हैं. भले ही, प्लेबैक के लिए सिर्फ़ दो ट्रांसड्यूसर मौजूद हों.

हेड ट्रैकिंग की मदद से, लोग अपने सिर के आस-पास सिम्युलेट किए जा रहे, स्पेशल ऑडियो वाले साउंड स्टेज की जानकारी पा सकते हैं. यह अनुभव सिर्फ़ तब काम करता है, जब लेटेंसी कम हो. लेटेंसी को इस तरह मापा जाता है: जब कोई व्यक्ति अपना सिर घुमाता है और जब उसे वर्चुअल स्पीकर की पोज़िशन में बदलाव सुनाई देता है, तब इन दोनों के बीच का समय.

Android 13, स्पेशल ऑडियो और हेड ट्रैकिंग के लिए ऑप्टिमाइज़ किया गया है. इसके लिए, ऑडियो पाइपलाइन में सबसे कम लेवल पर स्पेशल ऑडियो प्रोसेसिंग की सुविधा दी जाती है, ताकि लेटेंसी को कम किया जा सके.

आर्किटेक्चर

Android 13 में, Android के ऑडियो फ़्रेमवर्क और एपीआई में किए गए बदलावों की मदद से, पूरे इकोसिस्टम में स्पेशल ऑडियो टेक्नोलॉजी को आसानी से अपनाया जा सकता है.

यहां दी गई इमेज में, Android 13 के साथ ऑडियो पाइपलाइन आर्किटेक्चर में, स्पेशल ऑडियो से जुड़े बदलाव दिखाए गए हैं:

spatial-audio

पहली इमेज. स्पेशलाइज़र के साथ ऑडियो पाइपलाइन आर्किटेक्चर

नए मॉडल में, स्पेशलाइज़र ऑडियो फ़्रेमवर्क का हिस्सा है और यह डिकोडर से अलग है. स्पेशलाइज़र, मिले-जुले ऑडियो कॉन्टेंट को लेता है और ऑडियो HAL को स्टीरियो स्ट्रीम रेंडर करता है. स्पेशलाइज़र को डिकोडर से अलग करने पर, ओईएम डिकोडर और स्पेशलाइज़र के लिए अलग-अलग वेंडर चुन सकते हैं. साथ ही, हेड ट्रैकिंग के लिए, राउंड-ट्रिप लेटेंसी को अपनी ज़रूरत के हिसाब से सेट कर सकते हैं. इस नए मॉडल में, हेड ट्रैकिंग के लिए सेंसर फ़्रेमवर्क के हुक भी शामिल हैं.

यहां दी गई इमेज में, स्पेशलाइज़र और हेड ट्रैकिंग इफ़ेक्ट के लिए, ऑडियो फ़्रेमवर्क का सिस्टम आर्किटेक्चर दिखाया गया है:

spatial-sys-arch

दूसरी इमेज. स्पेशलाइज़र और हेड ट्रैकिंग के साथ सिस्टम आर्किटेक्चर

ऐप्लिकेशन लेवल पर, सभी स्पेशल ऑडियो एपीआई को सार्वजनिक Spatializer क्लास में ग्रुप किया जाता है. ऑडियो सेवा में मौजूद SpatializerHelper क्लास, प्लैटफ़ॉर्म और कनेक्ट किए गए डिवाइस की क्षमताओं के आधार पर, स्पेशलाइज़र से जुड़ी सुविधाओं को मैनेज करने के लिए, सिस्टम यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट के साथ इंटरैक्ट करती है. ऑडियो पॉलिसी सेवा में मौजूद नई Spatializer क्लास, मल्टीचैनल मिक्सिंग और स्पेशलाइज़ेशन के लिए ज़रूरी स्पेशल ऑडियो ग्राफ़ बनाती है और उसे कंट्रोल करती है. यह ग्राफ़, ओईएम, कनेक्ट किए गए डिवाइसों, और चालू इस्तेमाल के उदाहरणों की क्षमताओं के आधार पर बनाया जाता है. मिक्सर की नई क्लास SpatializerThread, मल्टीचैनल ट्रैक को मिक्स करती है और नतीजे के तौर पर मिले मिक्स को पोस्ट-प्रोसेसिंग FX इंजन को भेजती है. यह इंजन, ऑडियो HAL को स्टीरियो आउटपुट रेंडर करता है. हेड ट्रैकिंग के लिए, SpatializerPoseController क्लास, हेड ट्रैकिंग से जुड़े फ़ंक्शन को ग्रुप करती है. यह क्लास, सेंसर स्टैक के साथ इंटरफ़ेस करती है. साथ ही, इफ़ेक्ट इंजन को भेजे गए सेंसर सिग्नल को मर्ज और फ़िल्टर करती है. हेड ट्रैकिंग सेंसर का डेटा, एचआईडी प्रोटोकॉल ब्लूटूथ ड्राइवर से भेजा जाता है.

Android 13 के ऑडियो पाइपलाइन आर्किटेक्चर में किए गए बदलावों से, इन चीज़ों में सुधार होता है:

  • स्पेशलाइज़र और हेडफ़ोन के बीच लेटेंसी कम करना.
  • ऐप्लिकेशन डेवलपर को यूनीफ़ाइड एपीआई देना.
  • सिस्टम एपीआई की मदद से, हेड ट्रैकिंग की स्थिति को कंट्रोल करना.
  • हेड ट्रैकिंग सेंसर ढूंढना और उन्हें चालू ऑडियो डिवाइसों से जोड़ना.
  • अलग-अलग सेंसर से सिग्नल मर्ज करना और हेड पोज़ की गणना करना. इसका इस्तेमाल, स्पेशलाइज़र इफ़ेक्ट इंजन कर सकता है.

हेड ट्रैकिंग यूटिलिटी लाइब्रेरी का इस्तेमाल करके, बायस कॉम्पन्सेशन, स्टिलनेस डिटेक्शन, और रेट लिमिटेशन जैसी सुविधाएं लागू की जा सकती हैं .

स्पेशल ऑडियो एपीआई

Android 13 में, स्पेशल ऑडियो सिस्टम और डेवलपर एपीआई उपलब्ध हैं.

ओईएम, सुविधा की उपलब्धता और चालू स्थिति के आधार पर, ऐप्लिकेशन के व्यवहार को अडजस्ट कर सकते हैं. यह स्थिति, सिस्टम एपीआई से सेट की जाती है. ऐप्लिकेशन, ऑडियो एट्रिब्यूट को कॉन्फ़िगर करके, स्पेशल ऑडियो को बंद भी कर सकते हैं . ऐसा, डिज़ाइन से जुड़ी वजहों से किया जा सकता है. इसके अलावा, यह भी बताया जा सकता है कि ऑडियो स्ट्रीम को पहले ही स्पेशल ऑडियो के लिए प्रोसेस किया जा चुका है.

डेवलपर के लिए उपलब्ध एपीआई देखने के लिए, Spatializer देखें.

ओईएम, सिस्टम एपीआई का इस्तेमाल करके, आवाज़ और ब्लूटूथ सेटिंग का यूज़र इंटरफ़ेस (यूआई) लागू कर सकते हैं. इससे, लोग अपने डिवाइस के लिए, स्पेशल ऑडियो और हेड ट्रैकिंग की सुविधा की स्थिति को कंट्रोल कर सकते हैं. लोग, आवाज़ की सेटिंग के यूज़र इंटरफ़ेस (यूआई) में जाकर, स्पीकर और तार वाले हेडफ़ोन के लिए, स्पेशल ऑडियो को चालू या बंद कर सकते हैं. स्पीकर के लिए, स्पेशल ऑडियो की सेटिंग सिर्फ़ तब उपलब्ध होती है, जब स्पेशलाइज़र इफ़ेक्ट का लागू होना, ट्रांसऑरल मोड के साथ काम करता हो.

लोग, हर डिवाइस के लिए, ब्लूटूथ डिवाइस की सेटिंग में जाकर, स्पेशल ऑडियो और हेड ट्रैकिंग को चालू या बंद भी कर सकते हैं. हेड ट्रैकिंग की सेटिंग सिर्फ़ तब उपलब्ध होती है, जब ब्लूटूथ हेडसेट, हेड ट्रैकिंग सेंसर दिखाता हो.

अगर स्पेशल ऑडियो की सुविधा उपलब्ध है, तो इसकी डिफ़ॉल्ट सेटिंग हमेशा 'चालू' होती है. सिस्टम एपीआई की पूरी सूची देखने के लिए, Spatializer.java देखें.

सेंसर फ़्रेमवर्क में, हेड ट्रैकिंग सेंसर का नया टाइप Sensor.TYPE_HEAD_TRACKER जोड़ा गया है. इसे सेंसर HAL, ब्लूटूथ या यूएसबी के ज़रिए डाइनैमिक सेंसर के तौर पर दिखाता है.

स्पेशल ऑडियो को इंटिग्रेट करना

स्पेशलाइज़र इफ़ेक्ट इंजन को लागू करने के साथ-साथ, ओईएम को अपने प्लैटफ़ॉर्म को स्पेशल ऑडियो की सुविधा के साथ काम करने के लिए कॉन्फ़िगर करना होगा.

ज़रूरी शर्तें

स्पेशल ऑडियो को इंटिग्रेट करने के लिए, इन ज़रूरी शर्तों को पूरा करना होगा:

स्पेशल ऑडियो को इंटिग्रेट करने के लिए, यह तरीका अपनाएं:

  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. स्पेशलाइज़र इफ़ेक्ट को लागू करने वाले वेंडर को इन शर्तों का पालन करना होगा:

    • बेसिक कॉन्फ़िगरेशन और कंट्रोल, Effect HAL में मौजूद अन्य इफ़ेक्ट की तरह ही होना चाहिए.
    • फ़्रेमवर्क को, काम करने वाली क्षमताओं और कॉन्फ़िगरेशन की जानकारी पाने के लिए, खास पैरामीटर की ज़रूरत होती है. जैसे:

      • 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 देखें.

सुझाव

हमारा सुझाव है कि ओईएम, लागू करने के दौरान इन दिशा-निर्देशों का पालन करें:

  • इंटरऑपरेबिलिटी को आसान बनाने और लेटेंसी के लक्ष्यों को हासिल करने के लिए, LE Audio का इस्तेमाल करें.
  • बेहतर यूएक्स के लिए, सेंसर के मूवमेंट का पता लगने से लेकर हेडफ़ोन तक ऑडियो पहुंचने के बीच की राउंड-ट्रिप लेटेंसी, 150 मिसेकंड से कम होनी चाहिए.
  • एडवांस्ड ऑडियो डिस्ट्रिब्यूशन प्रोफ़ाइल (A2DP) के साथ ब्लूटूथ (बीटी) क्लासिक के लिए:

सत्यापन

स्पेशल ऑडियो की सुविधा की परफ़ॉर्मेंस की पुष्टि करने के लिए, सीटीएस टेस्ट का इस्तेमाल करें जो SpatializerTest.java में उपलब्ध हैं.

स्पेशलाइज़ेशन या हेड ट्रैकिंग के एल्गोरिदम को सही तरीके से लागू न करने पर, राउंड-ट्रिप लेटेंसी के सुझाव को पूरा नहीं किया जा सकता. इस बारे में, सुझाव सेक्शन में बताया गया है. Recommendations.