সাউন্ড ট্রিগার

সাউন্ড ট্রিগার বৈশিষ্ট্যটি অ্যাপগুলিকে নির্দিষ্ট অ্যাকোস্টিক ইভেন্টগুলি যেমন হটওয়ার্ডের মতো কম শক্তি এবং গোপনীয়তা-সংবেদনশীল পদ্ধতিতে শোনার ক্ষমতা প্রদান করে৷ সাউন্ড ট্রিগার ব্যবহারের উদাহরণ হল অ্যাসিস্ট্যান্ট এবং নাউ প্লে হচ্ছে।

এই পৃষ্ঠাটি সাউন্ড ট্রিগার আর্কিটেকচার এবং এর HAL (হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার) ইন্টারফেসের একটি ওভারভিউ দেয়।

সাউন্ড ট্রিগার স্ট্যাক

সাউন্ড ট্রিগার সাবসিস্টেমটি লেয়ারে তৈরি করা হয়েছে যেমন চিত্র 1 এ দেখানো হয়েছে:

sound_trigger_stack

চিত্র 1: সাউন্ড ট্রিগার স্ট্যাক

নিম্নলিখিত তালিকাটি চিত্র 1-এ দেখানো প্রতিটি স্তরকে আরও বিশদে বর্ণনা করে:

  • HAL স্তরে (সবুজ রঙে) বিক্রেতা নির্দিষ্ট কোড থাকে যা সাউন্ড ট্রিগার HAL (STHAL) ইন্টারফেস প্রয়োগ করে।

  • SoundTriggerMiddleware (হলুদে) HAL ইন্টারফেসের উপরে থাকে। এটি HAL এর সাথে যোগাযোগ করে এবং বিভিন্ন ক্লায়েন্টের মধ্যে HAL ভাগ করে নেওয়া, লগিং করা, অনুমতি প্রয়োগ করা এবং পুরানো HAL সংস্করণগুলির সাথে সামঞ্জস্যতা পরিচালনা করার মতো কার্যকারিতার জন্য দায়ী।

  • SoundTriggerService (নীল ভাষায়) সিস্টেম মিডলওয়্যারের উপরে থাকে। এটি টেলিফোনি এবং ব্যাটারি ইভেন্টগুলির মতো অন্যান্য সিস্টেম বৈশিষ্ট্যগুলির সাথে একীকরণের সুবিধা দেয়৷ এটি সাউন্ড মডেলগুলির একটি ডাটাবেসও বজায় রাখে, অনন্য আইডি দ্বারা সূচীকৃত।

  • SoundTriggerService স্তরের উপরে, স্ট্যাক (বাদামী রঙে) অ্যাসিস্ট্যান্ট এবং জেনেরিক অ্যাপের জন্য নির্দিষ্ট বৈশিষ্ট্যগুলিকে আলাদাভাবে পরিচালনা করে।

সাউন্ড ট্রিগার স্ট্যাকের কাজ হল বিচ্ছিন্ন ইভেন্টগুলি প্রদান করা যা অ্যাকোস্টিক, ট্রিগার ইভেন্টগুলিকে প্রতিনিধিত্ব করে। বেশিরভাগ ক্ষেত্রে, সাউন্ড ট্রিগার স্ট্যাক অডিওর সাথে ডিল করে না। ট্রিগার ইভেন্টগুলি প্রাপ্তির পরে, অ্যাপগুলি অডিও ফ্রেমওয়ার্কের মাধ্যমে একটি AudioRecord অবজেক্ট খোলার মাধ্যমে ইভেন্টগুলির সময়কে ঘিরে প্রকৃত অডিও স্ট্রিমে অ্যাক্সেস পায়। সাউন্ড ট্রিগার HAL APIগুলি ট্রিগার করা ইভেন্টের সাথে একটি হ্যান্ডেল প্রদান করে যা অডিও ফ্রেমওয়ার্কের সাথে ব্যবহার করা হয়। সুতরাং, যেহেতু সাউন্ড ট্রিগার HAL এবং অডিও HAL হুডের নীচে সংযুক্ত, তারা সাধারণত একটি প্রক্রিয়া ভাগ করে।

সাউন্ড ট্রিগার HAL ইন্টারফেস

সাউন্ড ট্রিগার HAL (STHAL) ইন্টারফেস হল সাউন্ড ট্রিগার স্ট্যাকের বিক্রেতার নির্দিষ্ট অংশ এবং এটি হটওয়ার্ড এবং অন্যান্য শব্দের হার্ডওয়্যার স্বীকৃতি পরিচালনা করে। STHAL একটি নির্দিষ্ট শ্রেণীর শব্দ শনাক্ত করার জন্য ডিজাইন করা একটি ভিন্ন অ্যালগরিদম চালানোর সাথে এক বা একাধিক ইঞ্জিন সরবরাহ করে। যখন STHAL একটি ট্রিগার সনাক্ত করে, এটি একটি ইভেন্টকে ফ্রেমওয়ার্কে পাঠায় এবং তারপর সনাক্তকরণ বন্ধ করে দেয়।

STHAL ইন্টারফেসটি /hardware/interfaces/soundtrigger/ এর অধীনে নির্দিষ্ট করা হয়েছে।

ISoundTriggerHw ইন্টারফেস একটি নির্দিষ্ট সময়ে চলমান এক বা একাধিক সনাক্তকরণ সেশন এবং শাব্দ ঘটনা শোনার ক্ষমতা সমর্থন করে। ISoundTriggerHw.getProperties() এ একটি কল বাস্তবায়নের বিবরণ এবং ক্ষমতা সম্বলিত একটি Properties কাঠামো প্রদান করে।

একটি অধিবেশন সেট আপ করার প্রাথমিক প্রবাহ চিত্র 2 এ নিম্নরূপ ব্যাখ্যা করা হয়েছে:

sthal_state

চিত্র 2: STHAL স্টেট ডায়াগ্রাম

নিম্নলিখিত পদক্ষেপগুলি প্রতিটি রাজ্যকে আরও বিশদে বর্ণনা করে:

  1. HAL ক্লায়েন্ট loadSoundModel() বা loadPhraseSoundModel() ব্যবহার করে একটি মডেল লোড করে। প্রদত্ত মডেল অবজেক্ট নির্দেশ করে যে কোন বাস্তবায়ন-নির্দিষ্ট সনাক্তকরণ অ্যালগরিদম (ইঞ্জিন) ব্যবহার করতে হবে, সেইসাথে এই অ্যালগরিদমের জন্য প্রযোজ্য পরামিতিগুলি। সাফল্যের পরে, এই পদ্ধতিগুলি একটি হ্যান্ডেল ফেরত দেয় যা পরবর্তী কলগুলিতে এই মডেলটিকে উল্লেখ করতে ব্যবহৃত হয়।

  2. মডেলটি সফলভাবে লোড হয়ে গেলে, HAL ক্লায়েন্ট সনাক্তকরণ শুরু করতে startRecognition() কল করে। নিম্নলিখিত ইভেন্টগুলির মধ্যে একটি না হওয়া পর্যন্ত স্বীকৃতি পটভূমিতে চলতে থাকে:

    1. এই মডেলটিতে একটি stopRecognition() বলা হয়েছে।
    2. একটি সনাক্তকরণ ঘটেছে.
    3. সম্পদের সীমাবদ্ধতার কারণে সনাক্তকরণ স্থগিত করা হয়েছে, উদাহরণস্বরূপ, যখন একটি উচ্চতর অগ্রাধিকার ব্যবহারের ক্ষেত্রে শুরু করা হয়েছে।

    পরবর্তী দুটি ক্ষেত্রে, কলব্যাক ইন্টারফেসের মাধ্যমে একটি স্বীকৃতি ইভেন্ট পাঠানো হয় যা লোড করার পরে HAL ক্লায়েন্ট দ্বারা নিবন্ধিত হয়। সমস্ত ক্ষেত্রে, এই ঘটনাগুলির যে কোনও একটি ঘটলে, সনাক্তকরণ নিষ্ক্রিয় হয়ে যায় এবং আর কোনও স্বীকৃতি কলব্যাক অনুমোদিত হয় না৷

    একই মডেল পরবর্তী সময়ে আবার শুরু করা যেতে পারে, এবং এই প্রক্রিয়াটি যতবার প্রয়োজন ততবার পুনরাবৃত্তি করা যেতে পারে।

  3. অবশেষে, একটি নিষ্ক্রিয় মডেল যেটির আর প্রয়োজন নেই HAL ক্লায়েন্ট দ্বারা unloadModel() এর মাধ্যমে আনলোড করা হয়।

HAL ত্রুটিগুলি পরিচালনা করুন

ড্রাইভার বাস্তবায়নের মধ্যে নির্ভরযোগ্য এবং সামঞ্জস্যপূর্ণ আচরণ নিশ্চিত করার জন্য, Android 11-এ, HAL থেকে ফিরে আসা যেকোন অ-সফল ত্রুটি কোডগুলিকে প্রোগ্রামিং ত্রুটি হিসাবে গণ্য করা হয়, যেখান থেকে পুনরুদ্ধারের জন্য HAL প্রক্রিয়া পুনরায় চালু করা প্রয়োজন। এটি একটি শেষ অবলম্বন পুনরুদ্ধারের কৌশল এবং প্রত্যাশা হল যে এই ধরনের ঘটনাগুলি সঠিকভাবে কাজ করা সিস্টেমে ঘটবে না।