ฟีเจอร์ทริกเกอร์เสียงช่วยให้แอปสามารถฟังเหตุการณ์ทางเสียงบางอย่าง เช่น คำสั่งเรียกใช้ ในลักษณะที่ใช้พลังงานต่ำและคำนึงถึงความเป็นส่วนตัว ตัวอย่างกรณีการใช้งานของทริกเกอร์เสียงคือ Assistant และกำลังเล่น
หน้านี้แสดงภาพรวมของสถาปัตยกรรมทริกเกอร์เสียงและอินเทอร์เฟซ HAL (Hardware Abstraction Layer)
สแต็กทริกเกอร์เสียง
โดยระบบย่อยทริกเกอร์เสียงจะสร้างขึ้นเป็นเลเยอร์ดังที่แสดงในรูปที่ 1
รูปที่ 1: สแต็กทริกเกอร์เสียง
รายการต่อไปนี้จะอธิบายแต่ละเลเยอร์ที่แสดงในรูปที่ 1 โดยละเอียด
เลเยอร์ HAL (สีเขียว) มีโค้ดเฉพาะของผู้ให้บริการซึ่ง ใช้การอินเทอร์เฟซ Sound Trigger HAL (STHAL)
SoundTriggerMiddleware
(สีเหลือง) อยู่เหนืออินเทอร์เฟซ HAL โดยจะสื่อสารกับ HAL และรับผิดชอบฟังก์ชันการทำงานต่างๆ เช่น การแชร์ HAL ระหว่างไคลเอ็นต์ต่างๆ การบันทึก การบังคับใช้ สิทธิ์ และการจัดการความเข้ากันได้กับ HAL เวอร์ชันเก่าระบบ
SoundTriggerService
(สีน้ำเงิน) จะอยู่เหนือมิดเดิลแวร์ ซึ่งช่วยให้ผสานรวมกับฟีเจอร์อื่นๆ ของระบบ เช่น โทรศัพท์และ เหตุการณ์แบตเตอรี่ ได้ง่ายขึ้น นอกจากนี้ ยังมีฐานข้อมูลของรูปแบบเสียงที่จัดทำดัชนีตามรหัสที่ไม่ซ้ำกันที่ด้านบนของเลเยอร์
SoundTriggerService
สแต็ก (สีน้ำตาล) จะจัดการฟีเจอร์ ที่เฉพาะเจาะจงสำหรับ Assistant และแอปทั่วไปแยกกัน
ฟังก์ชันของสแต็กทริกเกอร์เสียงคือการส่งเหตุการณ์ที่ไม่ต่อเนื่องซึ่ง
แสดงถึงเหตุการณ์ทริกเกอร์เสียง ในกรณีส่วนใหญ่ สแต็กทริกเกอร์เสียงจะ
ไม่จัดการกับเสียง เมื่อได้รับเหตุการณ์ทริกเกอร์ แอปจะได้รับสิทธิ์เข้าถึงสตรีมเสียงจริง
รอบๆ เวลาของเหตุการณ์โดยการเปิดออบเจ็กต์ AudioRecord
ผ่านเฟรมเวิร์กเสียง API ของ HAL ที่ทริกเกอร์เสียงจะให้
แฮนเดิลที่มีเหตุการณ์ที่ทริกเกอร์ซึ่งใช้กับเฟรมเวิร์กเสียง ดังนั้น
เนื่องจาก HAL ของทริกเกอร์เสียงและ HAL ของเสียงเชื่อมต่อกันเบื้องหลัง
โดยปกติแล้ว HAL ทั้ง 2 จะใช้กระบวนการร่วมกัน
อินเทอร์เฟซ HAL ของทริกเกอร์เสียง
อินเทอร์เฟซ HAL ของทริกเกอร์เสียง (STHAL) เป็นส่วนเฉพาะของผู้ให้บริการของสแต็กทริกเกอร์เสียง และจัดการการจดจำฮอตเวิร์ดและเสียงอื่นๆ ของฮาร์ดแวร์ STHAL มีเครื่องมืออย่างน้อย 1 รายการ โดยแต่ละรายการจะใช้อัลกอริทึมที่แตกต่างกัน ซึ่งออกแบบมาเพื่อตรวจหาเสียงประเภทใดประเภทหนึ่งโดยเฉพาะ เมื่อ STHAL ตรวจพบทริกเกอร์ ระบบจะ ส่งเหตุการณ์ไปยังเฟรมเวิร์ก แล้วหยุดการตรวจจับ
อินเทอร์เฟซ STHAL มีการระบุไว้ในส่วน /hardware/interfaces/soundtrigger/
ISoundTriggerHw
อินเทอร์เฟซรองรับความสามารถในการมีเซสชันการตรวจหาอย่างน้อย 1 รายการ
ที่ทำงานในเวลาที่กำหนด และฟังเหตุการณ์เสียง
การเรียกใช้ ISoundTriggerHw.getProperties()
จะแสดงผลProperties
Structure
ซึ่งมีคำอธิบายการใช้งานและความสามารถ
ขั้นตอนพื้นฐานในการตั้งค่าเซสชันอธิบายได้ดังนี้ในรูปที่ 2
รูปที่ 2: แผนภาพสถานะ STHAL
ขั้นตอนต่อไปนี้จะอธิบายแต่ละสถานะโดยละเอียด
ไคลเอ็นต์ HAL โหลดโมเดลโดยใช้
loadSoundModel()
หรือloadPhraseSoundModel()
ออบเจ็กต์โมเดลที่ระบุจะบ่งบอกถึงอัลกอริทึมการตรวจจับ (เครื่องมือ) ที่เฉพาะเจาะจงในการใช้งานที่จะใช้ รวมถึงพารามิเตอร์ที่ใช้ได้กับอัลกอริทึมนี้ เมื่อสำเร็จแล้ว เมธอดเหล่านี้จะส่งคืนแฮนเดิลซึ่งใช้เพื่ออ้างอิงโมเดลนี้ในการเรียกใช้ครั้งต่อๆ ไปเมื่อโหลดโมเดลเรียบร้อยแล้ว ไคลเอ็นต์ HAL จะเรียกใช้
startRecognition()
เพื่อเริ่มการตรวจหา การจดจำจะทำงานต่อไปใน เบื้องหลังจนกว่าจะเกิดเหตุการณ์ต่อไปนี้- มีการเรียกใช้
stopRecognition()
ในโมเดลนี้ - มีการตรวจพบ
- ระบบจะยกเลิกการตรวจหาเนื่องจากข้อจำกัดด้านทรัพยากร เช่น เมื่อมีการเริ่ม Use Case ที่มีลำดับความสำคัญสูงกว่า
ใน 2 กรณีหลัง ระบบจะส่งเหตุการณ์การจดจำผ่านอินเทอร์เฟซการเรียกกลับ ที่ไคลเอ็นต์ HAL ลงทะเบียนไว้เมื่อโหลด ในทุกกรณี หลังจากเกิดเหตุการณ์เหล่านี้ การตรวจจับจะหยุดทำงานและจะไม่อนุญาต การเรียกกลับการจดจำอีกต่อไป
คุณเริ่มโมเดลเดิมอีกครั้งได้ในภายหลัง และทำกระบวนการนี้ซ้ำได้หลายครั้งตามต้องการ
- มีการเรียกใช้
สุดท้ายนี้ HAL client จะยกเลิกการโหลดโมเดลที่ไม่ได้ใช้งานซึ่งไม่จำเป็นอีกต่อไปผ่าน
unloadModel()
จัดการข้อผิดพลาดของ HAL
ใน Android 11 ระบบจะถือว่ารหัสข้อผิดพลาดที่ไม่ใช่รหัสข้อผิดพลาดที่สำเร็จซึ่งส่งคืนจาก HAL เป็นข้อผิดพลาดในการเขียนโปรแกรม ซึ่งการกู้คืนจะต้องรีสตาร์ทกระบวนการ HAL เพื่อให้มั่นใจว่าการใช้งานไดรเวอร์จะมีความน่าเชื่อถือและสอดคล้องกัน นี่เป็นกลยุทธ์การกู้คืนทางเลือกสุดท้าย และ คาดว่ากรณีดังกล่าวจะไม่เกิดขึ้นในระบบที่ทำงานอย่างถูกต้อง