साउंड ट्रिगर

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

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

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

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

sound_trigger_stack

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

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

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

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

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

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

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

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

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

एसटीएचएएल इंटरफ़ेस, /hardware/interfaces/soundtrigger/ में तय किया गया है.

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

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

sthal_state

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

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

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

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

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

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

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

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

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

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