التصميم لتقليل زمن الاستجابة

يمكن للمورّدين تنفيذ ميزتَين رئيسيتَين لتقليل وقت استجابة الصوت:

  • FAST Mixer في AudioFlinger: تم طرح هذه الميزة في Android 4.1، وهي تتيح للتطبيقات استخدام Java AudioTrack وAAudio. لا يتضمّن FAST Mixer أي تغييرات كبيرة في واجهة برمجة التطبيقات العامة للعميل أو واجهة برمجة تطبيقات HAL.
  • AAudio MMAP: تم طرح هذه الميزة في الإصدار 8.1 من نظام التشغيل Android، وهي تتيح للتطبيقات الأصلية تحقيق زمن انتقال أقل من خلال AAudio. راجِع AAudio وMMAP للحصول على مزيد من المعلومات.

توضّح هذه الصفحة التصميم الأوّلي لوقت استجابة الصوت، والذي استمر في التطور بمرور الوقت. يُعدّ الفهم الجيد لهذا التصميم أمرًا بالغ الأهمية بالنسبة إلى المصنّعين الأصليين للأجهزة ومورّدي المنظومة على الرقاقة (SoC) لضمان التنفيذ الصحيح على أجهزتهم وشرائحهم المحدّدة. هذه الصفحة غير مخصّصة لمطوّري التطبيقات.

إنشاء مسار

يمكن للعميل ضبط البت AUDIO_OUTPUT_FLAG_FAST اختياريًا في المَعلمة audio_output_flags_t لدالة إنشاء AudioTrack C++ أو AudioTrack::set(). في الوقت الحالي، العملاء الوحيدون الذين يجرون ذلك هم:

تراجع عملية تنفيذ AudioTrack بلغة C++‎ AUDIO_OUTPUT_FLAG_FAST الطلب وقد ترفضه اختياريًا على مستوى العميل. إذا قرّر تمرير الطلب، سيتم ذلك باستخدام TRACK_FAST بت من المَعلمة track_flags_t الخاصة بطريقة المصنع IAudioTrackIAudioFlinger::createTrack().

يراجع خادم الصوت AudioFlinger الطلب TRACK_FAST وقد يرفضه اختياريًا على مستوى الخادم. يُعلم هذا الحقل العميل ما إذا كان الطلب مقبولاً أم لا، وذلك من خلال البت CBLK_FAST في كتلة التحكّم في الذاكرة المشتركة.

تشمل العوامل التي تؤثر في القرار ما يلي:

  • توفُّر سلسلة محادثات خلط سريع لهذا الناتج (راجِع أدناه)
  • معدّل أخذ العيّنات للتتبُّع
  • توفُّر سلسلة محادثات من جهة العميل لتنفيذ معالجات معاودة الاتصال لهذا المقطع الصوتي
  • حجم ذاكرة التخزين المؤقت للمسار
  • عدد الأماكن المتاحة في المسار السريع (راجِع ما يلي)

إذا تم قبول طلب العميل، يُطلق عليه اسم المسار السريع. وفي ما عدا ذلك، يُطلق عليه اسم مسار عادي.

سلاسل محادثات Mixer

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

Fast mixer

الميزات

توفّر سلسلة المحادثات السريعة الميزات التالية:

  • دمج المزيج الفرعي للمزج العادي مع ما يصل إلى سبعة مسارات سريعة من جهة العميل
  • تخفيف الصوت لكل مقطع صوتي

الميزات التي تم حذفها:

  • تحويل معدّل البيانات في الملف الصوتي لكل مسار
  • التأثيرات لكل مقطع صوتي
  • تأثيرات لكل ميكس

نقطة

يتم تشغيل أداة الدمج السريع بشكل دوري، مع فترة زمنية مقترَحة تتراوح بين 2 و3 ملي ثانية، أو فترة زمنية أعلى قليلاً تبلغ 5 ملي ثانية إذا لزم الأمر لتحقيق استقرار في الجدولة. تم اختيار هذا الرقم بحيث يكون إجمالي وقت الاستجابة في حدود 10 مللي ثانية، مع الأخذ في الاعتبار مسار التخزين المؤقت الكامل. يمكن استخدام قيم أصغر، ولكن قد يؤدي ذلك إلى زيادة استهلاك الطاقة وزيادة فرص حدوث أخطاء، وذلك حسب إمكانية التنبؤ بجدولة وحدة المعالجة المركزية. يمكن استخدام قيم أكبر، تصل إلى 20 مللي ثانية، ولكن يؤدي ذلك إلى انخفاض إجمالي وقت الاستجابة، لذا يجب تجنُّب ذلك.

الجدولة

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

تؤدي إلى الحظر

من المفترض ألا يتم حظر سلسلة Fast Mixer إلا في HAL write(). ويُعدّ أي حظر آخر ضمن أداة المزج السريع خطأً. على وجه الخصوص، يتم تجنُّب استخدام عمليات الإغلاق المتبادل. بدلاً من ذلك، يتم استخدام خوارزميات غير حاصرة (المعروفة أيضًا باسم خوارزميات غير قابلة للقفل). يمكنك الاطّلاع على تجنُّب انعكاس الأولوية لمزيد من المعلومات حول هذا الموضوع.

العلاقة بالمكوّنات الأخرى

لا يتفاعل الخلاط السريع بشكل مباشر مع العملاء. وعلى وجه الخصوص، لا يمكنه رؤية العمليات على مستوى الرابط، ولكن يمكنه الوصول إلى وحدة التحكّم في الذاكرة المشتركة الخاصة بالعميل.

يتلقّى الخلاط السريع الأوامر من الخلاط العادي من خلال قائمة انتظار الحالة.

وبخلاف استرداد بيانات الأغاني، يتم التفاعل مع العملاء من خلال أداة المزج العادية.

إنّ مصدر الإخراج الأساسي لبرنامج المزج السريع هو طبقة تجريد الأجهزة (HAL) الخاصة بالصوت.

خلاط عادي

الميزات

تم تفعيل جميع الميزات:

  • ما يصل إلى 32 أغنية
  • تخفيف الصوت لكل مقطع صوتي
  • تحويل معدّل البيانات في الملف الصوتي لكل مسار
  • معالجة التأثيرات

نقطة

يتم احتساب الفترة لتكون أول مضاعف تكاملي لفترة الخلط السريع التي تزيد عن أو تساوي 20 مللي ثانية.

الجدولة

يتم تشغيل أداة الدمج العادية بأولوية SCHED_OTHER مرتفعة.

تؤدي إلى الحظر

يُسمح للمُركِّب العادي بالحظر، وغالبًا ما يتم ذلك عند العديد من عمليات الاستبعاد المتبادل، بالإضافة إلى قناة حظر لكتابة المزيج الفرعي.

العلاقة بالمكوّنات الأخرى

يتفاعل برنامج الدمج العادي بشكل كبير مع العالم الخارجي، بما في ذلك سلاسل ربط، ومدير سياسات الصوت، وسلسلة الدمج السريع، ومقاطع العملاء.

إنّ مصدر الصوت العادي هو قناة حظر لمسار مصدر الصوت السريع رقم 0.

أعلام

AUDIO_OUTPUT_FLAG_FAST بت هو تلميح. ولا نضمن تلبية الطلب.

AUDIO_OUTPUT_FLAG_FAST هو مفهوم على مستوى العميل. ولا يظهر في الخادم.

TRACK_FAST هو مفهوم من العميل إلى الخادم.