Ses dozu

Android 14 ses sistemi ve Ses HAL'si (Ses HAL'si) ses dozu ölçümlerini sürekli izleyerek ve kullanıcılara, zararlı maruz kalma düzeyleriyle ilgili uyarılarda bulunmayı öğreteceğim.

Ses dozu, belirli bir süredeki ses basıncı seviyelerinin ölçümüdür. Ses dozunu izleyerek kullanıcıları sesin zarar verici etkilerinden korumaya yardımcı olabiliriz. aşırı veya uzun süre sese maruz kalma ile daha iyi işitme koruması sunar. kulaklığınızı taşınabilir Android cihazlarda kullanarak ve mikrofona erişme olasılığını en aza işitme engeli.

Güvenli dinleme cihazlarıyla ilgili yeni standartlar yönetmeliklere uygundur IEC62368-1 3. sürümde işitme korumasıyla ilgili gereksinimler (giriş gerektirir) ve EN50332-3 (abonelerle sınırlı erişim) yayınladı.

Ses dozu işlevi, OEM'lerin yeni işitme güvenliği yönetmeliklerine uymasını sağlar. Alıcı: ses dozunu desteklemesi, OEM’lerin arayüz özelliklerine ve yönetmeliklerine uyması gerekir tüm özelleştirme ve sertifikasyonlarla ilgili bilgi edinebilirsiniz. Özelleştirilmiş bir OEM uygulaması AOSP'nin varsayılan ses doz uygulamasını atlayabilir veya değiştirebilir. Ancak, AOSP uygulamasını kullanmanız önemle tavsiye edilir.

Ses dozu hesaplaması

IEC62368-1 3. sürüm ve EN50332-3'teki standartlar, hesaplanan ses dozunu (CSD) hesaplayarak maruz kalmayı ölçme CSD (şimdiki değeri) anlık maruz kalma düzeyleri (MEL) entegre edilerek hesaplanır. Yedi günlük birikmiş CSD değerlerinin sürekli kayan penceresi ses dozu hesaplaması.

IEC62368-1 3. Bölüm'ün 10.6.3.2 numaralı bölümü uyarınca CSD değeri% 100 sınırına ulaşırsa sistem, %100'lük her artışta, kullanıcıyı ses düzeyleriyle ilgili olarak uyarır. Kullanıcı uyarıyı onaylamazsa ses, önceden tanımlanmış radyasyona düşer IEC62368-1 Tablo 39'un enerji kaynağı sınıfı 1 (RS1) değeri.

IEC62368-1 3. sürümün 10.6.3.3 bölümünde belirtildiği gibi, sesle birlikte doz uyarıları görüyorsanız sistem, MEL değeri, Tablo 39'da belirtilen radyasyon enerji kaynağı sınıfı 2'yi (RS2) aşıyor IEC62368-1.

Bu tüzüklerle ilgili sertifika almak ve CSD değerlerini artırmak için kullanıcılar tarafından algılanan doğru çıkış değerlerini kullanmalıdır. (ör. medya oynatma çıkışı). CSD hesaplamasının her zaman kullanıcının ulaşabileceği gerçek ses basıncı seviyelerine yakın değerler kullanın. gösterilir.

Mimari

Karelerin çekildiği yere bağlı olarak, donanım özellikleri ve efektler oluşturulan karelerin güç düzeyini etkileyebilir. Sahip olunan hassas bir çıkış ses basıncı seviyesi ölçümü yaptıktan sonra, HAL'yi genişleterek MEL değerlerini doğrudan temel donanımdan alır ve olası dijital sinyal işlemci (DSP) veya hoparlör tarafından uygulanan efektler özellikleri (ör. empedans, hassasiyet ve frekans yanıtı gibi) gösterir.

HAL, yedek mekanizma olarak MEL değerlerini sağlayamazsa CSD'yi analiz edip hesaplar. Ses çerçevesindeki bu hesaplama, HAL ve çerçevelerden bildirilen oluşturulan çıkışla ilgili bilgilere göre ses DSP'ye gönderilenler.

Ses dozu iki bileşene sahiptir: SoundDoseHelper ve Şekil 1'de gösterildiği gibi SoundDoseManager,:

ses_doz_arkı

Şekil 1. Ses doz özelliğinin mimari bileşenleri

SesDoseYardımcısı

systemserver sürecinde bulunan SoundDoseHelper sınıfı, tüm ilgili ses dozlama verileri için ana toplama noktası olmalıdır. AudioService sınıfı, SoundDoseHelper sınıfını yönetir.

SoundDoseHelper sınıfı şunlardan sorumludur:

  • Yeni dozaj bilgilerini işleme
  • Devam eden ses doz değerleri
  • audioserver kilitlenmesi durumunda kurtarma durumu
  • Sistem kullanıcı arayüzü bildirimlerini tetikleme
  • Sesi kısılıyor

SoundDoseManager

audioserver sürecinde bulunan ve şu anda etkin olan SoundDoseManager sınıfı AudioFlinger kapsamında ses dozu verilerini HAL'den toplar veya dahili olarak hesaplar. yedek olarak ayarlayabilirsiniz. SoundDoseManager sınıfı şunları gönderir: SoundDoseHelper sınıfıyla ses dozu verilerini paylaştık.

MelProcessor ve MelAggregator

HAL, MEL değerlerini sağlamıyorsa MelProcessor ve MelAggregator libaudioutils konumundaki yardımcı programlar dahili ses dozu hesaplaması için kullanılır.

MelProcessor sınıfında, ana hesaplama işlemi MelProcessor::process(const void* buffer, size_t bytes) çağırarak ses örnekleri. OEM'ler, gerekirse HAL uygulamasında MelProcessor kullanabilir.

MelAggregator sınıfı, MEL değerlerini farklı ses bağlantı noktalarından alır ve CSD değerini yedi günlük hareketli bir zaman aralığıyla hesaplar. MelAggregator::aggregateAndAddNewMelRecord_l(MelRecord mel) yöntemi mantığı yürütür. Sonuçlar şunun için SoundDoseManager sınıfına gönderilecek: AudioService ile iletişim.

Uygulama

HIDL arayüz uzantılarının desteği Android 14'ten itibaren sonlandırılmıştır. Bu nedenle, hesaplanan MEL değerlerini almak ve karşılaşmaları yayınlamak için yeni HAL arayüzü uyarılar, adı ISoundDose, AIDL Ses HAL kapsamında tanımlanmıştır. Ancak, AIDL Audio HAL'yi entegre etmek için daha fazla zamana ihtiyaç duyan uygulamalar için bağımsız ses dozu AIDL HALISoundDoseFactory arayüzü. Bu, daha ileri bir zamana denk geliyor.

Ses dozu desteği için HAL yöntemleri aşağıdaki kodda gösterilmiştir örnek:

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

Yeni HAL arayüzünde geri çağırma özelliği kullanılıyor. kısa süreli karşılaşma hakkında çerçeveyi bilgilendiren ve MEL değerleri sağlayan her çıkış seviyesi RS1'i aştığında. Bu arayüzler uygulandığında, çerçeve, bunları CSD raporlaması için kullanır. Bu geri çağırma uygulaması olmadan, AudioFlinger'te yedek uygulama CSD değerlerinin tahminlerini hesaplamak için kullanılır.

Ses dozu bağımsız AIDL desteği

OEM'ler, ses dozunu AIDL ses HAL'sine entegre edene kadar AIDL API'yi ISoundDoseFactory kullanmayı deneyin. ISoundDoseFactory, aşağıda gösterildiği gibi ISoundDose arayüzünü kullanır şu kod örneğine bakalım:

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

Ses dozu AIDL Audio HAL desteği

Ses doz arayüzü, AIDL Ses HAL'sinin bir parçası olarak uzun vadede desteklenir. aşağıdaki kod örneğinde gösterildiği gibi IModule arayüzünü genişletin:

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

Bu özellik, IEC62368-1'de açıklanan yeni bir yönetmenin uygulanmasıdır 3. sürüm ve EN50332-3 olduğundan harici kullanıma yönelik API yoktur.

OEM'ler, yeni HAL arayüzlerini uygulayarak ve Ses çerçevesine CSD için doğru MEL verileri sağlama (önerilir) veya özel bir ses dozu uygulamasıdır.

Ses dozunun hesaplanmasını etkinleştir

AOSP, varsayılan olarak sertifika alınmasını sağlayan işitme güvenliği mantığını destekler. .

Android 14'te ses dozunun hesaplanması devre dışıdır varsayılan olarak ayarlanır.

Ses dozunun hesaplanmasını etkinleştirmek için aşağıdaki yönergeleri kullanın ilk 14-QPR1'den başlıyor.

  • Ses dozu yönetmelikleri ülkenizde uygulanıyorsa config.xml içinde config_safe_media_volume_enabled true olarak ayarlandı.

  • EN50332-3 ve IEC62368-1 10.6.3 ile uyumlu olmak için tedarikçi firmaların config_safe_sound_dosage_enabled bayrağı config.xml kime: true. Boşaltma kodunu çözmeyi destekleyen ve ses doz HAL arayüzleri, config_safe_sound_dosage_enabled, true olarak ayarlanmamalıdır. Böyle durumlarda config_safe_sound_dosage_enabled politikasının true olarak ayarlanması yanlış CSD'ye yol açabilir değerleri ve sertifika sorunları hakkında bildirimler alabilirsiniz.

Aşağıdaki karar grafiğinde, deneme sonuçlarına göre ülke kısıtlamaları ve bayrakların değerleri (CSD veya eski) işitme güvenliği düzeyleri (Android 14'ten önce uygulanan) hesaplanır.

csd'yi etkinleştir

Şekil 2. Ses dozunun hesaplanmasını etkinleştir (Mantıksal Android 14-QPR1).

Doğrulama

OEM'ler, ses dozu için HAL arayüzünü uygularken VtsHalAudioCoreTargetTest tarafından tanımlanan VTS test durumları IModule AIDL Audio HAL uygulaması için veya VtsHalSoundDoseFactoryTargetTest tarafından test edebilirsiniz.