ध्वनि ट्रिगर

साउंड ट्रिगर फीचर ऐप्स को कुछ ध्वनिक घटनाओं, जैसे हॉटवर्ड, को कम-शक्ति और गोपनीयता-संवेदनशील तरीके से सुनने की क्षमता प्रदान करता है। ध्वनि ट्रिगर के उदाहरण उपयोग के मामले सहायक और अभी चल रहे हैं।

यह पेज साउंड ट्रिगर आर्किटेक्चर और इसके एचएएल (हार्डवेयर एब्स्ट्रेक्शन लेयर) इंटरफेस का एक सिंहावलोकन देता है।

ध्वनि ट्रिगर स्टैक

साउंड ट्रिगर सबसिस्टम परतों में बनाया गया है जैसा कि चित्र 1 में दिखाया गया है:

sound_trigger_stack

चित्र 1: ध्वनि ट्रिगर स्टैक

निम्नलिखित सूची चित्र 1 में दिखाई गई प्रत्येक परत का अधिक विस्तार से वर्णन करती है:

  • एचएएल परत (हरे रंग में) में विक्रेता विशिष्ट कोड होता है जो साउंड ट्रिगर एचएएल (एसटीएचएएल) इंटरफेस को लागू करता है।

  • SoundTriggerMiddleware (पीले रंग में) एचएएल इंटरफेस के ऊपर रहता है। यह एचएएल के साथ संचार करता है और विभिन्न ग्राहकों के बीच एचएएल को साझा करने, लॉगिंग, अनुमतियों को लागू करने और पुराने एचएएल संस्करणों के साथ संगतता को संभालने जैसी कार्यात्मकताओं के लिए जिम्मेदार है।

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

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

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

ध्वनि ट्रिगर एचएएल इंटरफ़ेस

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

STHAL इंटरफ़ेस /hardware/interfaces/soundtrigger/ के अंतर्गत निर्दिष्ट है।

ISoundTriggerHw इंटरफ़ेस एक निश्चित समय में एक या अधिक डिटेक्शन सत्र चलाने और ध्वनिक घटनाओं को सुनने की क्षमता का समर्थन करता है। ISoundTriggerHw.getProperties() को कॉल एक Properties संरचना देता है जिसमें कार्यान्वयन विवरण और क्षमताएं होती हैं।

एक सत्र की स्थापना के मूल प्रवाह को चित्र 2 में इस प्रकार समझाया गया है:

sthal_state

चित्र 2: STHAL राज्य आरेख

निम्नलिखित चरण प्रत्येक राज्य का अधिक विस्तार से वर्णन करते हैं:

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

  2. एक बार मॉडल सफलतापूर्वक लोड हो जाने के बाद, एचएएल क्लाइंट डिटेक्शन शुरू करने के लिए startRecognition() को कॉल करता है। पहचान निम्न घटनाओं में से एक होने तक पृष्ठभूमि में चलती रहती है:

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

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

    उसी मॉडल को बाद में फिर से शुरू किया जा सकता है, और इस प्रक्रिया को आवश्यकतानुसार कई बार दोहराया जा सकता है।

  3. अंत में, एक निष्क्रिय मॉडल जिसकी अब आवश्यकता नहीं है, HAL क्लाइंट द्वारा unloadModel() के माध्यम से अनलोड किया जाता है।

एचएएल त्रुटियों से निपटना

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