تستعرض هذه المقالة دعم Android للصوت الرقمي عبر USB والبروتوكولات المستندة إلى USB ذات الصلة.
جمهور
الجمهور المستهدف من هذه المقالة هو مصنعي المعدات الأصلية لأجهزة Android، وموردي SoC، وموردي الأجهزة الطرفية الصوتية USB، ومطوري تطبيقات الصوت المتقدمة، وغيرهم ممن يبحثون عن فهم تفصيلي لمكونات الصوت الرقمي USB الداخلية على Android.
يجب على المستخدمين النهائيين لأجهزة Nexus الاطلاع على المقالة تسجيل الصوت وتشغيله باستخدام وضع مضيف USB في مركز مساعدة Nexus بدلاً من ذلك. على الرغم من أن هذه المقالة ليست موجهة نحو المستخدمين النهائيين، إلا أن بعض المستهلكين من محبي الموسيقى قد يجدون أجزاء من الاهتمام.
نظرة عامة على USB
تم وصف الناقل التسلسلي العالمي (USB) بشكل غير رسمي في مقالة ويكيبيديا USB ، ويتم تعريفه رسميًا من خلال المعايير المنشورة بواسطة USB Implementers Forum, Inc. من أجل الراحة، نلخص هنا مفاهيم USB الرئيسية، لكن المعايير هي المرجع الرسمي.
المفاهيم والمصطلحات الأساسية
USB عبارة عن ناقل به بادئ واحد لعمليات نقل البيانات، يسمى المضيف . يتواصل المضيف مع الأجهزة الطرفية عبر الحافلة.
ملحوظة: المصطلحان جهاز وملحق هما مرادفان شائعان للأجهزة الطرفية . نحن نتجنب هذه المصطلحات هنا، حيث يمكن الخلط بينها وبين جهاز Android أو المفهوم الخاص بنظام Android والذي يسمى وضع الملحقات .
دور المضيف الحاسم هو التعداد : عملية اكتشاف الأجهزة الطرفية المتصلة بالناقل، والاستعلام عن خصائصها التي يتم التعبير عنها عبر الواصفات .
قد يكون الجهاز الطرفي عبارة عن كائن مادي واحد ولكنه في الواقع يقوم بتنفيذ وظائف منطقية متعددة. على سبيل المثال، يمكن أن تحتوي الأجهزة الطرفية لكاميرا الويب على وظيفة الكاميرا ووظيفة صوت الميكروفون.
تحتوي كل وظيفة طرفية على واجهة تحدد بروتوكول التواصل مع تلك الوظيفة.
يتواصل المضيف مع جهاز طرفي عبر أنبوب إلى نقطة النهاية ، أو مصدر بيانات أو حوض توفره إحدى وظائف الجهاز الطرفي.
هناك نوعان من الأنابيب: الرسالة والدفق . يتم استخدام أنبوب الرسالة للتحكم والحالة ثنائي الاتجاه. يتم استخدام أنبوب الدفق لنقل البيانات أحادي الاتجاه.
يبدأ المضيف جميع عمليات نقل البيانات، ومن ثم يتم التعبير عن مصطلحي الإدخال والإخراج بالنسبة للمضيف. تقوم عملية الإدخال بنقل البيانات من الجهاز الطرفي إلى المضيف، بينما تقوم عملية الإخراج بنقل البيانات من المضيف إلى الجهاز الطرفي.
هناك ثلاثة أوضاع رئيسية لنقل البيانات: المقاطعة ، المجمعة ، والمتزامنة . ستتم مناقشة الوضع المتزامن بشكل أكبر في سياق الصوت.
قد يحتوي الجهاز الطرفي على أطراف تتصل بالعالم الخارجي، بما يتجاوز الجهاز الطرفي نفسه. بهذه الطريقة، يعمل الجهاز الطرفي على الترجمة بين بروتوكول USB وإشارات "العالم الحقيقي". المحطات هي كائنات منطقية للوظيفة.
أوضاع USB لنظام Android
وضع التنمية
كان وضع التطوير موجودًا منذ الإصدار الأولي لنظام Android. يظهر جهاز Android كجهاز طرفي USB لجهاز كمبيوتر مضيف يعمل بنظام تشغيل سطح مكتب مثل Linux أو Mac OS X أو Windows. الوظيفة الطرفية المرئية الوحيدة هي إما Android fastboot أو Android Debug Bridge (adb) . يتم وضع بروتوكولات fastboot وadb على وضع نقل البيانات المجمعة عبر USB.
وضع المضيف
تم تقديم وضع المضيف في Android 3.1 (مستوى API 12).
نظرًا لأن جهاز Android يجب أن يعمل كمضيف، وتتضمن معظم أجهزة Android موصل micro-USB الذي لا يسمح بتشغيل المضيف بشكل مباشر، فعادةً ما يلزم وجود محول أثناء التنقل ( OTG ) مثل هذا:
![وتغ](https://source.android.google.cn/static/docs/core/audio/images/otg.jpg?authuser=9&hl=ar)
الشكل 1. محول أثناء التنقل (OTG).
قد لا يوفر جهاز Android طاقة كافية لتشغيل جهاز طرفي معين، اعتمادًا على مقدار الطاقة التي يحتاجها الجهاز الطرفي، ومقدار الطاقة التي يستطيع جهاز Android توفيرها. حتى في حالة توفر طاقة كافية، قد يتم تقليل شحن بطارية جهاز Android بشكل ملحوظ. في هذه المواقف، استخدم مركزًا مزودًا بالطاقة مثل هذا:
![محور مدعوم](https://source.android.google.cn/static/docs/core/audio/images/hub.jpg?authuser=9&hl=ar)
الشكل 2. محور بالطاقة
وضع الملحقات
تم تقديم وضع الملحقات في Android 3.1 (مستوى واجهة برمجة التطبيقات 12) وتم نقله إلى Android 2.3.4. في هذا الوضع، يعمل جهاز Android كجهاز طرفي USB، تحت سيطرة جهاز آخر مثل قاعدة الإرساء التي تعمل كمضيف. الفرق بين وضع التطوير ووضع الملحقات هو أن وظائف USB الإضافية تكون مرئية للمضيف، خارج نطاق adb. يبدأ جهاز Android في وضع التطوير ثم ينتقل إلى وضع الملحقات من خلال عملية إعادة التفاوض.
تم توسيع وضع الملحقات بميزات إضافية في Android 4.1، وخاصة الصوت الموضح أدناه.
صوت يو اس بي
فئات USB
تحتوي كل وظيفة طرفية على مستند فئة الجهاز المرتبط الذي يحدد البروتوكول القياسي لتلك الوظيفة. يتيح ذلك للمضيفين المتوافقين مع الفئة والوظائف الطرفية إمكانية التشغيل المتبادل، دون معرفة تفصيلية بطريقة عمل بعضهم البعض. يعد الامتثال للفئة أمرًا بالغ الأهمية إذا تم توفير المضيف والجهاز الطرفي بواسطة كيانات مختلفة.
المصطلح بدون سائق هو مرادف شائع للفئة المتوافقة ، مما يشير إلى أنه من الممكن استخدام الميزات القياسية لمثل هذه الأجهزة الطرفية دون الحاجة إلى تثبيت برنامج تشغيل خاص بنظام التشغيل. يمكن للمرء أن يفترض أن الجهاز الطرفي الذي تم الإعلان عنه على أنه "لا حاجة إلى برنامج تشغيل" لأنظمة تشغيل سطح المكتب الرئيسية سيكون متوافقًا مع الفئة، على الرغم من احتمال وجود استثناءات.
فئة الصوت 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 بايت في الثانية. يؤدي هذا إلى تعيين حد أعلى نظري لمعدل عينة الصوت المدمج وعدد القنوات وعمق البت. الحد العملي أقل.
ضمن الوضع المتزامن، هناك ثلاثة أوضاع فرعية:
- التكيف
- غير متزامن
- متزامن
في الوضع الفرعي التكيفي، يتكيف الحوض المحيطي أو المصدر مع معدل عينة محتمل متفاوت للمضيف.
في الوضع الفرعي غير المتزامن (ويسمى أيضًا التغذية الراجعة الضمنية)، يحدد الحوض أو المصدر معدل العينة، ويستوعبه المضيف. تتمثل الميزة النظرية الأساسية للوضع الفرعي غير المتزامن في أن ساعة USB المصدر أو الحوض أقرب فعليًا وكهربائيًا إلى (وقد تكون في الواقع هي نفسها أو مشتقة من) الساعة التي تقوم بتشغيل DAC أو ADC. ويعني هذا القرب أن الوضع الفرعي غير المتزامن يجب أن يكون أقل عرضة لاهتزاز الساعة. بالإضافة إلى ذلك، قد يتم تصميم الساعة المستخدمة بواسطة DAC أو ADC للحصول على دقة أعلى وانحراف أقل من الساعة المضيفة.
في الوضع الفرعي المتزامن، يتم نقل عدد ثابت من البايتات في كل فترة SOF. يتم اشتقاق معدل عينة الصوت بشكل فعال من ساعة USB. لا يتم استخدام الوضع الفرعي المتزامن بشكل شائع مع الصوت لأن كلا من المضيف والجهاز الطرفي يقعان تحت رحمة ساعة USB.
يلخص الجدول أدناه الأوضاع الفرعية المتزامنة:
الوضع الفرعي | عدد البايتات لكل علبة | معدل العينة حدد بواسطة | تستخدم للصوت |
---|---|---|---|
التكيف | عامل | يستضيف | نعم |
غير متزامن | عامل | الطرفية | نعم |
متزامن | مُثَبَّت | ساعة يو اس بي | لا |
من الناحية العملية، فإن الوضع الفرعي له أهمية بالطبع، ولكن يجب أيضًا أخذ عوامل أخرى في الاعتبار.
دعم Android لفئة الصوت USB
وضع التنمية
صوت USB غير مدعوم في وضع التطوير.
وضع المضيف
يدعم Android 5.0 (مستوى API 21) والإصدارات الأحدث مجموعة فرعية من ميزات صوت USB فئة 1 (UAC1):
- يجب أن يعمل جهاز Android كمضيف
- يجب أن يكون تنسيق الصوت PCM (نوع الواجهة I)
- يجب أن يكون عمق البت 16 بت أو 24 بت أو 32 بت حيث يتم ضبط 24 بت من البيانات الصوتية المفيدة على اليسار ضمن البتات الأكثر أهمية للكلمة ذات 32 بت
- يجب أن يكون معدل العينة إما 48 أو 44.1 أو 32 أو 24 أو 22.05 أو 16 أو 12 أو 11.025 أو 8 كيلو هرتز
- يجب أن يكون عدد القنوات 1 (أحادية) أو 2 (ستيريو)
قد يُظهر الاطلاع على الكود المصدري لإطار عمل Android كودًا إضافيًا يتجاوز الحد الأدنى المطلوب لدعم هذه الميزات. ولكن لم يتم التحقق من صحة هذا الرمز، لذلك لم تتم المطالبة بالمزيد من الميزات المتقدمة بعد.
وضع الملحقات
أضاف Android 4.1 (مستوى API 16) دعمًا محدودًا لتشغيل الصوت إلى المضيف. أثناء وجوده في وضع الملحقات، يقوم Android تلقائيًا بتوجيه إخراج الصوت الخاص به إلى USB. أي أن جهاز Android يعمل كمصدر بيانات للمضيف، على سبيل المثال، قاعدة إرساء.
يحتوي وضع الصوت الملحق على الميزات التالية:
- يجب أن يتم التحكم في جهاز Android بواسطة مضيف مطلع يمكنه أولاً نقل جهاز Android من وضع التطوير إلى وضع الملحقات، وبعد ذلك يجب على المضيف نقل البيانات الصوتية من نقطة النهاية المناسبة. وبالتالي فإن جهاز Android لا يظهر "بدون سائق" للمضيف.
- يجب إدخال الاتجاه، معبرًا عنه بالنسبة للمضيف
- يجب أن يكون تنسيق الصوت PCM 16 بت
- يجب أن يكون معدل العينة 44.1 كيلو هرتز
- يجب أن يكون عدد القنوات 2 (ستيريو)
لم يتم اعتماد الصوت في وضع الملحقات على نطاق واسع، ولا يوصى به حاليًا للتصميمات الجديدة.
تطبيقات الصوت الرقمي USB
كما يشير الاسم، يتم تمثيل إشارة الصوت الرقمية USB بواسطة دفق بيانات رقمي بدلاً من الإشارة التناظرية التي يستخدمها موصل سماعة الرأس الصغير TRS الشائع. في نهاية المطاف، يجب تحويل أي إشارة رقمية إلى تناظرية قبل أن يتم سماعها. هناك مقايضات في اختيار مكان إجراء هذا التحويل.
قصة اثنين من DACs
في المثال التوضيحي أدناه، قمنا بمقارنة تصميمين. أولاً، لدينا جهاز محمول مزود بمعالج التطبيقات (AP)، وDAC على اللوحة، ومكبر للصوت، وموصل TRS تمثيلي متصل بسماعات الرأس. نحن نعتبر أيضًا جهازًا محمولاً مزودًا بـ USB متصل بـ USB DAC خارجي ومكبر صوت، وأيضًا مع سماعات الرأس.
![مقارنة DAC](https://source.android.google.cn/static/docs/core/audio/images/dac.png?authuser=9&hl=ar)
الشكل 3. مقارنة بين اثنين من DACs
أي تصميم أفضل؟ الجواب يعتمد على احتياجاتك. لكل منها مزاياه وعيوبه.
ملاحظة: هذه مقارنة مصطنعة، نظرًا لأن جهاز 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
- تمكين جميع ميزات kernel المطلوبة: وضع مضيف USB، وصوت USB، ووضع النقل المتزامن؛ راجع تكوين Android Kernel
- مواكبة أحدث إصدارات وتصحيحات kernel؛ على الرغم من الهدف النبيل المتمثل في الامتثال الطبقي، إلا أن هناك أجهزة طرفية صوتية تحتوي على مراوغات ، كما تحتوي النوى الحديثة على حلول لهذه المراوغات
- قم بتمكين سياسة صوت USB كما هو موضح أدناه
- أضف audio.usb.default إلى PRODUCT_PACKAGES في Device.mk
- اختبار قابلية التشغيل البيني مع الأجهزة الطرفية الصوتية USB الشائعة
تمكين سياسة صوت USB
لتمكين صوت USB، قم بإضافة إدخال إلى ملف تكوين سياسة الصوت. يقع هذا عادةً هنا:
device/oem/codename/audio_policy.conf
يجب استبدال مكون اسم المسار "oem" باسم الشركة المصنعة للجهاز الذي يقوم بتصنيع جهاز Android، ويجب استبدال "codename" بالاسم الرمزي للجهاز.
يظهر مثال على الإدخال هنا:
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. لذلك لا يحتاج USB audio HAL و tinyalsa إلى الاهتمام بهذا الجزء من بروتوكول USB.
اختبار صوت USB
للحصول على معلومات حول اختبار CTS لصوت USB، راجع اختبارات التحقق من صوت USB CTS .