Âm thanh kỹ thuật số USB

Bài viết này đánh giá khả năng hỗ trợ của Android đối với âm thanh kỹ thuật số USB và các giao thức dựa trên USB có liên quan.

Khán giả

Đối tượng mục tiêu của bài viết này là các OEM thiết bị Android, nhà cung cấp SoC, nhà cung cấp thiết bị ngoại vi âm thanh USB, nhà phát triển ứng dụng âm thanh nâng cao và những người khác đang tìm kiếm hiểu biết chi tiết về nội bộ âm thanh kỹ thuật số USB trên Android.

Thay vào đó, người dùng cuối của thiết bị Nexus nên xem bài viết Ghi và phát lại âm thanh bằng chế độ lưu trữ USB tại Trung tâm trợ giúp Nexus . Mặc dù bài viết này không hướng tới người dùng cuối nhưng một số người tiêu dùng audiophile nhất định có thể tìm thấy những phần quan tâm.

Tổng quan về USB

Universal Serial Bus (USB) được mô tả không chính thức trong bài viết USB trên Wikipedia và được xác định chính thức theo các tiêu chuẩn do Diễn đàn triển khai USB, Inc. Để thuận tiện, chúng tôi tóm tắt các khái niệm chính về USB ở đây, nhưng các tiêu chuẩn là tài liệu tham khảo chính thức.

Các khái niệm và thuật ngữ cơ bản

USB là một bus có một thiết bị khởi tạo duy nhất cho các hoạt động truyền dữ liệu, được gọi là máy chủ . Máy chủ giao tiếp với các thiết bị ngoại vi thông qua xe buýt.

Lưu ý: Thuật ngữ thiết bịphụ kiện là những từ đồng nghĩa phổ biến với thiết bị ngoại vi . Chúng tôi tránh những thuật ngữ đó ở đây vì chúng có thể bị nhầm lẫn với thiết bị Android hoặc khái niệm dành riêng cho Android được gọi là chế độ phụ kiện .

Vai trò quan trọng của máy chủ là liệt kê : quá trình phát hiện thiết bị ngoại vi nào được kết nối với bus và truy vấn các thuộc tính của chúng được thể hiện thông qua bộ mô tả .

Một thiết bị ngoại vi có thể là một đối tượng vật lý nhưng thực tế lại thực hiện nhiều chức năng logic. Ví dụ: thiết bị ngoại vi webcam có thể có cả chức năng camera và chức năng âm thanh micrô.

Mỗi chức năng ngoại vi có một giao diện xác định giao thức để giao tiếp với chức năng đó.

Máy chủ giao tiếp với thiết bị ngoại vi qua đường ống đến điểm cuối , nguồn dữ liệu hoặc phần chìm được cung cấp bởi một trong các chức năng của thiết bị ngoại vi.

Có hai loại ống: tin nhắnluồng . Một ống thông báo được sử dụng để điều khiển và trạng thái hai chiều. Một đường ống luồng được sử dụng để truyền dữ liệu một chiều.

Máy chủ bắt đầu tất cả quá trình truyền dữ liệu, do đó các thuật ngữ đầu vàođầu ra được thể hiện tương ứng với máy chủ. Thao tác đầu vào chuyển dữ liệu từ thiết bị ngoại vi sang máy chủ, trong khi thao tác đầu ra chuyển dữ liệu từ máy chủ sang thiết bị ngoại vi.

Có ba chế độ truyền dữ liệu chính: ngắt , số lượng lớnđẳng thời . Chế độ đẳng thời sẽ được thảo luận thêm trong bối cảnh âm thanh.

Thiết bị ngoại vi có thể có các thiết bị đầu cuối kết nối với thế giới bên ngoài, bên ngoài chính thiết bị ngoại vi. Bằng cách này, thiết bị ngoại vi phục vụ việc dịch giữa giao thức USB và tín hiệu "thế giới thực". Các thiết bị đầu cuối là các đối tượng logic của hàm.

Chế độ USB của Android

Chế độ phát triển

Chế độ phát triển đã có mặt kể từ lần phát hành đầu tiên của Android. Thiết bị Android xuất hiện dưới dạng thiết bị ngoại vi USB cho PC chủ chạy hệ điều hành máy tính để bàn như Linux, Mac OS X hoặc Windows. Chức năng ngoại vi hiển thị duy nhất là Android fastboot hoặc Android Debug Bridge (adb) . Các giao thức fastboot và adb được xếp lớp trên chế độ truyền dữ liệu hàng loạt qua USB.

Chế độ máy chủ

Chế độ máy chủ được giới thiệu trong Android 3.1 (API cấp 12).

Vì thiết bị Android phải hoạt động như máy chủ và hầu hết các thiết bị Android đều có đầu nối micro-USB không trực tiếp cho phép hoạt động của máy chủ nên thường cần có bộ chuyển đổi khi đang di chuyển ( OTG ) như thế này:

otg

Hình 1. Bộ chuyển đổi khi đang di chuyển (OTG)

Thiết bị Android có thể không cung cấp đủ năng lượng để vận hành một thiết bị ngoại vi cụ thể, tùy thuộc vào mức điện năng mà thiết bị ngoại vi cần và khả năng cung cấp của thiết bị Android. Ngay cả khi có đủ nguồn điện, thời gian sạc pin của thiết bị Android có thể được rút ngắn đáng kể. Đối với những trường hợp này, hãy sử dụng hub được cấp nguồn như thế này:

Trung tâm hỗ trợ

Hình 2. Hub được cấp nguồn

Chế độ phụ kiện

Chế độ phụ kiện đã được giới thiệu trong Android 3.1 (API cấp 12) và được chuyển ngược sang Android 2.3.4. Ở chế độ này, thiết bị Android hoạt động như một thiết bị ngoại vi USB, dưới sự điều khiển của một thiết bị khác, chẳng hạn như đế đóng vai trò là máy chủ. Sự khác biệt giữa chế độ phát triển và chế độ phụ kiện là các chức năng USB bổ sung được hiển thị cho máy chủ, ngoài adb. Thiết bị Android bắt đầu ở chế độ phát triển và sau đó chuyển sang chế độ phụ kiện thông qua quy trình đàm phán lại.

Chế độ phụ kiện đã được mở rộng với các tính năng bổ sung trong Android 4.1, đặc biệt là âm thanh được mô tả bên dưới.

âm thanh USB

lớp USB

Mỗi chức năng ngoại vi có một tài liệu lớp thiết bị liên quan chỉ định giao thức chuẩn cho chức năng đó. Điều này cho phép các máy chủ tuân thủ lớp và các chức năng ngoại vi hoạt động cùng nhau mà không cần có kiến ​​thức chi tiết về hoạt động của nhau. Việc tuân thủ lớp là rất quan trọng nếu máy chủ và thiết bị ngoại vi được cung cấp bởi các thực thể khác nhau.

Thuật ngữ không cần trình điều khiển là từ đồng nghĩa phổ biến với tuân thủ lớp , chỉ ra rằng có thể sử dụng các tính năng tiêu chuẩn của thiết bị ngoại vi đó mà không cần cài đặt trình điều khiển cụ thể của hệ điều hành. Người ta có thể cho rằng một thiết bị ngoại vi được quảng cáo là "không cần trình điều khiển" dành cho các hệ điều hành máy tính để bàn chính sẽ tuân thủ lớp, mặc dù có thể có những trường hợp ngoại lệ.

Lớp âm thanh USB

Ở đây chúng ta chỉ quan tâm đến các thiết bị ngoại vi thực hiện các chức năng âm thanh và do đó tuân theo lớp thiết bị âm thanh. Có hai phiên bản đặc tả lớp âm thanh USB: lớp 1 (UAC1) và lớp 2 (UAC2).

So sánh với các lớp khác

USB bao gồm nhiều loại thiết bị khác, một số trong đó có thể bị nhầm lẫn với lớp âm thanh. Lớp lưu trữ dung lượng lớn (MSC) được sử dụng để truy cập theo định hướng ngành vào phương tiện, trong khi Giao thức truyền tải phương tiện (MTP) dành cho quyền truy cập tệp đầy đủ vào phương tiện. Cả MSC và MTP đều có thể được sử dụng để truyền tệp âm thanh nhưng chỉ loại âm thanh USB mới phù hợp để truyền phát theo thời gian thực.

Thiết bị đầu cuối âm thanh

Các thiết bị đầu cuối của thiết bị ngoại vi âm thanh thường là analog. Tín hiệu tương tự được trình bày ở đầu vào của thiết bị ngoại vi được chuyển đổi thành kỹ thuật số bằng bộ chuyển đổi tương tự sang số (ADC) và được truyền qua giao thức USB để máy chủ sử dụng. ADC là nguồn dữ liệu cho máy chủ. Tương tự, máy chủ gửi tín hiệu âm thanh kỹ thuật số qua giao thức USB đến thiết bị ngoại vi, nơi bộ chuyển đổi kỹ thuật số sang tương tự (DAC) chuyển đổi và trình bày thành thiết bị đầu cuối đầu ra analog. DAC là một bồn rửa cho máy chủ.

Kênh truyền hình

Thiết bị ngoại vi có chức năng âm thanh có thể bao gồm thiết bị đầu cuối nguồn, thiết bị đầu cuối chìm hoặc cả hai. Mỗi hướng có thể có một kênh ( mono ), hai kênh ( âm thanh nổi ) hoặc nhiều hơn. Thiết bị ngoại vi có nhiều hơn hai kênh được gọi là đa kênh . Người ta thường hiểu một luồng âm thanh nổi bao gồm các kênh tráiphải và bằng cách mở rộng để hiểu một luồng đa kênh có các vị trí không gian tương ứng với mỗi kênh. Tuy nhiên, cũng khá thích hợp (đặc biệt là đối với âm thanh USB hơn HDMI ) để không gán bất kỳ ý nghĩa không gian tiêu chuẩn cụ thể nào cho từng kênh. Trong trường hợp này, ứng dụng và người dùng có quyền xác định cách sử dụng từng kênh. Ví dụ: luồng đầu vào USB bốn kênh có thể có ba kênh đầu tiên được gắn vào nhiều micrô khác nhau trong phòng và kênh cuối cùng nhận đầu vào từ đài AM.

Chế độ truyền đẳng thời

Âm thanh USB sử dụng chế độ truyền đẳng thời cho các đặc tính thời gian thực của nó, tuy nhiên phải khắc phục lỗi. Ở chế độ đẳng thời, băng thông được đảm bảo và lỗi truyền dữ liệu được phát hiện bằng cách sử dụng kiểm tra dự phòng theo chu kỳ (CRC). Nhưng không có sự thừa nhận hoặc truyền lại gói trong trường hợp có lỗi.

Quá trình truyền đồng bộ xảy ra trong mỗi khoảng thời gian Bắt đầu Khung (SOF). Khoảng thời gian SOF là một mili giây đối với tốc độ tối đa và 125 micro giây đối với tốc độ cao. Mỗi khung tốc độ đầy đủ mang tới 1023 byte tải trọng và khung tốc độ cao mang tới 1024 byte. Kết hợp những thứ này lại với nhau, chúng tôi tính toán tốc độ truyền tối đa là 1.023.000 hoặc 8.192.000 byte mỗi giây. Điều này đặt giới hạn trên về mặt lý thuyết đối với tốc độ mẫu âm thanh kết hợp, số lượng kênh và độ sâu bit. Giới hạn thực tế thấp hơn.

Trong chế độ đẳng thời, có ba chế độ phụ:

  • Thích ứng
  • Không đồng bộ
  • Đồng bộ

Trong chế độ phụ thích ứng, nguồn hoặc bồn ngoại vi thích ứng với tốc độ mẫu có thể thay đổi của máy chủ.

Trong chế độ phụ không đồng bộ (còn gọi là phản hồi ngầm), bộ thu hoặc nguồn xác định tốc độ mẫu và máy chủ sẽ điều chỉnh. Ưu điểm lý thuyết chính của chế độ phụ không đồng bộ là đồng hồ USB nguồn hoặc chìm gần hơn về mặt vật lý và điện (và thực sự có thể giống hoặc bắt nguồn từ) đồng hồ điều khiển DAC hoặc ADC. Sự gần gũi này có nghĩa là chế độ phụ không đồng bộ sẽ ít bị ảnh hưởng bởi xung nhịp hơn. Ngoài ra, đồng hồ được DAC hoặc ADC sử dụng có thể được thiết kế để có độ chính xác cao hơn và độ lệch thấp hơn so với đồng hồ chủ.

Trong chế độ phụ đồng bộ, một số byte cố định được truyền trong mỗi chu kỳ SOF. Tốc độ mẫu âm thanh được lấy một cách hiệu quả từ đồng hồ USB. Chế độ phụ đồng bộ không được sử dụng phổ biến với âm thanh vì cả máy chủ và thiết bị ngoại vi đều phụ thuộc vào đồng hồ USB.

Bảng dưới đây tóm tắt các chế độ phụ đẳng thời:

Chế độ phụ Số byte
mỗi gói
Tỷ lệ mẫu
được xác định bởi
Dùng cho âm thanh
thích nghi Biến đổi chủ nhà Đúng
không đồng bộ Biến đổi ngoại vi Đúng
đồng bộ đã sửa đồng hồ USB KHÔNG

Trong thực tế, chế độ phụ tất nhiên là quan trọng nhưng các yếu tố khác cũng cần được xem xét.

Hỗ trợ Android cho lớp âm thanh USB

Chế độ phát triển

Âm thanh USB không được hỗ trợ trong chế độ phát triển.

Chế độ máy chủ

Android 5.0 (API cấp 21) trở lên hỗ trợ một tập hợp con các tính năng của âm thanh USB loại 1 (UAC1):

  • Thiết bị Android phải đóng vai trò là máy chủ
  • Định dạng âm thanh phải là PCM (loại giao diện I)
  • Độ sâu bit phải là 16 bit, 24 bit hoặc 32 bit trong đó 24 bit dữ liệu âm thanh hữu ích được căn đều bên trái trong các bit quan trọng nhất của từ 32 bit
  • Tốc độ mẫu phải là 48, 44,1, 32, 24, 22,05, 16, 12, 11,025 hoặc 8 kHz
  • Số kênh phải là 1 (mono) hoặc 2 (stereo)

Việc xem xét kỹ mã nguồn khung Android có thể hiển thị mã bổ sung vượt quá mức tối thiểu cần thiết để hỗ trợ các tính năng này. Nhưng mã này chưa được xác thực nên các tính năng nâng cao hơn vẫn chưa được xác nhận.

Chế độ phụ kiện

Android 4.1 (API cấp 16) đã thêm hỗ trợ hạn chế cho việc phát lại âm thanh trên máy chủ. Khi ở chế độ phụ kiện, Android sẽ tự động định tuyến đầu ra âm thanh tới USB. Nghĩa là, thiết bị Android đóng vai trò là nguồn dữ liệu cho máy chủ, ví dụ như một dock.

Âm thanh ở chế độ phụ kiện có các tính năng sau:

  • Thiết bị Android phải được điều khiển bởi một máy chủ có kiến ​​thức, trước tiên máy chủ này có thể chuyển thiết bị Android từ chế độ phát triển sang chế độ phụ kiện, sau đó máy chủ phải truyền dữ liệu âm thanh từ điểm cuối thích hợp. Do đó, thiết bị Android không xuất hiện "không có trình điều khiển" đối với máy chủ.
  • Hướng phải được nhập vào , thể hiện tương ứng với máy chủ
  • Định dạng âm thanh phải là PCM 16 bit
  • Tốc độ mẫu phải là 44,1 kHz
  • Số kênh phải là 2 (âm thanh nổi)

Âm thanh ở chế độ phụ kiện chưa được áp dụng rộng rãi và hiện không được khuyến nghị cho các thiết kế mới.

Ứng dụng của âm thanh kỹ thuật số USB

Đúng như tên gọi, tín hiệu âm thanh kỹ thuật số USB được thể hiện bằng luồng dữ liệu kỹ thuật số chứ không phải tín hiệu analog được sử dụng bởi đầu nối tai nghe mini TRS thông thường. Cuối cùng, bất kỳ tín hiệu số nào cũng phải được chuyển đổi sang tín hiệu tương tự trước khi có thể nghe được. Có sự cân bằng trong việc chọn nơi thực hiện chuyển đổi đó.

Câu chuyện về hai DAC

Trong sơ đồ ví dụ bên dưới, chúng tôi so sánh hai thiết kế. Đầu tiên chúng ta có một thiết bị di động có Bộ xử lý ứng dụng (AP), DAC tích hợp, bộ khuếch đại và đầu nối TRS analog được gắn vào tai nghe. Chúng tôi cũng xem xét một thiết bị di động có USB được kết nối với USB DAC bên ngoài và bộ khuếch đại, cũng như tai nghe.

so sánh DAC

Hình 3. So sánh hai DAC

Thiết kế nào tốt hơn? Câu trả lời phụ thuộc vào nhu cầu của bạn. Mỗi người đều có những ưu điểm cũng như những khuyết điểm.

Lưu ý: Đây là một so sánh giả tạo vì một thiết bị Android thực sự có thể sẽ có sẵn cả hai tùy chọn.

Thiết kế A đầu tiên đơn giản hơn, ít tốn kém hơn, sử dụng ít năng lượng hơn và sẽ là thiết kế đáng tin cậy hơn nếu giả sử các thành phần có độ tin cậy tương đương. Tuy nhiên, chất lượng âm thanh thường có sự cân bằng so với các yêu cầu khác. Ví dụ: nếu đây là thiết bị dành cho thị trường đại chúng, nó có thể được thiết kế để phù hợp với nhu cầu của người tiêu dùng nói chung chứ không phải dành cho người đam mê âm thanh.

Trong thiết kế thứ hai, thiết bị ngoại vi âm thanh bên ngoài C có thể được thiết kế để có chất lượng âm thanh cao hơn và công suất đầu ra lớn hơn mà không ảnh hưởng đến giá thành của thiết bị Android B trên thị trường đại chúng cơ bản. Đúng, đây là một thiết kế đắt tiền hơn nhưng chi phí chỉ được hấp thụ bởi những người muốn nó.

Các thiết bị di động nổi tiếng là có bảng mạch mật độ cao, điều này có thể tạo ra nhiều cơ hội xảy ra nhiễu xuyên âm làm suy giảm các tín hiệu tương tự lân cận. Giao tiếp kỹ thuật số ít bị nhiễu hơn, do đó, việc di chuyển DAC từ thiết bị Android A sang bảng mạch ngoài C cho phép các tầng analog cuối cùng được cách ly về mặt vật lý và điện với bảng mạch dày đặc và ồn ào, mang lại âm thanh có độ trung thực cao hơn.

Mặt khác, thiết kế thứ hai phức tạp hơn và độ phức tạp tăng thêm sẽ tạo ra nhiều cơ hội cho mọi thứ thất bại. Ngoài ra còn có độ trễ bổ sung từ bộ điều khiển USB.

Ứng dụng chế độ máy chủ

Các ứng dụng âm thanh ở chế độ máy chủ USB điển hình bao gồm:

  • nghe nhạc
  • điện thoại
  • nhắn tin tức thời và trò chuyện bằng giọng nói
  • ghi âm

Đối với tất cả các ứng dụng này, Android sẽ phát hiện thiết bị ngoại vi âm thanh kỹ thuật số USB tương thích và tự động định tuyến phát lại và thu âm thanh một cách thích hợp, dựa trên các quy tắc chính sách âm thanh. Nội dung âm thanh nổi được phát trên hai kênh đầu tiên của thiết bị ngoại vi.

Không có API cụ thể cho âm thanh kỹ thuật số USB. Để sử dụng nâng cao, định tuyến tự động có thể ảnh hưởng đến các ứng dụng nhận biết USB. Đối với các ứng dụng như vậy, hãy tắt định tuyến tự động thông qua điều khiển tương ứng trong phần Media của Cài đặt/Tùy chọn nhà phát triển .

Gỡ lỗi khi ở chế độ máy chủ

Khi ở chế độ máy chủ USB, tính năng gỡ lỗi adb qua USB không khả dụng. Xem phần Sử dụng không dây của Cầu gỡ lỗi Android để biết giải pháp thay thế.

Triển khai âm thanh USB

Khuyến nghị dành cho nhà cung cấp thiết bị ngoại vi âm thanh

Để tương tác với các thiết bị Android, nhà cung cấp thiết bị ngoại vi âm thanh nên:

  • thiết kế để tuân thủ lớp âm thanh; hiện tại Android đang nhắm mục tiêu vào lớp 1, nhưng sẽ là khôn ngoan nếu lập kế hoạch cho lớp 2
  • tránh những điều kỳ quặc
  • kiểm tra khả năng tương tác với các thiết bị Android tham chiếu và phổ biến
  • ghi rõ ràng các tính năng được hỗ trợ, tuân thủ loại âm thanh, yêu cầu về nguồn điện, v.v. để người tiêu dùng có thể đưa ra quyết định sáng suốt

Đề xuất dành cho nhà cung cấp OEM và SoC thiết bị Android

Để hỗ trợ âm thanh kỹ thuật số USB, các OEM thiết bị và nhà cung cấp SoC nên:

  • thiết kế phần cứng để hỗ trợ chế độ máy chủ USB
  • bật hỗ trợ máy chủ USB chung ở cấp khung thông qua cờ tính năng android.hardware.usb.host.xml
  • kích hoạt tất cả các tính năng kernel cần thiết: chế độ máy chủ USB, âm thanh USB, chế độ truyền đẳng thời; xem Cấu hình hạt nhân Android
  • cập nhật các bản vá và bản phát hành kernel gần đây; bất chấp mục tiêu cao cả là tuân thủ lớp học, vẫn có những thiết bị ngoại vi âm thanh tồn tại với những điểm kỳ quặc và các hạt nhân gần đây có cách giải quyết những điểm kỳ quặc đó
  • bật chính sách âm thanh USB như được mô tả bên dưới
  • thêm audio.usb.default vào product_PACKAGES trong device.mk
  • kiểm tra khả năng tương tác với các thiết bị ngoại vi âm thanh USB phổ biến

Kích hoạt chính sách âm thanh USB

Để bật âm thanh USB, hãy thêm mục nhập vào tệp cấu hình chính sách âm thanh. Điều này thường nằm ở đây:

device/oem/codename/audio_policy.conf

Thành phần tên đường dẫn "oem" phải được thay thế bằng tên của OEM sản xuất thiết bị Android và "tên mã" phải được thay thế bằng tên mã thiết bị.

Một mục ví dụ được hiển thị ở đây:

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
      }
    }
  }
  ...
}

Mã nguồn

Việc triển khai Lớp trừu tượng phần cứng âm thanh (HAL) cho âm thanh USB được đặt tại đây:

hardware/libhardware/modules/usbaudio/

HAL âm thanh USB phụ thuộc rất nhiều vào tinalsa , được mô tả tại Thuật ngữ âm thanh . Mặc dù âm thanh USB phụ thuộc vào quá trình truyền đẳng thời, nhưng điều này bị loại bỏ nhờ triển khai ALSA. Vì vậy, âm thanh USB HAL và tinalsa không cần quan tâm đến phần này của giao thức USB.

Kiểm tra âm thanh USB

Để biết thông tin về kiểm tra CTS cho âm thanh USB, hãy xem Kiểm tra trình xác minh CTS âm thanh USB .