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