ทริกเกอร์เสียง

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

หน้านี้จะแสดงภาพรวมของสถาปัตยกรรมของฟีเจอร์เรียกให้ดำเนินการด้วยเสียงและอินเทอร์เฟซ HAL (Hardware Abstraction Layer)

สแต็กทริกเกอร์เสียง

ระบบย่อยของทริกเกอร์เสียงสร้างขึ้นเป็นเลเยอร์ดังที่แสดงในรูปที่ 1

Sound_trigger_stack

รูปที่ 1: สแต็กทริกเกอร์เสียง

รายการต่อไปนี้อธิบายเลเยอร์แต่ละรายการที่แสดงในรูปที่ 1 โดยละเอียด

  • เลเยอร์ HAL (สีเขียว) มีโค้ดเฉพาะผู้ให้บริการที่ใช้อินเทอร์เฟซ Sound Trigger HAL (STHAL)

  • SoundTriggerMiddleware (สีเหลือง) จะอยู่เหนืออินเทอร์เฟซ HAL โดยจะสื่อสารกับ HAL และมีหน้าที่รับผิดชอบด้านฟังก์ชันการทำงาน เช่น การแชร์ HAL ระหว่างไคลเอ็นต์ต่างๆ การบันทึก การบังคับใช้สิทธิ์ และการจัดการความเข้ากันได้กับ HAL เวอร์ชันเก่า

  • ระบบ SoundTriggerService (สีน้ำเงิน) อยู่เหนือมิดเดิลแวร์ ซึ่งช่วยให้ผสานรวมกับฟีเจอร์อื่นๆ ของระบบได้ง่ายขึ้น เช่น การโทรศัพท์และเหตุการณ์เกี่ยวกับแบตเตอรี่ รวมถึงดูแลฐานข้อมูลรูปแบบเสียงที่จัดทําดัชนีตามรหัสที่ไม่ซ้ำกัน

  • เหนือเลเยอร์ SoundTriggerService สแต็ก (สีน้ำตาล) จะจัดการกับฟีเจอร์เฉพาะของ Assistant และแอปทั่วไปแบบแยกกัน

ฟังก์ชันของสแต็กทริกเกอร์เสียงคือการส่งเหตุการณ์แบบแยกต่างหากซึ่งแสดงถึงเหตุการณ์ทริกเกอร์เสียง ในกรณีส่วนใหญ่ สแต็กทริกเกอร์เสียงจะไม่จัดการกับเสียง เมื่อได้รับเหตุการณ์ทริกเกอร์ แอปจะได้รับสิทธิ์เข้าถึงสตรีมเสียงจริงในช่วงเวลาของเหตุการณ์ดังกล่าวโดยเปิดออบเจ็กต์ AudioRecord ผ่านเฟรมเวิร์กเสียง Sound Trigger HAL API มีตัวแฮนเดิลที่มีเหตุการณ์ที่ทริกเกอร์ซึ่งใช้กับเฟรมเวิร์กเสียง ดังนั้น HAL ของทริกเกอร์เสียงและ HAL ของเสียงจึงมักจะใช้กระบวนการเดียวกันเนื่องจากเชื่อมต่อกันอยู่เบื้องหลัง

อินเทอร์เฟซ HAL ของทริกเกอร์เสียง

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

อินเทอร์เฟซ STHAL จะระบุไว้ในส่วน /hardware/interfaces/soundtrigger/

อินเทอร์เฟซ ISoundTriggerHw รองรับความสามารถในการมีเซสชันการตรวจจับอย่างน้อย 1 เซสชันที่ทำงานอยู่ในช่วงเวลาหนึ่งๆ และฟังเหตุการณ์อะคูสติก การเรียกใช้ ISoundTriggerHw.getProperties() จะแสดงโครงสร้าง Properties ที่มีคำอธิบายและความสามารถในการใช้งาน

ขั้นตอนพื้นฐานของการตั้งค่าเซสชันอธิบายไว้ดังต่อไปนี้ในรูปที่ 2

Sthal_state

รูปที่ 2: แผนภาพสถานะของ STHAL

ขั้นตอนต่อไปนี้จะอธิบายแต่ละรัฐอย่างละเอียด

  1. ไคลเอ็นต์ HAL จะโหลดโมเดลโดยใช้ loadSoundModel() หรือ loadPhraseSoundModel() ออบเจ็กต์โมเดลที่ระบุจะระบุอัลกอริทึมการตรวจจับ (เครื่องมือ) สำหรับการติดตั้งใช้งานที่เฉพาะเจาะจง รวมถึงพารามิเตอร์ที่ใช้ได้กับอัลกอริทึมนี้ เมื่อทำสำเร็จแล้ว เมธอดเหล่านี้จะส่งคืนแฮนเดิลที่ใช้อ้างอิงโมเดลนี้ในการเรียกใช้ครั้งต่อๆ ไป

  2. เมื่อโหลดโมเดลเรียบร้อยแล้ว ไคลเอ็นต์ HAL จะเรียกใช้ startRecognition() เพื่อเริ่มการตรวจจับ การจดจำจะทำงานต่อไปในเบื้องหลังจนกว่าจะเกิดเหตุการณ์ใดเหตุการณ์หนึ่งต่อไปนี้

    1. มีการเรียก stopRecognition() ในโมเดลนี้แล้ว
    2. มีการตรวจจับเกิดขึ้น
    3. ระบบล้มเลิกการตรวจหาเนื่องจากข้อจำกัดด้านทรัพยากร เช่น เมื่อเริ่ม Use Case ที่มีลำดับความสำคัญสูงกว่า

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

    คุณเริ่มโมเดลเดิมอีกครั้งในภายหลังได้ และทําขั้นตอนนี้ซ้ำได้หลายครั้งตามต้องการ

  3. สุดท้าย HAL จะยกเลิกการโหลดโมเดลที่ไม่ใช้งานซึ่งไม่จําเป็นต้องใช้แล้วผ่าน unloadModel()

จัดการข้อผิดพลาด HAL

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