साउंड ट्रिगर

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

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

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

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

sound_trigger_stack

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

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

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

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

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

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

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

साउंड ट्रिगर एचएएल इंटरफ़ेस

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

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

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

सेशन सेट अप करने के बेसिक फ़्लो को इमेज 2 में बताया गया है:

Sthal_state

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

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

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

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

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

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

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

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

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

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