يعتمد نظام التشغيل Android Automotive (AAOS) على حزمة الصوت الأساسية في Android من أجل وتدعم حالات الاستخدام للعمل كنظام الترفيه والمعلومات في السيارة. تكون AAOS مسؤولة عن أصوات المعلومات والترفيه (أي الوسائط والتنقل الاتصالات) ولكنه ليس مسؤولاً بشكل مباشر عن أجهزة الرنين والتحذيرات متطلبات صارمة للتوافر والتوقيت. في حين أن نظام التشغيل Android Automotive يوفّر إشارات آليات لمساعدة المركبة في إدارة الصوت، في النهاية، يعود القرار إلى المركبة لإجراء اتصال بشأن الأصوات التي يجب تشغيلها للسائق الركاب، وضمان وجود أصوات حرجة السلامة والأصوات التنظيمية بشكل صحيح بدون انقطاع.
بما أنّ Android يدير تجربة الوسائط في المركبة، فإن مصادر الوسائط الخارجية مثل موالف الراديو، الذي ينبغي أن يتم تمثيله بواسطة التطبيقات التي يمكنها معالجة الصوت والأحداث الرئيسية والوسائط للمصدر.
يتضمّن Android 11 التغييرات التالية على الصوت المتعلق بالسيارات الدعم:
- الاختيار التلقائي لمنطقة الصوت استنادًا إلى رقم تعريف المستخدم المرتبط بها
- استخدامات جديدة للنظام لإتاحة الأصوات الخاصة بالسيارات
- التركيز على صوت HAL
- تأخُّر التركيز على الصوت لأحداث البث غير العابرة
- إعداد المستخدم للتحكّم في التفاعل بين التنقّل والمكالمات
الأصوات والبث في Android
تعالج الأنظمة الصوتية للسيارات الأصوات وعمليات البث التالية:
الشكل 1. مخطّط بياني لبنية تركّز على البث
يدير Android الأصوات الصادرة من تطبيقات Android ويتحكّم في هذه التطبيقات وتوجيه أصواتهم إلى أجهزة الإخراج في HAL بناءً على نوع الصوت:
- أحداث البث المنطقية، والمعروفة باسم مصادر المحتوى الصوتي الأساسي يتم وضع علامة سمات الصوت عليها.
- البث المباشر، المعروف باسم "الأجهزة في الصوت الأساسي" لا تحتوي على معلومات سياقية بعد المزج.
بالنسبة إلى الموثوقية، يتم استخدام الأصوات الخارجية (التي تأتي من مصادر تتم إدارة مصادر مثل أجهزة رنين تحذير حزام الأمان) خارج نطاق نظام التشغيل Android، أسفل HAL أو حتى في أجهزة منفصلة. يجب أن توفر منصات تنفيذ النظام أداة مزج واحدة أو أكثر من مصادر إدخال الصوت من Android ثم تجمع ما البث بطريقة مناسبة مع مصادر الصوت الخارجية التي يتطلبها المركبة.
يُعد تنفيذ HAL والخلاط الخارجي مسؤولين عن ضمان يتم سماع الأصوات الخارجية المهمة المتعلقة بالسلامة ومزجها في أجهزة Android ببثها وتوجيهها إلى مكبرات صوت مناسبة
أصوات Android
يمكن أن يكون للتطبيقات مشغِّل واحد أو أكثر يتفاعل مع نظام Android العادي. واجهات برمجة التطبيقات (مثل AudioManager للتحكم في التركيز أو MediaPlayer للبث) لإنتاج واحد أو أكثر من مصادر البيانات الصوتية المنطقية. هذه البيانات قد يكون عبارة عن قناة أحادية القناة أو صوت محيطي 7.1، ولكن يتم توجيهه ومعالجتها على أنها مصدر واحد. مصدر بيانات التطبيق مرتبط بـ AudioAttributes. تقدّم للنظام تلميحات حول كيفية التعبير عن الصوت.
يتم إرسال مجموعات البث المنطقية من خلال AudioService وتوجيهها إلى بث مباشر واحد ( واحد فقط) من مصادر الإخراج المادية المتاحة، وكل منها هو الناتج في أداة المزج داخل AudioFlinger. بعد مزج سمات الصوت بث محتوى مادي، فلن تكون متوفرة بعد الآن.
يتم بعد ذلك إرسال كل بث مادي إلى طبقة تجريد الأجهزة (HAL) الصوتية لعرضه على الأجهزة. في تطبيقات السيارات، يمكن أن يكون عرض الأجهزة برامج ترميز محلية (على غرار الأجهزة الجوّالة) أو عن بُعد باستخدام معالج بيانات الشبكة. وفي كلتا الحالتين، تكمن مهمة تنفيذ HAL للصوت في تقديم بيانات العينة الفعلية وتجعلها مسموعة.
ساحات المشاركات الخارجية
البث الصوتي الذي يجب عدم توجيهه عبر Android (للحصول على الشهادة أو إلى أداة المزج الخارجي مباشرةً. بدءًا من نظام Android 11، يمكن لغرفة HAL الآن طلب التركيز على هذه الأصوات الخارجية لإبلاغ Android حتى يتمكّن من اتخاذ الإجراءات المناسبة مثل إيقاف الوسائط مؤقتًا أو منع الآخرين من اكتساب التركيز.
إذا كانت أحداث البث الخارجية هي مصادر وسائط يجب أن تتفاعل مع الصوت بيئة التشغيل التي ينشئها Android (على سبيل المثال، إيقاف تشغيل MP3 عند موالف خارجي)، يجب تمثيل أحداث البث الخارجية هذه تطبيق Android. قد يطلب هذا التطبيق التركيز على الصوت نيابةً عن مصدر الوسائط بدلاً من HAL، وستتم الاستجابة لإشعارات التركيز من خلال تشغيل/إيقاف المصدر الخارجي حسب الضرورة ليتناسب مع تركيز Android . يكون التطبيق مسؤولاً أيضًا عن التعامل مع الأحداث الرئيسية للوسائط، مثل تشغيل/إيقاف مؤقت. إحدى الآليات المقترحة للتحكّم في هذه الأجهزة الخارجية هي HwAudioSource.
أجهزة إخراج
على مستوى HAL للصوت، يجب أن يكون نوع الجهاز AUDIO_DEVICE_OUT_BUS
.
جهاز إخراج عامًا للاستخدام في الأنظمة الصوتية للمركبات الحافلة
المنافذ التي يمكن الوصول إليها من خلال الجهاز (حيث يكون كل منفذ نقطة نهاية
الفعلي) ومن المتوقع أن يكون نوع جهاز الإخراج الوحيد المتوافق في
مركبة.
يمكن أن يستخدم تطبيق النظام منفذًا واحدًا لنقل جميع الأصوات في Android،
وهي الحالة التي يمزج فيها Android كل المحتوى معًا وعرضه في بث واحد.
ويمكن أن توفّر قناة HAL منفذًا واحدًا للحافلات لكل CarAudioContext
للسماح بذلك
عرض متزامن لأي نوع من أنواع الصوت وهذا يجعل من الممكن بالنسبة إلى HAL
المستخدم لمزج الأصوات المختلفة وخفضها على النحو المطلوب.
يتم تعيين السياقات الصوتية لأجهزة الإخراج من خلال
car_audio_configuration.xml
إدخال الميكروفون
عند التقاط صوت، يتلقّى طبقة تجريد الأجهزة (HAL) الصوتية openInputStream
يتضمن وسيطة AudioSource
تشير إلى كيفية
يجب معالجة إدخال الميكروفون.
مصدر VOICE_RECOGNITION
ويتوقع (مساعد Google تحديدًا) بث ميكروفون استيريو
تأثير إلغاء صدى الصوت (إذا كان متاحًا) ولكن لم يتم تطبيقه عليه
من المتوقّع أن يتولّى "مساعد Google" إجراء عملية إنشاء الشعاع.
إدخال ميكروفون متعدد القنوات
لالتقاط صوت من جهاز عبر أكثر من قناتين (استيريو)، استخدِم
قناع فهرس القناة بدلاً من قناع الفهرس الموضعي (مثل
CHANNEL_IN_LEFT
). مثال:
final AudioFormat audioFormat = new AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(44100) .setChannelIndexMask(0xf /* 4 channels, 0..3 */) .build(); final AudioRecord audioRecord = new AudioRecord.Builder() .setAudioFormat(audioFormat) .build(); audioRecord.setPreferredDevice(someAudioDeviceInfo);
عند اختيار كل من setChannelMask
وsetChannelIndexMask
يتم تعيينها، لا يستخدم AudioRecord
سوى القيمة التي تحددها
setChannelMask
(قناتان كحد أقصى).
التقاط متزامن
بدءًا من نظام التشغيل Android 10، سيدعم إطار عمل Android الالتقاط المتزامن
من المدخلات، ولكن مع فرض قيود لحماية خصوصية المستخدم. كجزء
لهذه القيود، فإن المصادر الافتراضية مثل
ويتم تجاهل AUDIO_SOURCE_FM_TUNER
، وبالتالي يُسمح باستخدامه.
تم التقاطها بالتزامن مع إدخال منتظم (مثل الميكروفون).
لا تُعتبَر HwAudioSources
أيضًا جزءًا من القيم المتزامنة
التقاط الصور أو الفيديوهات.
التطبيقات المصمّمة للعمل على أجهزة AUDIO_DEVICE_IN_BUS
أو الأجهزة المزوّدة
يجب الاعتماد بشكل صريح على أجهزة AUDIO_DEVICE_IN_FM_TUNER
الثانوية.
تحديد هذه الأجهزة واستخدام AudioRecord.setPreferredDevice()
لتجاوز منطق اختيار المصدر التلقائي في Android
استخدامات الصوت
إنّ نظام التشغيل Android Automotive (AAOS) يستخدم
AudioAttributes.AttributeUsages
بشكل أساسي.
من أجل التوجيه وتعديل مستوى الصوت وإدارة التركيز. الاستخدامات
تمثيلاً لـ "لماذا" تشغيل البث وبالتالي، لا شك في أنّ جميع أحداث البث
وطلبات تركيز الصوت عند تحديد استخدام لتشغيل الصوت. فعندما
تحديدًا عند إنشاء كائن AudioAttributes، فسيتم استخدام
تم ضبط القيمة التلقائية على USAGE_UNKNOWN
. يتم التعامل مع هذه الطريقة حاليًا بالطريقة نفسها
مثل USAGE_MEDIA
، يجب عدم الاعتماد على هذا السلوك في الوسائط
التشغيل.
استخدامات النظام
في Android 11، تم تقديم استخدامات النظام. تؤدي هذه الاستخدامات إلى
بشكل مشابه للاستخدامات القائمة سابقًا، باستثناء أنّها تتطلّب واجهات برمجة تطبيقات للنظام
لاستخدامه بالإضافة إلى android.permission.MODIFY_AUDIO_ROUTING
.
استخدامات النظام هي:
USAGE_EMERGENCY
USAGE_SAFETY
USAGE_VEHICLE_STATUS
USAGE_ANNOUNCEMENT
لإنشاء AudioAttributes
مع استخدام النظام، استخدِم
AudioAttributes.Builder#setSystemUsage
بدلاً من setUsage
. استدعاء هذه الطريقة باستخدام غير تابع للنظام
سيؤدي إلى رمي IllegalArgumentException
. أيضًا، إذا
تم تعيين كلٍ من استخدام النظام والاستخدام على أداة إنشاء، فستعرض
IllegalArgumentException
عند البناء.
للتحقّق من الاستخدام المرتبط بوحدة AudioAttributes
على سبيل المثال، اتصال AudioAttributes#getSystemUsage
.
يعرض هذا الإجراء الاستخدام أو استخدام النظام المرتبط.
السياقات الصوتية
لتبسيط عملية ضبط صوت AAOS، تم تجميع الاستخدامات المماثلة.
إلى CarAudioContext
. تُستخدم السياقات الصوتية هذه طوال
CarAudioService
لتحديد التوجيه ومجموعات مستوى الصوت والتركيز على الصوت
المشروع.
في ما يلي سياقات الصوت في Android 11:
سياق صوت السيارة | استخدامات السمات المرتبطة |
---|---|
MUSIC |
UNKNOWN, GAME, MEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT, ASSISTANCE_ACCESSIBILITY |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATION, VOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATION, NOTIFICATION_* |
SYSTEM_SOUND |
ASSISTANCE_SONIFICATION |
EMERGENCY |
EMERGENCY |
SAFETY |
SAFETY |
VEHICLE_STATUS |
VEHICLE_STATUS |
ANNOUNCEMENT |
ANNOUNCEMENT |
الربط بين سياقات الصوت واستخداماته الصفوف المميزة مخصصة للميزات الجديدة استخدامات النظام.
صوت متعدّد المناطق
توفّر السيارات مجموعة جديدة من حالات الاستخدام حول عدد المستخدمين المتزامنين يتفاعل مع المنصة ويسعى إلى استخدام وسائط منفصلة. بالنسبة على سبيل المثال، يمكن للسائق تشغيل الموسيقى في المقصورة بينما يجلس الركاب في المقعد الخلفي يشاهدون فيديو YouTube على الشاشة الخلفية يتيح الصوت المتعدّد المناطق هذا من خلال السماح بتشغيل مصادر صوت مختلفة في الوقت نفسه عبر مناطق مختلفة للمركبة.
يتيح نظام الصوت المتعدد المناطق الذي يعمل بنظام التشغيل Android 10 للمصنّعين الأصليين للأجهزة ضبط الصوت. إلى مناطق منفصلة. كل منطقة هي مجموعة من الأجهزة داخل المركبة مع مجموعات الصوت الخاصة بها، وضبط إعدادات التوجيه للسياقات، والتركيز المشروع. بهذه الطريقة، يمكن ضبط المقصورة الرئيسية كصوت واحد. المنطقة، بينما يتم ضبط مقابس سماعات الرأس في الشاشة الخلفية كمنطقة ثانية.
ويتم تحديد المناطق كجزء من car_audio_configuration.xml
.
يقرأ CarAudioService
بعد ذلك الإعدادات ويساعد AudioService.
توجيه البث الصوتي استنادًا إلى المنطقة المرتبطة به. ما زالت كل منطقة تحدد
للتوجيه على أساس السياقات ومعرّف التطبيقات. عندما يكون اللاعب
تم الإنشاء، يحدّد CarAudioService
المنطقة التي يتم إنشاء المشغّل فيها
المرتبطة به، ثم حسب الاستخدام، أي جهاز AudioFlinger
يجب توجيه الصوت إليه.
ويتم أيضًا الحفاظ على التركيز بشكل مستقل لكل منطقة صوتية. وهذا يمكّن
تطبيقات في مناطق مختلفة لإنتاج صوت بشكل مستقل بدون
مع بعضها البعض مع جعل التطبيقات لا تزال تحترم التغييرات في
التركيز داخل منطقتهم. CarZonesAudioFocus
في نطاق
تقع على عاتق CarAudioService
مسؤولية إدارة التركيز لكل
المنطقة.
الشكل 2. ضبط إعدادات الصوت المتعدّد المناطق
طبقة تجريد الأجهزة (HAL) للصوت
تعتمد عمليات تنفيذ الإعدادات الصوتية في السيارات على طبقة تجريد الأجهزة (HAL) للصوت العادي في Android والتي تتضمّن ما يلي:
IDevice.hal
تنشئ مصادر الإدخال والمخرجات تتعامل مع مستوى الصوت الرئيسي وكتم الصوت، وتستخدم:createAudioPatch
لإنشاء رموز تصحيح خارجية وخارجية بين الأجهزةIDevice.setAudioPortConfig()
لتوفير مستوى الصوت لكل بث فعلي.
IStream.hal
وجنبًا إلى جنب مع متغيرات الإدخال والمخرجات، يدير بث العينات الصوتية من الأجهزة وإليها.
أنواع أجهزة السيارات
إنّ أنواع الأجهزة التالية ذات صلة بالأنظمة الأساسية للسيارات.
نوع الجهاز | الوصف |
---|---|
AUDIO_DEVICE_OUT_BUS |
المخرجات الأساسية من Android (هذه هي الطريقة التي يستخدم بها كل المحتوى الصوتي في Android تسليمه إلى المركبة). يُستخدم كعنوان للتفريق بين أحداث البث لكل سياق. |
AUDIO_DEVICE_OUT_TELEPHONY_TX |
يتم استخدامه للصوت الموجَّه إلى لاسلكي خلوي لإرساله. |
AUDIO_DEVICE_IN_BUS |
تُستخدَم للإدخالات غير المصنَّفة. |
AUDIO_DEVICE_IN_FM_TUNER |
يُستخدم فقط لإدخال البث اللاسلكي. |
AUDIO_DEVICE_IN_TV_TUNER |
يتم استخدامه لجهاز تلفزيون إن كان متوفرًا. |
AUDIO_DEVICE_IN_LINE |
يُستخدم لمقبس إدخال AUX. |
AUDIO_DEVICE_IN_BLUETOOTH_A2DP |
الموسيقى المستلَمة عبر البلوتوث. |
AUDIO_DEVICE_IN_TELEPHONY_RX |
يُستخدم للصوت المستلَم من الراديو الخلوي المرتبط بهاتف الاتصال. |
جارٍ ضبط الأجهزة السماعية
يجب تحديد الأجهزة السماعية المرئية لنظام التشغيل Android في
/audio_policy_configuration.xml
، والذي يتضمّن المكوّنات التالية:
- اسم الوحدة. يتوافق مع "الأساسية" (تُستخدم في حالات استخدام السيارات)
"A2DP" و"remote_submix" و"USB". اسم الوحدة والصوت المرتبط بها
يجب تجميع برنامج التشغيل في
audio.primary.$(variant).so
. - منافذ الجهاز. يحتوي على قائمة بواصفات الأجهزة لجميع عناصر الإدخال والمخرجات الأجهزة (بما في ذلك الأجهزة المتصلة بشكل دائم والأجهزة القابلة للإزالة) التي يمكن يتم الوصول إليها من هذه الوحدة.
- لكل جهاز إخراج، يمكنك تحديد عنصر تحكم يتكون من القيم الدنيا/الأقصى/الافتراضية/الخطوة بالملليبل (1 ميليبل = 1/100 ديسيبل = 1/1000 بيل).
- يمكن استخدام سمة العنوان على مثيل devicePort للعثور على
جهازك، حتى إذا كانت هناك أجهزة متعددة من نوع الجهاز نفسه مثل
AUDIO_DEVICE_OUT_BUS
- MixPorts. يحتوي على قائمة بجميع مصادر بيانات الإخراج والإدخال التي تم الكشف عنها من خلال HAL للصوت. يمكن اعتبار كل مثيل من مثيلات المزيج كبث مباشر Android AudioService.
- والمسارات. تحدد قائمة بالاتصالات المحتملة بين الإدخال والإخراج الأجهزة أو بين جهاز البث والجهاز
يحدد المثال التالي جهاز إخراج Built0_phone_out والذي تكون فيه جميع
ويتم مزج عمليات البث الصوتي في Android بواسطة Mier_bus0_phone_out. ويأخذ المسار
بث إخراج "mixer_bus0_phone_out
" إلى الجهاز
bus0_phone_out
<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"> <modules> <module name="primary" halVersion="3.0"> <attachedDevices> <item>bus0_phone_out</item> <defaultOutputDevice>bus0_phone_out</defaultOutputDevice> <mixPorts> <mixPort name="mixport_bus0_phone_out" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY"> <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> </mixPort> </mixPorts> <devicePorts> <devicePort tagName="bus0_phone_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="BUS00_PHONE"> <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> <gains> <gain name="" mode="AUDIO_GAIN_MODE_JOINT" minValueMB="-8400" maxValueMB="4000" defaultValueMB="0" stepValueMB="100"/> </gains> </devicePort> </devicePorts> <routes> <route type="mix" sink="bus0_phone_out" sources="mixport_bus0_phone_out"/> </routes> </module> </modules> </audioPolicyConfiguration>