مشغّل الصوت

توفّر ميزة "الاستجابة للصوت" للتطبيقات إمكانية الاستماع إلى أحداث صوتية معيّنة، مثل الكلمات المفتاحية، بطريقة تستهلك طاقة منخفضة وتراعي الخصوصية. تشمل أمثلة حالات استخدام "مشغِّل الصوت" "مساعد Google" وميزة "المحتوى الذي يتم تشغيله حاليًا".

تقدّم هذه الصفحة نظرة عامة على بنية Sound Trigger وواجهة HAL (Hardware Abstraction Layer).

تسلسل أدوات تنشيط الصوت

تم إنشاء النظام الفرعي "مشغِّل الصوت" في طبقات كما هو موضَّح في الشكل 1:

sound_trigger_stack

الشكل 1: تكديس مشغِّل الصوت

تصف القائمة التالية كل طبقة معروضة في الشكل 1 بمزيد من التفصيل:

  • تتضمن طبقة HAL (باللون الأخضر) الرمز الخاص بالمورّد الذي ينفّذ واجهة الصوت المشغِّل HAL (STHAL).

  • يظهر الرمز SoundTriggerMiddleware (باللون الأصفر) أعلى واجهة HAL. ويتواصل مع HAL وهو مسؤول عن وظائفه، مثل مشاركة HAL بين العملاء المختلفين، والتسجيل، وفرض الأذونات، والتعامل مع التوافق مع الإصدارات القديمة من HAL.

  • يقع نظام SoundTriggerService (باللون الأزرق) فوق الوسيط. ويسهّل الدمج مع ميزات النظام الأخرى، مثل ميزات الهاتف ومقاييس البطارية. وتحتفظ أيضًا بقاعدة بيانات للنماذج الصوتية، والتي تم فهرستها بواسطة معرّفات فريدة.

  • فوق طبقة SoundTriggerService، تعالج الحزمة (باللون البني) الميزات الخاصة بخدمة "مساعد Google" والتطبيقات العامة بشكل منفصل.

وظيفة حزمة "مشغِّل الصوت" هي تقديم أحداث منفصلة تمثل أحداثًا صوتية مُشغِّلة. في معظم الحالات، لا تتعامل حزمة "مشغِّل الصوت" مع الصوت. عند تلقّي أحداث التفعيل، يمكن للتطبيقات الوصول إلى مجرى الصوت الحقييقي المحيط بوقت الأحداث من خلال فتح عنصر AudioRecord عبر إطار عمل الصوت. توفّر واجهات برمجة التطبيقات Sound Trigger HAL اسمًا مع الحدث الذي تم تشغيله والذي يتم استخدامه مع إطار عمل الصوت. وبالتالي، بما أنّ "HAL" و"HAL" لمشغّل الصوت مرتبط بطبقة خارجية، فإنّهما عادةً ما يشتركان في العملية.

واجهة Sound Trigger HAL

واجهة Sound Trigger HAL (STHAL) هي الجزء الخاص بالمورّد من حِزمة Sound Trigger، وهي تتعامل مع التعرّف على الكلمات المفتاحية والأصوات الأخرى من خلال الأجهزة. توفّر STHAL محرّكًا واحدًا أو أكثر، ويعمل كل محرّك منها على تشغيل خوارزمية مختلفة مصمّمة لرصد فئة معيّنة من الأصوات. عندما يرصد STHAL عامل تشغيل، فإنه يرسل حدثًا إلى إطار العمل ثم يوقف عملية رصده.

يتم تحديد واجهة STHAL ضمن /hardware/interfaces/soundtrigger/.

تتيح واجهة ISoundTriggerHw إمكانية تنفيذ جلسة واحدة أو أكثر من جلسات الرصد في وقت معيّن والاستماع إلى الأحداث الصوتية. تؤدي الدعوة إلى ISoundTriggerHw.getProperties() إلى عرض بنية Properties تتضمّن وصف التنفيذ وإمكاناته.

يتم شرح التدفق الأساسي لإعداد جلسة على النحو التالي في الشكل 2:

sthal_state

الشكل 2: مخطّط الحالة STHAL

توضِّح الخطوات التالية كل حالة بمزيد من التفصيل:

  1. يُحمِّل برنامج HAL نموذجًا باستخدام loadSoundModel() أو loadPhraseSoundModel(). يشير عنصر النموذج المقدَّم إلى خوارزمية الكشف (المحرّك) الخاصة بالتنفيذ التي يجب استخدامها، بالإضافة إلى المَعلمات السارية على هذه الخوارزمية. عند نجاح هذه الطرق، تُعرِض علامة ملف شخصي تُستخدَم للإشارة إلى هذا النموذج في طلبات البيانات اللاحقة.

  2. بعد تحميل النموذج بنجاح، يستدعي برنامج HAL startRecognition() لبدء عملية الرصد. يستمر تشغيل ميزة التعرّف في الخلفية إلى أن يحدث أحد الحدثَين التاليَين:

    1. تمّ استدعاء stopRecognition() في هذا النموذج.
    2. تم رصد محتوى.
    3. يتم إيقاف عملية رصد المحتوى بسبب قيود الموارد، على سبيل المثال، عند بدء حالة استخدام ذات أولوية أعلى.

    في الحالتَين الأخيرتَين، يتم إرسال حدث التعرّف من خلال واجهة callback التي يسجّلها عميل HAL عند التحميل. في جميع الحالات، بعد وقوع أيٍّ من هذه الأحداث، يصبح نظام رصد الوجوه غير نشط ولا يُسمح بعد ذلك بتلقّي طلبات إعادة الاتصال لميزة التعرّف على الوجوه.

    يمكن بدء النموذج نفسه مرة أخرى في وقت لاحق، ويمكن تكرار هذه العملية بقدر ما يلزم.

  3. وأخيرًا، يلغي عميل HAL تحميل نموذج غير نشط لم يعد مطلوبًا له، وذلك من خلال unloadModel().

التعامل مع أخطاء HAL

لضمان السلوك الموثوق والمُتسق بين عمليات تنفيذ برامج تشغيل الأجهزة، في الإصدار Android 11، يتم التعامل مع أي رموز خطأ تشير إلى عدم النجاح يتم عرضها من HAL على أنّها أخطاء برمجية، ويتطلّب استردادها إعادة تشغيل عملية HAL. هذه هي استراتيجية الاسترداد كحلّ أخير، ومن المفترض أنّه لن تحدث مثل هذه الحالات في نظام يعمل بشكل صحيح.