एक साथ कई स्क्रीन कैप्चर करना

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

ऑडियो फ़्रेमवर्क, उस नीति को लागू करता है जिसके तहत, कुछ खास अधिकारों वाले पहले से लोड किए गए ऐप्लिकेशन, सामान्य ऐप्लिकेशन के साथ-साथ ऑडियो कैप्चर कर सकते हैं.

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

ऑडियो HAL और ऑडियो सबसिस्टम के लिए, ज़रूरी है कि वे एक साथ कई इनपुट स्ट्रीम को सपोर्ट करें. भले ही, कुछ मामलों में सिर्फ़ एक स्ट्रीम, चालू क्लाइंट को बिना आवाज़ वाला ऑडियो दे रही हो.

सीडीडी की ज़रूरी शर्तें

एक साथ ऑडियो कैप्चर करने की सुविधा के लिए ज़रूरी शर्तें जानने के लिए, सीडीडी देखें.

ऑडियो HAL से कैप्चर करने की स्थितियां

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

इनके बीच एक साथ ऑडियो कैप्चर किया जा सकता है:

  • ऐप्लिकेशन प्रोसेसर (एपी) से कई इनपुट स्ट्रीम
  • इनपुट स्ट्रीम और वॉइस कॉल
  • इनपुट स्ट्रीम और ऑडियो डीएसपी, जो कम पावर वाले हॉटवर्ड की पहचान करने की सुविधा लागू करता है

एपी इनपुट स्ट्रीम की एक साथ गतिविधि

ऑडियो फ़्रेमवर्क, audio_policy_configuration.xml ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करके यह तय करता है कि एक साथ कितनी इनपुट स्ट्रीम खोली और चालू की जा सकती हैं.

ऑडियो HAL को कम से कम, हर इनपुट प्रोफ़ाइल (mixPort की भूमिका sink) का एक इंस्टेंस सपोर्ट करना होगा. यह इंस्टेंस, खुली और चालू कॉन्फ़िगरेशन फ़ाइल में शामिल होना चाहिए.

डिवाइस चुनना

जब एक ही HAL इनपुट स्ट्रीम से कई चालू क्लाइंट जुड़े होते हैं, तो फ़्रेमवर्क, इस्तेमाल के मामले की प्राथमिकता के आधार पर इस इनपुट स्ट्रीम के लिए सही डिवाइस चुनता है.

जब कई इनपुट स्ट्रीम चालू होती हैं, तो हर स्ट्रीम के लिए अलग-अलग डिवाइस चुने जा सकते हैं.

अगर टेक्नोलॉजी काम करती है, तो हमारा सुझाव है कि ऑडियो HAL और सबसिस्टम, अलग-अलग स्ट्रीम को अलग-अलग डिवाइसों से कैप्चर करने की अनुमति दें. जैसे, ब्लूटूथ हेडसेट और बिल्ट-इन माइक.

अगर कोई समस्या होती है (उदाहरण के लिए, दो डिवाइस एक ही डिजिटल ऑडियो इंटरफ़ेस या बैक एंड शेयर करते हैं), तो ऑडियो HAL को यह तय करना होगा कि डिवाइस के चुनाव को कौनसी स्ट्रीम कंट्रोल करती है.

इस मामले में:

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

अगर ऑडियो HAL, चालू इस्तेमाल के मामलों के बीच प्राथमिकता का क्रम तय करता है, तो frameworks/av/services/audiopolicy/common/include/policy.h में मौजूद source_priority() में दिए गए क्रम का पालन करें

प्री-प्रोसेसिंग चुनना

ऑडियो फ़्रेमवर्क, addEffect() या removeEffect() HAL के तरीकों का इस्तेमाल करके, इनपुट स्ट्रीम पर प्री-प्रोसेसिंग का अनुरोध कर सकता है.

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

जब एक साथ कई कैप्चर स्ट्रीम चालू होती हैं, तो अलग-अलग स्ट्रीम पर अलग-अलग प्री-प्रोसेसिंग के अनुरोध किए जा सकते हैं.

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

अगर किसी ऑडियो सबसिस्टम पर तकनीकी वजहों से ऐसा नहीं किया जा सकता, तो ऑडियो HAL को प्राथमिकता के उन नियमों को लागू करना चाहिए जो डिवाइस चुननेके बारे में बताए गए हैं.

एपी से वॉइस कॉल और कैप्चर एक साथ करना

वॉइस कॉल के दौरान, एपी से ऑडियो कैप्चर किया जा सकता है. Android 10 में यह स्थिति नई नहीं है और यह एक साथ ऑडियो कैप्चर करने की सुविधा से सीधे तौर पर जुड़ी नहीं है. हालांकि, इस स्थिति के लिए दिशा-निर्देशों के बारे में बताना ज़रूरी है.

कॉल के दौरान, एपी से दो अलग-अलग तरह के ऑडियो कैप्चर करने की ज़रूरत होती है.

कॉल के आरएक्स और टीएक्स पाथ कैप्चर करना

कॉल के आरएक्स और टीएक्स पाथ कैप्चर करने की सुविधा, AudioSource.VOICE_UPLINK या AudioSource.VOICE_DOWNLINK ऑडियो सोर्स और/या AudioDevice.IN_TELEPHONY_RX डिवाइस के इस्तेमाल से ट्रिगर होती है.

ऑडियो HAL को, इनपुट प्रोफ़ाइल (mixPort की भूमिका sink) पर, AudioDevice.IN_TELEPHONY_RX डिवाइस से उपलब्ध रूट दिखाना चाहिए.

जब कोई कॉल कनेक्ट होता है (ऑडियो मोड AudioMode.IN_CALL होता है), तो AudioDevice.IN_TELEPHONY_RX डिवाइस से कम से कम एक चालू कैप्चर स्ट्रीम होनी चाहिए.

कॉल के दौरान, इनपुट डिवाइसों से कैप्चर करना

जब कोई कॉल चालू होता है (ऑडियो मोड AudioMode.IN_CALL होता है), तो एपी से इनपुट स्ट्रीम को खोला और चालू किया जा सकता है. इसके बारे में, एपी इनपुट स्ट्रीम की एक साथ गतिविधि सेक्शन में बताया गया है.

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

डीएसपी और एपी से एक साथ कैप्चर करना

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

इसे, साउंड ट्रिगर HAL की ओर से रिपोर्ट किए गए, एक साथ कैप्चर करने के फ़्लैग से दिखाया जाना चाहिए. यह फ़्लैग, लागू करने के ब्यौरे में शामिल होता है: ISoundTriggerHw.Properties.concurrentCapture = true.

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

इस इनपुट प्रोफ़ाइल से कैप्चर करने की सुविधा, तब भी उपलब्ध होनी चाहिए, जब अन्य इनपुट प्रोफ़ाइल चालू हों.

Assistant को लागू करने के तरीके पर असर

डेटा के इस्तेमाल और उपयोगकर्ता को सूचना देने से जुड़ी ज़रूरी शर्तें

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

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

Android 10 के लिए, फ़ंक्शन में किए गए सुधार

Assistant का एक-दूसरे को ब्लॉक न करना

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

माइक्रोफ़ोन को चालू रखने वाले ऐप्लिकेशन

जब Shazam या Waze जैसे ऐप्लिकेशन, माइक्रोफ़ोन को चालू रखते हैं, तब भी डिफ़ॉल्ट Assistant, हॉटवर्ड को सुन सकती है.

Android 10 में, डिफ़ॉल्ट Assistant के अलावा अन्य Assistant ऐप्लिकेशन के व्यवहार में कोई बदलाव नहीं हुआ है.

ऑडियो HAL को लागू करने का उदाहरण

इस दस्तावेज़ में दिए गए दिशा-निर्देशों के मुताबिक, ऑडियो HAL को लागू करने का उदाहरण, AOSP में देखा जा सकता है.