ฟีเจอร์ทริกเกอร์เสียงช่วยให้แอปสามารถฟังเหตุการณ์เสียงบางอย่าง เช่น คีย์เวิร์ด โดยใช้พลังงานต่ำและคำนึงถึงความเป็นส่วนตัว ตัวอย่าง 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 อีกครั้งเพื่อให้แน่ใจว่าลักษณะการทำงานระหว่างการติดตั้งใช้งานไดรเวอร์จะเชื่อถือได้และสอดคล้องกัน นี่เป็นกลยุทธ์การกู้คืนที่ใช้เป็นทางเลือกสุดท้าย และเราหวังว่ากรณีเช่นนี้จะไม่เกิดขึ้นในระบบที่ทำงานได้อย่างถูกต้อง