অ্যান্ড্রয়েড ১৪, অডিও ফ্রেমওয়ার্ক এবং অডিও এইচএএল-এর মাধ্যমে সাউন্ড ডোজ সমর্থন করে, যা ক্রমাগত সাউন্ড ডোজ পরিমাপ পর্যবেক্ষণ করে এবং ক্ষতিকর এক্সপোজার লেভেল সম্পর্কে ব্যবহারকারীদের সতর্ক করে।
সাউন্ড ডোজ হলো একটি নির্দিষ্ট সময় ধরে শব্দচাপের মাত্রা পরিমাপ। সাউন্ড ডোজ পর্যবেক্ষণের মাধ্যমে, আমরা ব্যবহারকারীদের অতিরিক্ত বা দীর্ঘস্থায়ী শব্দ সংস্পর্শের ক্ষতিকর প্রভাব থেকে রক্ষা করতে সাহায্য করতে পারি। এর ফলে বহনযোগ্য অ্যান্ড্রয়েড ডিভাইসে হেডফোন ব্যবহার করার সময় উন্নততর শ্রবণ সুরক্ষা নিশ্চিত হয় এবং শ্রবণশক্তি হ্রাসের সম্ভাবনা কমে আসে।
নিরাপদ শ্রবণ যন্ত্রের নতুন মানগুলি IEC62368-1 তৃতীয় সংস্করণ (লগইন প্রয়োজন) এবং EN50332-3 (শুধুমাত্র গ্রাহকদের জন্য প্রবেশাধিকার) -এ থাকা শ্রবণ সুরক্ষার নিয়ন্ত্রক প্রয়োজনীয়তাগুলির সাথে সঙ্গতিপূর্ণ, যেগুলি সাউন্ড ডোজ-এর ধারণাটি প্রবর্তন করে।
সাউন্ড ডোজ ফাংশনটি OEM-দের নতুন শ্রবণ সুরক্ষা বিধিমালা অনুসরণ করতে সাহায্য করে। সাউন্ড ডোজ সমর্থন করার জন্য, OEM-দের অবশ্যই সমস্ত কাস্টমাইজেশন এবং সার্টিফিকেশনের জন্য ইন্টারফেস স্পেসিফিকেশন এবং বিধিমালা অনুসরণ করতে হবে। একটি কাস্টমাইজড OEM ইমপ্লিমেন্টেশন সাউন্ড ডোজের AOSP ডিফল্ট ইমপ্লিমেন্টেশনকে বাইপাস বা পরিবর্তন করতে পারে। তবে, AOSP ইমপ্লিমেন্টেশন ব্যবহার করার জন্য জোরালোভাবে সুপারিশ করা হয়।
শব্দ ডোজ গণনা
IEC62368-1 তৃতীয় সংস্করণ এবং EN50332-3-এর মানগুলি গণনাকৃত শব্দ মাত্রা (CSD) নির্ণয়ের মাধ্যমে শব্দ বিকিরণ পরিমাপের নির্ভুলতা বৃদ্ধি করে। সময়ের সাথে সাথে ক্ষণস্থায়ী বিকিরণ মাত্রা (MEL)-কে ইন্টিগ্রেট করে CSD গণনা করা হয়। শব্দ মাত্রা গণনার জন্য সঞ্চিত CSD মানগুলির একটি সাত-দিনের ক্রমাগত চলমান উইন্ডো বজায় রাখা হয়।
IEC62368-1 তৃতীয় সংস্করণের ধারা 10.6.3.2 অনুসারে, যদি CSD মান 100% সীমায় পৌঁছায়, তবে সিস্টেমটি প্রতি 100% বৃদ্ধির সাথে সাথে শব্দের মাত্রা সম্পর্কে ব্যবহারকারীকে সতর্ক করে। যদি ব্যবহারকারী সতর্কবার্তাটি স্বীকার না করেন, তবে শব্দের মাত্রা কমে IEC62368-1-এর সারণী 39-এ পূর্বনির্ধারিত বিকিরণ শক্তি উৎস শ্রেণি 1 (RS1) মানে নেমে আসে।
IEC62368-1 তৃতীয় সংস্করণের ১০.৬.৩.৩ অনুচ্ছেদে যেমন উল্লেখ করা হয়েছে, শব্দ ডোজ সতর্কতার পাশাপাশি সিস্টেমটিকে অবশ্যই একটি এক্সপোজার-ভিত্তিক সতর্কতা চালু করতে হবে যখনই MEL মানটি IEC62368-1-এর সারণী ৩৯-এর বিকিরণ শক্তি উৎস শ্রেণি ২ (RS2) মানকে অতিক্রম করে।
এই নিয়মাবলী অনুসারে সার্টিফিকেশন পেতে এবং CSD মানগুলিকে আরও প্রাসঙ্গিক করে তোলার জন্য, সিস্টেমটিকে অবশ্যই ব্যবহারকারীদের দ্বারা অনুভূত সঠিক আউটপুট মান (যেমন মিডিয়া প্লেব্যাক আউটপুট) ব্যবহার করতে হবে। CSD গণনার জন্য এমন মান ব্যবহার করা গুরুত্বপূর্ণ যা ব্যবহারকারী যে প্রকৃত শব্দচাপের সম্মুখীন হন তার কাছাকাছি থাকে।
স্থাপত্য
ফ্রেমগুলো কোথায় ধারণ করা হচ্ছে তার উপর নির্ভর করে, হার্ডওয়্যারের বৈশিষ্ট্য এবং ট্রান্সডিউসারের প্রভাব রেন্ডার করা ফ্রেমের পাওয়ার লেভেলকে প্রভাবিত করতে পারে। আউটপুট সাউন্ড প্রেসার লেভেলের একটি নির্ভুল পরিমাপ পেতে, আমরা HAL-কে এমনভাবে প্রসারিত করেছি যাতে এটি সরাসরি অন্তর্নিহিত হার্ডওয়্যার থেকে MEL মানগুলো পেতে পারে এবং ডিজিটাল সিগন্যাল প্রসেসর (DSP) দ্বারা প্রয়োগ করা সম্ভাব্য প্রভাব বা স্পিকারের বৈশিষ্ট্য, যেমন ইম্পিডেন্স, সেনসিটিভিটি এবং ফ্রিকোয়েন্সি রেসপন্স, বিবেচনায় নিতে পারে।
যদি HAL, MEL ভ্যালু সরবরাহ করতে না পারে, তবে একটি ফলব্যাক ব্যবস্থা হিসেবে অডিও ফ্রেমওয়ার্ক CSD বিশ্লেষণ ও গণনা করে। অডিও ফ্রেমওয়ার্কের এই গণনাটি HAL থেকে প্রাপ্ত রেন্ডার করা আউটপুট এবং অডিও DSP-তে পাঠানো ফ্রেমগুলোর তথ্যের উপর ভিত্তি করে করা হয়।
সাউন্ড ডোজ দুটি উপাদান চালু করেছে, SoundDoseHelper এবং SoundDoseManager, যেমনটি চিত্র ১-এ দেখানো হয়েছে:

চিত্র ১. শব্দ ডোজ বৈশিষ্ট্যের স্থাপত্যিক উপাদানসমূহ।
সাউন্ডডোজহেল্পার
systemserver প্রসেসে অবস্থিত SoundDoseHelper ক্লাসটি হলো সমস্ত প্রাসঙ্গিক সাউন্ড ডোজিং ডেটার প্রধান সংগ্রহস্থল। AudioService ক্লাসটি SoundDoseHelper ক্লাসটিকে পরিচালনা করে।
SoundDoseHelper ক্লাসটি নিম্নলিখিত বিষয়গুলির জন্য দায়ী:
- নতুন ডোজের তথ্য পরিচালনা করা
- স্থায়ী শব্দ ডোজ মান
-
audioserverক্র্যাশের ক্ষেত্রে অবস্থা পুনরুদ্ধার - সিস্টেম UI বিজ্ঞপ্তিগুলি ট্রিগার করা
- ভলিউম কমানো
সাউন্ডডোজম্যানেজার
SoundDoseManager ক্লাসটি, যা audioserver প্রসেসে থাকে এবং AudioFlinger ক্লাসের একটি অংশ, HAL থেকে সাউন্ড ডোজ ডেটা সংগ্রহ করে অথবা বিকল্প ব্যবস্থা হিসেবে, HAL-এ পাঠানো ফ্রেমগুলো থেকে অভ্যন্তরীণভাবে তা গণনা করে। SoundDoseManager ক্লাসটি এই সাউন্ড ডোজ ডেটা SoundDoseHelper ক্লাসের কাছে পাঠিয়ে দেয়।
মেলপ্রসেসর এবং মেলঅ্যাগ্রিগেটর
যদি HAL, MEL মান সরবরাহ করতে না পারে, তাহলে অভ্যন্তরীণ শব্দ ডোজ গণনার জন্য libaudioutils এর MelProcessor এবং MelAggregator ইউটিলিটিগুলো ব্যবহৃত হয়।
MelProcessor ক্লাসে, MelProcessor::process(const void* buffer, size_t bytes) কল করার মাধ্যমে অডিও স্যাম্পলযুক্ত একটি বাফারের উপর মূল গণনাটি সম্পন্ন করা হয়। প্রয়োজন হলে OEM-রা তাদের HAL ইমপ্লিমেন্টেশনে MelProcessor ব্যবহার করতে পারেন।
MelAggregator ক্লাসটি বিভিন্ন অডিও পোর্ট থেকে MEL ভ্যালু গ্রহণ করে এবং সাত দিনের একটি রোলিং উইন্ডো ব্যবহার করে CSD ভ্যালু গণনা করে। MelAggregator::aggregateAndAddNewMelRecord_l(MelRecord mel) মেথডটি এই লজিকটি কার্যকর করে। ফলাফলগুলো AudioService সাথে যোগাযোগের জন্য SoundDoseManager ক্লাসে পাঠানো হয়।
বাস্তবায়ন
অ্যান্ড্রয়েড ১৪ থেকে HIDL ইন্টারফেস এক্সটেনশনগুলো অপ্রচলিত হয়ে গেছে, তাই গণনাকৃত MEL মান পুনরুদ্ধার এবং এক্সপোজার সতর্কতা জারি করার জন্য ISoundDose নামক নতুন HAL ইন্টারফেসটি AIDL Audio HAL- এর অংশ হিসেবে সংজ্ঞায়িত করা হয়েছে। তবে, যে সকল বাস্তবায়নকারীর AIDL Audio HAL সংহত করতে আরও সময় প্রয়োজন, তাদের জন্য আমাদের একটি স্বতন্ত্র সাউন্ড ডোজ AIDL HAL রয়েছে, যা ISoundDoseFactory ইন্টারফেসটি প্রদান করে। এটি ভবিষ্যতে অপ্রচলিত হয়ে যাবে।
সাউন্ড ডোজ সাপোর্টের জন্য HAL পদ্ধতিগুলো নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:
/**
* This interface provides functions related to sound exposure control required for compliance to
* EN/IEC 62368-1 3rd edition. Implementing this interface is mandatory for devices for which
* compliance to this standard is mandated and implementing audio offload decoding or other direct
* playback paths where volume control happens below the audio HAL.
*/
@VintfStability
interface ISoundDose {
/**
* Max value in dBA used for momentary exposure warnings as defined by IEC62368-1
* 3rd edition. This value represents the default RS2 upper bound.
*/
const int DEFAULT_MAX_RS2 = 100;
/** Min value of the RS2 threshold in dBA as defined by IEC62368-1 3rd edition. */
const int MIN_RS2 = 80;
/**
* Sets the RS2 upper bound used for momentary exposure warnings. Default value is
* DEFAULT_MAX_RS2 as specified in IEC62368-1 3rd edition.
*
* @param rs2ValueDbA custom RS2 upper bound to use
* @throws EX_ILLEGAL_ARGUMENT if rs2ValueDbA is greater than DEFAULT_MAX_RS2 or lower
* than MIN_RS2
*/
void setOutputRs2UpperBound(float rs2ValueDbA);
/**
* Gets the RS2 upper bound used for momentary exposure warnings.
*
* @return the RS2 upper bound in dBA
*/
float getOutputRs2UpperBound();
/**
* Registers the HAL callback for sound dose computation. If sound dose is supported
* the MEL values and exposure notifications will be received through this callback
* only. The internal framework MEL computation will be disabled.
* It is not possible to unregister the callback. The HAL is responsible to provide
* the MEL values throughout its lifecycle.
*
* @param callback to use when new updates are available for sound dose
*/
void registerSoundDoseCallback(in IHalSoundDoseCallback callback);
@VintfStability
oneway interface IHalSoundDoseCallback {
/**
* Called whenever the current MEL value exceeds the set RS2 upper bound.
*
* @param currentDbA the current MEL value which exceeds the RS2 upper bound
* @param audioDevice the audio device where the MEL exposure warning was recorded
*/
void onMomentaryExposureWarning(float currentDbA, in AudioDevice audioDevice);
@VintfStability
parcelable MelRecord {
/**
* Array of continuously recorded MEL values >= MIN_RS2 (1 per second).
* First value in the array was recorded at 'timestamp'.
*/
float[] melValues;
/**
* Corresponds to the time in seconds, as reported by CLOCK_MONOTONIC, when
* the first MEL entry in melValues was recorded. The timestamp values have
* to be consistent throughout all audio ports, equal timestamp values will
* be aggregated.
*/
long timestamp;
}
/**
* Provides a MelRecord containing continuous MEL values sorted by timestamp.
* Note that all the MEL values originate from the audio device specified by audioDevice.
* In case values from multiple devices need to be reported, the caller should execute
* this callback once for every device.
*
* @param melRecord contains the MEL values used for CSD
* @param audioDevice the audio device where the MEL values were recorded
*/
void onNewMelValues(in MelRecord melRecord, in AudioDevice audioDevice);
}
}
নতুন HAL ইন্টারফেসটি এমন কলব্যাক প্রয়োগ করে যা ফ্রেমওয়ার্ককে ক্ষণস্থায়ী এক্সপোজার সম্পর্কে অবহিত করে এবং যখনই আউটপুট লেভেল RS1 অতিক্রম করে, তখন MEL মান সরবরাহ করে। যখন এই ইন্টারফেসগুলি প্রয়োগ করা হয়, তখন ফ্রেমওয়ার্ক CSD রিপোর্টিংয়ের জন্য সেগুলি ব্যবহার করে। এই কলব্যাক প্রয়োগ ছাড়া, CSD মানের আনুমানিক হিসাব করার জন্য AudioFlinger এর একটি ফলব্যাক প্রয়োগ ব্যবহার করা হয়।
সাউন্ড ডোজ স্বতন্ত্র AIDL সমর্থন
যতক্ষণ না OEM-রা AIDL অডিও HAL-এ সাউন্ড ডোজ অন্তর্ভুক্ত করতে পারছে, ততক্ষণ তারা একটি বিকল্প ব্যবস্থা হিসেবে স্বতন্ত্র AIDL API ISoundDoseFactory ব্যবহার করতে পারে। ISoundDoseFactory ISoundDose ইন্টারফেসটি ব্যবহার করে, যেমনটি নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:
@VintfStability
interface ISoundDoseFactory {
/**
* Retrieve the sound dose interface for a given audio HAL module name.
*
* If a device must comply to IEC62368-1 3rd edition audio safety requirements and is
* implementing audio offload decoding or other direct playback paths where volume control
* happens below the audio HAL, it must return an instance of the ISoundDose interface.
* The same instance must be returned during the lifetime of the HAL module.
* If the HAL module does not support sound dose, null must be returned, without throwing
* any errors.
*
* @param module for which we trigger sound dose updates.
* @return An instance of the ISoundDose interface implementation.
* @throws EX_ILLEGAL_STATE If there was an error creating an instance.
*/
@nullable ISoundDose getSoundDose(in @utf8InCpp String module);
}
সাউন্ড ডোজ AIDL অডিও HAL সাপোর্ট
নিম্নলিখিত কোড নমুনায় দেখানো অনুযায়ী, IModule ইন্টারফেসকে এক্সটেন্ড করার মাধ্যমে AIDL Audio HAL-এর অংশ হিসেবে সাউন্ড ডোজ ইন্টারফেসটি দীর্ঘমেয়াদীভাবে সমর্থিত হয়:
@VintfStability
interface IModule {
…
/**
* Retrieve the sound dose interface.
*
* If a device must comply to IEC62368-1 3rd edition audio safety requirements and is
* implementing audio offload decoding or other direct playback paths where volume control
* happens below the audio HAL, it must return an instance of the ISoundDose interface.
* The same instance must be returned during the lifetime of the HAL module.
* If the HAL module does not support sound dose, null must be returned, without throwing
* any errors.
*
* @return An instance of the ISoundDose interface implementation.
* @throws EX_ILLEGAL_STATE If there was an error creating an instance.
*/
@nullable ISoundDose getSoundDose();
}
এই ফিচারটি IEC62368-1 তৃতীয় সংস্করণ এবং EN50332-3-এ বর্ণিত একটি নতুন নিয়মের বাস্তবায়ন, তাই এর কোনো বাহ্যিক API নেই।
OEM-রা নতুন HAL ইন্টারফেসগুলো প্রয়োগ করে এবং অডিও ফ্রেমওয়ার্কে CSD-এর জন্য সঠিক MEL ডেটা সরবরাহ করে (যা সুপারিশকৃত), অথবা একটি কাস্টম সাউন্ড ডোজ ইমপ্লিমেন্টেশন প্রদানের মাধ্যমে তাদের ডিভাইসগুলোকে সার্টিফাই করতে পারে।
শব্দ ডোজের গণনা সক্ষম করুন
ডিফল্টরূপে, AOSP এমন শ্রবণ সুরক্ষা লজিক সমর্থন করে যা বিদ্যমান EN50332-2 এবং IEC62368-1 10.6.5 স্ট্যান্ডার্ডগুলির সাথে সার্টিফিকেশন নিশ্চিত করে।
অ্যান্ড্রয়েড ১৪-এ, সাউন্ড ডোজের গণনা ডিফল্টরূপে নিষ্ক্রিয় থাকে।
Android 14-QPR1 থেকে শুরু করে শব্দ ডোজের গণনা সক্রিয় করতে নিম্নলিখিত নির্দেশিকাগুলি ব্যবহার করুন।
আপনার দেশে যদি শব্দমাত্রা সংক্রান্ত বিধিমালা বলবৎ থাকে, তাহলে
config.xmlফাইলেconfig_safe_media_volume_enabledtrueসেট করা আছে কিনা তা যাচাই করুন।EN50332-3 এবং IEC62368-1 10.6.3-এর সাথে সঙ্গতিপূর্ণ হতে, বিক্রেতাদের অবশ্যই
config.xmlএconfig_safe_sound_dosage_enabledফ্ল্যাগটিকেtrueতে সেট করতে হবে। যে ডিভাইসগুলি অফলোড ডিকোডিং সমর্থন করে এবং সাউন্ড ডোজ HAL ইন্টারফেস প্রয়োগ করে না, সেগুলির ক্ষেত্রেconfig_safe_sound_dosage_enabledtrueতে সেট করা যাবে না। এই ধরনের ক্ষেত্রে,config_safe_sound_dosage_enabledtrueতে সেট করলে ভুল CSD মান এবং সুরক্ষা শ্রবণ মানদণ্ডের জন্য সার্টিফিকেশন সংক্রান্ত সমস্যা দেখা দিতে পারে।
নিম্নলিখিত ডিসিশন গ্রাফটি সেই লজিক বর্ণনা করে, যা নির্ধারণ করে যে দেশের বিধিনিষেধ এবং ফ্ল্যাগের মানের উপর ভিত্তি করে CSD নাকি লিগ্যাসি হিয়ারিং সেফটি লেভেল (যা অ্যান্ড্রয়েড ১৪-এর আগে প্রয়োগ করা হয়েছিল) গণনা করা হবে।

চিত্র ২. শব্দ ডোজের গণনা সক্রিয় করুন (এই লজিকটি Android 14-QPR1-এ যোগ করা হয়েছে)।
বৈধতা
সাউন্ড ডোজের জন্য HAL ইন্টারফেস প্রয়োগ করার সময়, OEM-দের অবশ্যই IModule AIDL Audio HAL ইমপ্লিমেন্টেশনের জন্য VtsHalAudioCoreTargetTest দ্বারা, অথবা স্বতন্ত্র সাউন্ড ডোজ AIDL HAL ইমপ্লিমেন্টেশনের জন্য VtsHalSoundDoseFactoryTargetTest দ্বারা সংজ্ঞায়িত VTS টেস্ট কেসগুলির সাথে মিলিয়ে যাচাই করতে হবে।