توفر ميزة Sound Trigger للتطبيقات القدرة على الاستماع إلى أحداث صوتية معينة ، مثل الكلمات الساخنة ، بطريقة منخفضة الطاقة وحساسة للخصوصية. أمثلة حالات استخدام Sound Trigger هي Assistant و Now Playing.
تقدم هذه الصفحة نظرة عامة على بنية مشغل الصوت وواجهة HAL (طبقة تجريد الأجهزة).
مكدس مشغل الصوت
تم بناء النظام الفرعي Sound Trigger في طبقات كما هو موضح في الشكل 1:
الشكل 1: مكدس مشغل الصوت
تصف القائمة التالية كل طبقة موضحة في الشكل 1 بمزيد من التفصيل:
تحتوي طبقة HAL (باللون الأخضر) على رمز البائع المحدد الذي يقوم بتنفيذ واجهة Sound Trigger HAL (STHAL).
توجد
SoundTriggerMiddleware
(باللون الأصفر) فوق واجهة HAL. يتواصل مع HAL وهو مسؤول عن الوظائف مثل مشاركة HAL بين العملاء المختلفين ، والتسجيل ، وفرض الأذونات ، والتعامل مع التوافق مع إصدارات HAL الأقدم.يوجد نظام
SoundTriggerService
(باللون الأزرق) فوق البرامج الوسيطة. يسهل التكامل مع ميزات النظام الأخرى ، مثل الهاتف وأحداث البطارية. كما أنه يحتفظ بقاعدة بيانات لنماذج الصوت ، مفهرسة بمعرفات فريدة.فوق طبقة
SoundTriggerService
، يتعامل المكدس (باللون البني) مع الميزات الخاصة بالمساعد والتطبيقات العامة بشكل منفصل.
تتمثل وظيفة مكدس Sound Trigger في تقديم أحداث منفصلة تمثل أحداثًا صوتية وتحفز. في معظم الحالات ، لا تتعامل مكدس Sound Trigger مع الصوت. عند استلام أحداث المشغل ، تحصل التطبيقات على إمكانية الوصول إلى دفق الصوت الفعلي ، المحيط بوقت الأحداث ، عن طريق فتح كائن AudioRecord
عبر إطار عمل الصوت. توفر واجهات API لـ Sound Trigger HAL مؤشرًا للحدث المشغل المستخدم مع Audio Framework. ومن ثم ، نظرًا لأن Sound Trigger HAL و Audio HAL متصلان أسفل الغطاء ، فعادة ما يشتركان في العملية.
واجهة HAL لمشغل الصوت
تعد واجهة Sound Trigger HAL (STHAL) هي الجزء المحدد للبائع من مكدس Sound Trigger وتتولى التعرف على الأجهزة للكلمات المهمة والأصوات الأخرى. يوفر STHAL محركًا واحدًا أو أكثر حيث يعمل كل محرك على خوارزمية مختلفة مصممة لاكتشاف فئة معينة من الأصوات. عندما يكتشف STHAL مشغلًا ، فإنه يرسل حدثًا إلى إطار العمل ثم يوقف الاكتشاف.
تم تحديد واجهة STHAL ضمن /hardware/interfaces/soundtrigger/
.
تدعم واجهة ISoundTriggerHw
القدرة على تشغيل جلسة كشف واحدة أو أكثر في وقت معين والاستماع إلى الأحداث الصوتية. يؤدي استدعاء ISoundTriggerHw.getProperties()
إلى إرجاع بنية Properties
تحتوي على وصف وقدرات التنفيذ.
يتم توضيح التدفق الأساسي لإعداد الجلسة على النحو التالي في الشكل 2:
الشكل 2: مخطط الحالة STHAL
تصف الخطوات التالية كل ولاية بمزيد من التفصيل:
يقوم عميل HAL بتحميل نموذج باستخدام
loadSoundModel()
أوloadPhraseSoundModel()
. يشير كائن النموذج المقدم إلى خوارزمية الكشف الخاصة بالتنفيذ (المحرك) التي يجب استخدامها ، بالإضافة إلى المعلمات المطبقة على هذه الخوارزمية. عند النجاح ، تُعيد هذه الطرق مؤشرًا يستخدم للإشارة إلى هذا النموذج في الاستدعاءات اللاحقة.بمجرد تحميل النموذج بنجاح ، يستدعي عميل HAL
startRecognition()
لبدء الاكتشاف. يستمر التعرف في الخلفية حتى يحدث أحد الأحداث التالية:- تم
stopRecognition()
في هذا النموذج. - تم الكشف.
- تم إحباط الاكتشاف بسبب قيود الموارد ، على سبيل المثال ، عند بدء حالة استخدام ذات أولوية أعلى.
في الحالتين الأخيرتين ، يتم إرسال حدث التعرف عبر واجهة رد الاتصال المسجلة بواسطة عميل HAL عند التحميل. في جميع الحالات ، بعد حدوث أي من هذه الأحداث ، يصبح الاكتشاف غير نشط ولا يُسمح بمزيد من عمليات استرجاع التعرف.
يمكن بدء نفس النموذج مرة أخرى في وقت لاحق ، ويمكن تكرار هذه العملية عدة مرات حسب الحاجة.
- تم
أخيرًا ، يتم تفريغ نموذج غير نشط لم يعد مطلوبًا بواسطة عميل HAL عبر
unloadModel()
.
معالجة أخطاء HAL
لضمان السلوك الموثوق به والمتسق بين عمليات تنفيذ برنامج التشغيل ، في Android 11 ، يتم التعامل مع أي رموز خطأ غير ناجحة يتم إرجاعها من HAL على أنها أخطاء في البرمجة ، ويتطلب الاسترداد منها إعادة تشغيل عملية HAL. هذه هي استراتيجية استرداد الملاذ الأخير والتوقع هو أن مثل هذه الحالات لن تحدث في نظام يعمل بشكل صحيح.