صوت رقمي USB

تستعرض هذه المقالة دعم Android للصوت الرقمي USB والبروتوكولات المستندة إلى USB.

جمهور

الجمهور المستهدف من هذه المقالة هو مصنعي أجهزة Android ، وبائعي SoC ، وموردي الأجهزة الطرفية للصوت USB ، ومطوري تطبيقات الصوت المتقدمين ، وغيرهم ممن يسعون إلى فهم مفصل للأجزاء الداخلية للصوت الرقمي USB على Android.

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

نظرة عامة على USB

تم وصف الناقل التسلسلي العالمي (USB) بشكل غير رسمي في مقالة ويكيبيديا USB ، ويتم تعريفه رسميًا بواسطة المعايير التي نشرها USB Implementers Forum، Inc. للراحة ، نلخص مفاهيم USB الرئيسية هنا ، لكن المعايير هي المرجع الموثوق.

المفاهيم والمصطلحات الأساسية

USB عبارة عن ناقل به بادئ واحد لعمليات نقل البيانات ، يسمى المضيف . المضيف يتواصل مع الأجهزة الطرفية عبر الحافلة.

ملاحظة: تعد مصطلحات الجهاز والملحق مرادفات شائعة للأجهزة الطرفية . نتجنب هذه المصطلحات هنا ، حيث يمكن الخلط بينها وبين جهاز Android أو المفهوم الخاص بنظام Android المسمى وضع الملحقات .

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

قد يكون الجهاز المحيطي كائنًا ماديًا واحدًا ولكنه في الواقع ينفذ وظائف منطقية متعددة. على سبيل المثال ، يمكن أن تحتوي كاميرا الويب الطرفية على وظيفة الكاميرا ووظيفة صوت الميكروفون.

تحتوي كل وظيفة طرفية على واجهة تحدد البروتوكول للتواصل مع هذه الوظيفة.

يتواصل المضيف مع طرف طرفي عبر أنبوب إلى نقطة نهاية ، أو مصدر بيانات أو حوض يتم توفيره بواسطة إحدى وظائف الأجهزة الطرفية.

هناك نوعان من الأنابيب: الرسالة والدفق . يتم استخدام أنبوب الرسائل للتحكم والحالة ثنائية الاتجاه. يتم استخدام أنبوب التدفق لنقل البيانات أحادي الاتجاه.

يبدأ المضيف جميع عمليات نقل البيانات ، ومن ثم يتم التعبير عن المصطلحين المدخلات والمخرجات بالنسبة للمضيف. تنقل عملية الإدخال البيانات من الجهاز الطرفي إلى المضيف ، بينما تنقل عملية الإخراج البيانات من المضيف إلى الجهاز المحيطي.

هناك ثلاثة أوضاع رئيسية لنقل البيانات: المقاطعة ، والكتلة ، والمتزامنة . سيتم مناقشة الوضع المتزامن بشكل أكبر في سياق الصوت.

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

أوضاع Android USB

وضع التنمية

كان وضع التطوير موجودًا منذ الإصدار الأولي لنظام 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 ) مطلوبًا:

OTG

الشكل 1. محول OTG أثناء التنقل

قد لا يوفر جهاز Android طاقة كافية لتشغيل جهاز طرفي معين ، اعتمادًا على مقدار الطاقة التي يحتاجها الجهاز الطرفي ، ومقدار جهاز Android الذي يمكن توفيره. حتى في حالة توفر الطاقة الكافية ، قد يتم تقصير شحن بطارية جهاز Android بشكل ملحوظ. لهذه المواقف ، استخدم موزعًا مزودًا بالطاقة مثل هذا:

محور بالطاقة

الشكل 2. محور بالطاقة

وضع الملحقات

تم تقديم وضع الملحقات في Android 3.1 (المستوى 12 من واجهة برمجة التطبيقات) وتم نقله مرة أخرى إلى Android 2.3.4. في هذا الوضع ، يعمل جهاز Android كطرف USB ، تحت سيطرة جهاز آخر مثل قفص الاتهام الذي يعمل كمضيف. يتمثل الاختلاف بين وضع التطوير ووضع الملحقات في أن وظائف USB الإضافية تكون مرئية للمضيف ، بخلاف adb. يبدأ جهاز Android في وضع التطوير ثم ينتقل إلى وضع الملحقات عبر عملية إعادة التفاوض.

تم تمديد وضع الملحقات بميزات إضافية في Android 4.1 ، لا سيما الصوت الموضح أدناه.

صوت USB

فئات 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.

يلخص الجدول أدناه الأوضاع الفرعية المتزامنة:

الوضع الفرعي عدد البايت
لكل علبة
معدل العينة
حدد بواسطة
تستخدم للصوت
تكيفية عامل مضيف نعم
غير متزامن عامل هامشي نعم
متزامن مُثَبَّت ساعة USB رقم

من الناحية العملية ، فإن الوضع الفرعي مهم بالطبع ، ولكن يجب أيضًا مراعاة العوامل الأخرى.

دعم Android لفئة صوت USB

وضع التنمية

صوت USB غير مدعوم في وضع التطوير.

وضع المضيف

يدعم Android 5.0 (المستوى 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 لا يظهر "بدون سائق" للمضيف.
  • يجب أن يكون الاتجاه مدخلاً ، معبرًا عنه بالنسبة للمضيف
  • يجب أن يكون تنسيق الصوت 16 بت PCM
  • يجب أن يكون معدل العينة 44.1 كيلو هرتز
  • يجب أن يكون عدد القنوات 2 (ستيريو)

لم يتم اعتماد صوت وضع الملحقات على نطاق واسع ، ولا يوصى به حاليًا للتصميمات الجديدة.

تطبيقات الصوت الرقمي USB

كما يشير الاسم ، يتم تمثيل إشارة الصوت الرقمية USB بواسطة دفق بيانات رقمي بدلاً من الإشارة التناظرية التي يستخدمها موصل سماعة الرأس المصغرة TRS الشائع. في النهاية يجب تحويل أي إشارة رقمية إلى تناظرية قبل سماعها. هناك مفاضلات في اختيار مكان إجراء هذا التحويل.

حكاية اثنين من DACs

في مثال الرسم البياني أدناه ، قمنا بمقارنة تصميمين. أولاً ، لدينا جهاز محمول مزود بمعالج التطبيقات (AP) ، و DAC على اللوحة ، ومكبر للصوت ، وموصل TRS التناظري المتصل بسماعات الرأس. نعتبر أيضًا جهازًا محمولًا مزودًا بـ USB متصل بـ USB DAC خارجي ومكبر للصوت ، وأيضًا مع سماعات الرأس.

مقارنة DAC

الشكل 3. مقارنة اثنين من DACs

أي تصميم أفضل؟ الجواب يعتمد على احتياجاتك. لكل منها مزاياه وعيوبه.

ملاحظة: هذه مقارنة مصطنعة ، حيث من المحتمل أن يتوفر كلا الخيارين في جهاز Android الحقيقي.

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

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

تشتهر الأجهزة المحمولة باحتوائها على لوحات دوائر عالية الكثافة ، والتي يمكن أن تؤدي إلى المزيد من فرص الحديث المتبادل الذي يحط من الإشارات التناظرية المجاورة. الاتصالات الرقمية أقل عرضة للضوضاء ، لذا فإن نقل 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 ، ويجب استبدال "الاسم الرمزي" بالاسم الرمزي للجهاز.

يتم عرض إدخال مثال هنا:

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 Audio CTS Verifier .