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