साउंड ट्रिगर

साउंड ट्रिगर की सुविधा, ऐप्लिकेशन को कुछ ध्वनिक इवेंट सुनने की सुविधा देती है. जैसे, हॉटवर्ड. यह सुविधा, कम बैटरी इस्तेमाल करती है और आपकी निजता का ध्यान रखती है. साउंड ट्रिगर के इस्तेमाल के उदाहरण, Assistant और 'अभी चल रहा है' सुविधा हैं.

इस पेज पर, साउंड ट्रिगर आर्किटेक्चर और इसके एचएएल (हार्डवेयर ऐब्स्ट्रैक्शन लेयर) इंटरफ़ेस के बारे में खास जानकारी दी गई है.

साउंड ट्रिगर स्टैक

साउंड ट्रिगर सबसिस्टम को लेयर में बनाया गया है. इसे पहली इमेज में दिखाया गया है:

sound_trigger_stack

पहली इमेज: साउंड ट्रिगर स्टैक

यहां दी गई सूची में, इमेज 1 में दिखाई गई हर लेयर के बारे में ज़्यादा जानकारी दी गई है:

  • एचएएल लेयर (हरे रंग में) में वेंडर के हिसाब से कोड होता है. यह साउंड ट्रिगर एचएएल (एसटीएचएएल) इंटरफ़ेस को लागू करता है.

  • SoundTriggerMiddleware (पीले रंग में) HAL इंटरफ़ेस के ऊपर होता है. यह एचएएल से कम्यूनिकेट करता है. साथ ही, इसके पास कई फ़ंक्शन होते हैं. जैसे, अलग-अलग क्लाइंट के बीच एचएएल शेयर करना, लॉग इन करना, अनुमतियां लागू करना, और एचएएल के पुराने वर्शन के साथ काम करने की सुविधा को मैनेज करना.

  • SoundTriggerService (नीले रंग में) सिस्टम, मिडलवेयर के ऊपर मौजूद होता है. इससे, सिस्टम की अन्य सुविधाओं के साथ इंटिग्रेट करने में मदद मिलती है. जैसे, टेलीफ़ोनी और बैटरी इवेंट. यह आवाज़ के मॉडल का डेटाबेस भी बनाए रखता है. इन्हें यूनीक आईडी के हिसाब से इंडेक्स किया जाता है.

  • SoundTriggerService लेयर के ऊपर, स्टैक (भूरे रंग में) Assistant और सामान्य ऐप्लिकेशन से जुड़ी सुविधाओं को अलग-अलग तरीके से हैंडल करता है.

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

आवाज़ से ट्रिगर होने वाले एचएएल इंटरफ़ेस

साउंड ट्रिगर एचएएल (एसटीएचएएल) इंटरफ़ेस, साउंड ट्रिगर स्टैक का वेंडर के हिसाब से तय किया गया हिस्सा होता है. यह हॉटवर्ड और अन्य आवाज़ों को हार्डवेयर की मदद से पहचानने का काम करता है. STHAL, एक या उससे ज़्यादा इंजन उपलब्ध कराता है. हर इंजन, अलग-अलग एल्गोरिदम पर काम करता है. इन एल्गोरिदम को खास तरह की आवाज़ों का पता लगाने के लिए डिज़ाइन किया गया है. जब STHAL को कोई ट्रिगर मिलता है, तो वह फ़्रेमवर्क को एक इवेंट भेजता है. इसके बाद, वह ट्रिगर का पता लगाना बंद कर देता है.

STHAL इंटरफ़ेस को /hardware/interfaces/soundtrigger/ में तय किया गया है.

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

सेशन सेट अप करने के बुनियादी फ़्लो के बारे में, यहां दिए गए दूसरे डायग्राम में बताया गया है:

sthal_state

दूसरी इमेज: STHAL का स्टेट डायग्राम

यहां दिए गए चरणों में, हर स्थिति के बारे में ज़्यादा जानकारी दी गई है:

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

  2. मॉडल लोड होने के बाद, HAL क्लाइंट startRecognition() को कॉल करता है, ताकि मॉडल का इस्तेमाल शुरू किया जा सके. पहचान करने की सुविधा, बैकग्राउंड में तब तक काम करती रहती है, जब तक इनमें से कोई एक इवेंट नहीं हो जाता:

    1. इस मॉडल पर stopRecognition() को कॉल किया गया है.
    2. किसी गतिविधि का पता चला है.
    3. संसाधन की कमी की वजह से, गड़बड़ी का पता नहीं लगाया जा सका. उदाहरण के लिए, जब ज़्यादा प्राथमिकता वाले इस्तेमाल के उदाहरण को शुरू किया गया हो.

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

    इस मॉडल को बाद में फिर से शुरू किया जा सकता है. साथ ही, इस प्रोसेस को जितनी बार चाहें उतनी बार दोहराया जा सकता है.

  3. आखिर में, एचएएल क्लाइंट unloadModel() के ज़रिए, ऐसे मॉडल को अनलोड करता है जो चालू नहीं है और जिसकी अब ज़रूरत नहीं है.

HAL से जुड़ी गड़बड़ियां ठीक करना

ड्राइवर को लागू करने के तरीके में एक जैसा और भरोसेमंद व्यवहार बनाए रखने के लिए, Android 11 में HAL से मिले गड़बड़ी के ऐसे कोड जिन्हें ठीक नहीं किया जा सकता उन्हें प्रोग्रामिंग से जुड़ी गड़बड़ियां माना जाता है. इन्हें ठीक करने के लिए, HAL प्रोसेस को फिर से शुरू करना पड़ता है. यह डेटा वापस पाने की आखिरी रणनीति है. उम्मीद है कि सही तरीके से काम करने वाले सिस्टम में ऐसे मामले नहीं होंगे.