Android 10, उपयोगकर्ता अनुभव को बेहतर बनाता है. इसके लिए, एक साथ एक से ज़्यादा ऑडियो कैप्चर करने की ज़रूरत होती है. उदाहरण के लिए, अगर उपयोगकर्ता को सुलभता सेवा की ओर से दी गई आवाज़ की मदद से, वीओआईपी कॉल या वीडियो रिकॉर्डर को कंट्रोल करना है.
ऑडियो फ़्रेमवर्क, इस नीति को लागू करता है. इसके तहत, सिर्फ़ कुछ खास ऐप्लिकेशन को ही सामान्य ऐप्लिकेशन के साथ-साथ ऑडियो कैप्चर करने की अनुमति मिलती है.
कॉन्करेंसी की नीति को लागू करने के लिए, कैप्चर किए गए ऑडियो को बंद कर दिया जाता है. इसके बजाय, किसी ऐप्लिकेशन को ऑडियो कैप्चर करने से नहीं रोका जाता. इससे फ़्रेमवर्क, कैप्चर करने के चालू इस्तेमाल के उदाहरणों की संख्या और टाइप में होने वाले बदलावों को डाइनैमिक तरीके से मैनेज कर पाता है. साथ ही, इससे किसी ऐप्लिकेशन को ऐसे मामले में कैप्चर करने से नहीं रोका जाता जहां कोई दूसरा ऐप्लिकेशन कैप्चर करना बंद कर देता है और ऐप्लिकेशन को माइक्रोफ़ोन का पूरा ऐक्सेस वापस मिल जाता है.
ऑडियो HAL और ऑडियो सबसिस्टम के लिए, यह ज़रूरी है कि वे एक साथ कई चालू इनपुट स्ट्रीम के साथ काम कर सकें. भले ही, कुछ मामलों में सिर्फ़ एक स्ट्रीम, चालू क्लाइंट को बिना आवाज़ वाला ऑडियो दे रही हो.
सीडीडी से जुड़ी ज़रूरी शर्तें
एक साथ कई कैमरे से वीडियो कैप्चर करने की सुविधा से जुड़ी ज़रूरी शर्तों के बारे में जानने के लिए, सीडीडी देखें.
ऑडियो HAL से स्थितियों को कैप्चर करना
एक साथ कैप्चर करने की सुविधा का इस्तेमाल करने पर, इनपुट स्ट्रीम की संख्या, इनपुट डिवाइस का चुनाव या प्रीप्रोसेसिंग कॉन्फ़िगरेशन के हिसाब से अलग-अलग स्थितियां हो सकती हैं.
एक साथ कई अनुरोध इन स्थितियों में किए जा सकते हैं:
- ऐप्लिकेशन प्रोसेसर (एपी) से कई इनपुट स्ट्रीम
- इनपुट स्ट्रीम और वॉइस कॉल
- इनपुट स्ट्रीम और कम पावर में हॉटवर्ड की पहचान करने की सुविधा लागू करने वाला ऑडियो डीएसपी
एपी इनपुट स्ट्रीम की एक साथ होने वाली गतिविधि
ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल audio_policy_configuration.xml
का इस्तेमाल ऑडियो फ़्रेमवर्क करता है. इससे यह तय किया जाता है कि एक साथ कितनी इनपुट स्ट्रीम खोली और चालू की जा सकती हैं.
ऑडियो HAL को, खुली और चालू कॉन्फ़िगरेशन फ़ाइल में दी गई हर इनपुट प्रोफ़ाइल का कम से कम एक इंस्टेंस (sink
की भूमिका का mixPort
) सपोर्ट करना चाहिए.
डिवाइस चुनना
जब कई ऐक्टिव क्लाइंट, एक ही एचएएल इनपुट स्ट्रीम से जुड़े होते हैं, तो फ़्रेमवर्क, इस्तेमाल के उदाहरण की प्राथमिकता के आधार पर इस इनपुट स्ट्रीम के लिए सही डिवाइस चुनता है.
एक से ज़्यादा इनपुट स्ट्रीम चालू होने पर, हर स्ट्रीम के लिए अलग-अलग डिवाइस चुने जा सकते हैं.
अगर टेक्नोलॉजी काम करती है, तो हमारा सुझाव है कि ऑडियो एचएएल और सबसिस्टम, अलग-अलग डिवाइसों से अलग-अलग स्ट्रीम कैप्चर करने की अनुमति दें. जैसे, ब्लूटूथ हेडसेट और बिल्ट-इन माइक.
अगर कोई समस्या है (उदाहरण के लिए, दो डिवाइस एक ही डिजिटल ऑडियो इंटरफ़ेस या बैक एंड शेयर करते हैं), तो ऑडियो HAL को यह चुनना होगा कि कौनसी स्ट्रीम, डिवाइस के चुनाव को कंट्रोल करती है.
इस स्थिति में:
- जब एक ही स्थिति को दोहराया जाता है, तब डिवाइस चुनने का विकल्प एक जैसा होना चाहिए.
- जब एक साथ कई स्ट्रीम चलाने की सुविधा बंद हो जाती है, तो चालू स्ट्रीम को उस डिवाइस पर रूट किया जाना चाहिए जिस पर स्ट्रीम चलाने का अनुरोध किया गया था.
अगर ऑडियो एचएएल, इस्तेमाल के चालू मामलों के बीच प्राथमिकता का क्रम तय करता है, तो frameworks/av/services/audiopolicy/common/include/policy.h
में source_priority()
में दिए गए क्रम का पालन करें
प्रीप्रोसेसिंग के लिए डेटा चुनना
ऑडियो फ़्रेमवर्क, addEffect()
या removeEffect()
एचएएल तरीकों का इस्तेमाल करके, इनपुट स्ट्रीम पर प्रीप्रोसेसिंग का अनुरोध कर सकता है.
किसी इनपुट स्ट्रीम पर प्रीप्रोसेसिंग के लिए, ऑडियो फ़्रेमवर्क सिर्फ़ उस कॉन्फ़िगरेशन को चालू करता है जो इनपुट स्ट्रीम पर सबसे ज़्यादा प्राथमिकता वाले चालू इस्तेमाल के उदाहरण से मेल खाता है. हालांकि, इस्तेमाल के उदाहरण को चालू और बंद करने के दौरान कुछ समय के लिए ओवरलैप हो सकता है. इसकी वजह से, एक ही इनपुट स्ट्रीम पर एक साथ दो प्रोसेस चालू हो सकती हैं. उदाहरण के लिए, नॉइज़ कैंसलर के दो इंस्टेंस. इस मामले में, HAL यह तय करता है कि किस अनुरोध को स्वीकार किया जाए. यह चालू अनुरोधों को ट्रैक करता है और किसी भी प्रोसेस के बंद होने पर सही स्थिति को वापस लाता है.
एक साथ कई कैप्चर स्ट्रीम चालू होने पर, अलग-अलग स्ट्रीम पर अलग-अलग प्रीप्रोसेसिंग अनुरोध चलाए जा सकते हैं.
HAL और ऑडियो सबसिस्टम के लागू होने से, अलग-अलग स्ट्रीम पर अलग-अलग प्री-प्रोसेसिंग लागू की जा सकती है. भले ही, वे एक ही इनपुट डिवाइस का इस्तेमाल कर रही हों. इसका मतलब है कि प्राइमरी कैप्चर सोर्स से स्ट्रीम को अलग करने के बाद, प्री-प्रोसेसिंग लागू की जानी चाहिए.
अगर किसी ऑडियो सबसिस्टम पर तकनीकी वजहों से ऐसा नहीं किया जा सकता, तो ऑडियो एचएएल को प्राथमिकता के ऐसे नियम लागू करने चाहिए जो डिवाइस चुनने की सुविधा में दिए गए नियमों के जैसे हों.
AP से एक साथ वॉइस कॉल और कैप्चर करना
वॉइस कॉल के दौरान, एपी से कैप्चर किया जा सकता है. Android 10 में यह समस्या नई नहीं है. साथ ही, यह समस्या एक साथ कई ऐप्लिकेशन से कैप्चर करने की सुविधा से सीधे तौर पर जुड़ी नहीं है. हालांकि, इस समस्या से जुड़े दिशा-निर्देशों के बारे में बताना ज़रूरी है.
कॉल के दौरान, एपी से दो अलग-अलग तरह के कैप्चर की ज़रूरत होती है.
कॉल RX और TX कैप्चर करें
कॉल के RX और TX को कैप्चर करने की सुविधा, ऑडियो सोर्स AudioSource.VOICE_UPLINK
या AudioSource.VOICE_DOWNLINK
और/या डिवाइस AudioDevice.IN_TELEPHONY_RX
का इस्तेमाल करने पर ट्रिगर होती है.
ऑडियो HAL को इनपुट प्रोफ़ाइल (sink
की भूमिका sink
) पर एक्सपोज़ करना चाहिए. साथ ही, डिवाइस AudioDevice.IN_TELEPHONY_RX
से उपलब्ध रूट होना चाहिए.mixPort
कॉल कनेक्ट होने पर (ऑडियो मोड AudioMode.IN_CALL
पर सेट हो), डिवाइस AudioDevice.IN_TELEPHONY_RX
से कम से कम एक ऐक्टिव कैप्चर स्ट्रीम होनी चाहिए.
कॉल चालू होने पर, इनपुट डिवाइसों से कैप्चर करना
कॉल चालू होने पर (ऑडियो मोड AudioMode.IN_CALL
पर सेट हो), एपी से इनपुट स्ट्रीम को खोला और चालू किया जा सकता है. इसके लिए, सेक्शन एपी की इनपुट स्ट्रीम की एक साथ होने वाली गतिविधि में दिए गए निर्देशों का पालन करें.
हालांकि, डिवाइस चुनने और प्री-प्रोसेसिंग के लिए, हमेशा वॉइस कॉल को प्राथमिकता दी जानी चाहिए. ऐसा तब किया जाना चाहिए, जब एपी इनपुट स्ट्रीम से मिले अनुरोधों में कोई टकराव हो.
डीएसपी और एपी से एक साथ कैप्चर करना
जब ऑडियो सबसिस्टम में, कम पावर वाले ऑडियो कॉन्टेक्स्ट या हॉटवर्ड का पता लगाने की सुविधा के साथ काम करने वाला डीएसपी होता है, तो लागू करने के दौरान एपी और ऑडियो डीएसपी, दोनों से एक साथ ऑडियो कैप्चर करने की सुविधा होनी चाहिए.
इसमें, शुरुआती पहचान के दौरान डीएसपी की ओर से कैप्चर किया गया डेटा और डीएसपी की ओर से पहचान की सुविधा ट्रिगर होने के बाद, AudioSource.HOTWORD
के साथ एपी की ओर से कैप्चर किया गया डेटा, दोनों शामिल हैं.
इसे, साउंड ट्रिगर HAL की ओर से रिपोर्ट किए गए, एक साथ कैप्चर करने के फ़्लैग से पता चलना चाहिए. यह फ़्लैग, लागू करने के ब्यौरे के ज़रिए रिपोर्ट किया जाता है: ISoundTriggerHw.Properties.concurrentCapture = true
.
ऑडियो एचएएल को, हॉटवर्ड कैप्चर के लिए प्रोफ़ाइल को भी दिखाना और इनपुट करना चाहिए. इसकी पहचान फ़्लैग AudioInputFlag.HW_HOTWORD
से होती है. लागू करने के तरीके में, इस प्रोफ़ाइल पर कम से कम उतनी स्ट्रीम खोलने और चालू करने की सुविधा होनी चाहिए जितनी साउंड मॉडल को साउंड ट्रिगर HAL एक साथ लोड कर सकता है.
अन्य इनपुट प्रोफ़ाइलें चालू होने के दौरान, इस इनपुट प्रोफ़ाइल से कैप्चर किया जा सकता हो.
Assistant की सुविधाओं को लागू करने पर इसका असर
डेटा के इस्तेमाल और उपयोगकर्ता को सूचना देने से जुड़ी ज़रूरी शर्तें
एक साथ माइक का इस्तेमाल करने की सुविधा का गलत इस्तेमाल करने पर, उपयोगकर्ता का निजी डेटा लीक हो सकता है. इसलिए, हमें इन शर्तों और गारंटी को उन खास प्रीलोड किए गए ऐप्लिकेशन पर लागू करना होगा जो Assistant की भूमिका निभाने का अनुरोध करते हैं.
- माइक्रोफ़ोन से इकट्ठा किया गया डेटा, डिवाइस से बाहर नहीं जाना चाहिए. हालांकि, अगर उपयोगकर्ता Assistant से इंटरैक्ट कर रहा है, तो ऐसा किया जा सकता है. उदाहरण के लिए, हॉटवर्ड ट्रिगर होने के बाद.
- एक साथ सुनने वाले ऐप्लिकेशन को, हॉटवर्ड का पता चलने के बाद उपयोगकर्ता को विज़ुअल क्यू देने चाहिए. इससे लोगों को यह समझने में मदद मिलती है कि आगे की बातचीत किसी दूसरे ऐप्लिकेशन, जैसे कि Assistant के ज़रिए होगी.
- उपयोगकर्ताओं के पास माइक्रोफ़ोन या Assistant को ट्रिगर करने की सुविधा बंद करने का विकल्प होना चाहिए.
- ऑडियो रिकॉर्डिंग सेव होने पर, उपयोगकर्ताओं के पास किसी भी समय रिकॉर्डिंग को ऐक्सेस करने, देखने, और मिटाने का विकल्प होना चाहिए.
Android 10 के लिए फ़ंक्शन में सुधार
Assistant एक-दूसरे को ब्लॉक नहीं कर रही हैं
Android 9 या इससे पहले के वर्शन पर, अगर डिवाइस में हमेशा चालू रहने वाली दो Assistant मौजूद हैं, तो उनमें से सिर्फ़ एक Assistant, हॉटवर्ड सुन सकती है. इसलिए, दोनों Assistant के बीच स्विच करने की ज़रूरत पड़ी. Android 10 में, डिफ़ॉल्ट असिस्टेंट और दूसरी असिस्टेंट, दोनों एक साथ सुन सकती हैं. इससे, दोनों Assistant का इस्तेमाल करने वाले लोगों को बेहतर अनुभव मिलता है.
माइक का ऐक्सेस रखने वाले ऐप्लिकेशन
Shazam या Waze जैसे ऐप्लिकेशन के माइक को खुला रखने पर भी, डिफ़ॉल्ट Assistant हॉटवर्ड सुन सकती है.
Android 10 में, डिफ़ॉल्ट Assistant ऐप्लिकेशन के अलावा अन्य ऐप्लिकेशन के लिए, Assistant के काम करने के तरीके में कोई बदलाव नहीं हुआ है.
ऑडियो एचएएल को लागू करने का सैंपल
इस दस्तावेज़ में दिए गए दिशा-निर्देशों के मुताबिक, ऑडियो एचएएल को लागू करने का उदाहरण AOSP में देखा जा सकता है.