Android 14 unterstützt die Lautstärke im Audio-Framework und in der Audio HAL. Die Lautstärke wird kontinuierlich gemessen und Nutzer werden bei schädlichen Lautstärkepegeln gewarnt.
Die Lärmdosis ist eine Messung des Schalldruckpegels über einen bestimmten Zeitraum. Durch die Überwachung der Lautstärke können wir Nutzer vor den schädlichen Auswirkungen einer übermäßigen oder längeren Schalleinwirkung schützen. So wird der Hörschutz bei der Verwendung von Kopfhörern auf tragbaren Android-Geräten verbessert und das Risiko einer Hörschädigung minimiert.
Die neuen Standards für sichere Hörgeräte entsprechen den gesetzlichen Anforderungen an den Gehörschutz in IEC62368-1, 3. Ausgabe (Anmeldung erforderlich) und EN50332-3 (Zugriff nur für Abonnenten), in denen das Konzept der Schalldosis eingeführt wird.
Mit der Funktion zur Lautstärkedosierung können OEMs die neuen Bestimmungen zur Hörsicherheit einhalten. Um die Lautstärkebegrenzung zu unterstützen, müssen OEMs für alle Anpassungen und Zertifizierungen die Schnittstellenspezifikationen und -vorschriften einhalten. Eine benutzerdefinierte OEM-Implementierung kann die Standardimplementierung der Lautstärkedosis von AOSP umgehen oder ändern. Wir empfehlen jedoch dringend, die AOSP-Implementierung zu verwenden.
Berechnung der Lautstärkedosis
Die Standards in IEC62368-1, 3. Ausgabe und EN50332-3 erhöhen die Genauigkeit der Messung der Schallexposition durch Berechnung der berechneten Schalldosis (CSD). Die CSD wird berechnet, indem die momentanen Expositionsstufen (MEL) über einen bestimmten Zeitraum hinweg integriert werden. Für die Berechnung der Lautstärkedosis wird ein kontinuierliches rollierendes Zeitfenster von sieben Tagen mit den angesammelten CSD-Werten verwendet.
Gemäß Abschnitt 10.6.3.2 der IEC62368-1, 3. Ausgabe, wird der Nutzer bei jeder Erhöhung des CSD-Werts um 100% über die Lautstärke informiert, wenn der Wert 100 % erreicht. Wenn der Nutzer die Warnung nicht bestätigt, wird die Lautstärke auf den vordefinierten Wert für die Strahlungsenergiequelle der Klasse 1 (RS1) in Tabelle 39 der IEC62368-1 gesenkt.
Wie in Abschnitt 10.6.3.3 der IEC62368-1, 3. Ausgabe, erwähnt, muss das System neben den Warnungen zur Schalldosis jedes Mal eine nutzungsbasierte Warnung auslösen, wenn der MEL-Wert den Wert der Strahlungsenergiequelle der Klasse 2 (RS2) in Tabelle 39 der IEC62368-1 überschreitet.
Für die Zertifizierung gemäß diesen Verordnungen und um die CSD-Werte relevanter zu machen, muss das System korrekte Ausgabewerte verwenden, die von den Nutzern wahrgenommen werden (z. B. die Ausgabe der Medienwiedergabe). Für die Berechnung der CSD-Werte sind Werte erforderlich, die den tatsächlichen Schalldruckpegeln nahekommen, denen der Nutzer ausgesetzt ist.
Architektur
Je nachdem, wo die Frames erfasst werden, können Hardwareeigenschaften und Effekte der Sensoren das Leistungsniveau der gerenderten Frames beeinflussen. Für eine präzise Messung des Ausgabeschalldruckpegels haben wir die HAL erweitert, um die MEL-Werte direkt von der zugrunde liegenden Hardware abzurufen und mögliche Effekte zu berücksichtigen, die vom digitalen Signalprozessor (DSP) oder von Lautsprechereigenschaften wie Impedanz, Empfindlichkeit und Frequenzgang angewendet werden.
Wenn der HAL keine MEL-Werte bereitstellen kann, analysiert und berechnet das Audioframework als Fallback-Mechanismus die CSD. Diese Berechnung im Audio-Framework basiert auf den Informationen zur gerenderten Ausgabe, die von HAL gemeldet werden, und Frames, die an den Audio-DSP gesendet werden.
Die Funktion „Tondosis“ führt zwei Komponenten ein, SoundDoseHelper
und SoundDoseManager,
, wie in Abbildung 1 dargestellt:
Abbildung 1. Architekturkomponenten der Funktion „Lautstärkedosis“
SoundDoseHelper
Die Klasse SoundDoseHelper
, die sich im Prozess systemserver
befindet, ist der Hauptsammelpunkt für alle relevanten Daten zur Lautstärkeregelung. Die Klasse AudioService
verwaltet die Klasse SoundDoseHelper
.
Die Klasse SoundDoseHelper
ist für Folgendes verantwortlich:
- Umgang mit neuen Dosierungsinformationen
- Werte für die Lautstärkedosis beibehalten
- Status bei einem Absturz von
audioserver
wiederherstellen - Systembenachrichtigungen auslösen
- Lautstärke verringern
SoundDoseManager
Die SoundDoseManager
-Klasse, die im audioserver
-Prozess ausgeführt wird und zur AudioFlinger
-Klasse gehört, erfasst die Daten zur Lautstärkeexposition von der HAL oder berechnet sie intern als Fallback aus den an die HAL gesendeten Frames. Die SoundDoseManager
-Klasse sendet die Daten zur Lautstärkedosis an die SoundDoseHelper
-Klasse.
MelProcessor und MelAggregator
Wenn die HAL keine MEL-Werte bereitstellen kann, werden die Dienstprogramme MelProcessor
und MelAggregator
in libaudioutils
für die interne Berechnung der Schalldosis verwendet.
In der MelProcessor
-Klasse wird die Hauptberechnung durch Aufrufen von MelProcessor::process(const void* buffer, size_t bytes)
auf einem Puffer mit Audiosamples ausgeführt.
OEMs können MelProcessor
bei Bedarf in ihrer HAL-Implementierung verwenden.
Die MelAggregator
-Klasse empfängt die MEL-Werte von verschiedenen Audioports und berechnet den CSD-Wert mit einem gleitenden Fenster von sieben Tagen. Die Logik wird von der Methode MelAggregator::aggregateAndAddNewMelRecord_l(MelRecord mel)
ausgeführt. Die Ergebnisse werden an die SoundDoseManager
-Klasse gesendet, um mit AudioService
zu kommunizieren.
Implementierung
HIDL-Schnittstellenerweiterungen werden ab Android 14 eingestellt. Daher wird die neue HAL-Schnittstelle zum Abrufen berechneter MEL-Werte und zum Ausgeben von Belichtungswarnungen mit dem Namen ISoundDose
als Teil der AIDL Audio HAL definiert. Für Implementierer, die mehr Zeit für die Integration der AIDL Audio HAL benötigen, gibt es jedoch eine eigenständige Sounddose-AIDL HAL, die die ISoundDoseFactory
-Schnittstelle bietet. Diese Funktion wird in Zukunft eingestellt.
Die HAL-Methoden zur Unterstützung der Lautstärkedosis sind im folgenden Codebeispiel zu sehen:
/**
* 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);
}
}
Die neue HAL-Schnittstelle implementiert Callbacks, die das Framework über die momentane Belichtung informieren und MEL-Werte bereitstellen, wenn die Ausgabestufe RS1 überschreitet. Wenn diese Schnittstellen implementiert sind, werden sie vom Framework für die CSD-Berichterstellung verwendet. Ohne diese Callback-Implementierung wird eine Fallback-Implementierung auf AudioFlinger
verwendet, um Schätzungen der CSD-Werte zu berechnen.
Unterstützung für eigenständige AIDL-Funktionen
Bis OEMs die Lautstärkeregelung in die AIDL-Audio-HAL einbinden können, können sie als Problemumgehung die eigenständige AIDL API ISoundDoseFactory
verwenden. ISoundDoseFactory
verwendet die ISoundDose
-Benutzeroberfläche, wie im folgenden Codebeispiel gezeigt:
@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);
}
Unterstützt der Ton die AIDL Audio HAL?
Die Sound-Dosis-Schnittstelle wird langfristig als Teil des AIDL Audio HAL unterstützt, indem die IModule
-Schnittstelle erweitert wird, wie im folgenden Codebeispiel gezeigt:
@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();
}
Diese Funktion ist eine Implementierung einer neuen Verordnung, die in IEC62368-1, 3. Ausgabe und EN50332-3 beschrieben ist. Es gibt also keine externen APIs.
OEMs können ihre Geräte zertifizieren, indem sie die neuen HAL-Schnittstellen implementieren und dem Audio-Framework genaue MEL-Daten für CSD zur Verfügung stellen (empfohlen) oder eine benutzerdefinierte Implementierung der Lautstärkedosis bereitstellen.
Berechnung der Lautstärkedosis aktivieren
AOSP unterstützt standardmäßig die Hörsicherheitslogik, die die Zertifizierung gemäß den bestehenden Standards EN50332-2 und IEC62368-1 10.6.5 ermöglicht.
In Android 14 ist die Berechnung der Lautstärkedosis standardmäßig deaktiviert.
Mit den folgenden Richtlinien können Sie die Berechnung der Lautstärkedosis ab Android 14-QPR1 aktivieren.
Wenn in Ihrem Land die Vorschriften zur Lautstärkebegrenzung gelten, prüfen Sie, ob
config_safe_media_volume_enabled
inconfig.xml
auftrue
gesetzt ist.Um EN50332-3 und IEC62368-1 10.6.3 einzuhalten, müssen Anbieter das Flag
config_safe_sound_dosage_enabled
inconfig.xml
auftrue
legen. Bei Geräten, die die Dekodierung per Offload unterstützen und die HAL-Schnittstellen für die Lautstärke nicht implementieren, darfconfig_safe_sound_dosage_enabled
nicht auftrue
gesetzt werden. In solchen Fällen kann die Einstellung vonconfig_safe_sound_dosage_enabled
auftrue
zu ungenauen CSD-Werten und Zertifizierungsproblemen für Sicherheitsstandards für Hörgeräte führen.
Im folgenden Entscheidungsdiagramm wird die Logik beschrieben, mit der basierend auf den Ländereinschränkungen und den Flaggenwerten entweder der CSD oder die bisherigen Hörsicherheitsstufen (vor Android 14 implementiert) berechnet werden.
Abbildung 2. Berechnung der Lautstärkedosis aktivieren (die Logik wird in Android 14-QPR1 hinzugefügt).
Zertifizierungsstufe
Bei der Implementierung der HAL-Schnittstelle für die Lautstärke müssen OEMs die VTS-Testfälle validieren, die von VtsHalAudioCoreTargetTest
für die IModule-AIDL-Audio-HAL-Implementierung oder von VtsHalSoundDoseFactoryTargetTest
für die eigenständige AIDL-HAL-Implementierung für die Lautstärke definiert wurden.