Artikel ini meninjau dukungan Android untuk audio digital USB dan protokol berbasis USB terkait.
Audiens
Target audiens artikel ini adalah OEM perangkat Android, vendor SoC, pemasok periferal audio USB, developer aplikasi audio lanjutan, dan lainnya yang mencari pemahaman mendetail tentang internal audio digital USB di Android.
Pengguna akhir perangkat Nexus sebaiknya melihat artikel Merekam dan memutar audio menggunakan mode host USB di Pusat Bantuan Nexus. Meskipun artikel ini tidak berorientasi pada pengguna akhir, konsumen audiophile tertentu mungkin menemukan bagian yang menarik.
Ringkasan USB
Universal Serial Bus (USB) dijelaskan secara informal dalam artikel Wikipedia USB, dan secara formal ditentukan oleh standar yang dipublikasikan oleh USB Implementers Forum, Inc. Untuk memudahkan, kami merangkum konsep USB utama di sini, tetapi standarnya adalah referensi yang kredibel.
Konsep dan terminologi dasar
USB adalah bus dengan satu pemicu operasi transfer data, yang disebut host. Host berkomunikasi dengan periferal melalui bus.
Catatan: Istilah perangkat dan aksesori adalah sinonim umum untuk periferal. Kami menghindari istilah tersebut di sini, karena istilah tersebut dapat membingungkan dengan perangkat Android atau konsep khusus Android yang disebut mode aksesori.
Peran host yang penting adalah enumerasi: proses mendeteksi periferal yang terhubung ke bus, dan mengkueri propertinya yang dinyatakan melalui deskripsi.
Periferal mungkin merupakan satu objek fisik, tetapi sebenarnya mengimplementasikan beberapa fungsi logis. Misalnya, periferal webcam dapat memiliki fungsi kamera dan fungsi audio mikrofon.
Setiap fungsi periferal memiliki antarmuka yang menentukan protokol untuk berkomunikasi dengan fungsi tersebut.
Host berkomunikasi dengan periferal melalui pipa ke endpoint, sumber atau sink data yang disediakan oleh salah satu fungsi periferal.
Ada dua jenis pipa: pesan dan aliran data. Pipa pesan digunakan untuk kontrol dan status dua arah. Pipa streaming digunakan untuk transfer data searah.
Host memulai semua transfer data, sehingga istilah input dan output dinyatakan relatif terhadap host. Operasi input mentransfer data dari periferal ke host, sedangkan operasi output mentransfer data dari host ke periferal.
Ada tiga mode transfer data utama: interrupt, bulk, dan isochronous. Mode isochronous akan dibahas lebih lanjut dalam konteks audio.
Periferal mungkin memiliki terminal yang terhubung ke dunia luar, di luar periferal itu sendiri. Dengan cara ini, periferal berfungsi untuk menerjemahkan antara protokol USB dan sinyal "dunia nyata". Terminal adalah objek logis dari fungsi.
Mode USB Android
Mode pengembangan
Mode pengembangan telah ada sejak rilis awal Android. Perangkat Android akan muncul sebagai periferal USB ke PC host yang menjalankan sistem operasi desktop seperti Linux, Mac OS X, atau Windows. Satu-satunya fungsi periferal yang terlihat adalah fastboot Android atau Android Debug Bridge (adb). Protokol fastboot dan adb dilapisi di atas mode transfer data massal USB.
Mode host
Mode host diperkenalkan di Android 3.1 (API level 12).
Karena perangkat Android harus bertindak sebagai host, dan sebagian besar perangkat Android menyertakan konektor micro-USB yang tidak secara langsung mengizinkan operasi host, adaptor on-the-go (OTG) seperti ini biasanya diperlukan:

Gambar 1. Adaptor on-the-go (OTG)
Perangkat Android mungkin tidak memberikan daya yang memadai untuk mengoperasikan periferal tertentu, bergantung pada jumlah daya yang diperlukan periferal, dan jumlah daya yang dapat disediakan perangkat Android. Meskipun daya yang memadai tersedia, pengisian daya baterai perangkat Android dapat berkurang secara signifikan. Untuk situasi ini, gunakan hub yang diberi daya seperti ini:

Gambar 2. Hub bertenaga
Mode aksesori
Mode aksesori diperkenalkan di Android 3.1 (API level 12) dan di-backport ke Android 2.3.4. Dalam mode ini, perangkat Android beroperasi sebagai periferal USB, di bawah kontrol perangkat lain seperti dok yang berfungsi sebagai host. Perbedaan antara mode pengembangan dan mode aksesori adalah fungsi USB tambahan terlihat oleh host, di luar adb. Perangkat Android dimulai dalam mode pengembangan, lalu bertransisi ke mode aksesori melalui proses negosiasi ulang.
Mode aksesori diperluas dengan fitur tambahan di Android 4.1, terutama audio yang dijelaskan di bawah.
Audio USB
Class USB
Setiap fungsi periferal memiliki dokumen class perangkat terkait yang menentukan protokol standar untuk fungsi tersebut. Hal ini memungkinkan host dan fungsi periferal yang sesuai dengan class untuk saling beroperasi, tanpa pengetahuan mendetail tentang cara kerja satu sama lain. Kepatuhan class sangat penting jika host dan periferal disediakan oleh entitas yang berbeda.
Istilah tanpa driver adalah sinonim umum untuk class compliant, yang menunjukkan bahwa Anda dapat menggunakan fitur standar dari periferal tersebut tanpa memerlukan driver khusus sistem operasi untuk diinstal. Kita dapat mengasumsikan bahwa periferal yang diiklankan sebagai "tidak memerlukan driver" untuk sistem operasi desktop utama akan mematuhi class, meskipun mungkin ada pengecualian.
Class audio USB
Di sini, kita hanya berfokus pada periferal yang mengimplementasikan fungsi audio, sehingga mematuhi class perangkat audio. Ada dua edisi spesifikasi class audio USB: class 1 (UAC1) dan 2 (UAC2).
Perbandingan dengan class lain
USB mencakup banyak class perangkat lainnya, beberapa di antaranya mungkin tertukar dengan class audio. Mass Storage Class (MSC) digunakan untuk akses berorientasi sektor ke media, sedangkan Media Transfer Protocol (MTP) digunakan untuk akses file penuh ke media. MSC dan MTP dapat digunakan untuk mentransfer file audio, tetapi hanya class audio USB yang cocok untuk streaming real-time.
Terminal audio
Terminal periferal audio biasanya analog. Sinyal analog yang ditampilkan di terminal input periferal dikonversi menjadi digital oleh konverter analog-ke-digital (ADC), dan dikirim melalui protokol USB untuk digunakan oleh host. ADC adalah sumber data untuk host. Demikian pula, host mengirim sinyal audio digital melalui protokol USB ke periferal, tempat konverter digital ke analog (DAC) mengonversi dan menampilkan ke terminal output analog. DAC adalah sink untuk host.
Saluran
Periferal dengan fungsi audio dapat mencakup terminal sumber, terminal sink, atau keduanya. Setiap arah dapat memiliki satu saluran (mono), dua saluran (stereo), atau lebih. Periferal dengan lebih dari dua saluran disebut multisaluran. Umumnya, streaming stereo ditafsirkan sebagai terdiri dari saluran kiri dan kanan, dan secara luas menafsirkan streaming multisaluran sebagai memiliki lokasi spasial yang sesuai dengan setiap saluran. Namun, tidak menetapkan makna spasial standar tertentu ke setiap saluran juga cukup sesuai (terutama untuk audio USB, lebih dari HDMI). Dalam hal ini, aplikasi dan penggunalah yang menentukan cara penggunaan setiap saluran. Misalnya, aliran input USB empat saluran mungkin memiliki tiga saluran pertama yang terhubung ke berbagai mikrofon dalam ruangan, dan saluran terakhir yang menerima input dari radio AM.
Mode transfer isochronous
Audio USB menggunakan mode transfer isochronous untuk karakteristik real-time-nya, dengan mengorbankan pemulihan error. Dalam mode isochronous, bandwidth dijamin, dan error transmisi data terdeteksi menggunakan cyclic redundancy check (CRC). Namun, tidak ada konfirmasi paket atau transmisi ulang jika terjadi error.
Transmisi isochronous terjadi setiap periode Awal Frame (SOF). Periode SOF adalah satu milidetik untuk kecepatan penuh, dan 125 mikrodetik untuk kecepatan tinggi. Setiap frame kecepatan penuh membawa payload hingga 1.023 byte, dan frame kecepatan tinggi membawa payload hingga 1.024 byte. Dengan menggabungkannya, kami menghitung kecepatan transfer maksimum sebesar 1.023.000 atau 8.192.000 byte per detik. Tindakan ini menetapkan batas atas teoretis pada frekuensi sampel audio gabungan, jumlah saluran, dan kedalaman bit. Batas praktisnya lebih rendah.
Dalam mode isochronous, ada tiga sub-mode:
- Adaptif
- Asinkron
- Sinkron
Dalam sub-mode adaptif, sink atau sumber periferal beradaptasi dengan frekuensi sampel host yang berpotensi bervariasi.
Dalam sub-mode asinkron (juga disebut masukan implisit), sink atau sumber menentukan frekuensi sampel, dan host mengakomodasinya. Keuntungan teoretis utama dari sub-mode asinkron adalah clock USB sumber atau sink secara fisik dan elektrik lebih dekat dengan (dan memang mungkin sama dengan, atau berasal dari) clock yang menggerakkan DAC atau ADC. Kedekatan ini berarti sub-mode asinkron akan kurang rentan terhadap jitter clock. Selain itu, clock yang digunakan oleh DAC atau ADC dapat dirancang untuk akurasi yang lebih tinggi dan drift yang lebih rendah daripada clock host.
Dalam sub-mode sinkron, jumlah byte tetap ditransfer setiap periode SOF. Kecepatan sampel audio secara efektif berasal dari clock USB. Sub-mode sinkron biasanya tidak digunakan dengan audio karena host dan periferal bergantung pada clock USB.
Tabel di bawah merangkum sub-mode isochronous:
Sub-mode | Jumlah byte per paket |
Frekuensi sampel ditentukan oleh |
Digunakan untuk audio |
---|---|---|---|
adaptif | variabel | host | ya |
asinkron | variabel | periferal | ya |
sinkron | tetap | Jam USB | no |
Dalam praktiknya, sub-mode tentu saja penting, tetapi faktor lain juga harus dipertimbangkan.
Dukungan Android untuk class audio USB
Mode pengembangan
Audio USB tidak didukung dalam mode pengembangan.
Mode host
Android 5.0 (API level 21) dan yang lebih baru mendukung sebagian fitur audio USB class 1 (UAC1):
- Perangkat Android harus berfungsi sebagai host
- Format audio harus PCM (jenis antarmuka I)
- Kedalaman bit harus 16-bit, 24-bit, atau 32-bit dengan 24-bit data audio yang berguna dijustifikasi ke kiri dalam bit yang paling signifikan dari kata 32-bit
- Frekuensi sampel harus 48, 44,1, 32, 24, 22,05, 16, 12, 11,025, atau 8 kHz
- Jumlah saluran harus 1 (mono) atau 2 (stereo)
Peninjauan kode sumber framework Android dapat menampilkan kode tambahan di luar minimum yang diperlukan untuk mendukung fitur ini. Namun, kode ini belum divalidasi, sehingga fitur lanjutan lainnya belum diklaim.
Mode aksesori
Android 4.1 (API level 16) menambahkan dukungan terbatas untuk pemutaran audio ke host. Saat dalam mode aksesori, Android akan otomatis merutekan output audionya ke USB. Artinya, perangkat Android berfungsi sebagai sumber data untuk host, misalnya dok.
Audio mode aksesori memiliki fitur berikut:
- Perangkat Android harus dikontrol oleh host yang berpengetahuan yang dapat mentransisikan perangkat Android dari mode pengembangan ke mode aksesori terlebih dahulu, lalu host harus mentransfer data audio dari endpoint yang sesuai. Dengan demikian, perangkat Android tidak akan muncul "tanpa driver" untuk host.
- Arah harus berupa input, yang dinyatakan relatif terhadap host
- Format audio harus berupa PCM 16-bit
- Frekuensi sampel harus 44,1 kHz
- Jumlah saluran harus 2 (stereo)
Audio mode aksesori belum banyak digunakan, dan saat ini tidak direkomendasikan untuk desain baru.
Aplikasi audio digital USB
Seperti namanya, sinyal audio digital USB direpresentasikan oleh aliran data digital bukan sinyal analog yang digunakan oleh konektor headset TRS mini umum. Pada akhirnya, sinyal digital harus dikonversi ke analog sebelum dapat didengar. Ada konsekuensi dalam memilih tempat untuk menempatkan konversi tersebut.
Kisah dua DAC
Pada contoh diagram di bawah, kita membandingkan dua desain. Pertama, kita memiliki perangkat seluler dengan Application Processor (AP), DAC bawaan, amplifier, dan konektor TRS analog yang terpasang ke headphone. Kami juga mempertimbangkan perangkat seluler dengan USB yang terhubung ke DAC dan amplifier USB eksternal, serta dengan headphone.

Gambar 3. Perbandingan dua DAC
Desain mana yang lebih baik? Jawabannya tergantung pada kebutuhan Anda. Masing-masing memiliki kelebihan dan kekurangan.
Catatan: Ini adalah perbandingan buatan, karena perangkat Android yang sebenarnya mungkin memiliki kedua opsi tersebut.
Desain pertama A lebih sederhana, lebih murah, menggunakan lebih sedikit daya, dan akan menjadi desain yang lebih andal dengan asumsi komponen yang sama andal. Namun, biasanya ada kompromi kualitas audio vs. persyaratan lainnya. Misalnya, jika ini adalah perangkat pasar massal, perangkat tersebut mungkin dirancang agar sesuai dengan kebutuhan konsumen umum, bukan untuk audiophile.
Pada desain kedua, periferal audio eksternal C dapat dirancang untuk kualitas audio yang lebih tinggi dan output daya yang lebih besar tanpa memengaruhi biaya perangkat Android pasar massal dasar B. Ya, desain ini lebih mahal, tetapi biayanya hanya ditanggung oleh orang yang menginginkannya.
Perangkat seluler terkenal memiliki papan sirkuit dengan kepadatan tinggi, yang dapat menghasilkan lebih banyak peluang untuk crosstalk yang menurunkan kualitas sinyal analog yang berdekatan. Komunikasi digital kurang rentan terhadap derau, sehingga memindahkan DAC dari perangkat Android A ke papan sirkuit eksternal C memungkinkan tahap analog akhir diisolasi secara fisik dan secara elektrik dari papan sirkuit yang padat dan berisik, sehingga menghasilkan audio dengan fidelitas yang lebih tinggi.
Di sisi lain, desain kedua lebih kompleks, dan dengan kompleksitas yang ditambahkan, akan ada lebih banyak peluang untuk kegagalan. Ada juga latensi tambahan dari pengontrol USB.
Aplikasi mode host
Aplikasi audio mode host USB yang umum meliputi:
- mendengarkan musik
- telepon
- fitur pesan instan dan chat suara
- merekam
Untuk semua aplikasi ini, Android mendeteksi periferal audio digital USB yang kompatibel, dan secara otomatis merutekan pemutaran dan perekaman audio dengan tepat, berdasarkan aturan kebijakan audio. Konten stereo diputar di dua saluran pertama periferal.
Tidak ada API khusus untuk audio digital USB. Untuk penggunaan lanjutan, pemilihan rute otomatis dapat mengganggu aplikasi yang peka terhadap USB. Untuk aplikasi tersebut, nonaktifkan pemilihan rute otomatis melalui kontrol yang sesuai di bagian Media pada Setelan / Opsi Developer.
Melakukan debug saat dalam mode host
Saat dalam mode host USB, proses debug adb melalui USB tidak tersedia. Lihat bagian Penggunaan nirkabel Android Debug Bridge untuk mengetahui alternatifnya.
Menerapkan audio USB
Rekomendasi untuk vendor periferal audio
Agar dapat beroperasi secara interoperabilitas dengan perangkat Android, vendor periferal audio harus:
- desain untuk kepatuhan class audio; saat ini Android menargetkan class 1, tetapi sebaiknya rencanakan untuk class 2
- menghindari keanehan
- menguji interoperabilitas dengan perangkat Android populer dan referensi
- mendokumentasikan dengan jelas fitur yang didukung, kepatuhan class audio, persyaratan daya, dll. sehingga konsumen dapat membuat keputusan yang tepat
Rekomendasi untuk OEM perangkat Android dan vendor SoC
Untuk mendukung audio digital USB, OEM perangkat dan vendor SoC harus:
- mendesain hardware untuk mendukung mode host USB
- mengaktifkan dukungan host USB generik di tingkat framework
melalui flag fitur
android.hardware.usb.host.xml
- mengaktifkan semua fitur kernel yang diperlukan: mode host USB, audio USB, mode transfer isochronous
- terus update dengan rilis dan patch kernel terbaru; meskipun tujuan mulia kepatuhan class, ada periferal audio yang ada dengan keanehan, dan kernel terbaru memiliki solusi untuk keanehan tersebut
- mengaktifkan kebijakan audio USB seperti yang dijelaskan di bawah ini
- menambahkan audio.usb.default ke PRODUCT_PACKAGES di device.mk
- menguji interoperabilitas dengan periferal audio USB umum
Mengaktifkan kebijakan audio USB
Untuk mengaktifkan audio USB, tambahkan entri ke file konfigurasi kebijakan audio. Ini biasanya berada di sini:
device/oem/codename/audio_policy.conf
Komponen jalur nama "oem" harus diganti dengan nama OEM yang memproduksi perangkat Android, dan "codename" harus diganti dengan nama kode perangkat.
Contoh entri ditampilkan di sini:
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 } } } ... }
Kode sumber
Implementasi Hardware Abstraction Layer (HAL) audio untuk audio USB terletak di sini:
hardware/libhardware/modules/usbaudio/
HAL audio USB sangat bergantung pada tinyalsa, yang dijelaskan di Istilah audio. Meskipun audio USB mengandalkan transfer isochronous, hal ini diabstraksi oleh penerapan ALSA. Jadi, HAL audio USB dan tinyalsa tidak perlu memikirkan bagian protokol USB ini.
Menguji audio USB
Untuk informasi tentang pengujian CTS untuk audio USB, lihat Pengujian Verifikator CTS Audio USB.