מינון קול

אנדרואיד 14 מספקת תמיכה במינון קול במסגרת האודיו וב-Audio HAL על ידי ניטור רציף של מדידות מינון הקול ומתן אזהרות למשתמשים לגבי רמות חשיפה מזיקות.

מינון הקול הוא מדידה של רמות לחץ הקול לאורך תקופה. על ידי ניטור מינון הקול, אנו יכולים לעזור להגן על המשתמשים מההשפעות המזיקות של חשיפה מוגזמת או ממושכת לקול, ובכך להציע הגנה טובה יותר על שמיעה בעת שימוש באוזניות במכשירי אנדרואיד ניידים ולמזער את הסיכוי לליקוי שמיעה.

התקנים החדשים למכשירי האזנה בטוחים תואמים את הדרישות הרגולטוריות להגנת שמיעה ב- IEC62368-1 המהדורה השלישית (דורש כניסה) ו- EN50332-3 (הגישה מוגבלת למנויים), המציגות את הרעיון של מינון קול.

פונקציית מינון הקול מאפשרת ליצרני ציוד מקורי לציית לתקנות בטיחות השמיעה החדשות. כדי לתמוך במינון צליל, יצרני OEM חייבים לעקוב אחר מפרטי ממשק ותקנות עבור כל ההתאמות האישיות וההסמכות. יישום OEM מותאם אישית יכול לעקוף או לשנות את יישום ברירת המחדל של AOSP של מינון הקול. עם זאת, מומלץ מאוד להשתמש ביישום AOSP.

חישוב מינון קול

התקנים במהדורה השלישית של IEC62368-1 וב-EN50332-3 מגבירים את הדיוק של מדידת חשיפה לקול על ידי חישוב מינון הקול המחושב (CSD). CSD מחושב על ידי שילוב רמות חשיפה רגעיות (MEL) לאורך זמן. חלון מתגלגל של שבעה ימים של ערכי CSD מצטברים נשמר עבור חישוב מינון הקול.

בהתאם לסעיף 10.6.3.2 של IEC62368-1 מהדורה שלישית, אם ערך ה-CSD מגיע לגבול ה-100%, המערכת מתריע בפני המשתמש לגבי רמות הקול בכל עלייה של 100%. אם המשתמש לא מאשר את האזהרה, עוצמת הקול יורדת לערך המוגדר מראש של מקור אנרגית קרינה Class 1 (RS1) של טבלה 39 של IEC62368-1.

כפי שהוזכר בסעיף 10.6.3.3 של IEC62368-1 מהדורה 3, יחד עם אזהרות מינון הקול, המערכת חייבת להפעיל אזהרה מבוססת חשיפה בכל פעם שערך ה-MEL חורג מערך מקור אנרגיית הקרינה Class 2 (RS2) של טבלה 39 של IEC62368 -1.

לצורך הסמכה עם תקנות אלה וכדי להפוך את ערכי ה-CSD לרלוונטיים יותר, על המערכת להשתמש בערכי פלט מדויקים כפי שהם נתפסים על ידי המשתמשים (כגון פלט השמעת המדיה). חשוב לחישוב ה-CSD להשתמש בערכים שקרובים לרמות לחץ הקול בפועל שאליהן המשתמש נחשף.

ארכיטקטורה

בהתאם למקום שבו הפריימים נלכדים, מאפייני החומרה וההשפעות של המתמרים יכולים להשפיע על רמת ההספק של הפריימים המעובדים. כדי לקבל מדידה מדויקת של רמת לחץ הקול בפלט, הרחבנו את ה-HAL כדי לקבל את ערכי ה-MEL ישירות מהחומרה הבסיסית ולהתחשב באפקטים אפשריים המופעלים על ידי מעבד האותות הדיגיטלי (DSP) או מאפייני הרמקולים, כגון עכבה, רגישות, ותגובת תדרים.

אם ה-HAL אינו יכול לספק ערכי MEL, כמנגנון ניצול, מסגרת האודיו מנתחת ומחשבת CSD. חישוב זה במסגרת האודיו מבוסס על המידע על הפלט המעובד שדווח מ-HAL, ועל מסגרות שנשלחות ל-DSP של האודיו.

מנת קול מציגה שני רכיבים, SoundDoseHelper ו- SoundDoseManager, כפי שמוצג באיור 1:

sound_dose_arch

איור 1. רכיבים אדריכליים של תכונת מינון הקול.

SoundDoseHelper

מחלקת SoundDoseHelper , אשר חיה בתהליך systemserver , היא נקודת האיסוף העיקרית של כל נתוני מינון הקול הרלוונטיים. מחלקת AudioService מנהלת את מחלקת SoundDoseHelper .

כיתת SoundDoseHelper אחראית על הדברים הבאים:

  • טיפול במידע חדש על מינון
  • ערכי מינון קול מתמשכים
  • מצב שחזור במקרה של קריסת audioserver
  • הפעלת התראות ממשק המשתמש של המערכת
  • הורדת נפח

SoundDoseManager

המחלקה SoundDoseManager , אשר חיה בתהליך audioserver ומהווה חלק ממחלקת AudioFlinger , אוספת את נתוני מינון הקול מה-HAL או מחשבת אותם באופן פנימי, כ-fallback, מהפריימים הנשלחים ל-HAL. המחלקה SoundDoseManager שולחת את נתוני מינון הקול למחלקה SoundDoseHelper .

MelProcessor ו-MelAggregator

אם ה-HAL אינו יכול לספק ערכי MEL, כלי השירות MelProcessor ו- MelAggregator ב- libaudioutils משמשים לחישוב מינון הקול הפנימי.

במחלקה MelProcessor , החישוב הראשי מתבצע על מאגר עם דגימות אודיו על ידי קריאה ל- MelProcessor::process(const void* buffer, size_t bytes) . יצרני OEM יכולים להשתמש MelProcessor בהטמעת ה-HAL שלהם במידת הצורך.

מחלקת MelAggregator מקבלת את ערכי ה-MEL מיציאות אודיו שונות ומחשבת את ערך ה-CSD עם חלון מתגלגל של שבעה ימים. השיטה MelAggregator::aggregateAndAddNewMelRecord_l(MelRecord mel) מבצעת את ההיגיון. התוצאות נשלחות לכיתה SoundDoseManager לתקשורת עם AudioService .

יישום

הרחבות ממשק HIDL הוצאו משימוש החל מאנדרואיד 14, כך שממשק HAL החדש לאחזור ערכי MEL מחושבים והנפקת אזהרות חשיפה, בשם ISoundDose , מוגדר כחלק מ- 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 החדש מיישם התקשרויות המודיעות למסגרת על חשיפה רגעית ומספק ערכי MEL בכל פעם שרמת הפלט עולה על RS1. כאשר ממשקים אלו מיושמים, המסגרת משתמשת בהם לדיווח CSD. ללא הטמעת התקשרות חוזרת זו, מימוש fallback על AudioFlinger משמש לחישוב הערכות של ערכי CSD.

תמיכת AIDL עצמאית במינון קול

עד שיצרני OEM יוכלו לשלב מינון קול ב-AIDL audio 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 Audio HAL תמיכה

ממשק מינון הקול נתמך לטווח ארוך כחלק מ-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 המהדורה השלישית וב-EN50332-3, כך שאין ממשקי API הפונה כלפי חוץ.

יצרני OEM יכולים לאשר את המכשירים שלהם על ידי הטמעת ממשקי HAL החדשים ומתן נתוני MEL מדויקים עבור CSD למסגרת האודיו (מומלץ), או על ידי מתן מינון סאונד מותאם אישית.

אפשר את חישוב מינון הקול

כברירת מחדל, AOSP תומך בלוגיקת בטיחות השמיעה המבטיחה הסמכה לתקנים הקיימים EN50332-2 ו-IEC62368-1 10.6.5.

באנדרואיד 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).

enable_csd

איור 2. אפשר את חישוב מינון הקול (ההיגיון נוסף באנדרואיד 14-QPR1).

מַתַן תוֹקֵף

בעת הטמעת ממשק HAL עבור מינון צליל, יצרני ציוד מקורי חייבים לאמת מול מקרי הבדיקה של VTS שהוגדרו על ידי VtsHalAudioCoreTargetTest עבור יישום IModule AIDL Audio HAL, או על ידי VtsHalSoundDoseFactoryTargetTest עבור מימוש מינון הקול העצמאי AIDL HAL.