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

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

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

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

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

भवन निर्माण

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

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

spatial-audio

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

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

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

spatial-sys-arch

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

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

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

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

हेड ट्रैकिंग यूटिलिटी लाइब्रेरी का इस्तेमाल करके, गड़बड़ी को ठीक करने, स्थिरता का पता लगाने, और फ़्रेम रेट को सीमित करने जैसी सुविधाओं को लागू किया जा सकता है.

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

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

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

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

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

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

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

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

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

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

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

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

  • ऑडियो एचएएल और ऑडियो डीएसपी, स्पेशल ऑडियो के लिए खास आउटपुट पाथ के साथ काम करते हों.
  • हेड ट्रैकिंग के साथ स्पेशल ऑडियो का इस्तेमाल करने के लिए, हेडफ़ोन में पहले से मौजूद हेड ट्रैकर सेंसर होने चाहिए.
  • इसे लागू करने के लिए, ब्लूटूथ हेडसेट से फ़ोन पर एचआईडी प्रोटोकॉल के ज़रिए, सिर की गति को ट्रैक करने के लिए सुझाए गए स्टैंडर्ड का पालन करना ज़रूरी है.
  • स्पेशल ऑडियो की सुविधा के लिए, Audio 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 ऑडियो का इस्तेमाल करें.
  • बेहतर यूज़र एक्सपीरियंस के लिए, सेंसर से गतिविधि का पता चलने से लेकर हेडफ़ोन पर ऑडियो मिलने तक का राउंड-ट्रिप लेटेंसी 150 मिलीसेकंड से कम होना चाहिए.
  • एडवांस्ड ऑडियो डिस्ट्रिब्यूशन प्रोफ़ाइल (A2DP) के साथ ब्लूटूथ (BT) क्लासिक के लिए:
    • कम लेटेंसी वाले कोडेक का इस्तेमाल करें, जैसे कि Opus.
    • Audio HAL में, इंतज़ार के समय को कंट्रोल करने वाले फ़ंक्शन लागू करें. इससे हेड ट्रैकिंग बंद होने पर, बिजली और परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जा सकता है. साथ ही, सही स्थिति न होने पर हेड ट्रैकिंग की सुविधा बंद की जा सकती है.

पुष्टि करें

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

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