साउंड ट्रिगर की सुविधा की मदद से, ऐप्लिकेशन कुछ खास ऑडियो इवेंट को सुन सकते हैं. जैसे, हॉटवर्ड. ऐसा कम बैटरी खर्च करके और निजता को ध्यान में रखकर किया जाता है. साउंड ट्रिगर के इस्तेमाल के उदाहरणों में, Assistant और 'अभी चल रहा है' शामिल हैं.
इस पेज पर, साउंड ट्रिगर आर्किटेक्चर और उसके एचएएल (हार्डवेयर ऐब्स्ट्रैक्शन लेयर) इंटरफ़ेस के बारे में खास जानकारी दी गई है.
साउंड ट्रिगर स्टैक
साउंड ट्रिगर सबसिस्टम को लेयर में बनाया गया है, जैसा कि पहली इमेज में दिखाया गया है:
पहली इमेज: साउंड ट्रिगर स्टैक
यहां दी गई सूची में, पहले चित्र में दिखाई गई हर लेयर के बारे में ज़्यादा जानकारी दी गई है:
हरे रंग में दिखने वाली एचएएल लेयर में, वेंडर के हिसाब से कोड होता है. यह कोड, साउंड ट्रिगर एचएएल (एसटीएचएएल) इंटरफ़ेस को लागू करता है.
SoundTriggerMiddleware
(पीले रंग में) HAL इंटरफ़ेस के ऊपर होता है. यह एचएएल के साथ काम करता है और कई कामों के लिए ज़िम्मेदार होता है. जैसे, अलग-अलग क्लाइंट के बीच एचएएल शेयर करना, लॉग करना, अनुमतियां लागू करना, और एचएएल के पुराने वर्शन के साथ काम करना.SoundTriggerService
(नीले रंग में) सिस्टम, मिडलवेयर के ऊपर होता है. इससे, सिस्टम की अन्य सुविधाओं के साथ इंटिग्रेशन करने में मदद मिलती है. जैसे, टेलीफ़ोन और बैटरी इवेंट. यह साउंड मॉडल का डेटाबेस भी मैनेज करता है. इस डेटाबेस को यूनीक आईडी के हिसाब से इंडेक्स किया जाता है.SoundTriggerService
लेयर के ऊपर, स्टैक (भूरे रंग में) Assistant और सामान्य ऐप्लिकेशन के लिए खास सुविधाओं को अलग-अलग मैनेज करता है.
साउंड ट्रिगर स्टैक का फ़ंक्शन, अलग-अलग इवेंट डिलीवर करना है. ये इवेंट, साउंड ट्रिगर इवेंट दिखाते हैं. ज़्यादातर मामलों में, साउंड ट्रिगर स्टैक, ऑडियो से नहीं जुड़ा होता. ट्रिगर इवेंट मिलने पर, ऐप्लिकेशन को इवेंट के समय के आस-पास की असल ऑडियो स्ट्रीम का ऐक्सेस मिल जाता है. इसके लिए, ऐप्लिकेशन को ऑडियो फ़्रेमवर्क की मदद से AudioRecord
ऑब्जेक्ट खोलना होता है. साउंड ट्रिगर एचएएल एपीआई, ट्रिगर किए गए इवेंट के साथ एक हैंडल उपलब्ध कराते हैं. इसका इस्तेमाल ऑडियो फ़्रेमवर्क के साथ किया जाता है. इसलिए, साउंड ट्रिगर एचएएल और ऑडियो एचएएल, डिवाइस के अंदर कनेक्ट होते हैं. इसलिए, आम तौर पर ये एक ही प्रोसेस शेयर करते हैं.
साउंड ट्रिगर एचएएल इंटरफ़ेस
साउंड ट्रिगर एचएएल (STHAL) इंटरफ़ेस, साउंड ट्रिगर स्टैक का वेंडर से जुड़ा हिस्सा है. यह हॉटवर्ड और दूसरी आवाज़ों की पहचान करने वाले हार्डवेयर को मैनेज करता है. STHAL एक या एक से ज़्यादा इंजन उपलब्ध कराता है. हर इंजन में एक अलग एल्गोरिदम काम करता है, जिसे किसी खास तरह की आवाज़ों का पता लगाने के लिए डिज़ाइन किया गया है. जब STHAL को कोई ट्रिगर मिलता है, तो वह फ़्रेमवर्क को एक इवेंट भेजता है और फिर ट्रिगर का पता लगाना बंद कर देता है.
STHAL इंटरफ़ेस की जानकारी /hardware/interfaces/soundtrigger/
में दी गई है.
ISoundTriggerHw
इंटरफ़ेस की मदद से, एक तय समय पर एक या उससे ज़्यादा डिटेक्शन सेशन चलाए जा सकते हैं. साथ ही, ध्वनि से जुड़े इवेंट को सुना जा सकता है.
ISoundTriggerHw.getProperties()
को कॉल करने पर, Properties
स्ट्रक्चर दिखता है. इसमें, लागू करने के बारे में जानकारी और सुविधाएं शामिल होती हैं.
सेशन सेट अप करने के बुनियादी फ़्लो के बारे में, दूसरे चित्र में इस तरह बताया गया है:
दूसरी इमेज: STHAL स्टेटस डायग्राम
यहां दिए गए चरणों में, हर राज्य के बारे में ज़्यादा जानकारी दी गई है:
HAL क्लाइंट,
loadSoundModel()
याloadPhraseSoundModel()
का इस्तेमाल करके मॉडल लोड करता है. दिए गए मॉडल ऑब्जेक्ट से पता चलता है कि किस तरह के एप्लिकेशन के लिए, किस एल्गोरिदम (इंजन) का इस्तेमाल करना है. साथ ही, इस एल्गोरिदम के लिए लागू होने वाले पैरामीटर भी पता चलते हैं. सफल होने पर, ये तरीके एक हैंडल दिखाते हैं. इसका इस्तेमाल, बाद के कॉल में इस मॉडल का रेफ़रंस देने के लिए किया जाता है.मॉडल लोड होने के बाद, HAL क्लाइंट, पहचान करने की प्रोसेस शुरू करने के लिए
startRecognition()
को कॉल करता है. पहचान करने की सुविधा, बैकग्राउंड में तब तक चलती रहती है, जब तक कि इनमें से कोई एक इवेंट नहीं होता:- इस मॉडल पर
stopRecognition()
को कॉल किया गया है. - कोई गड़बड़ी हुई है.
- संसाधनों की कमी की वजह से, पहचान करने की प्रोसेस को रोक दिया जाता है. उदाहरण के लिए, जब ज़्यादा प्राथमिकता वाले इस्तेमाल का उदाहरण शुरू किया गया हो.
बाद के दो मामलों में, पहचान से जुड़ा इवेंट, कॉलबैक इंटरफ़ेस के ज़रिए भेजा जाता है. इसे HAL क्लाइंट, लोड होने पर रजिस्टर करता है. सभी मामलों में, इनमें से किसी भी इवेंट के होने के बाद, पहचान करने की सुविधा बंद हो जाती है और पहचान करने के लिए कॉलबैक की अनुमति नहीं दी जाती.
उसी मॉडल को बाद में फिर से शुरू किया जा सकता है. साथ ही, इस प्रोसेस को ज़रूरत के मुताबिक जितनी बार चाहें उतनी बार दोहराया जा सकता है.
- इस मॉडल पर
आखिर में, एचएएल क्लाइंट,
unloadModel()
के ज़रिए ऐसे इनऐक्टिव मॉडल को अनलोड कर देता है जिनकी अब ज़रूरत नहीं है.
एचएएल से जुड़ी गड़बड़ियां ठीक करना
ड्राइवर लागू करने के बीच भरोसेमंद और एक जैसा व्यवहार पक्का करने के लिए, Android 11 में, एचएएल से मिले गड़बड़ी के ऐसे कोड जिन्हें प्रोसेस नहीं किया जा सका उन्हें प्रोग्रामिंग गड़बड़ियों के तौर पर माना जाता है. इन गड़बड़ियों को ठीक करने के लिए, एचएएल प्रोसेस को फिर से शुरू करना ज़रूरी होता है. यह खाता वापस पाने की आखिरी रणनीति है. उम्मीद है कि ठीक से काम करने वाले सिस्टम में, ऐसे मामले नहीं होंगे.