تضيف ميزة توجيه جهاز الصوت المدمجة دعمًا لبث الصوت إلى أجهزة صوتية متعددة في وقت واحد. باستخدام هذه الميزة، يمكن للتطبيقات متميزة اختيار الأجهزة المفضلة متعددة لبعينها الاستراتيجية عن طريق واجهات برمجة التطبيقات النظام. يمكن للتطبيقات اكتشاف قدرات الأجهزة الصوتية بشكل أكثر دقة باستخدام واجهات برمجة التطبيقات العامة التي توفرها هذه الميزة. بالنسبة للإصدارات 11 من نظام التشغيل Android والإصدارات الأقدم ، يتمتع تنفيذ إطار الصوت بدعم محدود لأجهزة صوتية متعددة من نفس النوع (على سبيل المثال ، سماعتان Bluetooth A2DP) متصلة في وقت واحد. كما لا تسمح قواعد توجيه الصوت الافتراضية للمستخدمين بتحديد أجهزة متعددة من نفس النوع لحالة استخدام معينة.
بدءًا من Android 12 ، تمت إزالة هذه القيود للسماح بحالات الاستخدام الجديدة مثل البث الصوتي أو البث المتعدد لمجموعة من سماعات الرأس الصوتية BLE أو استخدام العديد من بطاقات الصوت USB في وقت واحد.
تتناول هذه الصفحة كيفية تنفيذ دعم دفق الصوت إلى أجهزة صوتية متعددة ، وكيفية التحقق من صحة تنفيذك لهذه الميزة.
دعم دفق الصوت إلى أجهزة صوتية متعددة
هناك مجموعتان من واجهات برمجة التطبيقات في Android 12 تدعم هذه الميزة:
- تتعامل واجهات برمجة تطبيقات النظام مع العديد من الأجهزة المفضلة للاستراتيجية.
- تقوم واجهة HIDL ، التي ينفذها البائع كجزء من HAL الصوتي ، بالإبلاغ عن إمكانات الجهاز.
تناقش الأقسام التالية كل من واجهات برمجة التطبيقات هذه بمزيد من التفصيل.
التعامل مع العديد من الأجهزة المفضلة للاستراتيجية
يوفر Audio Policy Manager واجهات برمجة تطبيقات للنظام لدعم تدفق الصوت بشكل أفضل إلى أجهزة صوتية متعددة في وقت واحد. وتمكن هذه واجهات برمجة التطبيقات نظام الإعداد، الحصول على وإزالة الأجهزة المفضلة متعددة لاستراتيجية معينة. حتى Android 12 ، كانت هذه الميزة مدعومة لجهاز واحد فقط.
إدارة سياسات الصوت يدخل مفهوم أجهزة الوسائط النشطة لوصف الأجهزة التي يتم على الأرجح ويمكن الحصول عليها لتشغيل الوسائط. عند توصيل جهاز قابل للفصل ، قد يلزم فتح تدفقات إخراج HAL الصوتية التي يمكن توجيهها إلى هذا الجهاز والتحقق من السمات المدعومة.
يجب تحديد جهاز صوت عند فتح تدفق الإخراج. جهاز الوسائط النشط هو الجهاز المستخدم عند فتح تدفقات الإخراج في هذا السياق.
يمكن أن يتغير اختيار جهاز الوسائط النشط وفقًا للأجهزة الفعلية المتصلة أو غير المتصلة. يستخدم مدير سياسة الصوت سلسلة القواعد التالية لاختيار أجهزة الوسائط النشطة:
- إذا كانت جميع الأجهزة المفضلة للوسائط متوفرة ، فسيتم اختيارها جميعًا كأجهزة نشطة.
- خلاف ذلك ، يتم اختيار آخر جهاز قابل للإزالة تم توصيله.
- إذا لم تكن هناك أجهزة قابلة للإزالة متصلة ، فسيتم تطبيق قواعد سياسة الصوت الافتراضية لاختيار أجهزة الإخراج لاختيار الأجهزة النشطة.
يجب أن يفي تدفق الإخراج بالمعايير التالية ليتم إعادة فتحه وتوجيهه إلى الأجهزة النشطة بحيث يتم اختيار أفضل تكوين للتشغيل:
- يجب أن يدعم دفق الإخراج الأجهزة النشطة.
- يجب أن يدعم دفق الإخراج ملفات التعريف الديناميكية.
- يجب ألا يتم توجيه دفق الإخراج حاليًا إلى الأجهزة النشطة.
من أجل تطبيق تحديد جهاز جديد ، يغلق مدير سياسة الصوت ويعيد فتح دفق الإخراج عند اتصال الجهاز إذا كان دفق الإخراج خاملاً ، أو يؤجله عندما يتم وضع دفق الإخراج في وضع الاستعداد.
تقدم إدارة سياسات الصوت القائمة التالية من واجهات برمجة التطبيقات النظام (كما هو موضح في AudioManager.java
):
setPreferredDeviceForStrategy
يضبط الجهاز المفضل لتوجيه الصوت لإستراتيجية معينة. لاحظ أن الجهاز قد لا يكون متاحًا في الوقت الذي يتم فيه تعيين الجهاز المفضل ، ولكن يتم استخدامه بمجرد إتاحته.
removePreferredDeviceForStrategy
يزيل جهاز الصوت المفضل (ق) تعيينها مسبقا مع
setPreferredDeviceForStrategy
أوsetPreferredDevicesForStrategy
.getPreferredDeviceForStrategy
إرجاع الجهاز المفضل لاستراتيجية الصوتية تعيينها مسبقا مع
setPreferredDeviceForStrategy
أوsetPreferredDevicesForStrategy
.setPreferredDevicesForStrategy
يضبط الأجهزة المفضلة لاستراتيجية معينة.
getPreferredDevicesForStrategy
يعود المفضلة الأجهزة لاستراتيجية الصوتية تعيينها مسبقا مع
setPreferredDeviceForStrategy
أوsetPreferredDevicesForStrategy
.OnPreferredDevicesForStrategyChangedListener
يحدد واجهة للإخطار بالتغييرات في أجهزة الصوت المفضلة التي تم تعيينها لاستراتيجية صوتية معينة.
addOnPreferredDevicesForStrategyChangedListener
يضيف مستمعًا ليتم إخطاره بالتغييرات التي تطرأ على جهاز الصوت المفضل للاستراتيجية.
removeOnPreferredDevicesForStrategyChangedListener
يزيل مستمع مضاف مسبقًا للتغييرات على جهاز الصوت المفضل للاستراتيجية.
الإبلاغ عن قدرات الجهاز
كجزء من تطبيق Audio HAL ، يقوم البائعون بتنفيذ واجهات برمجة التطبيقات التي تدعم قدرات جهاز التقارير. يشرح هذا القسم أنواع البيانات والأساليب المستخدمة للإبلاغ عن إمكانيات الجهاز ويسرد بعض التغييرات التي تم إجراؤها في الصوت HIDL HAL V7 لدعم أجهزة متعددة.
أنواع البيانات
في HIDL الصوت HAL V7، يتم الإبلاغ عن قدرات الجهاز باستخدام AudioProfile
و AudioTransport
الهياكل. و AudioTransport
يصف هيكل القدرة على منفذ الصوت مع AudioProfile
لصيغ الصوت المعروفة، أو مع واصفات الأجهزة الخام لتنسيقات غير معروفة عن طريق المنصة. و AudioProfile
يحتوي على هيكل تنسيق الصوت، ومعدلات عينة بدعم من الوضع، وقائمة من أقنعة قناة، كما هو مبين في كتلة التعليمات البرمجية التالية من types.hal
:
/**
* Configurations supported for a certain audio format.
*/
struct AudioProfile {
AudioFormat format;
/** List of the sample rates (in Hz) supported by the profile. */
vec<uint32_t> sampleRates;
/** List of channel masks supported by the profile. */
vec<AudioChannelMask> channelMasks;
};
في الصوت HIDL HAL V7، و AudioPort
يعرف نوع البيانات مع AudioTransport
و AudioProfile
هياكل لوصف قدرات جهاز.
طرق HAL الصوتية
يستخدم Audio Policy Manager الطرق التالية للاستعلام عن إمكانيات الجهاز:
-
getParameters:
طريقة عامة لاسترجاع القيم معلمة ببائعي مثل مسموعة بدعم ومعدلات أخذ العينات الخاصة بهم. -
getAudioPort:
إرجاع قائمة من الصفات المدعومة (مثل أخذ عينات اسعار، الأشكال والأقنعة قناة، وأجهزة التحكم ربح) لمنفذ الصوت معين.
التعليمات البرمجية التالية من IDevice.hal
يظهر واجهة لل getAudioPort
الأسلوب:
/**
* Returns the list of supported attributes for a given audio port.
*
* As input, 'port' contains the information (type, role, address etc...)
* needed by the HAL to identify the port.
*
* As output, 'resultPort' contains possible attributes (sampling rates,
* formats, channel masks, gain controllers...) for this port.
*
* @param port port identifier.
* @return retval operation completion status.
* @return resultPort port descriptor with all parameters filled up.
*/
getAudioPort(AudioPort port)
generates (Result retval, AudioPort resultPort);
تغييرات على واجهة برمجة التطبيقات القديمة
لدعم التشكيلات الصوت متعددة، الإصدار 3.2 من API إرث يضيف هيكل جديد يسمى audio_port_v7
. رؤية شفرة المصدر لمزيد من التفاصيل.
بسبب إضافة audio_port_v7
، الإصدار 3.2 من API إرث يضيف API جديد يسمى get_audio_port_v7
لقدرات الاستعلام أجهزة "باستخدام audio_port_v7
هيكل.
التعليمات البرمجية التالية من audio.h
يظهر تعريف get_audio_port_v7
API:
/**
* Fills the list of supported attributes for a given audio port.
* As input, "port" contains the information (type, role, address etc...)
* needed by the HAL to identify the port.
* As output, "port" contains possible attributes (sampling rates,
* formats, channel masks, gain controllers...) for this port. The
* possible attributes are saved as audio profiles, which contains audio
* format and the supported sampling rates and channel masks.
*/
int (*get_audio_port_v7)(struct audio_hw_device *dev,
struct audio_port_v7 *port);
البيانات من إرث get_audio_port
API أن يتم ملؤها في جديد AudioPort
التنسيق عند إصدار API إرث أقل من 3.2 والنسخة HIDL HAL هو 7 أو أعلى. في هذه الحالة، كل تبلغ نسبة العينة وأقنعة قناة من get_audio_port
يفترض أن تكون معتمدة لجميع صيغ عاد، مما يتيح تعيين مباشر من get_audio_port
القيم الجديدة AudioPort
هيكل.
مثال على تطبيقات API
يصف هذا القسم عدة مجموعات اختبار تحتوي على طرق تستخدم واجهات برمجة التطبيقات التي تمت تغطيتها في الأقسام السابقة. راجع هذه الطرق للحصول على بعض الأمثلة حول كيفية تنفيذ واجهات برمجة التطبيقات هذه واستخدامها.
مثال على الاستخدام من setPreferredDevicesForStrategy
، getPreferredDevicesForStrategy
، removePreferredDeviceForStrategy
و OnPreferredDevicesForStrategyChangedListener
واجهات برمجة التطبيقات النظام في PreferredDeviceRoutingTest
الأسلوب، الذي يقع في GTS.
لمشاهدة مثال للهيكل الجديد في AudioDeviceInfo
في استخدام، راجع AudioManagerTest#testGetDevices
أسلوب الذي يقع في CTS.
مثال على التنفيذ ل get_audio_port_v7
يقع في audio_hal.c
وهذا يظهر كيف يتم الاستعلام قدرات لأجهزة متعددة.
تصديق
هذا القسم يقدم معلومات عن CTS وGTS (جوجل خدمات التليفون المحمول اختبار جناح) المصادقة على مدير الصوت.
اختبارات CTS
تقع اختبارات CTS في android.media.cts.AudioManagerTest
.
فيما يلي قائمة باختبارات مدير الصوت المتوفرة:
AudioManagerTest#testGetDevices
يتحقق من القدرات الدقيقة لجهاز الصوت. كما يتحقق من أن ملامح الصوت عاد في
AudioDeviceInfo
بنية الحفاظ على المحتوى من شكل مجموعة من كبار السن، بالارض، ولكن هي في جديدAudioProfile
الشكل.AudioManagerTest#testPreferredDevicesForStrategy
وAudioManagerTest#testPreferredDeviceForCapturePreset
تحقق من أن الأجهزة المفضلة للاستراتيجية والتقاط اختبارات API ذات الصلة المحددة مسبقًا قد اكتملت بنجاح.
اختبارات GTS
تقع GTS الاختبارات في com.google.android.gts.audioservice.AudioServiceHostTest
.
للتحقق من صحة إذا واجهات برمجة التطبيقات لأجهزة فضل لاستراتيجية والقبض على عمل مسبقا بشكل صحيح، قم بتشغيل AudioServiceHostTest#testPreferredDeviceRouting
و AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset
الاختبارات.