USB Digital Audio

บทความนี้ทบทวนการสนับสนุน Android สำหรับเสียงดิจิทัล USB และโปรโตคอลที่ใช้ USB ที่เกี่ยวข้อง

ผู้ชม

กลุ่มเป้าหมายของบทความนี้คือ OEM อุปกรณ์ Android ผู้จำหน่าย SoC ซัพพลายเออร์อุปกรณ์ต่อพ่วงเสียง USB นักพัฒนาแอปพลิเคชันเสียงขั้นสูงและคนอื่น ๆ ที่ต้องการความเข้าใจโดยละเอียดเกี่ยวกับเสียงภายในแบบดิจิทัล USB บน Android

ผู้ใช้อุปกรณ์ Nexus ควรอ่านบทความ บันทึกและเล่นเสียงโดยใช้โหมดโฮสต์ USB ที่ ศูนย์ช่วยเหลือของ Nexus แทน แม้ว่าบทความนี้ไม่ได้มุ่งเน้นไปที่ผู้ใช้ปลายทาง แต่ผู้บริโภคออดิโอไฟล์บางรายอาจพบว่ามีส่วนที่น่าสนใจ

ภาพรวมของ USB

Universal Serial Bus (USB) มีอธิบายอย่างไม่เป็นทางการในบทความ USB ของ Wikipedia และได้รับการกำหนดอย่างเป็นทางการโดยมาตรฐานที่เผยแพร่โดย USB Implementers Forum, Inc. เพื่อความสะดวกเราสรุปแนวคิดสำคัญของ USB ที่นี่ แต่มาตรฐานเป็นข้อมูลอ้างอิงที่เชื่อถือได้

แนวคิดพื้นฐานและคำศัพท์

USB เป็น บัสที่ มีตัวเริ่มต้นการดำเนินการถ่ายโอนข้อมูลเพียงตัวเดียวเรียกว่า โฮสต์ โฮสต์สื่อสารกับ อุปกรณ์ต่อพ่วง ผ่านทางรถบัส

หมายเหตุ: คำว่า อุปกรณ์ และ อุปกรณ์เสริม เป็นคำพ้องความหมายทั่วไปสำหรับ อุปกรณ์ต่อพ่วง เราหลีกเลี่ยงคำเหล่านั้นที่นี่เนื่องจากอาจสับสนกับ อุปกรณ์ Android หรือแนวคิดเฉพาะ Android ที่เรียกว่า โหมดอุปกรณ์เสริม

บทบาทโฮสต์ที่สำคัญคือการ แจงนับ : กระบวนการตรวจจับว่าอุปกรณ์ต่อพ่วงใดเชื่อมต่อกับบัสและสอบถามคุณสมบัติของอุปกรณ์ที่แสดงผ่าน ตัว บอก

อุปกรณ์ต่อพ่วงอาจเป็นวัตถุทางกายภาพหนึ่งชิ้น แต่ใช้ ฟังก์ชัน ลอจิคัลหลาย ฟังก์ชัน ตัวอย่างเช่นอุปกรณ์ต่อพ่วงของเว็บแคมอาจมีทั้งฟังก์ชันกล้องถ่ายรูปและฟังก์ชันเสียงไมโครโฟน

ฟังก์ชันอุปกรณ์ต่อพ่วงแต่ละฟังก์ชันมี อินเทอร์เฟซ ที่กำหนดโปรโตคอลเพื่อสื่อสารกับฟังก์ชันนั้น

โฮสต์สื่อสารกับอุปกรณ์ต่อพ่วงผ่าน ไปป์ ไปยัง ปลายทาง แหล่งข้อมูลหรือซิงก์ที่มาจากฟังก์ชันของอุปกรณ์ต่อพ่วงอย่างใดอย่างหนึ่ง

ท่อมีสองประเภท: ข้อความ และ สตรีม ท่อข้อความใช้สำหรับการควบคุมและสถานะแบบสองทิศทาง ท่อสตรีมใช้สำหรับการถ่ายโอนข้อมูลแบบทิศทางเดียว

โฮสต์เริ่มต้นการถ่ายโอนข้อมูลทั้งหมดดังนั้น อินพุต และ เอาต์พุตของ เงื่อนไขจะแสดงโดยสัมพันธ์กับโฮสต์ การดำเนินการป้อนข้อมูลจะถ่ายโอนข้อมูลจากอุปกรณ์ต่อพ่วงไปยังโฮสต์ในขณะที่การดำเนินการเอาต์พุตจะถ่ายโอนข้อมูลจากโฮสต์ไปยังอุปกรณ์ต่อพ่วง

มีโหมดการถ่ายโอนข้อมูลที่สำคัญสามโหมด: ขัดจังหวะ , จำนวนมาก และ แบบ isochronous โหมด Isochronous จะกล่าวถึงเพิ่มเติมในบริบทของเสียง

อุปกรณ์ต่อพ่วงอาจมี เทอร์มินัล ที่เชื่อมต่อกับโลกภายนอกนอกเหนือจากอุปกรณ์ต่อพ่วง ด้วยวิธีนี้อุปกรณ์ต่อพ่วงทำหน้าที่แปลระหว่างโปรโตคอล 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 ที่ไม่อนุญาตให้ใช้งานโฮสต์โดยตรงจึงจำเป็นต้องใช้อะแดปเตอร์ on-the-go ( OTG ) เช่นนี้:

OTG

รูปที่ 1. อะแดปเตอร์ On-the-go (OTG)

อุปกรณ์ Android อาจให้พลังงานไม่เพียงพอในการใช้งานอุปกรณ์ต่อพ่วงโดยเฉพาะทั้งนี้ขึ้นอยู่กับความต้องการพลังงานของอุปกรณ์ต่อพ่วงและความสามารถในการจัดหาอุปกรณ์ Android ได้มากเพียงใด แม้ว่าจะมีพลังงานเพียงพอ แต่การชาร์จแบตเตอรี่ของอุปกรณ์ Android อาจสั้นลงอย่างมาก สำหรับสถานการณ์เหล่านี้ให้ใช้ ฮับ ขับเคลื่อนเช่นนี้:

ขับเคลื่อนฮับ

รูปที่ 2. ฮับขับเคลื่อน

โหมดอุปกรณ์เสริม

โหมดอุปกรณ์เสริม เปิดตัวใน Android 3.1 (API ระดับ 12) และแบ็คพอร์ตไปที่ Android 2.3.4 ในโหมดนี้อุปกรณ์ Android จะทำงานเป็นอุปกรณ์ต่อพ่วง USB ภายใต้การควบคุมของอุปกรณ์อื่นเช่นด็อคที่ทำหน้าที่เป็นโฮสต์ ความแตกต่างระหว่างโหมดการพัฒนาและโหมดอุปกรณ์เสริมคือโฮสต์จะมองเห็นฟังก์ชัน USB เพิ่มเติมนอกเหนือจาก adb อุปกรณ์ Android จะเริ่มต้นในโหมดการพัฒนาจากนั้นจะเปลี่ยนเป็นโหมดอุปกรณ์เสริมผ่านกระบวนการเจรจาใหม่

โหมดอุปกรณ์เสริมได้รับการขยายพร้อมคุณสมบัติเพิ่มเติมใน Android 4.1 โดยเฉพาะเสียงที่อธิบายไว้ด้านล่าง

เสียง USB

คลาส USB

ฟังก์ชันอุปกรณ์ต่อพ่วงแต่ละฟังก์ชันมีเอกสาร คลาสอุปกรณ์ที่ เกี่ยวข้องซึ่งระบุโปรโตคอลมาตรฐานสำหรับฟังก์ชันนั้น สิ่งนี้ช่วยให้โฮสต์ที่เป็น ไปตามคลาส และฟังก์ชันอุปกรณ์ต่อพ่วงสามารถทำงานร่วมกันได้โดยไม่ต้องมีความรู้โดยละเอียดเกี่ยวกับการทำงานของกันและกัน การปฏิบัติตามคลาสเป็นสิ่งสำคัญหากโฮสต์และอุปกรณ์ต่อพ่วงมีให้โดยเอนทิตีที่แตกต่างกัน

คำว่า driverless เป็นคำพ้องความหมายทั่วไปสำหรับ คลาสที่เข้ากันได้ ซึ่งบ่งชี้ว่าสามารถใช้คุณสมบัติมาตรฐานของอุปกรณ์ต่อพ่วงดังกล่าวได้โดยไม่ต้องติดตั้ง ไดรเวอร์ เฉพาะของระบบปฏิบัติการ เราสามารถสันนิษฐานได้ว่าอุปกรณ์ต่อพ่วงที่โฆษณาว่า "ไม่จำเป็นต้องมีไดรเวอร์" สำหรับระบบปฏิบัติการเดสก์ท็อปส่วนใหญ่จะเป็นไปตามคลาสแม้ว่าอาจมีข้อยกเว้นก็ตาม

คลาสเสียง USB

ที่นี่เราคำนึงถึงตัวเองเฉพาะกับอุปกรณ์ต่อพ่วงที่ใช้ฟังก์ชั่นเสียงดังนั้นจึงเป็นไปตามคลาสอุปกรณ์เสียง ข้อกำหนดของคลาสเสียง USB มีสองรุ่น: คลาส 1 (UAC1) และ 2 (UAC2)

เปรียบเทียบกับชั้นเรียนอื่น ๆ

USB มีคลาสอุปกรณ์อื่น ๆ อีกมากมายซึ่งบางคลาสอาจสับสนกับคลาสเสียง คลาสหน่วยเก็บข้อมูลขนาดใหญ่ (MSC) ใช้สำหรับการเข้าถึงสื่อที่มุ่งเน้นเซกเตอร์ในขณะที่ Media Transfer Protocol (MTP) ใช้สำหรับการเข้าถึงไฟล์แบบเต็มไปยังสื่อ อาจใช้ทั้ง MSC และ MTP สำหรับการถ่ายโอนไฟล์เสียง แต่มีเพียงคลาสเสียง USB เท่านั้นที่เหมาะสำหรับการสตรีมแบบเรียลไทม์

ขั้วต่อเสียง

โดยทั่วไปขั้วของอุปกรณ์ต่อพ่วงเสียงจะเป็นแบบอนาล็อก สัญญาณแอนะล็อกที่แสดงที่ขั้วอินพุตของอุปกรณ์ต่อพ่วงจะถูกแปลงเป็นดิจิทัลโดยตัว แปลงอนาล็อกเป็นดิจิตอล (ADC) และถูกส่งผ่านโปรโตคอล USB เพื่อให้โฮสต์ใช้งานได้ ADC เป็น แหล่ง ข้อมูลสำหรับโฮสต์ ในทำนองเดียวกันโฮสต์จะส่งสัญญาณเสียงดิจิทัลผ่านโปรโตคอล USB ไปยังอุปกรณ์ต่อพ่วงซึ่งตัว แปลงดิจิทัลเป็นอนาล็อก (DAC) จะแปลงและนำเสนอไปยังเทอร์มินัลเอาต์พุตแบบอะนาล็อก DAC คือ ซิงก์ สำหรับโฮสต์

ช่อง

อุปกรณ์ต่อพ่วงที่มีฟังก์ชั่นเสียงอาจรวมถึงขั้วต้นทางขั้วซิงก์หรือทั้งสองอย่าง แต่ละทิศทางอาจมีหนึ่งแชนเนล ( โมโน ) สองแชนเนล ( สเตอริโอ ) หรือมากกว่า อุปกรณ์ต่อพ่วงที่มีมากกว่าสองช่องเรียกว่า หลายช่อง เป็นเรื่องปกติที่จะตีความสตรีมสเตอริโอว่าประกอบด้วยแชนเนล ซ้าย และ ขวา และโดยการขยายเพื่อตีความสตรีมหลายช่องว่ามีตำแหน่งเชิงพื้นที่ที่สอดคล้องกับแต่ละแชนเนล อย่างไรก็ตามมันค่อนข้างเหมาะสม (โดยเฉพาะอย่างยิ่งสำหรับเสียง USB มากกว่า HDMI ) ที่จะไม่กำหนดความหมายเชิงพื้นที่มาตรฐานใด ๆ ให้กับแต่ละช่องสัญญาณ ในกรณีนี้ขึ้นอยู่กับแอปพลิเคชันและผู้ใช้ที่จะกำหนดวิธีการใช้งานแต่ละช่อง ตัวอย่างเช่นสตรีมอินพุต USB สี่แชนเนลอาจมีสามแชนเนลแรกติดอยู่กับไมโครโฟนต่างๆภายในห้องและแชนเนลสุดท้ายที่รับอินพุตจากวิทยุ AM

โหมดถ่ายโอน Isochronous

เสียง USB ใช้โหมดถ่ายโอนแบบ isochronous สำหรับลักษณะเรียลไทม์โดยเสียค่าใช้จ่ายในการกู้คืนข้อผิดพลาด ในโหมด isochronous จะรับประกันแบนด์วิดท์และตรวจพบข้อผิดพลาดในการส่งข้อมูลโดยใช้การตรวจสอบความซ้ำซ้อนแบบวนซ้ำ (CRC) แต่ไม่มีการตอบรับแพ็คเก็ตหรือการส่งซ้ำในกรณีที่เกิดข้อผิดพลาด

การส่งสัญญาณแบบ Isochronous จะเกิดขึ้นในแต่ละช่วงเวลาเริ่มต้นของเฟรม (SOF) ระยะเวลา SOF คือหนึ่งมิลลิวินาทีสำหรับความเร็วเต็มและ 125 ไมโครวินาทีสำหรับความเร็วสูง เฟรมความเร็วสูงแต่ละเฟรมมีน้ำหนักบรรทุกสูงสุด 1023 ไบต์และเฟรมความเร็วสูงรองรับได้ถึง 1024 ไบต์ เมื่อรวมสิ่งเหล่านี้เข้าด้วยกันเราคำนวณอัตราการถ่ายโอนสูงสุดเป็น 1,023,000 หรือ 8,192,000 ไบต์ต่อวินาที สิ่งนี้กำหนดขีด จำกัด สูงสุดทางทฤษฎีเกี่ยวกับอัตราการสุ่มตัวอย่างเสียงจำนวนช่องและความลึกของบิต ขีด จำกัด ในทางปฏิบัติต่ำกว่า

ภายในโหมด isochronous มีสามโหมดย่อย:

  • ปรับตัวได้
  • อะซิงโครนัส
  • ซิงโครนัส

ในโหมดย่อยที่ปรับได้ซิงก์หรือแหล่งที่มาของอุปกรณ์ต่อพ่วงจะปรับให้เข้ากับอัตราตัวอย่างที่อาจแตกต่างกันไปของโฮสต์

ในโหมดย่อยแบบอะซิงโครนัส (หรือที่เรียกว่าข้อเสนอแนะโดยนัย) ซิงก์หรือซอร์สจะกำหนดอัตราการสุ่มตัวอย่างและโฮสต์รองรับ ข้อได้เปรียบทางทฤษฎีหลักของโหมดย่อยแบบอะซิงโครนัสคือนาฬิกา USB ต้นทางหรือซิงก์จะอยู่ใกล้กับทางกายภาพและทางไฟฟ้ามากขึ้น (และอาจจะเหมือนกับหรือได้มาจาก) นาฬิกาที่ขับเคลื่อน DAC หรือ ADC ความใกล้เคียงนี้หมายความว่าโหมดย่อยแบบอะซิงโครนัสควรมีความไวน้อยกว่าต่อการสั่นของนาฬิกา นอกจากนี้นาฬิกาที่ DAC หรือ ADC ใช้อาจได้รับการออกแบบมาเพื่อความแม่นยำที่สูงขึ้นและการดริฟท์ที่ต่ำกว่านาฬิกาโฮสต์

ในโหมดย่อยแบบซิงโครนัสจำนวนไบต์คงที่จะถูกถ่ายโอนในแต่ละช่วงเวลา SOF อัตราตัวอย่างเสียงได้มาจากนาฬิกา USB อย่างมีประสิทธิภาพ โหมดย่อยแบบซิงโครนัสไม่นิยมใช้กับเสียงเนื่องจากทั้งโฮสต์และอุปกรณ์ต่อพ่วงต่างอยู่ในความเมตตาของนาฬิกา USB

ตารางด้านล่างสรุปโหมดย่อยไอโซโครนัส:

โหมดย่อย จำนวนไบต์
ต่อแพ็คเก็ต
อัตราตัวอย่าง
กำหนดโดย
ใช้สำหรับเสียง
ปรับตัวได้ ตัวแปร เจ้าภาพ ใช่
อะซิงโครนัส ตัวแปร อุปกรณ์ต่อพ่วง ใช่
ซิงโครนัส แก้ไขแล้ว นาฬิกา USB ไม่

ในทางปฏิบัติโหมดย่อยมีความสำคัญ แต่ควรพิจารณาปัจจัยอื่น ๆ ด้วย

การสนับสนุน Android สำหรับคลาสเสียง USB

โหมดการพัฒนา

ไม่รองรับเสียง USB ในโหมดการพัฒนา

โหมดโฮสต์

Android 5.0 (API ระดับ 21) ขึ้นไปรองรับชุดย่อยของคุณสมบัติ USB audio class 1 (UAC1):

  • อุปกรณ์ Android ต้องทำหน้าที่เป็นโฮสต์
  • รูปแบบเสียงต้องเป็น PCM (ประเภทอินเทอร์เฟซ I)
  • ความลึกของบิตต้องเป็น 16 บิต 24 บิตหรือ 32 บิตโดยที่ข้อมูลเสียงที่มีประโยชน์ 24 บิตจะถูกจัดให้อยู่ในส่วนที่สำคัญที่สุดของคำ 32 บิต
  • อัตราตัวอย่างต้องเป็น 48, 44.1, 32, 24, 22.05, 16, 12, 11.025 หรือ 8 kHz
  • จำนวนช่องต้องเป็น 1 (โมโน) หรือ 2 (สเตอริโอ)

การตรวจสอบซอร์สโค้ดของเฟรมเวิร์ก Android อาจแสดงโค้ดเพิ่มเติมเกินกว่าขั้นต่ำที่จำเป็นเพื่อรองรับคุณสมบัติเหล่านี้ แต่รหัสนี้ยังไม่ได้รับการตรวจสอบความถูกต้องดังนั้นจึงยังไม่มีการอ้างสิทธิ์คุณลักษณะขั้นสูงเพิ่มเติม

โหมดอุปกรณ์เสริม

Android 4.1 (API ระดับ 16) เพิ่มการรองรับแบบ จำกัด สำหรับการเล่นเสียงไปยังโฮสต์ ขณะอยู่ในโหมดอุปกรณ์เสริม Android จะกำหนดเส้นทางเอาต์พุตเสียงไปยัง USB โดยอัตโนมัติ นั่นคืออุปกรณ์ Android ทำหน้าที่เป็นแหล่งข้อมูลไปยังโฮสต์เช่นท่าเรือ

เสียงโหมดอุปกรณ์เสริมมีคุณสมบัติเหล่านี้:

  • อุปกรณ์ Android ต้องได้รับการควบคุมโดยโฮสต์ที่มีความรู้ซึ่งสามารถเปลี่ยนอุปกรณ์ Android จากโหมดการพัฒนาเป็นโหมดอุปกรณ์เสริมได้ก่อนจากนั้นโฮสต์จะต้องถ่ายโอนข้อมูลเสียงจากปลายทางที่เหมาะสม ดังนั้นอุปกรณ์ Android จึงไม่ปรากฏ "ไร้คนขับ" ให้กับโฮสต์
  • ต้อง ป้อน ทิศทางโดยแสดงโดยสัมพันธ์กับโฮสต์
  • รูปแบบเสียงต้องเป็น PCM 16 บิต
  • อัตราสุ่มตัวอย่างต้องเป็น 44.1 kHz
  • จำนวนช่องต้องเป็น 2 (สเตอริโอ)

ระบบเสียงในโหมดอุปกรณ์เสริมยังไม่ได้รับการยอมรับอย่างกว้างขวางและปัจจุบันยังไม่แนะนำให้ใช้กับการออกแบบใหม่

การใช้งานระบบเสียงดิจิตอล USB

ตามชื่อที่ระบุไว้สัญญาณเสียงดิจิทัล USB จะแสดงโดยสตรีมข้อมูล ดิจิทัล แทนที่จะเป็นสัญญาณ อะนาล็อกที่ ใช้โดย ขั้วต่อชุดหูฟัง TRS mini ทั่วไป ในที่สุดสัญญาณดิจิทัลใด ๆ จะต้องถูกแปลงเป็นแอนะล็อกก่อนจึงจะได้ยิน มีข้อแลกเปลี่ยนในการเลือกตำแหน่งที่จะวาง Conversion นั้น

เรื่องราวของ DAC สองตัว

ในแผนภาพตัวอย่างด้านล่างเราเปรียบเทียบการออกแบบสองแบบ อันดับแรกเรามีอุปกรณ์พกพาที่มี Application Processor (AP), on-board DAC, เครื่องขยายเสียงและขั้วต่อ TRS แบบอะนาล็อกที่ติดอยู่กับหูฟัง นอกจากนี้เรายังพิจารณาอุปกรณ์พกพาที่มี USB เชื่อมต่อกับ USB DAC ภายนอกและเครื่องขยายเสียงรวมถึงหูฟังด้วย

การเปรียบเทียบ DAC

รูปที่ 3. การเปรียบเทียบ DAC สองตัว

ดีไซน์ไหนดีกว่ากัน? คำตอบขึ้นอยู่กับความต้องการของคุณ แต่ละคนมีข้อดีและข้อเสีย

หมายเหตุ: นี่เป็นการเปรียบเทียบเทียมเนื่องจากอุปกรณ์ Android จริงอาจมีทั้งสองตัวเลือกให้เลือกใช้

การออกแบบแรก A นั้นเรียบง่ายกว่าราคาไม่แพงใช้พลังงานน้อยลงและจะเป็นการออกแบบที่น่าเชื่อถือมากขึ้นโดยถือว่าส่วนประกอบที่มีความน่าเชื่อถือเท่าเทียมกัน อย่างไรก็ตามมักจะมีการแลกเปลี่ยนคุณภาพเสียงกับข้อกำหนดอื่น ๆ ตัวอย่างเช่นหากเป็นอุปกรณ์ในตลาดทั่วไปอาจได้รับการออกแบบมาเพื่อให้เหมาะกับความต้องการของผู้บริโภคทั่วไปไม่ใช่สำหรับผู้ฟังเพลง

ในการออกแบบที่สอง C อุปกรณ์ต่อพ่วงเสียงภายนอกสามารถออกแบบมาเพื่อคุณภาพเสียงที่สูงขึ้นและกำลังขับที่มากขึ้นโดยไม่ส่งผลกระทบต่อต้นทุนของอุปกรณ์ Android B ในตลาดมวลชนพื้นฐานใช่มันเป็นการออกแบบที่มีราคาแพงกว่า แต่ต้นทุนจะถูกดูดซับโดย ผู้ที่ต้องการ

อุปกรณ์พกพามีชื่อเสียงในเรื่องการมีแผงวงจรความหนาแน่นสูงซึ่งอาจส่งผลให้มีโอกาสมากขึ้นสำหรับการเดิน ข้าม ที่ทำให้สัญญาณอนาล็อกที่อยู่ติดกันลดลง การสื่อสารแบบดิจิทัลมีความไวต่อ เสียงรบกวน น้อยกว่าดังนั้นการย้าย DAC จากอุปกรณ์ Android A ไปยังแผงวงจรภายนอก C จะช่วยให้สามารถแยกขั้นตอนอนาล็อกขั้นสุดท้ายได้ทั้งทางกายภาพและทางไฟฟ้าจากแผงวงจรที่หนาแน่นและมีเสียงดังส่งผลให้เสียงมีความเที่ยงตรงสูงขึ้น

ในทางกลับกันการออกแบบที่สองมีความซับซ้อนมากขึ้นและด้วยความซับซ้อนที่เพิ่มเข้ามาก็มีโอกาสมากขึ้นที่สิ่งต่างๆจะล้มเหลว นอกจากนี้ยังมีเวลาแฝงเพิ่มเติมจากคอนโทรลเลอร์ USB

แอปพลิเคชันโหมดโฮสต์

แอพพลิเคชั่นเสียงโหมดโฮสต์ USB ทั่วไป ได้แก่ :

  • การฟังเพลง
  • โทรศัพท์
  • การส่งข้อความโต้ตอบแบบทันทีและการแชทด้วยเสียง
  • การบันทึก

สำหรับแอปพลิเคชันทั้งหมดเหล่านี้ Android จะตรวจพบอุปกรณ์ต่อพ่วงเสียงดิจิทัลแบบ USB ที่เข้ากันได้และกำหนดเส้นทางการเล่นและบันทึกเสียงโดยอัตโนมัติตามกฎนโยบายเสียง เล่นเนื้อหาสเตอริโอในสองช่องแรกของอุปกรณ์ต่อพ่วง

ไม่มี API เฉพาะสำหรับเสียงดิจิทัล USB สำหรับการใช้งานขั้นสูงการกำหนดเส้นทางอัตโนมัติอาจรบกวนแอพพลิเคชั่นที่รับรู้ USB สำหรับแอปพลิเคชันดังกล่าวปิดใช้งานการกำหนดเส้นทางอัตโนมัติผ่านการควบคุมที่เกี่ยวข้องในส่วนสื่อของ การตั้งค่า / ตัวเลือกสำหรับนักพัฒนา

การดีบักขณะอยู่ในโหมดโฮสต์

ขณะอยู่ในโหมดโฮสต์ USB การดีบัก adb ผ่าน USB จะใช้งานไม่ได้ ดูส่วน การใช้งาน Android Debug Bridge แบบไร้สาย สำหรับทางเลือกอื่น

การใช้งานเสียง USB

คำแนะนำสำหรับผู้จำหน่ายอุปกรณ์ต่อพ่วงเสียง

ในการทำงานร่วมกันกับอุปกรณ์ Android ผู้จำหน่ายอุปกรณ์ต่อพ่วงเสียงควร:

  • การออกแบบเพื่อให้สอดคล้องกับระดับเสียง ปัจจุบัน Android กำหนดเป้าหมายคลาส 1 แต่ควรวางแผนสำหรับคลาส 2
  • หลีกเลี่ยง นิสัยใจคอ
  • ทดสอบความสามารถในการทำงานร่วมกันโดยอ้างอิงและอุปกรณ์ Android ยอดนิยม
  • จัดทำเอกสารคุณสมบัติที่รองรับการปฏิบัติตามระดับเสียงข้อกำหนดด้านพลังงาน ฯลฯ อย่างชัดเจนเพื่อให้ผู้บริโภคสามารถตัดสินใจได้อย่างชาญฉลาด

คำแนะนำสำหรับ OEM อุปกรณ์ Android และผู้จำหน่าย SoC

ในการรองรับระบบเสียงดิจิทัลแบบ USB ผู้ผลิตอุปกรณ์ OEM และผู้จำหน่าย SoC ควร:

  • ออกแบบฮาร์ดแวร์เพื่อรองรับโหมดโฮสต์ USB
  • เปิดใช้งานการสนับสนุนโฮสต์ USB ทั่วไปในระดับเฟรมเวิร์กผ่านแฟล็กคุณลักษณะ android.hardware.usb.host.xml
  • เปิดใช้งานคุณสมบัติเคอร์เนลทั้งหมดที่จำเป็น: โหมดโฮสต์ USB, เสียง USB, โหมดถ่ายโอนแบบ isochronous; ดูการ กำหนดค่าเคอร์เนล Android
  • ติดตามข่าวสารล่าสุดเกี่ยวกับการเผยแพร่และแพตช์เคอร์เนลล่าสุด แม้จะมีเป้าหมายอันสูงส่งของการปฏิบัติตามชั้นมีอุปกรณ์ต่อพ่วงเสียงที่ยังหลงเหลืออยู่กับ นิสัยใจคอ และเมล็ดที่ผ่านมามีการแก้ไขปัญหาสำหรับนิสัยใจคอเช่น
  • เปิดใช้นโยบายเสียง USB ตามที่อธิบายไว้ด้านล่าง
  • เพิ่ม audio.usb.default ใน PRODUCT_PACKAGES ใน device.mk
  • ทดสอบความสามารถในการทำงานร่วมกันกับอุปกรณ์ต่อพ่วงเสียง USB ทั่วไป

วิธีเปิดใช้นโยบายเสียง USB

ในการเปิดใช้งานเสียง USB ให้เพิ่มรายการในไฟล์การกำหนดค่านโยบายเสียง โดยทั่วไปจะอยู่ที่นี่:

device/oem/codename/audio_policy.conf

ส่วนประกอบชื่อพา ธ "oem" ควรถูกแทนที่ด้วยชื่อของ 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
      }
    }
  }
  ...
}

รหัสแหล่งที่มา

การใช้งาน Audio Hardware Abstraction Layer (HAL) สำหรับเสียง USB อยู่ที่นี่:

hardware/libhardware/modules/usbaudio/

USB audio HAL อาศัย Tinyalsa เป็น อย่างมากซึ่งอธิบายไว้ที่ Audio Terminology แม้ว่าเสียง USB จะอาศัยการถ่ายโอนแบบไอโซโครนัส แต่สิ่งนี้ก็ถูกตัดทอนโดยการใช้งาน ALSA ดังนั้น USB audio HAL และ tinyalsa จึงไม่จำเป็นต้องกังวลกับส่วนนี้ของโปรโตคอล USB

ทดสอบเสียง USB

สำหรับข้อมูลเกี่ยวกับการทดสอบ CTS สำหรับเสียง USB โปรดดู การทดสอบตัวตรวจสอบ USB Audio CTS