مشغل الصوت

توفر ميزة Sound Trigger للتطبيقات القدرة على الاستماع لأحداث صوتية معينة، مثل الكلمات المهمة، بطريقة منخفضة الطاقة وحساسة للخصوصية. أمثلة على حالات استخدام Sound Trigger هي "المساعد" و"التشغيل الآن".

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

مكدس مشغل الصوت

تم بناء النظام الفرعي Sound Trigger في طبقات كما هو موضح في الشكل 1:

sound_trigger_stack

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

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

  • تحتوي طبقة HAL (باللون الأخضر) على الكود الخاص بالبائع والذي يقوم بتنفيذ واجهة Sound Trigger HAL (STHAL).

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

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

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

تتمثل وظيفة حزمة Sound Trigger في تقديم أحداث منفصلة تمثل أحداثًا صوتية ومحفزة. في معظم الحالات، لا يتعامل مكدس Sound Trigger مع الصوت. عند استلام أحداث التشغيل، تحصل التطبيقات على إمكانية الوصول إلى التدفق الصوتي الفعلي، المحيط بوقت الأحداث، عن طريق فتح كائن AudioRecord عبر إطار عمل الصوت. توفر واجهات برمجة تطبيقات Sound Trigger HAL مؤشرًا للحدث الذي تم تشغيله والذي يتم استخدامه مع Audio Framework. ومن ثم، نظرًا لأن Sound Trigger HAL وAudio Trigger 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. هذه هي استراتيجية التعافي كملاذ أخير ومن المتوقع أن مثل هذه الحالات لن تحدث في نظام يعمل بشكل صحيح.