تشغيل الجهاز عند سماع صوت

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

تقدّم هذه الصفحة نظرة عامة على بنية خدمة "التشغيل الصوتي" وواجهة HAL (طبقة تجريد الأجهزة) الخاصة بها.

حزمة Sound Trigger

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

sound_trigger_stack

الشكل 1: حزمة Sound Trigger

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

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

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

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

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

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

واجهة 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. يتم إلغاء عملية الرصد بسبب قيود الموارد، مثلاً عند بدء حالة استخدام ذات أولوية أعلى.

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

    يمكن إعادة تشغيل النموذج نفسه في وقت لاحق، ويمكن تكرار هذه العملية عدة مرات حسب الحاجة.

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

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

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