Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Âm thanh kỹ thuật số USB

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

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

Sự tiếp kiến

Đối tượng mục tiêu của bài viết này là 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ế độ máy chủ 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 trên Wikipedia về USB và được định nghĩa chính thức theo các tiêu chuẩn được xuất bản bởi Diễn đàn Người 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 có thẩm quyền.

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

USB là một bus với một bộ khởi tạo hoạt động truyền dữ liệu duy nhất, đượ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 bus.

Lưu ý: Thuật ngữ thiết bịphụ kiện là từ đồng nghĩa phổ biến cho thiết bị ngoại vi . Chúng tôi tránh các 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 .

Một vai trò máy chủ quan trọng 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 sự thực hiện nhiều chức năng logic. Ví dụ: một 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 tới điểm cuối , nguồn dữ liệu hoặc bộ 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 ống: tin nhắn và đường truyền . Một đường ống thông báo được sử dụng để điều khiển hai hướng và trạng thái. Một đường ống dòng được sử dụng để truyền dữ liệu một chiều.

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

Có ba chế độ truyền dữ liệu chính: gián đoạn , hàng loạtđẳng thời. Chế độ đẳng thời sẽ được thảo luận kỹ hơn trong ngữ cảnh của â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, ngoài bản thân thiết bị ngoại vi. Bằng cách này, thiết bị ngoại vi đóng vai trò dịch chuyển 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 Android

Chế độ phát triển

Chế độ phát triển đã có mặt kể từ bản phát hành đầu tiên của Android. Thiết bị Android xuất hiện như một thiết bị ngoại vi USB với máy tính chủ chạy hệ điều hành dành cho máy tính để bàn như Linux, Mac OS X hoặc Windows. Chức năng ngoại vi duy nhất có thể nhìn thấy là Android fastboot hoặc Android Debug Bridge (adb) . Các giao thức fastboot và adb được phân lớp trên chế độ truyền dữ liệu hàng loạt 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ột máy chủ lưu trữ và hầu hết các thiết bị Android bao gồm một đầu nối micro-USB không trực tiếp cho phép hoạt động máy chủ lưu trữ, nên một bộ điều hợp on-the-go ( OTG ) thường được yêu cầu:

OTG

Hình 1. Bộ điều hợp on-the-go (OTG)

Một 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 lượng đ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ó đủ năng lượng, thời gian sạc pin của thiết bị Android có thể bị rút ngắn đáng kể. Đối với những trường hợp này, hãy sử dụng một trung tâm được cấp nguồn như sau:

Trung tâm được cung cấp năng lượng

Hình 2. Trung tâm 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. Trong 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ư một đế cắm đóng vai trò là máy chủ lưu trữ. 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 quá trình thương lượng 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ụ thể là âm thanh được mô tả bên dưới.

Âm thanh USB

Các 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 tiêu 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 với nhau mà không cần biết chi tiết về hoạt động của nhau. 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ó trình điều khiển là một từ đồng nghĩa phổ biến cho 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 một thiết bị ngoại vi như vậy mà không yêu cầu cài đặt trình điều khiển dành riêng cho hệ điều hành. Người ta có thể giả định 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" cho các hệ điều hành máy tính để bàn chính sẽ tuân theo lớp, mặc dù có thể có ngoại lệ.

Lớp âm thanh USB

Ở đây, chúng tôi 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 loại thiết bị âm thanh. Có hai phiên bản của thông số kỹ thuật lớp âm thanh USB: lớp 1 (UAC1) và 2 (UAC2).

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

USB bao gồm nhiều lớp thiết bị khác, một số lớp có thể bị nhầm lẫn với lớp âm thanh. Lớp lưu trữ chung (MSC) được sử dụng để truy cập theo hướng ngành vào phương tiện, trong khi Giao thức truyền phương tiện (MTP) dành cho truy cập toàn bộ tệp vào phương tiện. Cả MSC và MTP đều có thể được sử dụng để truyền các tệp âm thanh, nhưng chỉ lớp âm thanh USB là phù hợp để phát trực tuyến trong 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à tương tự. Tín hiệu tương tự được trình bày tại thiết bị đầu cuối đầu vào của thiết bị ngoại vi được chuyển đổi thành tín hiệu kỹ thuật số bằng bộ chuyển đổi tương tự-kỹ thuật số (ADC) và được chuyển qua giao thức USB để máy chủ sử dụng. ADC là một nguồn dữ liệu cho máy chủ. Tương tự, máy chủ sẽ gửi tín hiệu âm thanh kỹ thuật số qua giao thức USB tới thiết bị ngoại vi, nơi bộ chuyển đổi tín hiệu kỹ thuật số sang tương tự (DAC) chuyển đổi và trình bày đến thiết bị đầu cuối đầu ra tương tự. 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 đầu cuối nguồn, đầu cuối chìm hoặc cả hai. Mỗi hướng có thể có một kênh ( đơn âm ), 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 là bao gồm các kênh tráiphải , và theo cách mở rộng để diễn giải một luồng đa kênh là có các vị trí không gian tương ứng với mỗi kênh. Tuy nhiên, 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 mỗi kênh. Trong trường hợp này, ứng dụng và người dùng phải 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 các 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ó, với chi phí khắc phục lỗi. Trong 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ó xác nhận gói hoặc truyền lại trong trường hợp có lỗi.

Truyền đẳng thời xảy ra mỗi giai đoạn Start Of Frame (SOF). Chu kỳ 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 trọng lên đến 1023 byte và khung tốc độ cao mang đến 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 lý thuyết về tốc độ mẫu âm thanh kết hợp, số kênh và độ sâu bit. Giới hạn thực tế là thấp hơn.

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

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

Trong chế độ phụ thích ứng, bộ nguồn hoặc bộ chìm 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 được gọi là phản hồi ngầm), phần chìm hoặc nguồn xác định tốc độ lấy mẫu và máy chủ lưu trữ. Ư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 học (và trên thực tế 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ị nhiễu xung nhịp hơn. Ngoài ra, đồng hồ được sử dụng bởi DAC hoặc ADC có thể được thiết kế để có độ chính xác cao hơn và độ trôi thấp hơn đồng hồ chủ.

Trong chế độ phụ đồng bộ, một số byte cố định được chuyển mỗi chu kỳ SOF. Tốc độ lấy mẫu âm thanh được lấy từ đồng hồ USB. Chế độ phụ đồng bộ không thường được sử dụng 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 gian:

Chế độ phụ Đếm byte
mỗi gói
Tỷ lệ mẫu
xác định bởi
Được sử dụng cho âm thanh
thích nghi Biến đổi chủ nhà Vâng
không đồng bộ Biến đổi ngoại vi Vâ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 USB âm thanh lớp 1 (UAC1):

  • Thiết bị Android phải hoạt động như một máy chủ lưu trữ
  • Đị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 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 (đơn âm) hoặc 2 (âm thanh nổi)

Việc chấp nhận mã nguồn khuôn khổ 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, vì vậy 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) đã bổ sung hỗ trợ hạn chế để phát lại âm thanh cho máy chủ. Khi ở chế độ phụ kiện, Android sẽ tự động định tuyến đầu ra âm thanh của nó tới USB. Đó là, thiết bị Android đóng vai trò như một nguồn dữ liệu cho máy chủ lưu trữ, ví dụ như một đế cắm.

Â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 đổi thiết bị Android từ chế độ phát triển sang chế độ phụ kiện, sau đó máy chủ phải chuyển dữ liệu âm thanh từ điểm cuối thích hợp. Vì vậy, 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 , được thể hiện liên quan đến 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 chấp nhận rộng rãi và hiện không được khuyến nghị cho các thiết kế mới.

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

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

Câu chuyện về hai DAC

Trong sơ đồ ví dụ dưới đây, 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 với Bộ xử lý ứng dụng (AP), DAC tích hợp, bộ khuếch đại và đầu nối TRS tương tự đượ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 và bộ khuếch đại bên ngoài, cũng với 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 tùy 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 có thể có sẵn cả hai tùy chọn.

Thiết kế đầu tiên A đơ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à một thiết kế đáng tin cậy hơn với giả định là các thành phần đáng tin cậy như nhau. Tuy nhiên, thường có sự cân bằng chất lượng âm thanh so với các yêu cầu khác. Ví dụ, nếu đây là một 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 phổ thông, không phải dành cho những 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 chi phí của thiết bị Android cơ bản trên thị trường đại chúng B. Vâng, đó là một thiết kế đắt tiền hơn, nhưng chi phí chỉ bằng 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 cho 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, vì vậy việc chuyển DAC từ thiết bị Android A sang bảng mạch bên ngoài C cho phép các giai đoạn tương tự cuối cùng được cách ly về mặt vật lý và điện khỏi bảng mạch dày đặc và ồn ào, dẫn đến â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à với sự phức tạp ngày càng tăng sẽ tạo ra nhiều cơ hội để mọi thứ không thành công hơn. Ngoài ra còn có thêm độ trễ từ bộ điều khiển USB.

Các ứ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 nhanh và trò chuyện thoại
  • ghi âm

Đối với tất cả các ứng dụng này, Android 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 về 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 nào dành riêng cho âm thanh kỹ thuật số USB. Để sử dụng nâng cao, định tuyến tự động có thể gây trở ngại cho 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 Phương tiện 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, 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 để có giải pháp thay thế.

Triển khai âm thanh USB

Đề xuất cho các nhà cung cấp thiết bị ngoại vi âm thanh

Để hoạt động với nhau với các thiết bị Android, các nhà cung cấp thiết bị ngoại vi âm thanh phải:

  • thiết kế tuân thủ lớp âm thanh; hiện tại Android nhắm mục tiêu vào lớp 1, nhưng bạn nên lên 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 phổ biến và tham chiếu
  • tài liệu rõ ràng về các tính năng được hỗ trợ, tuân thủ lớp â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 cho OEM thiết bị Android và nhà cung cấp SoC

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

  • thiết kế phần cứng để hỗ trợ chế độ máy chủ USB
  • bật hỗ trợ máy chủ lưu trữ 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 hạt nhân cần thiết: chế độ máy chủ USB, âm thanh USB, chế độ truyền đồng bộ; xem Cấu hình hạt nhân Android
  • luôn cập nhật các bản vá và bản phát hành hạt nhân gần đây; mặc dù mục tiêu cao quý của việc 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ều kỳ quặc và các hạt nhân gần đây có những giải pháp thay thế cho những điều kỳ quặc như vậy
  • 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

Cách bậ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. Cái 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 nhập 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

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 chủ yếu dựa vào tinyalsa , được mô tả tại Thuật ngữ âm thanh . Mặc dù âm thanh USB phụ thuộc vào truyền đẳng thời, nhưng điều này sẽ bị loại bỏ bởi việc triển khai ALSA. Vì vậy, USB audio HAL và tinyalsa 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 .