אודיו דיגיטלי USB

מאמר זה סוקר את תמיכת Android עבור אודיו דיגיטלי USB ופרוטוקולים מבוססי USB קשורים.

קהל

קהל היעד של מאמר זה הוא יצרני OEM של מכשירי אנדרואיד, ספקי SoC, ספקי ציוד היקפי USB אודיו, מפתחי יישומי אודיו מתקדמים ואחרים המחפשים הבנה מפורטת של רכיבי אודיו דיגיטליים USB באנדרואיד.

משתמשי קצה של מכשירי Nexus צריכים לראות את המאמר הקלט והשמע אודיו באמצעות מצב מארח USB במרכז העזרה של Nexus במקום זאת. למרות שמאמר זה אינו מכוון למשתמשי קצה, צרכני אודיופיל מסוימים עשויים למצוא חלקים מעניינים.

סקירה כללית של USB

אפיק טורי אוניברסלי (USB) מתואר באופן לא רשמי במאמר USB של ויקיפדיה, ומוגדר רשמית על ידי הסטנדרטים שפורסמו על ידי USB Implementers Forum, Inc. מטעמי נוחות, אנו מסכמים כאן את מושגי ה-USB העיקריים, אך הסטנדרטים הם ההתייחסות הסמכותית.

מושגי יסוד ומינוח

USB הוא אפיק עם יוזם יחיד של פעולות העברת נתונים, הנקרא המארח . המארח מתקשר עם ציוד היקפי דרך האוטובוס.

הערה: המונחים התקן ואביזר הם מילים נרדפות נפוצות לציוד היקפי . אנו נמנעים ממונחים אלה כאן, מכיוון שהם עלולים להתבלבל עם מכשיר אנדרואיד או המושג הספציפי לאנדרואיד שנקרא מצב אביזר .

תפקיד מארח קריטי הוא ספירה : תהליך הזיהוי של ציוד היקפי המחובר לאוטובוס, ושאילתת המאפיינים שלהם המבוטאים באמצעות מתארים .

ציוד היקפי עשוי להיות אובייקט פיזי אחד אך למעשה מיישם מספר פונקציות לוגיות. לדוגמה, ציוד היקפי למצלמת אינטרנט יכול לכלול גם פונקציית מצלמה וגם פונקציית אודיו של מיקרופון.

לכל פונקציה היקפית יש ממשק המגדיר את הפרוטוקול לתקשורת עם אותה פונקציה.

המארח מתקשר עם ציוד היקפי דרך צינור לנקודת קצה , מקור נתונים או שקע המסופק על ידי אחת מהפונקציות של הציוד ההיקפי.

ישנם שני סוגים של צינורות: הודעה וזרם . צינור הודעה משמש לשליטה דו-כיוונית ולסטטוס. צינור זרם משמש להעברת נתונים חד-כיוונית.

המארח יוזם את כל העברות הנתונים, ומכאן שהמונחים קלט ופלט באים לידי ביטוי ביחס למארח. פעולת קלט מעבירה נתונים מהציוד ההיקפי למארח, בעוד פעולת פלט מעבירה נתונים מהמארח אל הציוד ההיקפי.

ישנם שלושה מצבי העברת נתונים עיקריים: פסיקה , כמות גדולה ואיזוכרונית . מצב איזוכרוני יידון עוד בהקשר של אודיו.

למכשיר ההיקפי עשויים להיות מסופים המתחברים לעולם החיצון, מעבר למכשיר ההיקפי עצמו. בדרך זו, הציוד ההיקפי משמש לתרגום בין פרוטוקול USB לאותות "העולם האמיתי". המסופים הם אובייקטים לוגיים של הפונקציה.

מצבי USB של אנדרואיד

מצב פיתוח

מצב פיתוח קיים מאז השחרור הראשוני של אנדרואיד. מכשיר האנדרואיד מופיע כציוד היקפי USB למחשב מארח המריץ מערכת הפעלה שולחנית כגון Linux, Mac OS X או Windows. הפונקציה ההיקפית היחידה הנראית לעין היא Android fastboot או Android Debug Bridge (adb) . פרוטוקולי fastboot ו-adb משולבים על מצב העברת נתונים בכמויות USB.

מצב מארח

מצב מארח מוצג באנדרואיד 3.1 (רמת API 12).

מכיוון שמכשיר האנדרואיד חייב לפעול כמארח, ורוב מכשירי האנדרואיד כוללים מחבר מיקרו-USB שאינו מאפשר הפעלת מארח באופן ישיר, מתאם בדרכים ( OTG ) כגון זה נדרש בדרך כלל:

OTG

איור 1. מתאם בדרכים (OTG).

ייתכן שמכשיר אנדרואיד לא יספק מספיק כוח להפעלת ציוד היקפי מסוים, בהתאם לכמות הכוח שהציוד ההיקפי צריך, וכמה מכשיר האנדרואיד מסוגל לספק. גם אם קיים כוח מתאים, טעינת הסוללה של מכשיר האנדרואיד עשויה להתקצר משמעותית. במצבים אלה, השתמש ברכזת מופעלת כמו זו:

רכזת מופעלת

איור 2. רכזת מופעלת

מצב אביזרים

מצב אביזרים הוצג באנדרואיד 3.1 (רמת API 12) והועבר לאחור לאנדרואיד 2.3.4. במצב זה, מכשיר האנדרואיד פועל כציוד USB היקפי, בשליטה של ​​מכשיר אחר כגון תחנת עגינה המשמשת כמארח. ההבדל בין מצב פיתוח למצב אביזר הוא שפונקציות USB נוספות גלויות למארח, מעבר ל-adb. מכשיר האנדרואיד מתחיל במצב פיתוח ולאחר מכן עובר למצב אביזר באמצעות תהליך משא ומתן מחדש.

מצב האביזרים הוארך עם תכונות נוספות באנדרואיד 4.1, במיוחד אודיו המתואר להלן.

אודיו USB

שיעורי USB

לכל פונקציה היקפית יש מסמך מסוג מכשיר משויך המציין את הפרוטוקול הסטנדרטי עבור אותה פונקציה. זה מאפשר למארחים תואמים לכיתה ולפונקציות היקפיות לפעול הדדית, ללא ידע מפורט על פעולתו של זה. תאימות לכיתה היא קריטית אם המארח והציוד ההיקפי מסופקים על ידי גורמים שונים.

המונח ללא נהג הוא מילה נרדפת נפוצה ל- class compliant , המציין שניתן להשתמש בתכונות הסטנדרטיות של ציוד היקפי כזה מבלי לדרוש התקנה של מנהל התקן ספציפי למערכת הפעלה. אפשר להניח שציוד היקפי המפורסם כ"אין צורך במנהל התקן" עבור מערכות הפעלה גדולות למחשבים שולחניים יהיה תואם לכיתה, אם כי ייתכנו חריגים.

מחלקת שמע USB

כאן אנו עוסקים רק בציוד היקפי המיישם פונקציות אודיו, ובכך נצמדים למחלקת מכשירי השמע. ישנן שתי מהדורות של מפרט מחלקת האודיו USB: מחלקה 1 (UAC1) ו-2 (UAC2).

השוואה לשיעורים אחרים

USB כולל מחלקות התקנים רבות אחרות, שחלקן עשויות להתבלבל עם מחלקת האודיו. מחלקת אחסון המונים (MSC) משמשת לגישה מוכוונת מגזר למדיה, בעוד שפרוטוקול העברת מדיה (MTP) מיועד לגישה מלאה לקבצים למדיה. ניתן להשתמש גם ב-MSC וגם ב-MTP להעברת קבצי אודיו, אך רק מחלקת אודיו USB מתאימה להזרמה בזמן אמת.

מסופי אודיו

המסופים של ציוד שמע הם בדרך כלל אנלוגיים. האות האנלוגי המוצג במסוף הכניסה של הציוד ההיקפי מומר לדיגיטלי על ידי ממיר אנלוגי לדיגיטלי (ADC), ומועבר על גבי פרוטוקול USB לצריכה על ידי המארח. ה-ADC הוא מקור נתונים עבור המארח. באופן דומה, המארח שולח אות שמע דיגיטלי דרך פרוטוקול USB אל הציוד ההיקפי, שם ממיר דיגיטלי לאנלוגי (DAC) ממיר ומציג למסוף פלט אנלוגי. ה-DAC הוא כיור עבור המארח.

ערוצים

ציוד היקפי עם פונקציית שמע יכול לכלול מסוף מקור, מסוף כיור או שניהם. לכל כיוון יכול להיות ערוץ אחד ( מונו ), שני ערוצים ( סטריאו ) או יותר. ציוד היקפי עם יותר משני ערוצים נקראים רב ערוצים . מקובל לפרש זרם סטריאו כמורכב מערוץ שמאל וימין , ובהרחבה לפרש זרם רב-ערוצי כבעל מיקומים מרחביים המתאימים לכל ערוץ. עם זאת, זה גם די מתאים (במיוחד לאודיו USB יותר מאשר HDMI ) לא להקצות משמעות מרחבית סטנדרטית מסוימת לכל ערוץ. במקרה זה, זה תלוי באפליקציה ובמשתמש להגדיר את אופן השימוש בכל ערוץ. לדוגמה, זרם כניסת USB בעל ארבעה ערוצים עשוי להיות מחובר לשלושת הערוצים הראשונים למיקרופונים שונים בחדר, והערוץ האחרון מקבל קלט מרדיו AM.

מצב העברה איזוכרונית

אודיו USB משתמש במצב העברה איזוכרוני עבור מאפייניו בזמן אמת, על חשבון שחזור שגיאות. במצב איזוכרוני, רוחב הפס מובטח, ושגיאות העברת נתונים מתגלות באמצעות בדיקת יתירות מחזורית (CRC). אבל אין אישור מנות או שידור חוזר במקרה של שגיאה.

שידורים איזוקרוניים מתרחשים בכל תקופת Start Of Frame (SOF). תקופת ה-SOF היא אלפית שנייה אחת עבור מהירות מלאה, ו-125 מיקרו-שניות עבור מהירות גבוהה. כל מסגרת במהירות מלאה נושאת עד 1023 בתים של מטען, ומסגרת במהירות גבוהה נושאת עד 1024 בתים. חיבור אלה יחד, אנו מחשבים את קצב ההעברה המרבי כ-1,023,000 או 8,192,000 בתים לשנייה. זה קובע גבול עליון תיאורטי על קצב דגימת השמע המשולב, ספירת הערוצים ועומק הסיביות. הגבול המעשי נמוך יותר.

בתוך מצב איזוכרוני, ישנם שלושה תתי מצבים:

  • הסתגלות
  • אסינכרוני
  • סינכרוני

במצב משנה אדפטיבי, הכיור או המקור ההיקפי מסתגלים לקצב דגימה פוטנציאלי משתנה של המארח.

במצב משנה אסינכרוני (נקרא גם משוב מרומז), הכיור או המקור קובעים את קצב הדגימה, והמארח מתאים. היתרון התיאורטי העיקרי של מצב משנה אסינכרוני הוא ששעון ה-USB המקור או הכיור קרוב יותר פיזית וחשמלית (ואכן עשוי להיות זהה או נגזר ממנו) השעון שמניע את ה-DAC או ה-ADC. קרבה זו פירושה שתת-מצב אסינכרוני צריך להיות פחות רגיש לריצוד שעון. בנוסף, השעון המשמש את ה-DAC או ה-ADC עשוי להיות מתוכנן לדיוק גבוה יותר וסחיפה נמוכה יותר מאשר השעון המארח.

במצב משנה סינכרוני, מספר קבוע של בתים מועבר בכל תקופת SOF. קצב דגימת השמע נגזר למעשה משעון ה-USB. מצב משנה סינכרוני אינו נפוץ עם אודיו מכיוון שגם המארח וגם הציוד ההיקפי נתונים לחסדי שעון ה-USB.

הטבלה שלהלן מסכמת את מצבי המשנה האיזוקרוניים:

מצב משנה ספירת בתים
לכל חבילה
קצב דגימה
נקבע על ידי
משמש לשמע
אדפטיבי מִשְׁתַנֶה מנחה כן
אסינכרוני מִשְׁתַנֶה שׁוּלִי כן
סינכרוני תוקן שעון USB לא

בפועל, תת-המצב כמובן משנה, אבל יש לקחת בחשבון גם גורמים אחרים.

תמיכה באנדרואיד במחלקת שמע USB

מצב פיתוח

אודיו USB אינו נתמך במצב פיתוח.

מצב מארח

אנדרואיד 5.0 (רמת API 21) ומעלה תומך בקבוצת משנה של תכונות USB Audio Class 1 (UAC1):

  • מכשיר האנדרואיד חייב לפעול כמארח
  • פורמט השמע חייב להיות PCM (סוג ממשק I)
  • עומק הסיביות חייב להיות 16 סיביות, 24 סיביות או 32 סיביות כאשר 24 סיביות של נתוני אודיו שימושיים מוצדקות לשמאל בתוך הסיביות המשמעותיות ביותר של המילה של 32 סיביות
  • קצב הדגימה חייב להיות 48, 44.1, 32, 24, 22.05, 16, 12, 11.025 או 8 קילו-הרץ
  • מספר הערוצים חייב להיות 1 (מונו) או 2 (סטריאו)

עיון בקוד המקור של מסגרת Android עשוי להראות קוד נוסף מעבר למינימום הדרוש לתמיכה בתכונות אלו. אבל הקוד הזה לא אומת, ולכן עדיין לא נתבעו תכונות מתקדמות יותר.

מצב אביזרים

אנדרואיד 4.1 (רמת API 16) הוסיפה תמיכה מוגבלת בהפעלת אודיו למארח. במצב אביזר, אנדרואיד מנתב אוטומטית את פלט האודיו שלו ל-USB. כלומר, מכשיר האנדרואיד משמש כמקור נתונים למארח, למשל תחנת עגינה.

לאודיו במצב אביזר יש את התכונות הבאות:

  • מכשיר האנדרואיד חייב להיות נשלט על ידי מארח בעל ידע שיכול קודם להעביר את מכשיר האנדרואיד ממצב פיתוח למצב אביזר, ולאחר מכן על המארח להעביר נתוני שמע מנקודת הקצה המתאימה. לפיכך מכשיר האנדרואיד לא נראה "ללא נהג" למארח.
  • הכיוון חייב להיות קלט , מבוטא ביחס למארח
  • פורמט השמע חייב להיות 16 סיביות PCM
  • קצב הדגימה חייב להיות 44.1 קילו-הרץ
  • מספר הערוצים חייב להיות 2 (סטריאו)

אודיו במצב אביזר לא אומץ באופן נרחב, והוא אינו מומלץ כרגע עבור עיצובים חדשים.

יישומים של אודיו דיגיטלי USB

כפי שהשם מעיד, אות האודיו הדיגיטלי USB מיוצג על ידי זרם נתונים דיגיטלי במקום האות האנלוגי המשמש את מחבר האוזניות המיני הנפוצות TRS. בסופו של דבר יש להמיר כל אות דיגיטלי לאנלוגי לפני שניתן יהיה לשמוע אותו. יש פשרות בבחירת היכן למקם את ההמרה.

סיפור על שני DACs

בתרשים לדוגמה להלן, אנו משווים שני עיצובים. ראשית יש לנו מכשיר נייד עם מעבד יישומים (AP), DAC מובנה, מגבר ומחבר TRS אנלוגי המחוברים לאוזניות. אנו רואים גם מכשיר נייד עם USB המחובר ל-USB DAC ומגבר חיצוני, גם עם אוזניות.

השוואה DAC

איור 3. השוואה של שני DACs

איזה עיצוב עדיף? התשובה תלויה בצרכים שלך. לכל אחד יש יתרונות וחסרונות.

הערה: זוהי השוואה מלאכותית, מכיוון שלמכשיר אנדרואיד אמיתי יהיו כנראה שתי האפשרויות זמינות.

העיצוב הראשון A פשוט יותר, פחות יקר, משתמש בפחות חשמל, ויהיה עיצוב אמין יותר בהנחה שאחרת רכיבים אמינים באותה מידה. עם זאת, בדרך כלל יש פשרות באיכות השמע לעומת דרישות אחרות. לדוגמה, אם מדובר במכשיר לשוק המוני, הוא עשוי להיות מתוכנן כך שיתאים לצרכים של הצרכן הכללי, לא עבור האודיופיל.

בעיצוב השני, ניתן לעצב את ציוד השמע החיצוני C עבור איכות שמע גבוהה יותר ותפוקת הספק גדולה יותר מבלי להשפיע על העלות של מכשיר אנדרואיד B בשוק ההמוני הבסיסי. כן, זה עיצוב יקר יותר, אבל העלות נספגת רק על ידי אלה שרוצים את זה.

התקנים ניידים ידועים לשמצה בכך שיש להם לוחות מעגלים בצפיפות גבוהה, מה שעלול לגרום ליותר הזדמנויות להצלבה שמדרדרת אותות אנלוגיים סמוכים. תקשורת דיגיטלית פחות רגישה לרעש , ולכן העברת ה-DAC ממכשיר אנדרואיד A ללוח מעגלים חיצוני C מאפשרת לבודד פיזית וחשמלית את השלבים האנלוגיים הסופיים מהמעגל הצפוף והרועש, וכתוצאה מכך שמע נאמנות גבוהה יותר.

מצד שני, העיצוב השני מורכב יותר, ועם תוספת מורכבות מגיעות יותר הזדמנויות לדברים להיכשל. יש גם חביון נוסף מבקרי ה-USB.

יישומי מצב מארח

יישומי שמע טיפוסיים במצב מארח USB כוללים:

  • האזנה למוזיקה
  • טלפוניה
  • הודעות מיידיות וצ'אט קולי
  • הקלטה

עבור כל היישומים הללו, אנדרואיד מזהה ציוד אודיו דיגיטלי תואם USB, ומנתב אוטומטית את השמעת השמע ולכידת השמע כראוי, בהתבסס על כללי מדיניות האודיו. תוכן סטריאו מושמע בשני הערוצים הראשונים של הציוד ההיקפי.

אין ממשקי API ספציפיים לאודיו דיגיטלי USB. עבור שימוש מתקדם, הניתוב האוטומטי עלול להפריע ליישומים שמודעים ל-USB. עבור יישומים כאלה, השבת את הניתוב האוטומטי באמצעות הפקד המתאים בחלק המדיה של הגדרות / אפשרויות מפתחים .

ניפוי באגים במצב מארח

במצב מארח USB, איתור באגים של adb דרך USB אינו זמין. ראה סעיף שימוש אלחוטי ב- Android Debug Bridge עבור חלופה.

הטמעת אודיו USB

המלצות עבור ספקי ציוד היקפי אודיו

על מנת לפעול הדדית עם מכשירי אנדרואיד, ספקי ציוד היקפי אודיו צריכים:

  • עיצוב עבור תאימות למעמד שמע; כרגע אנדרואיד מתמקדת בכיתה 1, אבל זה חכם לתכנן לכיתה 2
  • למנוע מוזרויות
  • בדיקת יכולת פעולה הדדית עם מכשירי אנדרואיד פופולריים
  • תיעוד בבירור תכונות נתמכות, תאימות למעמד שמע, דרישות צריכת חשמל וכו' כך שצרכנים יוכלו לקבל החלטות מושכלות

המלצות ליצרני OEM של מכשירי אנדרואיד וספקי SoC

על מנת לתמוך באודיו דיגיטלי USB, יצרני ציוד מקורי וספקי SoC צריכים:

  • עיצוב חומרה לתמיכה במצב מארח USB
  • אפשר תמיכה גנרית במארח USB ברמת המסגרת באמצעות דגל התכונה android.hardware.usb.host.xml
  • אפשר את כל תכונות הליבה הדרושות: מצב מארח USB, אודיו USB, מצב העברה איזוכרונית; ראה תצורת ליבת אנדרואיד
  • התעדכן במהדורות ותיקוני הליבה האחרונים; למרות המטרה האצילית של תאימות לכיתה, יש ציוד אודיו היקפי עם מוזרויות , ולגרעינים האחרונים יש דרכים לעקיפת מוזרויות כאלה
  • אפשר מדיניות שמע USB כמתואר להלן
  • הוסף audio.usb.default ל-PRODUCT_PACKAGES ב-device.mk
  • בדיקת יכולת פעולה הדדית עם ציוד היקפי USB אודיו נפוצים

אפשר מדיניות שמע USB

כדי להפעיל שמע USB, הוסף ערך לקובץ התצורה של מדיניות השמע. זה בדרך כלל ממוקם כאן:

device/oem/codename/audio_policy.conf

יש להחליף את רכיב שם הנתיב "oem" בשם ה-OEM שמייצר את מכשיר האנדרואיד, ואת "קודשם" יש להחליף בשם קוד המכשיר.

ערך לדוגמה מוצג כאן:

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/

ה-USB אודיו HAL מסתמך במידה רבה על tinyalsa , המתואר בטרמינולוגיה של אודיו . למרות ששמע USB מסתמך על העברות איזוכרוניות, זה מופשט על ידי יישום ALSA. אז ה-USB אודיו HAL ו-tinyalsa לא צריכים להתעסק בחלק זה של פרוטוקול USB.

בדוק שמע USB

למידע על בדיקת CTS עבור שמע USB, ראה בדיקות USB Audio CTS Verifier .