Bài viết này xem xét 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 sự 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ủ 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 Wikipedia USB 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 xuất bản. Để thuận tiện, chúng tôi tóm tắt các khái niệm USB chính ở đâ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 duy nhất 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ị và phụ kiện là những 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 .
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 biểu thị 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ụ: 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 dẫn đến điểm cuối , nguồn dữ liệu hoặc phần chứa đượ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: message và stream . 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 và đầu ra được biểu thị tương ứng với máy chủ. Hoạt động đầu vào chuyển dữ liệu từ thiết bị ngoại vi sang máy chủ, trong khi hoạt động đầ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 và đẳng thời. Chế độ đẳng thời sẽ được thảo luận thêm trong ngữ 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, ngoài chính thiết bị ngoại vi. Theo cách này, thiết bị ngoại vi dùng để 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 chức năng.
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 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 xếp 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 đóng vai trò là máy chủ lưu trữ 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ộ điều hợp di động ( OTG ) như thế này:

Hình 1. Bộ chuyển đổi khi đang di chuyển (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 mức năng lượ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, quá trình sạc pin của thiết bị Android có thể bị rút ngắn đáng kể. Đối với những tình huống này, hãy sử dụng một trung tâm hỗ trợ như sau:

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ư đế cắm đó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ụ thể là âm thanh được mô tả bên dưới.
âm thanh USB
lớp học 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 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 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 lớp thiết bị âm thanh. Có hai phiên bản của đặc tả loại âm thanh USB: loại 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ố 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 phương tiện theo định hướng ngành, trong khi Giao thức truyền 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 các tệp âm thanh, nhưng chỉ có loại âm thanh USB là phù hợp để truyền trực tuyến 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à dạng tương tự. 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ủ tiêu thụ. 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 tới đầu ra đầ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 ( 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 diễn giải luồng âm thanh nổi bao gồm các kênh trái và phải và bằng cách mở rộng để diễn giải luồng đa kênh là có các vị trí không gian tương ứng với từng kênh. Tuy nhiên, nó cũng khá phù hợp (đặc biệt đố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, tùy thuộc vào ứng dụng và người dùng để 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ới 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ó, với chi phí khôi phục lỗi. Ở chế độ đẳng thời, băng thông được đảm bảo và các 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.
Quá trình truyền đẳng thời diễn ra trong mỗi khoảng thời gian Bắt đầu khung hình (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. Đặt chúng 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 theo lý thuyết đối với tốc độ lấy mẫu âm thanh kết hợp, số 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, phần chìm ngoại vi hoặc nguồn thích ứng với tốc độ mẫu có khả năng 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), phần chìm hoặc nguồn xác định tốc độ 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 (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. Khoảng cách gần này có nghĩa là chế độ phụ không đồng bộ sẽ ít nhạy cảm hơn với hiện tượng giật đồng hồ. 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à độ 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 mỗi khoảng thời gian 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 xác định bởi | 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 số tính năng USB audio class 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 trái trong các bit quan trọng nhất của từ 32 bit
- Tốc độ lấy 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)
Xem kỹ mã nguồn khung Android có thể hiển thị mã bổ sung ngoài 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 yêu cầu.
chế độ phụ kiện
Android 4.1 (API cấp 16) đã thêm 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. Nghĩa là, thiết bị Android đóng vai trò là nguồn dữ liệu cho máy chủ, chẳng hạn 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áy chủ có kiến thức. Máy chủ này trước tiên 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 , được biểu thị liên quan đến máy chủ lưu trữ
- Định dạng âm thanh phải là PCM 16 bit
- Tốc độ lấy 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 USB âm thanh kỹ thuật số
Như tên gọi, 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ố thay vì tín hiệu tương tự đượ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 kỹ thuật số nào cũng phải được chuyển đổi thành tín hiệu tương tự trước khi có thể nghe được. Có sự đánh đổi trong việc 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ế. Trước tiên, chúng tôi 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 như với tai nghe.

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 phép so sánh nhân tạo, vì một thiết bị Android thực có thể sẽ 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 các thành phần đáng tin cậy như nhau. Tuy nhiên, thường có sự cân bằng về 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 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á của thiết bị Android B dành cho 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ể dẫn đến nhiều cơ hội nhiễu xuyên âm hơn 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 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 từ 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 độ phức tạp tăng thêm sẽ có nhiều cơ hội hơn 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ủ lưu trữ USB điển hình bao gồm:
- nghe nhạc
- điện thoại
- nhắn tin tức thì 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 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 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ể ả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 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ủ lưu trữ 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
Đề xuất cho các nhà cung cấp thiết bị ngoại vi âm thanh
Để tương tác với các thiết bị Android, các 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 nhắm mục tiêu lớp 1, nhưng bạn nên 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 khảo và phổ biến
- 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, 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ủ lưu trữ USB chung ở cấp khung thông qua cờ tính năng
android.hardware.usb.host.xml
- bậ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 phát hành và bản vá kernel gần đây; mặc dù mục tiêu cao cả là tuân thủ lớp, nhưng vẫn có những thiết bị ngoại vi âm thanh có những điểm kỳ quặc và các nhân gần đây có giải pháp thay thế cho 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
Cách bật chính sách âm thanh USB
Để bật âm thanh USB, hãy thêm một mục vào tệp cấu hình chính sách âm thanh. Điều này thường được đặt ở đâ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 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 quá trình truyền đẳng thời, nhưng điều này được trừu tượng hóa bằng cách triển khai ALSA. Vì vậy, âm thanh USB 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 .