Android 14, ses dozu ölçümlerini sürekli olarak izleyerek ve kullanıcılara zararlı maruz kalma seviyeleri hakkında uyarılar göndererek ses dozu için ses çerçevesi ve ses HAL'inde destek sağlar.
Ses dozu, belirli bir süre boyunca ses basıncı seviyelerinin ölçümüdür. Ses dozunu izleyerek kullanıcıları aşırı veya uzun süre sese maruz kalmanın zarar verici etkilerinden koruyabiliriz. Böylece, taşınabilir Android cihazlarda kulaklık kullanırken daha iyi işitme koruması sunabilir ve işitme bozukluğu ihtimalini en aza indirebiliriz.
Güvenli dinleme cihazlarıyla ilgili yeni standartlar, IEC62368-1 3. baskı (giriş gerektirir) ve EN50332-3 (erişim abonelerle sınırlıdır) belgelerinde işitme korumasıyla ilgili yasal şartlara uygundur. Bu belgelerde ses dozu kavramı tanıtılmıştır.
Ses dozu işlevi, OEM'lerin yeni işitme güvenliği yönetmeliklerine uymasını sağlar. OEM'ler, ses dozunu desteklemek için tüm özelleştirmeler ve sertifikalar için arayüz spesifikasyonlarına ve yönetmeliklerine uymalıdır. Özelleştirilmiş bir OEM uygulaması, ses dozunun AOSP varsayılan uygulamasını atlayabilir veya değiştirebilir. Ancak AOSP uygulamasının kullanılması önemle tavsiye edilir.
Ses dozu hesaplaması
IEC62368-1 3. baskı ve EN50332-3'teki standartlar, hesaplanmış ses dozunu (CSD) hesaplayarak ses maruziyetinin ölçülmesinin doğruluğunu artırır. CSD, zaman içinde anlık maruz kalma seviyeleri (MEL) entegre edilerek hesaplanır. Ses dozu hesaplaması için, birikmiş CSD değerlerinin yedi günlük sürekli olarak kayan bir aralığı korunur.
IEC62368-1 3. sürü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üzeyleri hakkında uyarır. Kullanıcı uyarıyı onaylamıyorsa ses seviyesi, IEC62368-1'deki Tablo 39'da önceden tanımlanmış radyasyon enerjisi kaynağı sınıf 1 (RS1) değerine düşürülür.
IEC62368-1 3. sürüm Bölüm 10.6.3.3'te belirtildiği gibi, ses dozu uyarılarıyla birlikte MEL değeri, IEC62368-1 Tablo 39'un radyasyon enerjisi kaynağı sınıfı 2 (RS2) değerini her aştığında sistem, ses dozu uyarılarıyla birlikte maruz kalmaya dayalı bir uyarı başlatmalıdır.
Bu yönetmeliklere uygun sertifika almak ve CSD değerlerini daha alakalı hale getirmek için sistemin, kullanıcılar tarafından algılanan doğru çıkış değerlerini (ör. medya oynatma çıkışı) kullanması gerekir. CSD hesaplamasının, kullanıcının maruz kaldığı gerçek ses basıncı seviyelerine yakın değerler kullanması önemlidir.
Mimari
Çerçevelerin yakalandığı yere bağlı olarak, dönüştürücülerin donanım özellikleri ve efektleri, oluşturulan karelerin güç düzeyini etkileyebilir. Doğru çıkış ses basıncı seviyesi ölçümü elde etmek için HAL'i, MEL değerlerini doğrudan temel donanımdan alacak ve dijital sinyal işlemcisi (DSP) veya hoparlör özellikleri (ör. empedans, hassasiyet ve frekans yanıtı) tarafından uygulanan olası etkileri hesaba katacak şekilde genişlettik.
HAL, MEL değerleri sağlayamazsa ses çerçevesi, yedek mekanizma olarak CSD'yi analiz edip hesaplar. Ses çerçevesindeki bu hesaplama, HAL'den bildirilen oluşturulan çıkış ve ses TTP'ye gönderilen kareler hakkındaki bilgilere dayanır.
Ses dozu, Şekil 1'de gösterildiği gibi SoundDoseHelper
ve SoundDoseManager,
olmak üzere iki bileşen içerir:
Şekil 1. Ses dozu özelliğinin mimari bileşenleri.
SesDoseYardımcısı
systemserver
işleminde bulunan SoundDoseHelper
sınıfı, ilgili tüm ses dozlama verileri için ana toplama noktasıdır. AudioService
sınıfı, SoundDoseHelper
sınıfını yönetir.
SoundDoseHelper
sınıfı aşağıdakilerden sorumludur:
- Yeni dozaj bilgilerini işleme
- Kalıcı ses dozu değerleri
audioserver
kilitlendiğinde durumu kurtarma- Sistem kullanıcı arayüzü bildirimlerini tetikleme
- Sesi azaltma
SoundDoseManager
audioserver
işleminde bulunan ve AudioFlinger
sınıfının bir parçası olan SoundDoseManager
sınıfı, ses dozu verilerini HAL'den toplar veya yedek olarak HAL'e gönderilen karelerden dahili olarak hesaplar. SoundDoseManager
sınıfı, ses dozu verilerini SoundDoseHelper
sınıfına gönderir.
MelProcessor ve MelAggregator
HAL, MEL değerleri sağlayamazsa dahili ses dozu hesaplaması için libaudioutils
bölümündeki MelProcessor
ve MelAggregator
yardımcı programları kullanılır.
MelProcessor
sınıfında, ana hesaplama MelProcessor::process(const void* buffer, size_t bytes)
çağrılarak ses örnekleri içeren bir arabellekte gerçekleştirilir.
OEM'ler gerekirse HAL uygulamaları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 bir kaydırmalı pencereyle hesaplar. MelAggregator::aggregateAndAddNewMelRecord_l(MelRecord mel)
yöntemi mantığı yürütür. Sonuçlar, AudioService
ile iletişim kurmak için SoundDoseManager
sınıfına gönderilir.
Uygulama
Android 14'ten itibaren HIDL arayüz uzantılarının desteği sonlandırıldığı için, hesaplanan MEL değerlerini almak ve pozlama uyarıları yayınlamak için kullanılan yeni HAL arayüzü (ISoundDose
adlı) AIDL Audio HAL'in bir parçası olarak tanımlanmıştır. Ancak AIDL Audio HAL'i entegre etmek için daha fazla zamana ihtiyacı olan uygulayıcılar için ISoundDoseFactory
arayüzünü sunan bağımsız ses dozu AIDL HAL'imiz mevcuttur. Bu özellik gelecekte kullanımdan kaldırılacaktır.
Ses dozu desteği için HAL yöntemleri aşağıdaki kod örneğinde gösterilmektedir:
/**
* 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ü, çerçeveyi anlık pozlama hakkında bilgilendiren ve çıkış seviyesi RS1'i aştığında MEL değerleri sağlayan geri çağırma işlevleri uygular. Bu arayüzler uygulandığında çerçeve, CSD raporlaması için bunları kullanır. Bu geri çağırma uygulaması olmadan, CSD değerlerinin tahminlerini hesaplamak için AudioFlinger
üzerindeki bir yedek uygulama kullanılır.
Bağımsız ses dozu AIDL desteği
OEM'ler, ses dozunu AIDL ses HAL'sine entegre edene kadar bağımsız AIDL API'yi ISoundDoseFactory
geçici çözüm olarak kullanabilir. ISoundDoseFactory
, aşağıdaki kod örneğinde gösterildiği gibi ISoundDose
arayüzünü kullanır:
@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);
}
Sound dose AIDL Audio HAL desteği
Ses dozu arayüzü, aşağıdaki kod örneğinde gösterildiği gibi IModule
arayüzü genişletilerek AIDL Audio HAL'in bir parçası olarak uzun vadede desteklenir:
@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 3. baskı ve EN50332-3'te açıklanan yeni bir düzenlemenin uygulanmasıdır. Bu nedenle, harici API'ler yoktur.
OEM'ler, yeni HAL arayüzleri uygulayarak ve ses çerçevesine CSD için doğru MEL verileri sağlayarak (önerilir) veya özel bir ses dozu uygulaması sağlayarak cihazlarını onaylayabilirler.
Ses dozunun hesaplanmasını etkinleştirme
AOSP varsayılan olarak, mevcut EN50332-2 ve IEC62368-1 10.6.5 standartlarıyla sertifika alınmasını sağlayan işitme güvenliği mantığını destekler.
Android 14'te ses dozunun hesaplanması varsayılan olarak devre dışıdır.
Android 14-QPR1'den itibaren ses dozunun hesaplanmasını etkinleştirmek için aşağıdaki yönergeleri kullanın.
Ses dozu yönetmelikleri ülkenizde uygulanıyorsa
config.xml
bölgesindekiconfig_safe_media_volume_enabled
öğesinintrue
olarak ayarlanıp ayarlanmadığını kontrol edin.EN50332-3 ve IEC62368-1 10.6.3 ile uyumlu olmak için tedarikçi firmaların,
config_safe_sound_dosage_enabled
işaretiniconfig.xml
konumunatrue
yerleştirmeleri gerekir. Kod çözme işlemini devre dışı bırakmayı destekleyen ve ses dozu HAL arayüzlerini uygulamayan cihazlardaconfig_safe_sound_dosage_enabled
,true
olarak ayarlanmamalıdır. Bu gibi durumlarda,config_safe_sound_dosage_enabled
politikasınıntrue
olarak ayarlanması, yanlış CSD değerlerine ve güvenlikle ilgili işitme standartları için sertifika sorunlarına neden olabilir.
Aşağıdaki karar grafiğinde, ülke kısıtlamalarına ve işaretlerin değerlerine göre CSD'nin mi yoksa eski işitme güvenliği seviyelerinin (Android 14'ten önce uygulanan) mi hesaplanacağını belirleyen mantık açıklanmaktadır.
Şekil 2. Ses dozunun hesaplanmasını etkinleştirin (mantık, Android 14-QPR1'de eklenmiştir).
Doğrulama
OEM'ler, ses dozu için HAL arayüzünü uygularken IModule AIDL ses HAL uygulaması için VtsHalAudioCoreTargetTest
tarafından tanımlanan veya bağımsız ses dozu AIDL HAL uygulaması için VtsHalSoundDoseFactoryTargetTest
tarafından tanımlanan VTS test durumlarına göre doğrulama yapmalıdır.