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

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

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

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

সাউন্ড ট্রিগার সাবসিস্টেমটি চিত্র ১-এ দেখানো অনুযায়ী বিভিন্ন স্তরে নির্মিত হয়েছে:

sound_trigger_stack

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

নিম্নলিখিত তালিকাটিতে চিত্র ১-এ দেখানো প্রতিটি স্তরকে আরও বিস্তারিতভাবে বর্ণনা করা হয়েছে:

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

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

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

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

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

সাউন্ড ট্রিগার এইচএএল ইন্টারফেস

সাউন্ড ট্রিগার এইচএএল (STHAL) ইন্টারফেস হলো সাউন্ড ট্রিগার স্ট্যাকের বিক্রেতা-নির্দিষ্ট অংশ এবং এটি হটওয়ার্ড ও অন্যান্য শব্দের হার্ডওয়্যারভিত্তিক শনাক্তকরণ পরিচালনা করে। 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. অবশেষে, একটি নিষ্ক্রিয় মডেল যার আর প্রয়োজন নেই, সেটি HAL ক্লায়েন্ট দ্বারা unloadModel() মাধ্যমে আনলোড করা হয়।

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

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