ฟีเจอร์ทริกเกอร์เสียงทำให้แอปฟังเหตุการณ์อะคูสติกบางอย่าง เช่น คำสั่งให้ดำเนินการ ในลักษณะที่ใช้พลังงานต่ำและคำนึงถึงความเป็นส่วนตัวได้ ตัวอย่าง Use Case ของทริกเกอร์เสียง ได้แก่ Assistant และกำลังเล่น
หน้านี้จะแสดงภาพรวมของสถาปัตยกรรมของฟีเจอร์เรียกให้ดำเนินการด้วยเสียงและอินเทอร์เฟซ HAL (Hardware Abstraction Layer)
สแต็กทริกเกอร์เสียง
ระบบย่อยของทริกเกอร์เสียงสร้างขึ้นเป็นเลเยอร์ดังที่แสดงในรูปที่ 1
รูปที่ 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
รูปที่ 2: แผนภาพสถานะของ STHAL
ขั้นตอนต่อไปนี้จะอธิบายแต่ละรัฐอย่างละเอียด
ไคลเอ็นต์ HAL จะโหลดโมเดลโดยใช้
loadSoundModel()
หรือloadPhraseSoundModel()
ออบเจ็กต์โมเดลที่ระบุจะระบุอัลกอริทึมการตรวจจับ (เครื่องมือ) สำหรับการติดตั้งใช้งานที่เฉพาะเจาะจง รวมถึงพารามิเตอร์ที่ใช้ได้กับอัลกอริทึมนี้ เมื่อทำสำเร็จแล้ว เมธอดเหล่านี้จะส่งคืนแฮนเดิลที่ใช้อ้างอิงโมเดลนี้ในการเรียกใช้ครั้งต่อๆ ไปเมื่อโหลดโมเดลเรียบร้อยแล้ว ไคลเอ็นต์ HAL จะเรียกใช้
startRecognition()
เพื่อเริ่มการตรวจจับ การจดจำจะทำงานต่อไปในเบื้องหลังจนกว่าจะเกิดเหตุการณ์ใดเหตุการณ์หนึ่งต่อไปนี้- มีการเรียก
stopRecognition()
ในโมเดลนี้แล้ว - มีการตรวจจับเกิดขึ้น
- ระบบล้มเลิกการตรวจหาเนื่องจากข้อจำกัดด้านทรัพยากร เช่น เมื่อเริ่ม Use Case ที่มีลำดับความสำคัญสูงกว่า
ในกรณีหลัง 2 กรณี ระบบจะส่งเหตุการณ์การจดจำผ่านอินเทอร์เฟซการเรียกกลับที่ไคลเอ็นต์ HAL ลงทะเบียนไว้เมื่อโหลด ในทุกกรณี หลังจากเกิดเหตุการณ์เหล่านี้ การตรวจจับจะปิดใช้งานและจะไม่อนุญาตให้มีการเรียกกลับการจดจำอีก
คุณเริ่มโมเดลเดิมอีกครั้งในภายหลังได้ และทําขั้นตอนนี้ซ้ำได้หลายครั้งตามต้องการ
- มีการเรียก
สุดท้าย HAL จะยกเลิกการโหลดโมเดลที่ไม่ใช้งานซึ่งไม่จําเป็นต้องใช้แล้วผ่าน
unloadModel()
จัดการข้อผิดพลาด HAL
ใน Android 11 ระบบจะถือว่ารหัสข้อผิดพลาดที่ไม่สำเร็จซึ่งแสดงผลจาก HAL เป็นข้อผิดพลาดในการเขียนโปรแกรม ซึ่งการกู้คืนจะต้องเริ่มกระบวนการ HAL อีกครั้งเพื่อให้แน่ใจว่าลักษณะการทำงานระหว่างการติดตั้งใช้งานไดรเวอร์จะเชื่อถือได้และสอดคล้องกัน วิธีนี้เป็นกลยุทธ์การฟื้นตัวจากรีสอร์ตครั้งสุดท้ายและเราคาดการณ์ว่ากรณีดังกล่าวจะไม่ได้เกิดขึ้นในระบบที่ทำงานอย่างถูกต้อง