Bài viết này xem xét tính năng hỗ trợ âm thanh kỹ thuật số USB trên Android và các nội dung liên quan Giao thức dựa trên USB.
Đối tượng người xem
Đố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 hiểu chi tiết về các bộ phận âm thanh kỹ thuật số USB trên Android.
Người dùng cuối của thiết bị Nexus sẽ thấy bài viết này Ghi và phát lại âm thanh bằng chế độ hỗ trợ USB ở Thay vào đó, hãy truy cập vào Trung tâm trợ giúp của Nexus. Mặc dù bài viết này không dành cho người dùng cuối, một số người tiêu dùng đam mê âm thanh có thể tìm thấy những phần họ 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 USB, và được xác định chính thức theo các tiêu chuẩn do USB Implementers Forum, 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 tiêu chuẩn là tài liệu tham khảo có căn cứ đáng tin.
Các khái niệm và thuật ngữ cơ bản
USB là một bus thông qua một trình khởi tạo duy nhất cho hoạt động chuyển dữ liệu, được gọi là máy chủ lưu trữ. Máy chủ lưu trữ giao tiếp với thiết bị ngoại vi thông qua xe buýt.
Lưu ý: Các cụm từ thiết bị và phụ kiện là các từ đồng nghĩa phổ biến với thiết bị ngoại vi. Chúng tôi tránh sử dụng 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ò người tổ chức quan trọng là dữ liệu 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 thuộc tính được thể hiện qua các chỉ số mô tả.
Thiết bị ngoại vi có thể là một vật thể nhưng thực tế triển khai nhiều hàm logic. Ví dụ: một thiết bị ngoại vi webcam có thể vừa có chức năng camera vừa có chức năng chức năng âm thanh của 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 hàm đó.
Máy chủ giao tiếp với thiết bị ngoại vi qua dấu sổ thẳng đến một điểm cuối, một nguồn dữ liệu hoặc bồn lưu trữ dữ liệu do một trong các chức năng của thiết bị ngoại vi cung cấp.
Có hai loại đường dẫn: thông báo và luồng. Một ống thông báo được dùng để điều khiển hai chiều và kiểm soát trạng thái. Một ống luồng được dùng để chuyển dữ liệu một chiều.
Máy chủ bắt đầu tất cả các hoạt động chuyể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ủ. Thao tác đầu vào sẽ truyền dữ liệu từ thiết bị ngoại vi đến máy chủ, trong khi thao tác đầu ra truyền dữ liệu từ máy chủ sang thiết bị ngoại vi.
Có 3 chế độ chuyển dữ liệu chính: gián đoạn, hàng loạt và đồ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, ra ngoài chính thiết bị ngoại vi. Bằng cách này, thiết bị ngoại vi sẽ phân phát để dịch giữa giao thức USB và "thế giới thực" tín hiệu. Các đầu cuối là đối tượng logic của hàm.
Chế độ USB trên Android
Chế độ phát triển
Chế độ phát triển đã có mặt kể từ bản phát hành Android đầu tiên. Thiết bị Android xuất hiện dưới dạng thiết bị ngoại vi USB đến máy tính lưu trữ 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à Khởi động nhanh trên Android hoặc Cầu gỡ lỗi Android (adb). Các giao thức khởi động nhanh và adb được xếp lớp trên chế độ chuyển dữ liệu hàng loạt qua USB.
Chế độ máy chủ lưu trữ
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ó trình kết nối micro-USB không trực tiếp cho phép thao tác trên máy chủ, bộ chuyển đổi khi di chuyển (OTG) chẳng hạn như yêu cầu:
Thiết bị Android có thể không cung cấp đủ điện năng để vận hành thiết bị ngoại vi cụ thể, tuỳ thuộc vào nhu cầu của thiết bị ngoại vi đó, và thiết bị Android có thể cung cấp đến mức nào. Ngay cả khi có đủ điện năng, mức 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 trung tâm như sau:
Chế độ phụ kiện
Chế độ phụ kiện ra mắt trong Android 3.1 (API cấp 12) và được điều chỉnh cho phiên bản cũ là 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ự kiểm soát 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 hiển thị với máy chủ, ngoài adb. Thiết bị Android bắt đầu ở chế độ phát triển, sau đó chuyển đổi sang chế độ phụ kiện thông qua quy 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, âm thanh cụ thể được mô tả dưới đây.
Âm thanh USB
Lớp USB
Mỗi chức năng ngoại vi đều có một tài liệu về lớp thiết bị được liên kết để chỉ định giao thức chuẩn cho hàm đó. Nhờ vậy, các máy chủ và chức năng ngoại vi tuân thủ chuẩn lớp phối hợp hoạt động mà không cần biết chi tiết về hoạt động của nhau. Sự tuân thủ của lớp là rất quan trọng nếu máy chủ lưu trữ 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ó người lái xe là một từ đồng nghĩa phổ biến của tuân thủ lớp, điều này cho thấy rằng họ 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 đến hệ điều hành cụ thể trình điều khiển cần được cài đặt. Một thiết bị 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" dành cho hệ điều hành máy tính chính sẽ tuân thủ 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 triển khai các chức năng âm thanh và do đó tuân thủ lớp thiết bị âm thanh. Có hai Các 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. Chiến lược phát hành đĩa đơn lớp bộ nhớ khối lượng lớn (MSC) được dùng cho quyền truy cập vào phương tiện truyền thông theo khu vực, trong khi Giao thức truyền nội dung nghe nhìn (MTP) dành cho quyền truy cập tệp đầy đủ vào nội dung nghe nhìn. Cả MSC và MTP đều có thể được dùng để truyền các tệp âm thanh, nhưng chỉ có lớp âm thanh USB mới 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 cực của thiết bị ngoại vi âm thanh thường là đầu nối analog. Tín hiệu tương tự ở cực đầu vào của thiết bị ngoại vi được chuyển đổi sang dạng số bằng bộ chuyển đổi tương tự sang kỹ thuật số (ADC), và được truyền qua giao thức USB để sử dụng máy chủ lưu trữ. ADC là một nguồn dữ liệu cho máy chủ. Tương tự, máy chủ gửi một tín hiệu âm thanh kỹ thuật số qua giao thức USB đến thiết bị ngoại vi, trong đó bộ chuyển đổi số sang tương tự (DAC) chuyển đổi và trình bày thành một cực đầu ra analog. DAC là một bồn rửa cho máy chủ.
Kênh
Một thiết bị ngoại vi có chức năng âm thanh có thể bao gồm một cực nguồn, đầu nối bồn lưu trữ dữ liệu 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 loại khác. Những thiết bị ngoại vi có nhiều hơn hai kênh được gọi là đa kênh. Thông thường, luồng âm thanh nổi bao gồm kênh trái và phải cũng như theo thời gian 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, phương pháp này cũng khá phù hợp (đặc biệt đối với âm thanh USB HDMI) không chỉ định bất kỳ nghĩa theo không gian chuẩn cho mỗi kênh. Trong trường hợp này, tuỳ chọn ứ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ác kênh được gắn với các micrô khác nhau trong một phòng và cuối cùng kênh nhận đầu vào từ đài phát thanh AM.
Chế độ chuyể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, bằng việc khôi phục lỗi. Ở chế độ đồng thời, băng thông được đảm bảo và khả năng truyền dữ liệu lỗi được phát hiện bằng cách sử dụng quy trình kiểm tra dự phòng tuần hoàn (CRC). Nhưng có không 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 xảy ra vào từng khoảng thời gian Bắt đầu khung hình (SOF). Chu kỳ SOF là 1 mili giây đối với tốc độ tối đa và 125 micrô giây đối với tốc độ tối đa tốc độ cao. Mỗi khung tốc độ đầy đủ mang tối đa 1023 byte tải trọng, và khung tốc độ cao có thể chứa đến 1024 byte. Kết hợp những yếu tố này lại với nhau, chúng tôi tính tốc độ truyền tối đa là 1.023.000 hoặc 8.192.000 byte mỗi giây. Công cụ này đặt ra giới hạn trên theo lý thuyết cho âm thanh kết hợp tốc độ lấy mẫu, số lượng kênh và độ sâu bit. Hạn mức thực tế thấp hơn.
Trong chế độ đồng thời, có 3 chế độ phụ:
- Thích ứng
- Không đồng bộ
- Đồng bộ
Ở chế độ phụ thích ứng, bồn lưu trữ dữ liệu hoặc nguồn ngoại vi sẽ thích ứng với tốc độ lấy mẫu có thể thay đổi của máy chủ lưu trữ.
Ở chế độ phụ không đồng bộ (còn gọi là phản hồi ngầm ẩn), bồn lưu trữ dữ liệu hoặc nguồn sẽ xác định tốc độ lấy mẫu và máy chủ đáp ứng được. Lợi thế về mặt lý thuyết chính của chế độ phụ không đồng bộ là nguồn hoặc bồn rửa. Chiếc đồng hồ USB này gần hơn về mặt thực và điện (và thực sự có thể giống với hoặc bắt nguồn từ đồng hồ điều khiển DAC hoặc ADC. Khoảng cách này khiến chế độ phụ không đồng bộ sẽ ít nhạy cảm hơn cho biến động đồng hồ. Ngoài ra, xung nhịp mà DAC hoặc ADC sử dụng có thể là được thiết kế để mang lại độ chính xác cao hơn và độ trôi thấp hơn so với đồng hồ chủ.
Ở chế độ phụ đồng bộ, một số byte cố định được chuyển mỗi kỳ SOF. Tốc độ lấy mẫu âm thanh được lấy hiệu quả từ đồng hồ USB. Chế độ phụ đồng bộ không thường được sử dụng với âm thanh vì cả hai máy chủ lưu trữ và thiết bị ngoại vi chỉn chu đồng hồ USB.
Bảng dưới đây tóm tắt các chế độ phụ đồng thời:
Chế độ phụ | Số byte trên mỗi gói |
Tốc độ lấy mẫu được xác định bởi |
Dùng cho âm thanh |
---|---|---|---|
thích ứng | biến thiên | người tổ chức | có |
không đồng bộ | biến thiên | thiết bị ngoại vi | có |
đồng bộ | cố định | Đồng hồ USB | không |
Trong thực tế, chế độ phụ tất nhiên có vai trò quan trọng, nhưng những yếu tố khác cũng cần được cân nhắc.
Hỗ trợ Android cho lớp âm thanh USB
Chế độ phát triển
Âm thanh USB không được hỗ trợ ở chế độ phát triển.
Chế độ máy chủ lưu trữ
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 USB âm thanh loại 1 (UAC1):
- Thiết bị Android phải đóng vai trò là 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 bit 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)
Perusal của mã nguồn khung Android có thể hiển thị mã bổ sung 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 khác chưa được xác nhận quyền sở hữu.
Chế độ phụ kiện
Android 4.1 (API cấp 16) thêm tính năng hỗ trợ hạn chế tính năng phát âm thanh cho máy chủ. Khi ở chế độ phụ kiện, Android sẽ tự động định tuyến đầu ra âm thanh tới USB. Tức là thiết bị Android đóng vai trò là nguồn dữ liệu cho máy chủ lưu trữ, chẳng hạn như một đế.
Âm thanh ở chế độ phụ kiện có các đặc điểm sau:
- Thiết bị Android phải do một máy chủ am hiểu điều khiển có thể chuyển đổi thiết bị Android từ chế độ phát triển sang chế độ phụ kiện trước, sau đó máy chủ lưu trữ phải chuyển dữ liệu âm thanh từ điểm cuối thích hợp. Do đó, thiết bị Android không còn ở trạng thái "không có người lái xe" cho máy chủ.
- Hướng phải là đầu vào, được biểu thị tương ứng với máy chủ
- Định dạng âm thanh phải là PCM 16 bit
- Tốc độ lấy mẫu phải là 44,1 kHz
- Số lượng 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 dùng 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 theo luồng dữ liệu kỹ thuật số thay vì tương tự tín hiệu do TRS mini thông thường sử dụng đầu nối tai nghe. Cuối cùng, mọi tín hiệu kỹ thuật số phải được chuyển đổi sang dạng analog trước khi nghe được. Việc chọn vị trí đặt lượt chuyển đổi đó sẽ có sự đánh đổ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 tôi có một thiết bị di động có Bộ xử lý ứng dụng (AP), DAC, bộ khuếch đại tích hợp, và đầu nối TRS analog gắn với tai nghe. Chúng tôi cũng xem xét thiết bị di động có USB được kết nối với bộ chuyển đổi USB DAC và bộ khuếch đại bên ngoài, với tai nghe.
Thiết kế nào tốt hơn? Câu trả lời tuỳ thuộc vào nhu cầu của bạn. Mỗi phương thức lại có những ưu điểm và nhược điểm riêng.
Lưu ý: Đây là phép so sánh giả tạo, vì một thiết bị Android thực có thể có cả hai tuỳ 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à thiết kế đáng tin cậy hơn với giả sử các thành phần khác cũng đáng tin cậy như nhau. Tuy nhiên, chất lượng âm thanh thường bị ảnh hưở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ế để vừa với nhu cầu của người tiêu dùng nói chung chứ không phải của 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ế để với 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í thiết bị Android B trên thị trường đại chúng cơ bản. Phải, đó là một thiết kế đắt tiền hơn, nhưng chỉ những ai mong muốn chi phí mới phải chịu chi phí.
Thiết bị di động nổi tiếng là có mật độ điểm ảnh cao bảng mạch, có thể mang lại nhiều cơ hội hơn để nhiễu xuyên âm làm suy giảm các tín hiệu tương tự liền kề. Hoạt động giao tiếp trên mạng khó bị ảnh hưởng hơn âm thanh, nên di chuyển DAC từ thiết bị Android A sang bảng mạch ngoài C cho phép các giai đoạn tương tự cuối cùng là vật lý và điện tách biệt với bảng mạch dày đặc và ồn ào, giúp â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à ngày càng phức tạp hơn cơ hội không thành công. Cũng có độ trễ bổ sung từ bộ điều khiển USB.
Ứng dụng ở chế độ máy chủ
Sau đây là một số ứng dụng âm thanh điển hình của chế độ hỗ trợ lưu trữ USB:
- nghe nhạc
- điện thoại
- nhắn tin nhanh và trò chuyện thoại
- đang ghi
Đối với tất cả ứng dụng này, Android phát hiện thấy một thiết bị kỹ thuật số USB tương thích thiết bị ngoại vi âm thanh và tự động định tuyến tính năng thu và phát âm thanh một cách phù hợp, dựa trên các quy tắc chính sách về â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. Đối với việc sử dụng nâng cao, chế độ định tuyến tự động có thể ảnh hưởng đến các ứng dụng nhận biết USB. Đối với những ứng dụng như vậy, hãy tắt tính năng định tuyến tự động thông qua chức năng điều khiển tương ứng trong phần Phương tiện Cài đặt / Tuỳ chọn cho nhà phát triển.
Gỡ lỗi khi ở chế độ máy chủ lưu trữ
Khi ở chế độ máy chủ USB, bạn không thể sử dụng tính năng gỡ lỗi adb qua USB. Xem phần Mức sử dụng không dây trong số Cầu gỡ lỗi Android để có giải pháp thay thế.
Triển khai âm thanh USB
Đề xuất cho nhà cung cấp thiết bị âm thanh ngoại vi
Để tương tác với các thiết bị Android, nhà cung cấp thiết bị âm thanh ngoại vi phải:
- thiết kế tuân thủ lớp âm thanh; hiện tại, Android nhắm mục tiêu đến lớp 1, nhưng bạn nên lập kế hoạch cho lớp 2
- tránh những điều tương tự
- kiểm thử khả năng tương tác dựa trên tham chiếu và các thiết bị Android phổ biến
- ghi lại rõ ràng các tính năng được hỗ trợ, tuân thủ về 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 dành cho nhà sản xuất thiết bị gốc (OEM) và nhà cung cấp hệ thống SoC (SoC) của thiết bị Android
Để hỗ trợ âm thanh kỹ thuật số qua USB, nhà sản xuất thiết bị gốc (OEM) và nhà cung cấp bộ xử lý SoC (SoC) phải:
- thiết kế phần cứng để hỗ trợ chế độ hỗ trợ USB
- bật tính năng hỗ trợ máy chủ USB chung ở cấp khung
thông qua cờ tính năng
android.hardware.usb.host.xml
- bật tất cả tính năng cần thiết trong nhân: chế độ hỗ trợ USB, âm thanh USB, chế độ truyền đồng thời; xem Cấu hình hạt nhân Android
- luôn 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ủ quy định trong lớp, nhưng các thiết bị âm thanh ngoại vi vẫn tồn tại bằng những lần tương tác, và các hạt nhân gần đây có giải pháp cho những điều kỳ lạ như vậy
- bật chính sách âm thanh USB như 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 thích với các thiết bị âm thanh ngoại vi USB phổ biến
Bật chính sách âm thanh USB
Để bật âm thanh USB, hãy thêm một mục nhập vào tệp cấu hình chính sách âm thanh. Thông thường, đặt tại đâ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ị.
Dưới đây là ví dụ về một mục nhập:
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
Lớp trừu tượng phần cứng âm thanh (HAL) Việc triển khai âm thanh USB được đặt tại đây:
hardware/libhardware/modules/usbaudio/
HAL (Lớp trừu tượng phần cứng) cho âm thanh USB phụ thuộc nhiều vào tinyalsa, theo mô tả trong Thuật ngữ về âm thanh. Mặc dù âm thanh USB dựa vào quá trình truyền đồng bộ, điều này sẽ được loại bỏ bằng cách triển khai ALSA. Vì vậy, HAL và tinyalsa cho âm thanh USB không cần phải quan tâm bằng phần này của giao thức USB.
Kiểm tra âm thanh USB
Để biết thông tin về quy trình kiểm tra CTS cho âm thanh USB, hãy xem bài viết Kiểm tra trình xác minh CTS của USB Audio.