تستعرض هذه المقالة توافق Android مع أجهزة الصوت الرقمية USB والمحتوى ذي الصلة البروتوكولات المستنِدة إلى USB.
الجمهور
تستهدف هذه المقالة المصنّعين الأصليين لأجهزة Android ومورّدي المنظومة على الرقاقة (SoC) ومورِّدو أجهزة USB الطرفية ومطوّري تطبيقات الصوت المتقدمين وأشخاص آخرين يسعون للحصول على فهم مفصّل للمكونات الداخلية الصوتية الرقمية عبر USB على Android.
من المفترض أن يطّلع مستخدمو أجهزة Nexus النهائيين على المقالة تسجيل الصوت وتشغيله باستخدام وضع مضيف USB في مركز مساعدة Nexus بدلاً من ذلك. على الرغم من أنّ هذه المقالة غير موجَّهة للمستخدمين النهائيين، قد يجد بعض متابعي الموسيقى أجزاءً من الاهتمام.
نظرة عامة على USB
تم وصف الناقل التسلسلي العالمي (USB) بشكل غير رسمي في مقالة ويكيبيديا USB، ويتم تحديدها رسميًا من خلال المعايير التي تنشرها USB Implementers Forum, Inc. ولتسهيل الأمر، نلخص مفاهيم USB الرئيسية هنا، لكن المعايير هي المرجع المعتمد.
المفاهيم والمصطلحات الأساسية
USB عبارة عن ناقل مع منشئ واحد لعمليات نقل البيانات يسمى المضيف. يتواصل المضيف مع الأجهزة الملحقة عبر الحافلة.
ملاحظة: المصطلحات device والملحق مرادفات شائعتان للمصطلح الأجهزة الملحقة: نتجنب هذه المصطلحات هنا، لأنه يمكن الخلط بينها جهاز Android أو المفهوم الخاص بنظام Android يسمى وضع الملحقات.
أحد الأدوار المهمة للمضيف هو التعداد: عملية اكتشاف الأجهزة الملحقة المتصلة بالناقل، وإجراء طلبات بحث عن خصائصها عبر أدوات الوصف.
قد يكون الجهاز الملحق كائنًا ماديًا واحدًا ولكن في الواقع تنفيذ دوال منطقية متعددة. على سبيل المثال، يمكن أن يشتمل الجهاز الطرفي لكاميرا الويب على وظيفة كاميرا لوظيفة صوت الميكروفون.
لكل وظيفة ملحقة واجهة البروتوكول المستخدم للتواصل مع هذه الوظيفة.
يتواصل المضيف مع جهاز ملحق عبر شريط رأسي إلى نقطة نهاية، مصدر أو مستودع المقدمة من إحدى وظائف الجهاز الملحق.
هناك نوعان من المسارات: message وبث. يتم استخدام ممر الرسائل للتحكم في الاتجاهين والحالة. يتم استخدام الممر لنقل البيانات في أحادي الاتجاه.
يبدأ المضيف جميع عمليات نقل البيانات، وبالتالي يتم التعبير عن المصطلحين input وoutput وفقًا للمضيف. تنقل عملية الإدخال البيانات من الجهاز الملحق إلى المضيف، بينما تنقل عملية الإخراج البيانات من المضيف إلى الجهاز الملحق.
هناك ثلاثة أوضاع رئيسية لنقل البيانات: مقاطعة ومجمّعة ومتساوية الوقت. ستتم مناقشة الوضع المتزامن في سياق الصوت.
قد يحتوي الجهاز الملحق على طرفيات تتصل بالعالم الخارجي، خارج الجهاز الملحق نفسه. بهذه الطريقة، يعرض الجهاز الملحق الترجمة بين بروتوكول USB و"الواقع الفعلي" بشكل أفضل. الأطراف الطرفية هي كائنات منطقية للدالة.
أوضاع USB في Android
وضع التطوير
تم استخدام وضع التطوير منذ الإصدار الأولي من Android. يظهر جهاز Android كجهاز USB ملحق إلى كمبيوتر شخصي مضيف يعمل بنظام تشغيل سطح المكتب مثل Linux، أو Mac OS X أو Windows. إن الوظيفة الطرفية الوحيدة المرئية هي إما التشغيل السريع على Android أو Android Debug Bridge (adb): يتم وضع بروتوكولات Fastboot وadb عبر وضع نقل البيانات المجمّعة عبر USB.
وضع المضيف
يتم تقديم وضع المضيف في الإصدار Android 3.1 (المستوى 12 لواجهة برمجة التطبيقات).
بما أنّ جهاز Android يجب أن يكون مضيفًا، وتتضمّن معظم أجهزة Android موصل USB صغير لا يسمح بتشغيل المضيف بشكل مباشر، محوّل أثناء التنقّل (OTG) مثل هذا عادة ما يكون مطلوبًا:
![وظيفة OTG](https://source.android.google.cn/static/docs/core/audio/images/otg.jpg?authuser=19&hl=ar)
الشكل 1. محوّل أثناء التنقّل (OTG)
قد لا يوفر جهاز Android طاقة كافية لتشغيل جهاز ملحق معين اعتمادًا على مقدار الطاقة التي يحتاجها الجهاز الملحق، وحجم البيانات التي يمكن لجهاز Android تقديمها. حتى إذا عند توفُّر طاقة كافية، قد يتم شحن بطارية جهاز Android إلى تقصيرها بشكل كبير. في هذه المواقف، استخدم أداة كما يلي:
![موزّع كهربائي](https://source.android.google.cn/static/docs/core/audio/images/hub.jpg?authuser=19&hl=ar)
الشكل 2. موزّع كهربائي
وضع الإكسسوار
تم تقديم وضع الملحق في الإصدار Android 3.1 (المستوى 12 لواجهة برمجة التطبيقات) وتمت الاستعانة به في الإصدار 2.3.4 من نظام التشغيل Android. في هذا الوضع، يعمل جهاز Android كجهاز USB ملحق، تحت سيطرة جهاز آخر، مثل قاعدة الإرساء التي تعمل كمضيف. الفرق بين وضع التطوير ووضع الملحقات هو أنّ وظائف USB الإضافية مرئية للمضيف، خارج adb. يبدأ جهاز Android في وضع التطوير، ثم الانتقال إلى وضع الملحق من خلال عملية إعادة التفاوض
تم توسيع وضع الملحقات بواسطة ميزات إضافية في Android 4.1، ولا سيّما المحتوى الصوتي الموضّح أدناه.
صوت USB
صفوف على USB
لكل دالة ملحقة مستند فئة جهاز مرتبط بها. تحدد البروتوكول القياسي لهذه الوظيفة. يتيح ذلك المضيفين المتوافقين مع الفئة والوظائف الطرفية. إلى التكامل بدون معرفة تفصيلية بعمل بعضنا البعض. يُعد امتثال الفئة أمرًا بالغ الأهمية إذا كان المضيف والملحقات مقدمة من الكيانات المختلفة.
مصطلح driverless هو مرادف شائع للمصطلح متوافق مع الفئة، مما يشير إلى إمكانية استخدام الخصائص القياسية لمثل ملحقًا دون الحاجة إلى نظام تشغيل محدد المطلوب تثبيت driver. يمكن للمرء أن يفترض أنه يتم الإعلان عن جهاز ملحق على أنه "لا حاجة إلى برنامج تشغيل" لأنظمة تشغيل سطح المكتب الرئيسية على أنه يتوافق مع الفئات، على الرغم من أنه قد تكون هناك استثناءات.
فئة صوت USB
هنا يقتصر الأمر على الأجهزة الملحقة التي تعمل على وظائف الصوت، ومن ثمَّ تتقيّد بفئة الجهاز السماعي. هناك خياران مواصفات فئة الصوت على USB: الفئة 1 (UAC1) و2 (UAC2).
المقارنة مع الفئات الأخرى
يشتمل USB على العديد من فئات الأجهزة الأخرى، وقد يختلط الأمر على بعضها مع الفصل الصوتي. تشير رسالة الأشكال البيانية فئة التخزين الكتلي يُستخدم (MSC) في مع وصول موجّه إلى القطاعات إلى وسائل الإعلام، بروتوكول نقل الوسائط (MTP) مخصص للوصول الكامل للملفات إلى الوسائط. يمكن استخدام كل من MSC وMTP لنقل الملفات الصوتية، ولكن فئة صوت USB هي فقط المناسبة للبث في الوقت الفعلي.
أطراف التوصيل الصوتي
تكون الأطراف الكهربائية في الأجهزة الملحقة الصوتية عادية عادةً. تحوَّل الإشارة التناظرية المقدَّمة في الطرف الكهربائي الخاص بالجهاز الملحق إلى إشارة رقمية تحويل تناظري إلى رقمي (ADC) ويتم نقلها عبر بروتوكول USB ليتم استهلاكها بواسطة المضيف. ADC هو مصدر بيانات للمضيف. وبالمثل، يرسل المضيف رسالة إشارة صوتية رقمية عبر بروتوكول USB إلى الجهاز الملحق، حيث محوّل رقمي إلى تناظري (DAC) يحولها ويقدمها إلى طرفية إخراج تناظري. أداة DAC هي حوض للمضيف.
القنوات
يمكن أن يشتمل الجهاز الملحق المزوّد بوظيفة صوت على الطرف الطرفية للمصدر أو الطرف الطرفي للبالوعة أو كليهما. قد يتضمّن كل اتجاه قناة واحدة (أحادية) وقناتَين (استيريو) أو غير ذلك. تُسمى الأجهزة الملحقة التي تحتوي على أكثر من قناتين متعددة القنوات. يشيع تفسير بث الاستيريو بأنها تتكون من القناتان الأيسر والأيمنة، وإضافة أخرى لتفسير البث المتعدد القنوات على أنه والمواقع الجغرافية المكانية المقابلة لكل قناة ومع ذلك، من المناسب تمامًا (خاصةً لصوت USB بشكل أكبر من منفذ HDMI) لعدم تعيين أي المعنى المكاني المعياري لكل قناة في هذه الحالة، يعود الأمر إلى التطبيق والمستخدم لتحديد كيفية استخدام كل قناة. على سبيل المثال، قد يحتوي مصدر إدخال USB ذي أربع قنوات على أول ثلاث قنوات القنوات المتصلة بميكروفونات مختلفة داخل الغرفة، وآخر قناة تتلقّى إدخالات من راديو AM.
وضع النقل المتزامن
يستخدم الصوت عبر USB وضع النقل المتماثل لخصائصه في الوقت الفعلي، على حساب استعادة الخطأ. في وضع متساوي الوقت، يتم ضمان نقل البيانات ونقل البيانات باستخدام فحص التكرار الدوري (CRC). لكن هناك عدم استلام الحزم أو إعادة إرسالها في حالة حدوث خطأ.
تحدث عمليات الإرسال المتماثلة في كل فترة من مراحل بداية الإطار (SOF). الفترة SOF هي ملي ثانية للسرعة الكاملة، و125 ميكرو ثانية بسرعة عالية. ويحمل كل إطار بكامل السرعة حمولة تصل إلى 1023 بايت، ويمكن لإطار عالي السرعة أن يصل إلى 1024 بايت. بوضع هذه العناصر معًا، نحسب الحد الأقصى لمعدل النقل على أنه 1,023,000 أو 8,192,000 بايت في الثانية تضع هذه الخطوة حدًا أقصى نظريًا للمحتوى الصوتي المجمّع. معدل العينة وعدد القنوات وعمق البت. الحد العملي أقل.
في الوضع المتساوي التوقيت، هناك ثلاثة أوضاع فرعية:
- توافقي
- بدون تزامن
- متزامن
في الوضع الفرعي التكيُّفي، يتكيّف حوض الجهاز الملحق أو المصدر مع معدّل عيّنة متفاوت المضيف.
في الوضع الفرعي غير المتزامن (يسمى أيضًا الملاحظات الضمنية)، يحدد الحوض أو المصدر معدل العينة، ويتكيف المضيف. تتمثل الميزة النظرية الأساسية للوضع الفرعي غير المتزامن في أن المصدر أو خزانة حوض الاستحمام، والتي تكون أقرب فعليًا وكهربائيًا (وقد تكون هي نفسها أو مشتقة من الساعة التي تدير DAC أو ADC. يعني هذا التقارب أن الوضع الفرعي غير المتزامن يجب أن يكون أقل عرضة لعدم استقرار الوقت. بالإضافة إلى ذلك، فإن الساعة المستخدمة من قبل DAC أو ADC مصممة بدقة أعلى وهبوط أقل من ساعة المضيف.
في الوضع الفرعي المتزامن، يتم نقل عدد ثابت من وحدات البايت في كل فترة من فترات SOF. يتم استخراج معدّل البيانات في الملف الصوتي بشكل فعّال من خلال ساعة USB. لا يُستخدم الوضع الفرعي المتزامن بشكل شائع مع الصوت لأن كليهما المضيف والأجهزة الملحقة تحت سيطرة ساعة USB.
يلخص الجدول أدناه الأوضاع الفرعية المتماثلة الزمنية:
الوضع الفرعي | عدد وحدات البايت لكل حزمة |
معدل العينة يتم تحديده بواسطة |
يتم استخدامه للصوت |
---|---|---|---|
تكيّفي | متغير | مضيف | نعم |
غير متزامن | متغير | جهاز ملحق | نعم |
متزامن | ثابت | ساعة USB | لا |
من الناحية العملية، يكون للوضع الفرعي تأثير، ولكن هناك عوامل أخرى. الذين يجب أخذهم في الاعتبار.
دعم Android لفئة الصوت على USB
وضع التطوير
الصوت عبر USB غير متاح في وضع التطوير.
وضع المضيف
يتوافق الإصدار 5.0 من نظام التشغيل Android (المستوى 21 من واجهة برمجة التطبيقات) والإصدارات الأحدث مع مجموعة فرعية من ميزات USB Audio من الفئة 1 (UAC1):
- يجب أن يعمل جهاز Android كمضيف
- يجب أن يكون تنسيق الصوت هو PCM (نوع الواجهة الأول).
- يجب أن يكون عمق البت 16 بت أو 24 بت أو 32 بت حيث يتم ضبط 24 بت من البيانات الصوتية المفيدة ضمن أهم وحدات بت من كلمة 32 بت
- يجب أن يكون معدل العينة إما 48 أو 44.1 أو 32 أو 24 أو 22.05 أو 16 أو 12 أو 11.025 أو 8 كيلوهرتز.
- يجب أن يكون عدد القنوات 1 (أحادي) أو 2 (استيريو)
قد يتم عرض رمز مصدر إضافي لإطار عمل Android أكثر من الحد الأدنى اللازم لدعم هذه الميزات. لكن هذه التعليمة البرمجية لم يتم التحقق من صحته، لذلك لم تتم المطالبة بملكية المزيد من الميزات المتقدمة بعد.
وضع الإكسسوار
أضاف الإصدار Android 4.1 (المستوى 16 من واجهة برمجة التطبيقات) دعمًا محدودًا لتشغيل الصوت إلى المضيف. أثناء استخدام وضع الملحق، يوجِّه Android تلقائيًا إخراج الصوت إلى USB. وهذا يعني أنّ جهاز Android يعمل كمصدر بيانات للمضيف، مثل قاعدة الإرساء.
يتضمّن وضع الصوت في وضع الملحق الميزات التالية:
- يجب التحكم في جهاز Android من خلال مضيف واسع المعرفة يمكنه أولاً نقل جهاز Android من وضع التطوير إلى وضع الملحق، ومن ثم يجب على المضيف نقل البيانات الصوتية من نقطة النهاية المناسبة. وبالتالي لا يظهر جهاز Android "بدون برنامج تشغيل" للمضيف.
- يجب أن يكون الاتجاه إدخالاً، وأن يتم التعبير عنه بالنسبة إلى المضيف.
- يجب أن يكون تنسيق الصوت بتنسيق PCM 16 بت.
- يجب أن يكون معدّل البيانات في الملف الصوتي 44.1 كيلوهرتز.
- يجب أن يكون عدد القنوات 2 (استيريو)
لم يتم استخدام صوت وضع الإكسسوار على نطاق واسع، ولا يوصى به حاليًا للتصميمات الجديدة.
تطبيقات الصوت الرقمي على USB
وكما يشير الاسم، يتم تمثيل إشارة الصوت الرقمية USB من خلال مصدر بيانات رقمي بدلاً من التصميم التناظري الإشارة التي يستخدمها جهاز TRS mini موصِّل سماعات الرأس في النهاية، يجب تحويل أي إشارة رقمية إلى إشارة تناظرية قبل أن يمكن سماعها. وهناك مفاضلات في اختيار مواضع إجراء تلك الإحالة الناجحة.
قصة لجنة DAC
في مثال الرسم التخطيطي أدناه، نقارن تصميمين. أولاً، لدينا هاتف جوّال يتضمن معالج تطبيقات (AP) أو DAC مدمج في الجهاز أو مكبّر صوت وموصل TRS تناظري متصل بسماعات الرأس. نعتبر أيضًا جهاز جوّال مزود بمنفذ USB متصل بـ USB DAC خارجي ومضخّم صوت، باستخدام سماعات الرأس أيضًا.
![مقارنة DAC](https://source.android.google.cn/static/docs/core/audio/images/dac.png?authuser=19&hl=ar)
الشكل 3. مقارنة بين مجموعتَي DAC
أي تصميم أفضل؟ تعتمد الإجابة على احتياجاتك. ولكل طريقة منها مزاياه وعيوبه
ملاحظة: هذه مقارنة مصطنعة، إذ لجهاز Android حقيقي من المحتمل أن يكون كلا الخيارين متاحين.
أما التصميم الأول A، فهو أبسط وأقل تكلفة ويستخدم طاقة أقل وستكون تصميمًا أكثر موثوقية تفترض أن مكونات موثوقة بنفس القدر. مع ذلك، غالبًا ما تكون هناك مفاضلات بين جودة الصوت ومتطلبات أخرى. على سبيل المثال، إذا كان هذا الجهاز سوقًا كبيرًا، فقد يتم تصميمه ليلائم احتياجات المستهلك بشكل عام، وليس لعشاق الموسيقى.
وفي التصميم الثاني، يمكن تصميم جهاز الصوت الخارجي الملحق C جودة صوت أعلى وإخراج طاقة أكبر بدون التأثير في تكلفة جهاز Android B الأساسي في السوق الجماعي الأساسي. نعم، إنه تصميم أكثر تكلفة، ولكن لا يستوعبها سوى أولئك الذين يريدونها.
تشتهر الأجهزة الجوّالة بكثافة عالية لوحات الدوائر الكهربائية، مما قد يؤدي إلى المزيد من الفرص تداخل الإشارات يعمل على خفض مستوى الإشارات التناظرية المجاورة. الاتصالات الرقمية أقل عرضة الضوضاء لذا فإن نقل ملف DAC من جهاز Android A إلى لوحة دائرة خارجية تسمح C بأن تكون المراحل التناظرية النهائية ماديًا وكهربائيًا معزولة عن لوحة الدوائر الكهربية الكثيفة والصاخبة، مما ينتج عنه صوت أعلى دقة.
من ناحية أخرى، إلا أن التصميم الثاني أكثر تعقيدًا، ومع المزيد من التعقيد، تزداد فرص لفشل الأشياء. هناك أيضًا وقت استجابة إضافي من وحدات تحكم USB.
تطبيقات وضع المضيف
تتضمن تطبيقات الصوت النموذجية لوضع مضيف USB ما يلي:
- الاستماع إلى الموسيقى
- اتصال هاتفي
- الرسائل الفورية والدردشة الصوتية
- تسجيل
بالنسبة إلى جميع هذه التطبيقات، يرصد Android جهاز USB رقمي متوافق ملحق صوتي، ويعمل تلقائيًا على توجيه تشغيل الصوت والتقاطه بشكل مناسب، استنادًا إلى قواعد سياسة الصوت. يتم تشغيل محتوى الاستيريو على أول قناتين من الجهاز الملحق.
ما مِن واجهات برمجة تطبيقات مخصَّصة للصوت الرقمي على USB. بالنسبة إلى الاستخدامات المتقدمة، قد يتداخل التوجيه التلقائي مع التطبيقات البيانات عبر USB. بالنسبة إلى هذه التطبيقات، عليك إيقاف التوجيه التلقائي. عبر عنصر التحكم المقابل في قسم الوسائط في الإعدادات / خيارات المطوّرين
تصحيح الأخطاء أثناء استخدام وضع المضيف
أثناء استخدام وضع مضيف USB، لا يتوفّر خيار تصحيح الأخطاء عبر أداة adb عبر USB. راجع قسم استخدام اللاسلكي من Android Debug Bridge كبديل.
تشغيل الصوت عبر USB
اقتراحات لمورّدي الأجهزة الملحقة الصوتية
وللتوافق مع أجهزة Android، على مورّدي الأجهزة الملحقة الصوتية القيام بما يلي:
- تصميم يراعي توافق الفئات الصوتية يستهدف Android حاليًا الفئة 1، ولكن من الحكمة التخطيط للفئة 2
- تجنب المراوغة
- اختبار إمكانية التشغيل التفاعلي مع الأجهزة المرجعية وأجهزة Android الشائعة
- توثيق الميزات المتوافقة بوضوح وامتثال فئة الصوت ومتطلبات الطاقة وما إلى ذلك كي يتمكّن المستهلكون من اتخاذ قرارات مدروسة
اقتراحات للمصنّعين الأصليين لأجهزة Android ومورّدي المنظومة على الرقاقة (SoC)
لإتاحة الصوت الرقمي عبر USB، على المصنّعين الأصليين للأجهزة ومورّدي المنظومة على الرقاقة (SoC) إجراء ما يلي:
- تصميم أجهزة لدعم وضع مضيف USB
- تفعيل الدعم العام لمضيف USB على مستوى إطار العمل
عبر علامة الميزة
android.hardware.usb.host.xml
- تفعيل جميع ميزات النواة المطلوبة: وضع مضيف USB، وصوت USB، ووضع النقل متناسق الوقت؛ يُرجى الاطّلاع على ضبط نواة Android.
- البقاء على اطّلاع على إصدارات وتصحيحات النواة (النواة) الحديثة وعلى الرغم من الهدف النبيل المتمثل في الامتثال للفئات، تتوفر أجهزة صوتية ملحقة مع quirks، وتتمتع النواة الحديثة بحلول لمثل هذه الأخطاء
- لتفعيل سياسة صوت USB على النحو الموضّح أدناه
- إضافة audio.usb.default إلى PRODUCT_PACKAGES في device.mk
- اختبار إمكانية التشغيل التفاعلي مع أجهزة USB الطرفية الشائعة
تفعيل سياسة صوت USB
لتفعيل الصوت عبر USB، أضِف إدخالاً إلى ملف إعداد سياسة الصوت. عادةً ما تكون هذه هنا:
device/oem/codename/audio_policy.conf
مكوّن اسم المسار "oem" يجب استبداله بالاسم المصنّع الأصلي للجهاز الذي يصنع جهاز Android و"الاسم الرمزي" أن يتم استبداله باسم رمز الجهاز.
وفي ما يلي مثال على إدخال:
audio_hw_modules { ... usb { outputs { usb_accessory { sampling_rates 44100 channel_masks AUDIO_CHANNEL_OUT_STEREO formats AUDIO_FORMAT_PCM_16_BIT devices AUDIO_DEVICE_OUT_USB_ACCESSORY } usb_device { sampling_rates dynamic channel_masks dynamic formats dynamic devices AUDIO_DEVICE_OUT_USB_DEVICE } } inputs { usb_device { sampling_rates dynamic channel_masks AUDIO_CHANNEL_IN_STEREO formats AUDIO_FORMAT_PCM_16_BIT devices AUDIO_DEVICE_IN_USB_DEVICE } } } ... }
رمز مصدر
طبقة تجريد أجهزة الصوت (HAL) يمكن تنفيذ الصوت عبر USB هنا:
hardware/libhardware/modules/usbaudio/
يعتمد HAL للصوت على USB بشكل كبير على tinyalsa، الموضحة في المصطلحات الصوتية. على الرغم من أن صوت USB يعتمد على عمليات النقل المتناقصة، يمكن استبعاد ذلك من خلال تنفيذ قانون ALSA. لذا لا داعي للقلق بشأن بروتوكول HAL للصوت وأجهزة tinyalsa الصوتية. على هذا الجزء من بروتوكول USB.
اختبار صوت USB
للحصول على معلومات عن اختبار CTS للصوت عبر USB، يُرجى الاطّلاع على اختبارات USB Audio CTS Verifier.