Dose sonore

Android 14 est compatible avec la dose sonore Framework audio et Audio HAL en surveillant en permanence les mesures de la dose sonore et l'envoi d'avertissements aux utilisateurs lorsque les niveaux d'exposition sont préjudiciables.

La dose acoustique est une mesure du niveau de pression acoustique sur une période donnée. En surveillant la dose sonore, nous pouvons aider à protéger les utilisateurs contre les effets Exposition excessive ou prolongée aux sons, offrant ainsi une meilleure protection auditive lorsque vous utilisez des écouteurs sur des appareils Android portables et que vous réduisez d'une déficience auditive.

Les nouvelles normes pour les appareils d'écoute sécurisée sont conformes à la réglementation exigences relatives à la protection auditive de la CEI62368-1 3e édition (connexion requise) et EN50332-3 (accès limité aux abonnés), qui introduisent le concept de dose sonore.

La fonction de dose sonore permet aux OEM de respecter les nouvelles réglementations sur la sécurité auditive. À prennent en charge la dose sonore, les OEM doivent respecter les spécifications d'interface et les réglementations pour toutes les personnalisations et certifications. Une implémentation OEM personnalisée peut contourner ou modifier l'implémentation AOSP par défaut de la dose sonore. Toutefois, l'implémentation d'AOSP est vivement recommandée.

Calcul de la dose sonore

Les normes CEI62368-1 3e édition et EN50332-3 augmentent la précision des mesure l'exposition au bruit en calculant la dose sonore (CSD) calculée. La valeur CSD est calculé en intégrant les niveaux d'exposition momentanée (MEL) au fil du temps. Un délai de sept jours une fenêtre glissante continue de valeurs CSD accumulées est maintenue pour le calcul de la dose sonore.

Conformément à la section 10.6.3.2 de la norme CEI62368-1, Si la valeur de CSD atteint la limite de 100 %, le système alerte l'utilisateur sur le niveau sonore à chaque augmentation de 100%. Si l'utilisateur n'a pas pris connaissance de l'avertissement, le volume descend au niveau de rayonnement prédéfini valeur de classe de source d'énergie 1 (RS1) du tableau 39 de la norme CEI62368-1.

Comme indiqué dans la section 10.6.3.3 de la norme CEI62368-1 3e édition, avec le son dose d'exposition, le système doit émettre un avertissement basé sur l'exposition chaque fois que La valeur MEL dépasse la valeur de la classe d'énergie de rayonnement 2 (RS2) indiquée dans le tableau 39 des CEI62368-1

Pour obtenir une certification conforme à ces réglementations et améliorer la valeur CSD le système doit utiliser des valeurs de sortie précises telles que perçues par les utilisateurs (comme la sortie de lecture multimédia). Il est important que le calcul CSD Utilisez des valeurs proches des niveaux de pression acoustique réels auxquels l'utilisateur est exposé.

Architecture

Selon l'endroit où les images sont capturées, les caractéristiques et effets matériels des transducteurs peuvent influencer le niveau de puissance des frames rendus. Pour avoir une mesure précise du niveau de pression acoustique à la sortie, nous avons étendu les valeurs MEL directement à partir du matériel sous-jacent et tiennent compte des effets appliqués par le processeur de signal numérique (DSP) ou le haut-parleur telles que l'impédance, la sensibilité et la réponse en fréquence.

Si le HAL ne peut pas fournir de valeurs MEL, comme mécanisme de secours, l'audio analyse et calcule la CDD. Ce calcul dans le framework audio est en fonction des informations sur la sortie rendue signalée par HAL et des images envoyées à la DSP audio.

La fonctionnalité "Dose sonore" introduit deux composants : SoundDoseHelper et SoundDoseManager,, comme illustré dans la figure 1:

arche_dose_son

Figure 1 : Composants architecturaux de la fonctionnalité de dose sonore.

SoundDoseHelper

La classe SoundDoseHelper, qui se trouve dans le processus systemserver, est principal point de collecte de toutes les données pertinentes sur la posologie des sons. AudioService gère la classe SoundDoseHelper.

La classe SoundDoseHelper permet d'effectuer les opérations suivantes:

  • Gérer les nouvelles informations sur la posologie
  • Conserver les valeurs de dose audio
  • Récupération de l'état en cas de plantage de audioserver
  • Déclencher des notifications de l'UI du système
  • Baisse du volume...

SoundDoseManager

La classe SoundDoseManager, qui se trouve dans le processus audioserver et qui est partie de AudioFlinger collecte les données de dose sonore à partir du HAL ou les calcule en interne, à partir des trames envoyées au HAL. La classe SoundDoseManager envoie les données de dose sonore à la classe SoundDoseHelper.

MelProcessor et MelAggregator

Si le HAL ne peut pas fournir de valeurs MEL, MelProcessor et MelAggregator utilitaires de libaudioutils sont utilisés pour le calcul interne des doses sonores.

Dans la classe MelProcessor, le calcul principal est effectué sur un tampon avec échantillons audio en appelant MelProcessor::process(const void* buffer, size_t bytes). Les OEM peuvent utiliser MelProcessor dans leur implémentation HAL si nécessaire.

La classe MelAggregator reçoit les valeurs MEL de différents ports audio et calcule la valeur CSD sur une période glissante de sept jours. La méthode MelAggregator::aggregateAndAddNewMelRecord_l(MelRecord mel) exécute la logique. Les résultats sont envoyés à la classe SoundDoseManager pour communication avec AudioService.

Implémentation

Les extensions d'interface HIDL sont obsolètes à partir d'Android 14, La nouvelle interface HAL permet de récupérer les valeurs MEL calculées et d'émettre l'exposition. avertissements, nommés ISoundDose, est définie dans le cadre du HAL audio AIDL. Toutefois, Pour ceux qui ont besoin de plus de temps pour intégrer AIDL Audio HAL, nous proposons autonome Sound dose AIDL HAL, qui propose ISoundDoseFactory. Ce sera à l'avenir.

Les méthodes HAL pour la prise en charge de la dose sonore sont illustrées dans le code suivant : exemple:

/**
 * 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);
    }
}

La nouvelle interface HAL implémente les rappels. qui informent le cadre sur l'exposition momentanée et fournissent des valeurs MEL chaque fois que le niveau de sortie dépasse RS1. Lorsque ces interfaces sont implémentées, le cadre les utilise pour créer des rapports sur les CSD. Sans cette implémentation de rappel, une implémentation de remplacement sur AudioFlinger est utilisée pour calculer les estimations des valeurs de CSD.

Compatibilité AIDL autonome de Sound Dose

En attendant que les OEM puissent intégrer la fonctionnalité de dosage sonore dans le HAL audio AIDL, ils peuvent utiliser la l'API AIDL autonome ISoundDoseFactory comme solution de contournement. ISoundDoseFactory utilise l'interface ISoundDose, comme indiqué dans les l'exemple de code suivant:

@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);
}

Compatibilité avec le composant Audio HAL AIDL de la dose de son

L'interface de dose sonore est compatible à long terme dans le cadre du HAL audio AIDL par Extension de l'interface IModule, comme illustré dans l'exemple de code suivant:

@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();
}

Cette fonctionnalité est une mise en œuvre d'une nouvelle réglementation décrite dans la norme CEI62368-1 3e édition et EN50332-3. Il n'y a donc pas d'API externe.

Les OEM peuvent certifier leurs appareils en implémentant les nouvelles interfaces HAL et fournir des données MEL précises pour la CSD au framework audio (recommandé) ou en et de fournir une implémentation personnalisée de la dose de son.

Activer le calcul de la dose sonore

Par défaut, l'AOSP prend en charge la logique de sécurité auditive qui garantit la certification aux normes EN50332-2 et CEI62368-1 10.6.5.

Sous Android 14, le calcul de la dose sonore est désactivé par défaut.

Utilisez les consignes suivantes pour permettre le calcul de la dose sonore à partir d'Android 14-QPR1.

  • Si la réglementation sur les doses sonores est appliquée dans votre pays, vérifiez si config_safe_media_volume_enabled en config.xml est défini sur true.

  • Pour être conformes aux normes EN50332-3 et CEI62368-1 10.6.3, les fournisseurs doivent se superposer l'indicateur config_safe_sound_dosage_enabled dans config.xml à true. Pour les appareils qui prennent en charge le décodage de déchargement et qui n'implémentent pas le interfaces HAL de la dose de son config_safe_sound_dosage_enabled ne doit pas être défini sur true. Dans ce cas, Si vous définissez config_safe_sound_dosage_enabled sur true, vous risquez d'obtenir un CSD inexact. et les problèmes de certification liés aux normes de sécurité auditive.

Le graphique de décision suivant décrit la logique qui détermine si, en fonction de les restrictions locales applicables et les valeurs des drapeaux (le CSD ou l'ancien code) niveaux de sécurité auditive (implémentés avant Android 14) sont calculés.

activer les CSS

Figure 2. Activer le calcul de la dose sonore (la logique est ajoutée dans Android 14-QPR1).

Validation

Lors de l'implémentation de l'interface HAL pour la dose sonore, les OEM doivent vérifier les scénarios de test VTS définis par VtsHalAudioCoreTargetTest pour l'implémentation IModule AIDL Audio HAL ou par VtsHalSoundDoseFactoryTargetTest pour l'implémentation autonome de Sounddose AIDL.