ปริมาณเสียง

Android 14 รองรับปริมาณเสียงในเฟรมเวิร์กเสียงและ Audio HAL โดยการตรวจสอบการวัดปริมาณเสียงอย่างต่อเนื่องและออกคำเตือนให้ผู้ใช้ทราบเกี่ยวกับระดับการสัมผัสที่อาจทำให้เกิดอันตราย

โดสเสียงคือการวัดระดับความดันเสียงในช่วงเวลาหนึ่ง การตรวจสอบปริมาณเสียงช่วยให้เราสามารถช่วยปกป้องผู้ใช้จากผลกระทบที่เป็นอันตรายของ การรับเสียงมากเกินไปหรือเป็นเวลานาน จึงให้การปกป้องการได้ยินที่ดียิ่งขึ้น เมื่อใช้หูฟังบนอุปกรณ์ Android แบบพกพาและลดโอกาสของ ความบกพร่องทางการได้ยิน

มาตรฐานใหม่ของอุปกรณ์ฟังที่ปลอดภัยสอดคล้องกับกฎข้อบังคับ ข้อกำหนดสำหรับการปกป้องการได้ยินใน IEC62368-1 รุ่นที่ 3 (ต้องเข้าสู่ระบบ) และ EN50332-3 (จำกัดสำหรับสมาชิกเท่านั้น) ซึ่งเป็นการแนะนำแนวคิดเกี่ยวกับปริมาณเสียง

ฟังก์ชันปริมาณเสียงช่วยให้ OEM ปฏิบัติตามกฎระเบียบด้านความปลอดภัยการได้ยินใหม่ ถึง รองรับปริมาณเสียง OEM ต้องเป็นไปตามข้อกำหนดและข้อบังคับของอินเทอร์เฟซ สำหรับการปรับแต่งและการรับรองทั้งหมด การใช้งาน OEM ที่กำหนดเอง สามารถข้ามหรือแก้ไขการใช้งานเริ่มต้นของ AOSP สำหรับโดสเสียง อย่างไรก็ตาม ขอแนะนำอย่างยิ่งให้ใช้การติดตั้งใช้งาน AOSP

การคำนวณปริมาณเสียง

มาตรฐานใน IEC62368-1 ฉบับที่ 3 และ EN50332-3 เพิ่มความแม่นยำในการวัดการสัมผัสกับเสียงด้วยการคำนวณปริมาณเสียงที่คำนวณแล้ว (CSD) CSD คือ คำนวณโดยการผสานรวมระดับการสัมผัสชั่วคราว (MEL) เมื่อเวลาผ่านไป ระบบจะเก็บค่า CSD ที่สะสมไว้อย่างต่อเนื่องเป็นเวลา 7 วันเพื่อใช้คำนวณปริมาณเสียง

ตามที่ระบุไว้ในส่วนที่ 10.6.3.2 ของ IEC62368-1 3 ถ้าค่า CSD ถึงขีดจำกัด 100% ระบบจะ แจ้งเตือนผู้ใช้เกี่ยวกับระดับเสียงที่เพิ่มขึ้น 100% แต่ละครั้ง หากผู้ใช้ ไม่รับทราบคำเตือน ปริมาณลดลงเหลือเพียงรังสีที่กำหนดไว้ล่วงหน้า ค่าคลาสแหล่งพลังงาน 1 (RS1) ของตาราง 39 จาก IEC62368-1

ตามที่ระบุไว้ในส่วนที่ 10.6.3.3 ของ IEC62368-1 ฉบับที่ 3 นอกเหนือจากคำเตือนเกี่ยวกับปริมาณเสียงแล้ว ระบบต้องเริ่มคำเตือนตามการสัมผัสทุกครั้งที่ค่า MEL สูงกว่าค่าแหล่งพลังงานแผ่รังสีระดับ 2 (RS2) ของตารางที่ 39 ใน IEC62368-1

เพื่อขอการรับรองเกี่ยวกับกฎระเบียบเหล่านี้และเพื่อทำให้ค่า CSD เพิ่มขึ้น ระบบจึงต้องใช้ค่าเอาต์พุตที่ถูกต้องตามที่ผู้ใช้รับรู้ (เช่น เอาต์พุตการเล่นสื่อ) สำหรับการคำนวณ CSD จะต้อง ใช้ค่าที่ใกล้เคียงกับระดับความดันเสียงจริงที่ผู้ใช้ เปิดเผย

สถาปัตยกรรม

ลักษณะและผลของฮาร์ดแวร์ของตัวแปลงสัญญาณอาจส่งผลต่อระดับพลังงานของเฟรมที่ผ่านการจัดการแสดงผล ทั้งนี้ขึ้นอยู่กับตำแหน่งที่จับเฟรม หากต้องการ เมื่อวัดระดับความดันเสียงได้แม่นยำ เราจึงขยาย HAL ออกไปเพื่อให้ ค่า MEL โดยตรงจากฮาร์ดแวร์ที่เกี่ยวข้องและบัญชีหากเป็นไปได้ ที่โปรเซสเซอร์สัญญาณดิจิทัล (DSP) หรือลำโพงใช้ เช่น อิมพีแดนซ์ ความไว และการตอบสนองความถี่

หาก HAL ไม่สามารถระบุค่า MEL เฟรมเวิร์กเสียงจะวิเคราะห์และคำนวณ CSD เป็นกลไกสำรอง การคำนวณในเฟรมเวิร์กเสียงนี้ อิงตามข้อมูลเกี่ยวกับผลลัพธ์ที่แสดงผลที่รายงานจาก HAL และเฟรม ที่ส่งไปยัง DSP เสียง

โดสเสียงมีคอมโพเนนต์ 2 ส่วน ได้แก่ SoundDoseHelper และ SoundDoseManager, ดังที่แสดงในรูปที่ 1:

sound_dose_arch

รูปที่ 1 องค์ประกอบทางสถาปัตยกรรมของฟีเจอร์โดสเสียง

SoundDoseHelper

คลาส SoundDoseHelper ที่อยู่ในกระบวนการ systemserver คือ จุดรวบรวมหลักสำหรับข้อมูลปริมาณเสียงที่เกี่ยวข้องทั้งหมด ชั้นเรียน AudioService จัดการชั้นเรียน SoundDoseHelper

ชั้นเรียน SoundDoseHelper มีหน้าที่ต่อไปนี้

  • การจัดการข้อมูลการให้ยาใหม่
  • การเก็บค่าปริมาณเสียงไว้
  • สถานะการกู้คืนในกรณีที่ audioserver ขัดข้อง
  • การทริกเกอร์การแจ้งเตือน UI ของระบบ
  • การลดระดับเสียง

เครื่องมือจัดการ SoundDose

คลาส SoundDoseManager ซึ่งอยู่ในกระบวนการ audioserver และเป็นส่วนหนึ่งของคลาส AudioFlinger จะรวบรวมข้อมูลปริมาณเสียงจาก HAL หรือคํานวณข้อมูลดังกล่าวภายในเป็นทางเลือกสําหรับเฟรมที่ส่งไปยัง HAL ชั้นเรียน SoundDoseManager จะส่งข้อมูลปริมาณเสียงไปยังชั้นเรียน SoundDoseHelper

MelProcessor และ MelAggregator

หาก HAL ระบุค่า MEL ไม่ได้ MelProcessor และ MelAggregator ยูทิลิตีใน libaudioutils ซึ่งใช้สำหรับการคำนวณปริมาณเสียงภายใน

ในคลาส MelProcessor การคํานวณหลักจะดําเนินการกับบัฟเฟอร์ที่มีตัวอย่างเสียงโดยการเรียกใช้ MelProcessor::process(const void* buffer, size_t bytes) OEM ใช้ MelProcessor ในการใช้งาน HAL ได้หากต้องการ

คลาส MelAggregator จะได้รับค่า MEL จากพอร์ตเสียงและพอร์ตเสียงต่างๆ คำนวณค่า CSD โดยใช้กรอบเวลาต่อเนื่อง 7 วัน เมธอด MelAggregator::aggregateAndAddNewMelRecord_l(MelRecord mel) จะดําเนินการตามตรรกะ ระบบจะส่งผลลัพธ์ไปยังชั้นเรียน SoundDoseManager เพื่อใช้ในการสื่อสารกับ AudioService

การใช้งาน

เราจะเลิกใช้งานส่วนขยายอินเทอร์เฟซ HIDL ใน Android 14 เป็นต้นไป อินเทอร์เฟซ HAL ใหม่สำหรับการดึงข้อมูลค่า MEL ที่คำนวณแล้วและการปล่อยสาร คำเตือนที่ชื่อ ISoundDose มีการกำหนดให้เป็นส่วนหนึ่งของ AIDL Audio HAL อย่างไรก็ตาม สำหรับนักพัฒนาซอฟต์แวร์ที่ต้องการเวลาเพิ่มเติมในการผสานรวม AIDL Audio HAL เรามี AIDL HAL สำหรับปริมาณเสียงแบบสแตนด์อโลนซึ่งมีอินเทอร์เฟซ ISoundDoseFactory นี่จะเป็น เลิกใช้งานในอนาคต

วิธีการ HAL สำหรับการรองรับโดสเสียงจะแสดงในโค้ดต่อไปนี้ ตัวอย่าง:

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

อินเทอร์เฟซ HAL ใหม่ใช้การเรียกกลับเพื่อแจ้งเฟรมเวิร์กเกี่ยวกับการสัมผัสแสงชั่วขณะและให้ค่า MEL เมื่อใดก็ตามที่ระดับเอาต์พุตเกิน RS1 เมื่อติดตั้งใช้งานอินเทอร์เฟซเหล่านี้แล้ว เฟรมเวิร์กจะใช้อินเทอร์เฟซดังกล่าวสำหรับการรายงาน CSD หากไม่มีการใช้ Callback นี้ การใช้งานทางเลือกใน AudioFlinger จะใช้ในการคำนวณค่าประมาณของค่า CSD

การรองรับ AIDL แบบสแตนด์อโลนของเสียง

จนกว่า OEM จะสามารถผสานรวมโดสเสียงใน HAL เสียง AIDL พวกเขาสามารถใช้ AIDL API แบบสแตนด์อโลน ISoundDoseFactory เป็นวิธีแก้ปัญหาเฉพาะหน้า ISoundDoseFactory ใช้อินเทอร์เฟซ ISoundDose ตามที่แสดงในตัวอย่างโค้ดต่อไปนี้

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

รองรับเสียง HAL ของเสียง AIDL

ระบบจะรองรับอินเทอร์เฟซปริมาณเสียงในระยะยาวโดยเป็นส่วนหนึ่งของ AIDL Audio HAL โดยการขยายอินเทอร์เฟซ IModule ดังที่แสดงในตัวอย่างโค้ดต่อไปนี้

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

ฟีเจอร์นี้เป็นการปรับใช้กฎระเบียบใหม่ที่อธิบายไว้ใน IEC62368-1 รุ่นที่ 3 และ EN50332-3 ดังนั้นจึงไม่มี API ภายนอก

OEM สามารถรับรองอุปกรณ์ได้โดยใช้อินเทอร์เฟซ HAL ใหม่ และ ให้ข้อมูล MEL ที่ถูกต้องสำหรับ CSD กับเฟรมเวิร์กเสียง (แนะนำ) หรือโดย ให้การติดตั้งเสียงด้วยตัวเอง

เปิดใช้การคำนวณปริมาณเสียง

โดยค่าเริ่มต้น AOSP รองรับตรรกะความปลอดภัยในการได้ยินซึ่งรับรองได้ว่าจะได้รับใบรับรอง ตามมาตรฐาน EN50332-2 และ IEC62368-1 10.6.5 ที่มีอยู่

ใน Android 14 ระบบจะปิดใช้การคำนวณปริมาณเสียง โดยค่าเริ่มต้น

ใช้หลักเกณฑ์ต่อไปนี้เพื่อเปิดใช้การคำนวณปริมาณเสียงโดยเริ่มจาก Android 14-QPR1

  • หากประเทศของคุณบังคับใช้กฎระเบียบเกี่ยวกับปริมาณเสียง ให้ตรวจสอบว่าconfig_safe_media_volume_enabledใน config.xml มีการตั้งค่าเป็น true หรือไม่

  • เพื่อให้สอดคล้องกับ EN50332-3 และ IEC62368-1 10.6.3 ผู้ให้บริการต้องซ้อนทับ ธงconfig_safe_sound_dosage_enabledใน config.xml ไปยัง true สำหรับอุปกรณ์ที่รองรับการถอดรหัสแบบออฟโหลดและไม่ได้ติดตั้งใช้งาน อินเทอร์เฟซ HAL ของเสียง ไม่ต้องตั้งค่า config_safe_sound_dosage_enabled เป็น true ในกรณีดังกล่าว การตั้งค่า config_safe_sound_dosage_enabled เป็น true อาจทำให้ CSD ไม่ถูกต้อง คุณค่าและปัญหาการรับรองสำหรับมาตรฐานการได้ยินด้านความปลอดภัย

กราฟการตัดสินใจต่อไปนี้จะอธิบายตรรกะที่ใช้พิจารณาว่า โดยพิจารณาจาก ข้อจำกัดในแต่ละประเทศและค่าของการแจ้งว่าไม่เหมาะสม ไม่ว่าจะเป็น CSD หรือกฎระเบียบเดิม ระดับความปลอดภัยในการได้ยิน (ใช้งานก่อน Android 14) มาคำนวณกัน

enable_csd

รูปที่ 2 เปิดใช้การคำนวณปริมาณเสียง (เพิ่มตรรกะใน Android 14-QPR1)

การตรวจสอบความถูกต้อง

เมื่อใช้อินเทอร์เฟซ HAL สำหรับโดสเสียง OEM จะต้องตรวจสอบ กรอบการทดสอบ VTS ที่กำหนดโดย VtsHalAudioCoreTargetTest สำหรับการใช้งาน IModule AIDL Audio HAL หรือโดย VtsHalSoundDoseFactoryTargetTest สำหรับการใช้งานโดสเสียงแบบสแตนด์อโลน AIDL HAL