Android 14 menyediakan dukungan untuk dosis suara dalam kerangka kerja audio dan Audio HAL dengan terus memantau pengukuran dosis suara dan memberikan peringatan kepada pengguna tentang tingkat paparan yang merusak.
Dosis suara adalah pengukuran tingkat tekanan suara selama jangka waktu tertentu. Dengan memantau dosis suara, kami dapat membantu melindungi pengguna dari efek berbahaya paparan suara yang berlebihan atau lama, sehingga menawarkan perlindungan pendengaran yang lebih baik saat menggunakan headphone pada perangkat Android portabel dan meminimalkan kemungkinan gangguan pendengaran.
Standar baru untuk perangkat mendengarkan yang aman sesuai dengan peraturan persyaratan untuk perlindungan pendengaran di IEC62368-1 edisi ke-3 (perlu login) dan EN50332-3 (akses terbatas untuk pelanggan), yang memperkenalkan konsep dosis suara.
Fungsi dosis suara memungkinkan OEM mengikuti peraturan keselamatan pendengaran yang baru. Kepada mendukung dosis suara, OEM harus mengikuti spesifikasi dan peraturan antarmuka untuk semua penyesuaian dan sertifikasi. Penerapan OEM yang disesuaikan bisa mengabaikan atau memodifikasi implementasi default AOSP untuk dosis suara. Namun, penggunaan implementasi AOSP sangat direkomendasikan.
Penghitungan dosis suara
Standar dalam IEC62368-1 edisi ke-3 dan EN50332-3 meningkatkan akurasi mengukur paparan suara dengan menghitung dosis suara yang dihitung (CSD). CSD adalah dihitung dengan mengintegrasikan tingkat eksposur sesaat (MEL) dari waktu ke waktu. Tujuh hari periode yang berkelanjutan untuk akumulasi nilai CSD dipertahankan selama komputasi dosis suara.
Sesuai dengan pasal 10.6.3.2 IEC62368-1 ke-3 jika nilai CSD mencapai batas 100%, memberi tahu pengguna tentang level suara pada setiap kenaikan 100%. Jika pengguna tidak mengonfirmasi peringatan, volume akan diturunkan ke radiasi yang telah ditentukan kelas sumber energi 1 (RS1) dari Tabel 39 dari IEC62368-1.
Seperti disebutkan dalam pasal 10.6.3.3 IEC62368-1 edisi ke-3, bersama dengan suara peringatan dosis, sistem harus memulai peringatan berbasis paparan setiap kali Nilai MEL melebihi nilai sumber energi radiasi kelas 2 (RS2) dari Tabel 39 pada IEC62368-1.
Untuk sertifikasi dengan peraturan ini dan untuk meningkatkan nilai CSD relevan, sistem harus menggunakan nilai {i>output<i} yang akurat sebagaimana dipahami oleh pengguna (misalnya output pemutaran media). Penting bagi komputasi CSD untuk menggunakan nilai yang mendekati level tekanan suara sebenarnya di mana pengguna terbuka.
Arsitektur
Tergantung di mana bingkai ditangkap, karakteristik dan efek hardware transduser dapat mempengaruhi tingkat daya dari {i>frame<i} yang di-render. Untuk memiliki pengukuran tingkat tekanan suara output yang tepat, kami memperpanjang HAL untuk mendapatkan nilai MEL langsung dari perangkat keras yang mendasarinya dan memperhitungkan kemungkinan efek yang diterapkan oleh pemroses sinyal digital (DSP) atau speaker seperti impedansi, sensitivitas, dan respons frekuensi.
Jika HAL tidak dapat memberikan nilai MEL, sebagai mekanisme penggantian, audio kerangka kerja ini menganalisis dan menghitung CSD. Komputasi dalam kerangka kerja audio ini berdasarkan informasi tentang {i>output<i} yang dirender dan dilaporkan dari HAL, yang dikirim ke DSP audio.
Dosis suara memperkenalkan dua komponen, SoundDoseHelper
dan
SoundDoseManager,
seperti yang ditunjukkan dalam Gambar 1:
Gambar 1. Komponen arsitektur fitur dosis suara.
AplikasiPenolong
Class SoundDoseHelper
yang berada dalam proses systemserver
adalah
lokasi pengumpulan utama untuk semua data dosis suara yang relevan. AudioService
mengelola class SoundDoseHelper
.
Class SoundDoseHelper
bertanggung jawab atas hal-hal berikut:
- Menangani informasi dosis baru
- Mempertahankan nilai dosis suara
- Memulihkan status jika terjadi error
audioserver
- Memicu notifikasi UI Sistem
- Menurunkan volume
Pengelola SoundDose
Class SoundDoseManager
, yang berada dalam proses audioserver
dan
bagian dari AudioFlinger
, mengumpulkan data dosis suara dari HAL atau menghitungnya secara internal, sebagai
kembali, dari {i>frame<i} yang
dikirim ke HAL. Class SoundDoseManager
mengirim
data dosis suara ke class SoundDoseHelper
.
MelProcessor dan MelAggregator
Jika HAL tidak dapat memberikan nilai MEL, MelProcessor
dan MelAggregator
utilitas di libaudioutils
digunakan untuk perhitungan dosis suara internal.
Di class MelProcessor
, komputasi utama dilakukan pada buffer dengan
sampel audio dengan memanggil MelProcessor::process(const void* buffer, size_t bytes)
.
OEM dapat menggunakan MelProcessor
dalam implementasi HAL mereka jika diperlukan.
Class MelAggregator
menerima nilai MEL dari berbagai port audio dan
menghitung nilai CSD dengan periode bergulir tujuh hari. Metode MelAggregator::aggregateAndAddNewMelRecord_l(MelRecord mel)
menjalankan logika. Hasilnya dikirim ke class SoundDoseManager
untuk
komunikasi dengan AudioService
.
Implementasi
Ekstensi antarmuka HIDL tidak digunakan lagi mulai Android 14,
jadi antarmuka HAL baru untuk mengambil nilai MEL yang
dikomputasi dan mengeluarkan eksposur
peringatan, bernama ISoundDose
,
ditetapkan sebagai bagian dari AIDL Audio HAL. Namun,
bagi pengimplementasi yang membutuhkan lebih banyak waktu untuk mengintegrasikan HAL Audio AIDL, kami memiliki
AIDL HAL dosis suara mandiri, yang menawarkan
Antarmuka ISoundDoseFactory
. Ini akan menjadi
tidak digunakan lagi di masa mendatang.
Metode HAL untuk dukungan dosis suara ditunjukkan dalam kode berikut contoh:
/**
* 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);
}
}
Antarmuka HAL baru mengimplementasikan callback.
yang menginformasikan framework tentang eksposur sesaat dan memberikan nilai MEL
jika level output melebihi RS1. Ketika antarmuka ini diimplementasikan,
kerangka kerja ini
menggunakannya untuk pelaporan CSD. Tanpa implementasi callback ini,
implementasi penggantian di AudioFlinger
digunakan untuk menghitung perkiraan nilai CSD.
Dukungan AIDL mandiri dosis suara
Sebelum OEM dapat mengintegrasikan dosis suara dalam HAL audio AIDL, mereka dapat menggunakan
AIDL API mandiri ISoundDoseFactory
sebagai solusi. ISoundDoseFactory
menggunakan antarmuka ISoundDose
, seperti yang ditampilkan di
contoh kode berikut:
@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);
}
Dukungan HAL Audio AIDL dosis suara
Antarmuka dosis suara didukung dalam jangka panjang sebagai bagian dari AIDL Audio HAL oleh
memperluas antarmuka IModule
, seperti yang ditunjukkan dalam contoh kode berikut:
@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();
}
Fitur ini adalah implementasi peraturan baru yang dijelaskan dalam IEC62368-1 ke-3 dan EN50332-3, sehingga tidak ada API untuk pihak eksternal.
OEM dapat menyertifikasi perangkat mereka dengan menerapkan antarmuka HAL baru dan memberikan data MEL yang akurat untuk CSD ke framework audio (direkomendasikan), atau dengan menyediakan implementasi dosis suara kustom.
Memungkinkan penghitungan dosis suara
Secara default, AOSP mendukung logika keselamatan pendengaran yang memastikan sertifikasi dengan standar EN50332-2 dan IEC62368-1 10.6.5 yang ada.
Di Android 14, penghitungan dosis suara dinonaktifkan secara default.
Gunakan panduan berikut untuk memungkinkan penghitungan dosis suara dimulai dengan Android 14-QPR1.
Jika peraturan dosis suara diberlakukan di negara Anda, periksa apakah
config_safe_media_volume_enabled
diconfig.xml
disetel ketrue
.Agar sesuai dengan EN50332-3 dan IEC62368-1 10.6.3, vendor harus menempatkan flag
config_safe_sound_dosage_enabled
diconfig.xml
ketrue
. Untuk perangkat yang mendukung dekode pengurangan beban dan tidak mengimplementasikan metode antarmuka HAL dosis suara,config_safe_sound_dosage_enabled
tidak boleh ditetapkan ketrue
. Dalam kasus tersebut, menyetelconfig_safe_sound_dosage_enabled
ketrue
dapat menyebabkan CSD yang tidak akurat nilai dan masalah sertifikasi untuk standar alat bantu dengar keselamatan.
Grafik keputusan berikut menjelaskan logika yang menentukan apakah, berdasarkan pembatasan negara dan nilai-nilai bendera, baik CSD maupun warisan tingkat keselamatan pendengaran (diterapkan sebelum Android 14) dihitung.
Gambar 2. Memungkinkan penghitungan dosis suara (logika ditambahkan di Android 14-QPR1).
Validasi
Ketika menerapkan antarmuka HAL untuk dosis suara, OEM harus melakukan validasi terhadap
kasus pengujian VTS yang ditentukan oleh VtsHalAudioCoreTargetTest
untuk implementasi HAL Audio IModule AIDL, atau dengan VtsHalSoundDoseFactoryTargetTest
untuk implementasi AIDL HAL dosis suara mandiri.