جرعة الصوت

يتوافق Android 14 مع جرعة الصوت في إطار عمل الصوت وHAL الصوت من خلال المراقبة المستمرة لقياسات الجرعات الصوتية وإصدار تحذيرات للمستخدمين بشأن الإضرار بمستويات التعرّض.

جرعة الصوت هي قياس لمستويات ضغط الصوت خلال فترة زمنية. ومن خلال مراقبة جرعة الصوت، يمكننا المساعدة في حماية المستخدمين من الآثار الضارة التعرض للصوت بشكل مفرط أو مطوّل، ما يوفّر حماية أفضل للسمع عند استخدام سماعات الرأس على أجهزة Android المحمولة وتقليل فرصة ضعف السمع.

تتوافق المعايير الجديدة لأجهزة الاستماع الآمنة مع اللوائح التنظيمية متطلبات حماية السمع في الإصدار الثالث من IEC62368-1 (يجب تسجيل الدخول) وEN50332-3 (يقتصر الوصول إليها على المشتركين)، وهو ما يوضّح مفهوم جرعة الصوت.

وتتيح وظيفة جرعة الصوت للمصنّعين الأصليين للأجهزة اتّباع اللوائح الجديدة لسلامة السمع. إلى جرعة الصوت، يجب أن يتبع المصنّعون الأصليون للأجهزة مواصفات الواجهة واللوائح لجميع عمليات التخصيص والشهادات. عملية تنفيذ مخصّصة للمصنّع الأصلي للجهاز تجاوز أو تعديل التنفيذ التلقائي لجرعة الصوت من AOSP. ومع ذلك، باستخدام تنفيذ AOSP.

احتساب جرعة الصوت

تعمل المعايير في الإصدار الثالث من IEC62368-1 وEN50332-3 على زيادة دقة قياس التعرض للأصوات من خلال حساب جرعة الصوت المحسوبة (CSD). CSD هو عن طريق دمج مستويات العرض اللحظي (MEL) بمرور الوقت. سبعة أيام يتم الاحتفاظ بفترة تحرك القيم المتراكمة لقيم CSD بشكل مستمر حساب جرعات الصوت.

وفقًا للفقرة 10.6.3.2 من IEC62368-1 3 فإذا وصلت قيمة CSD إلى الحد البالغ 100%، فسيعمل النظام تنبّه المستخدم بشأن مستويات الصوت عند كل زيادة بنسبة 100٪. إذا كان المستخدم عندما لا يتعرف على التحذير، يخفض مستوى الصوت إلى الإشعاع المحدد مسبقًا فئة مصدر الطاقة 1 (RS1) للجدول 39 من IEC62368-1.

كما هو مذكور في القسم 10.6.3.3 من IEC62368-1 الإصدار الثالث، بالإضافة إلى الصوت أن يبدأ النظام تحذيرًا يستند إلى التعرّض في كل مرة تتجاوز قيمة MEL قيمة فئة مصدر طاقة الإشعاع 2 (RS2) الواردة في الجدول 39 IEC62368-1.

للحصول على شهادة اعتماد وفقًا لهذه اللوائح وزيادة قيمة عمولة CSD ذات صلة، يجب أن يستخدم النظام قيمًا دقيقة للمخرجات كما يلاحظها المستخدمون (مثل إخراج تشغيل الوسائط). من المهم حساب CSD استخدام قيم قريبة من مستويات ضغط الصوت الفعلية التي قد يصل إليها المستخدم البيانات.

هندسة معمارية

بناءً على مكان التقاط الإطارات، وخصائص الجهاز وتأثيراته من المحوّلات يمكن أن يؤثر في مستوى طاقة الإطارات المعروضة. من أجل لقياس مستوى ضغط الصوت الناتج، فقد وسعنا نطاق HAL للحصول على قيم MEL مباشرةً من الأجهزة الأساسية وحساب التأثيرات التي يطبّقها معالج الإشارات الرقمية (DSP) أو مكبّر الصوت الخصائص، مثل المعاوقة والحساسية واستجابة التردد.

إذا لم يتمكن HAL من توفير قيم MEL، كآلية احتياطية، يبدأ الصوت ويحلل علوم الكمبيوتر (CSD) ويحسبه. تتم عملية الحوسبة هذه في إطار العمل الصوتي استنادًا إلى المعلومات حول الإخراج المعروض المبلّغ عنه من طبقة تجريد الأجهزة (HAL) والإطارات التي يتم إرسالها إلى معالج الصوت DSP.

تقدّم جرعة الصوت مكوّنَين، هما SoundDoseHelper SoundDoseManager, كما هو موضح في الشكل 1:

قوس_الجرعة_الصوتية

الشكل 1. تمثّل هذه السمة المكونات المعمارية لميزة جرعة الصوت.

SoundDoseHelper

الفئة SoundDoseHelper، الموجودة في عملية systemserver، هي نقطة الاستلام الرئيسية لجميع بيانات الجرعات الصوتية ذات الصلة. AudioService يدير الفئة فئة SoundDoseHelper.

تكون الفئة SoundDoseHelper مسؤولة عن ما يلي:

  • معالجة معلومات الجرعات الجديدة
  • قيم جرعة الصوت الدائمة
  • حالة الاسترداد في حال تعطُّل audioserver
  • تشغيل إشعارات واجهة مستخدِم النظام
  • خفض مستوى الصوت

مدير SoundDoseManager

الفئة SoundDoseManager، التي تتوفر في عملية audioserver ويتم من AudioFlinger تجمع بيانات جرعة الصوت من HAL أو تحسبها داخليًا، من الإطارات المرسلة إلى طبقة تجريد الأجهزة (HAL). يرسل الصف SoundDoseManager بيانات جرعة الصوت إلى الفئة SoundDoseHelper.

MelProcessor وMeAggregator

إذا تعذّر على HAL تقديم قيم MEL، سيتم ضبط MelProcessor وMelAggregator المرافق في libaudioutils تُستخدم في حساب جرعة الصوت الداخلية.

في الفئة MelProcessor، يتم إجراء العملية الحسابية الرئيسية على مخزن مؤقت باستخدام العيّنات الصوتية من خلال طلب الرقم MelProcessor::process(const void* buffer, size_t bytes). يمكن للمصنّعين الأصليين للأجهزة استخدام MelProcessor في تنفيذ HAL إذا لزم الأمر.

تتلقى الفئة MelAggregator قيم MEL من منافذ صوت مختلفة، قيمة CSD بفترة تحرك تبلغ سبعة أيام. الطريقة MelAggregator::aggregateAndAddNewMelRecord_l(MelRecord mel) وينفذ المنطق. يتم إرسال النتائج إلى الصف SoundDoseManager عن التواصل مع AudioService.

التنفيذ

تم إيقاف إضافات واجهة HIDL نهائيًا بدءًا من الإصدار 14 من نظام التشغيل Android، وبالتالي، يمكن استخدام واجهة HAL الجديدة لاسترداد قيم MEL المحسوبة وتحديد عدد المشاهدين تحذيرات، باسم ISoundDose، كجزء من HAL Audio لـ AIDL. ومع ذلك، بالنسبة إلى القائمين بالتنفيذ الذين يحتاجون إلى مزيد من الوقت لدمج 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 الجديدة ميزة استدعاءات تحدّد إطار العمل بشأن العرض المؤقت وتوفِّر قيم MEL كلما تجاوز مستوى الإخراج RS1. وعند تنفيذ هذه الواجهات، ويستخدِمها إطار العمل لإعداد تقارير CSD. بدون تنفيذ معاودة الاتصال هذه، عملية تنفيذ احتياطية على AudioFlinger لحساب تقديرات قيم CSD.

دعم AIDL المستقل لجرعة الصوت

إلى أن يتمكن المصنّعون الأصليون للأجهزة في دمج جرعة الصوت في HAL للصوت في AIDL، يمكنهم استخدام واجهة برمجة تطبيقات AIDL المستقلة 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);
}

دعم HAL لـ AIDL الصوتية لجرعة الصوت

يتم دعم واجهة جرعة الصوت على المدى الطويل كجزء من بروتوكول AIDL Audio HAL من خلال توسيع واجهة IModule، كما هو موضح في نموذج الرمز التالي:

@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). 3. وEN50332-3، لذلك لا تتوفّر واجهات برمجة تطبيقات خارجية.

يمكن للمصنّعين الأصليين للأجهزة اعتماد أجهزتهم من خلال تنفيذ واجهات HAL الجديدة توفير بيانات MEL دقيقة لـ CSD لإطار العمل الصوتي (يُنصح به)، أو من خلال وتوفير تطبيق مخصّص لجرعة الصوت

تفعيل حساب جرعة الصوت

تتوافق ميزة AOSP تلقائيًا مع منطق أمان السمع الذي يضمن الحصول على شهادة الاعتماد. بمعايير EN50332-2 وIEC62368-1 10.6.5 الحالية

في Android 14، تم إيقاف احتساب جرعة الصوت. تلقائيًا

يُرجى اتّباع الإرشادات التالية لتفعيل حساب جرعة الصوت. بدءًا من Android 14-QPR1

  • إذا كانت اللوائح التنظيمية لجرعات الصوت سارية في بلدك، يُرجى التحقّق مما إذا config_safe_media_volume_enabled في config.xml تم تعيينها على true.

  • للامتثال للمعيار EN50332-3 وIEC62368-1 10.6.3، على المورّدين تقديم منصات. علم config_safe_sound_dosage_enabled في config.xml إلى true. بالنسبة إلى الأجهزة التي تتيح فك ترميز البيانات غير المرغوب فيها ولا تستخدم واجهات HAL للجرعة الصوتية يجب عدم ضبط config_safe_sound_dosage_enabled على true. في مثل هذه الحالات، إنّ ضبط config_safe_sound_dosage_enabled على true يمكن أن يؤدي إلى عرض CSD غير دقيق. القيم ومشاكل الشهادات المتعلقة بمعايير السلامة السمعية.

يصف الرسم البياني للقرار التالي المنطق الذي يحدد ما إذا كان، بناءً على القيود المفروضة على البلدان وقيم العلامات، سواء كانت CSD أو النظام القديم مستويات أمان السمع (تم تنفيذها قبل الإصدار 14 من نظام Android) البيانات.

تفعيل_csd

الشكل 2. تمكين حساب جرعة الصوت (تتم إضافة المنطق في Android 14-QPR1).

التحقُّق

عند تطبيق واجهة HAL لجرعة الصوت، يجب على المصنّعين الأصليين للأجهزة التحقق من ذلك وفقًا حالات اختبار VTS المحددة في VtsHalAudioCoreTargetTest لتنفيذ IModule AIDL Audio HAL، أو من خلال VtsHalSoundDoseFactoryTargetTest لتنفيذ جرعة الصوت المستقلة من AIDL