الجمع بين توجيه جهاز الصوت

تضيف ميزة توجيه جهاز الصوت المدمجة دعمًا لبث الصوت إلى أجهزة صوتية متعددة في وقت واحد. باستخدام هذه الميزة، يمكن للتطبيقات متميزة اختيار الأجهزة المفضلة متعددة لبعينها الاستراتيجية عن طريق واجهات برمجة التطبيقات النظام. يمكن للتطبيقات اكتشاف قدرات الأجهزة الصوتية بشكل أكثر دقة باستخدام واجهات برمجة التطبيقات العامة التي توفرها هذه الميزة. بالنسبة للإصدارات 11 من نظام التشغيل Android والإصدارات الأقدم ، يتمتع تنفيذ إطار الصوت بدعم محدود لأجهزة صوتية متعددة من نفس النوع (على سبيل المثال ، سماعتان Bluetooth A2DP) متصلة في وقت واحد. كما لا تسمح قواعد توجيه الصوت الافتراضية للمستخدمين بتحديد أجهزة متعددة من نفس النوع لحالة استخدام معينة.

بدءًا من Android 12 ، تمت إزالة هذه القيود للسماح بحالات الاستخدام الجديدة مثل البث الصوتي أو البث المتعدد لمجموعة من سماعات الرأس الصوتية BLE أو استخدام العديد من بطاقات الصوت USB في وقت واحد.

تتناول هذه الصفحة كيفية تنفيذ دعم دفق الصوت إلى أجهزة صوتية متعددة ، وكيفية التحقق من صحة تنفيذك لهذه الميزة.

دعم دفق الصوت إلى أجهزة صوتية متعددة

هناك مجموعتان من واجهات برمجة التطبيقات في Android 12 تدعم هذه الميزة:

  • تتعامل واجهات برمجة تطبيقات النظام مع العديد من الأجهزة المفضلة للاستراتيجية.
  • تقوم واجهة HIDL ، التي ينفذها البائع كجزء من HAL الصوتي ، بالإبلاغ عن إمكانات الجهاز.

تناقش الأقسام التالية كل من واجهات برمجة التطبيقات هذه بمزيد من التفصيل.

التعامل مع العديد من الأجهزة المفضلة للاستراتيجية

يوفر Audio Policy Manager واجهات برمجة تطبيقات للنظام لدعم تدفق الصوت بشكل أفضل إلى أجهزة صوتية متعددة في وقت واحد. وتمكن هذه واجهات برمجة التطبيقات نظام الإعداد، الحصول على وإزالة الأجهزة المفضلة متعددة لاستراتيجية معينة. حتى Android 12 ، كانت هذه الميزة مدعومة لجهاز واحد فقط.

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

يجب تحديد جهاز صوت عند فتح تدفق الإخراج. جهاز الوسائط النشط هو الجهاز المستخدم عند فتح تدفقات الإخراج في هذا السياق.

يمكن أن يتغير اختيار جهاز الوسائط النشط وفقًا للأجهزة الفعلية المتصلة أو غير المتصلة. يستخدم مدير سياسة الصوت سلسلة القواعد التالية لاختيار أجهزة الوسائط النشطة:

  1. إذا كانت جميع الأجهزة المفضلة للوسائط متوفرة ، فسيتم اختيارها جميعًا كأجهزة نشطة.
  2. خلاف ذلك ، يتم اختيار آخر جهاز قابل للإزالة تم توصيله.
  3. إذا لم تكن هناك أجهزة قابلة للإزالة متصلة ، فسيتم تطبيق قواعد سياسة الصوت الافتراضية لاختيار أجهزة الإخراج لاختيار الأجهزة النشطة.

يجب أن يفي تدفق الإخراج بالمعايير التالية ليتم إعادة فتحه وتوجيهه إلى الأجهزة النشطة بحيث يتم اختيار أفضل تكوين للتشغيل:

  • يجب أن يدعم دفق الإخراج الأجهزة النشطة.
  • يجب أن يدعم دفق الإخراج ملفات التعريف الديناميكية.
  • يجب ألا يتم توجيه دفق الإخراج حاليًا إلى الأجهزة النشطة.

من أجل تطبيق تحديد جهاز جديد ، يغلق مدير سياسة الصوت ويعيد فتح دفق الإخراج عند اتصال الجهاز إذا كان دفق الإخراج خاملاً ، أو يؤجله عندما يتم وضع دفق الإخراج في وضع الاستعداد.

تقدم إدارة سياسات الصوت القائمة التالية من واجهات برمجة التطبيقات النظام (كما هو موضح في 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 الاختبارات.