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