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

সাউন্ড ট্রিগার ফিচার অ্যাপকে কম-পাওয়ার ও গোপনীয়তা-সংবেদনশীল পদ্ধতিতে হটওয়ার্ডের মতো নির্দিষ্ট অ্যাকোস্টিক ইভেন্ট শোনার ক্ষমতা প্রদান করে। সাউন্ড ট্রিগারের ব্যবহারের উদাহরণ হল Assistant ও Now Playing।

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

Sound Trigger স্ট্যাক

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

sound_trigger_stack

ছবি ১: সাউন্ড ট্রিগার স্ট্যাক

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

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

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

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

  • SoundTriggerService লেয়ারের উপরে, স্ট্যাক (বাদামী রঙে) Assistant-এর জন্য নির্দিষ্ট এবং সাধারণ অ্যাপের ফিচার আলাদা আলাদাভাবে ম্যানেজ করে।

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

Sound Trigger HAL ইন্টারফেস

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

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

ISoundTriggerHw ইন্টারফেসের সাহায্যে কোনও নির্দিষ্ট সময়ে এক বা একাধিক ডিটেকশন সেশন চালানো এবং অ্যাকোস্টিক ইভেন্ট শোনা যায়। ISoundTriggerHw.getProperties()-এ কল করলে Properties স্ট্রাকচার রিটার্ন করে যার মধ্যে প্রয়োগের বিবরণ ও ক্ষমতা থাকে।

সেশন সেট-আপ করার প্রাথমিক ফ্লোটি ২ নম্বর ছবিতে নিচে উল্লেখ করা হয়েছে:

sthal_state

ছবি ২: STHAL স্টেট ডায়াগ্রাম

নিচে প্রতিটি স্টেটের বিবরণ আরও বিস্তারিতভাবে দেওয়া হল:

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

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

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

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

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

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

HAL সংক্রান্ত সমস্যার সমাধান করা

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