โดสเสียง

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

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

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

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

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

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

ตามที่ระบุไว้ในส่วนที่ 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:

ซุ้มเสียง

รูปที่ 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 จนกว่า OEM จะสามารถผสานรวมปริมาณเสียง 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

อินเทอร์เฟซปริมาณเสียงได้รับการสนับสนุนในระยะยาวโดยเป็นส่วนหนึ่งของ HAL ของ AIDL Audio โดย การขยายอินเทอร์เฟซ 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) มาคำนวณได้

เปิดใช้งาน csd

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

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

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