Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Audio Digital USB

Artikel ini mengulas dukungan Android untuk audio digital USB dan protokol berbasis USB terkait.

Hadirin

Target pembaca artikel ini adalah OEM perangkat Android, vendor SoC, pemasok periferal audio USB, pengembang aplikasi audio tingkat lanjut, 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.

Sekilas tentang USB

Universal Serial Bus (USB) secara informal dijelaskan dalam artikel Wikipedia USB , dan secara resmi ditentukan oleh standar yang diterbitkan oleh USB Implementers Forum, Inc. Untuk kenyamanan, kami meringkas konsep USB utama di sini, tetapi standarnya adalah referensi resmi.

Konsep dan terminologi dasar

USB adalah bus dengan satu inisiator operasi transfer data, yang disebut host . Tuan rumah berkomunikasi dengan periferal melalui bus.

Catatan: Istilah perangkat dan aksesori adalah sinonim umum untuk perangkat . Kami menghindari istilah tersebut di sini, karena dapat disalahartikan dengan perangkat Android atau konsep khusus Android yang disebut mode aksesori .

Peran host yang penting adalah enumerasi : proses mendeteksi periferal mana yang terhubung ke bus, dan menanyakan propertinya yang diekspresikan melalui deskriptor .

Periferal dapat berupa satu objek fisik tetapi sebenarnya menerapkan beberapa fungsi logis. Misalnya, perangkat webcam dapat memiliki fungsi kamera dan fungsi audio mikrofon.

Setiap fungsi periferal memiliki antarmuka yang mendefinisikan protokol untuk berkomunikasi dengan fungsi itu.

Host berkomunikasi dengan periferal melalui pipa ke titik akhir , sumber data atau sink yang disediakan oleh salah satu fungsi periferal.

Ada dua jenis pipa: pesan dan aliran . Pipa pesan digunakan untuk kontrol dan status dua arah. Pipa aliran digunakan untuk transfer data satu arah.

Host memulai semua transfer data, oleh karena itu istilah input dan output diekspresikan relatif terhadap host. Operasi input mentransfer data dari perangkat ke host, sementara operasi output mentransfer data dari host ke perangkat.

Ada tiga mode transfer data utama: interupsi , massal , dan isochronous . Modus Isochronous akan dibahas lebih lanjut dalam konteks audio.

Perangkat mungkin memiliki terminal yang terhubung ke dunia luar, di luar perangkat itu sendiri. Dengan cara ini, perangkat berfungsi untuk menerjemahkan antara protokol USB dan sinyal "dunia nyata". Terminal adalah objek logis dari fungsi tersebut.

Mode USB Android

Mode pengembangan

Mode pengembangan telah hadir sejak rilis awal Android. Perangkat Android 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 Android fastboot atau Android Debug Bridge (adb) . Protokol fastboot dan adb dilapisi melalui 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 mengizinkan operasi host secara langsung, adaptor on-the-go ( OTG ) seperti ini biasanya diperlukan:

OTG

Angka 1. Adaptor On-the-go (OTG)

Perangkat Android mungkin tidak menyediakan daya yang cukup untuk mengoperasikan periferal tertentu, bergantung pada seberapa banyak daya yang dibutuhkan periferal, dan seberapa banyak daya yang mampu disuplai perangkat Android. Meskipun daya yang memadai tersedia, daya baterai perangkat Android dapat menjadi lebih pendek secara signifikan. Untuk situasi ini, gunakan hub bertenaga seperti ini:

Hub bertenaga

Angka 2. Hub bertenaga

Mode aksesori

Mode aksesori diperkenalkan di Android 3.1 (API level 12) dan di-porting kembali ke Android 2.3.4. Dalam mode ini, perangkat Android beroperasi sebagai periferal USB, di bawah kendali perangkat lain seperti dok yang berfungsi sebagai host. Perbedaan antara mode pengembangan dan mode aksesori adalah bahwa fungsi USB tambahan dapat dilihat oleh host, di luar adb. Perangkat Android dimulai dalam mode pengembangan dan kemudian beralih ke mode aksesori melalui proses negosiasi ulang.

Mode aksesori diperluas dengan fitur tambahan di Android 4.1, khususnya audio yang dijelaskan di bawah.

Audio USB

Kelas USB

Setiap fungsi periferal memiliki dokumen kelas perangkat terkait yang menentukan protokol standar untuk fungsi itu. Hal ini memungkinkan host yang sesuai dengan kelas dan fungsi periferal untuk saling beroperasi, tanpa pengetahuan terperinci tentang cara kerja satu sama lain. Kepatuhan kelas sangat penting jika host dan perangkat disediakan oleh entitas yang berbeda.

Istilah tanpa pengemudi adalah sinonim umum untuk kepatuhan kelas , yang menunjukkan bahwa dimungkinkan untuk menggunakan fitur standar dari periferal semacam itu tanpa memerlukan penginstalan driver khusus sistem operasi. Dapat diasumsikan bahwa periferal yang diiklankan sebagai "driver tidak diperlukan" untuk sistem operasi desktop utama akan memenuhi persyaratan kelas, meskipun mungkin ada pengecualian.

Kelas audio USB

Di sini kami hanya memusatkan perhatian pada periferal yang menerapkan fungsi audio, dan dengan demikian mematuhi kelas perangkat audio. Ada dua edisi spesifikasi kelas audio USB: kelas 1 (UAC1) dan 2 (UAC2).

Perbandingan dengan kelas lain

USB menyertakan banyak kelas perangkat lain, beberapa di antaranya mungkin bingung dengan kelas audio. Kelas penyimpanan massal (MSC) digunakan untuk akses berorientasi sektor ke media, sedangkan Media Transfer Protocol (MTP) adalah untuk akses file penuh ke media. Baik MSC dan MTP dapat digunakan untuk mentransfer file audio, tetapi hanya kelas audio USB yang cocok untuk streaming waktu nyata.

Terminal audio

Terminal perangkat audio biasanya analog. Sinyal analog yang disajikan di terminal input periferal diubah menjadi digital oleh konverter analog-ke-digital (ADC), dan dibawa melalui protokol USB untuk digunakan oleh host. ADC adalah sumber data untuk host. Demikian pula, host mengirimkan sinyal audio digital melalui protokol USB ke perangkat, di mana konverter digital-ke-analog (DAC) diubah dan disajikan ke terminal keluaran analog. DAC adalah wastafel bagi tuan rumah.

Saluran

Periferal dengan fungsi audio dapat mencakup terminal sumber, terminal wastafel, atau keduanya. Setiap arah dapat memiliki satu saluran ( mono ), dua saluran ( stereo ), atau lebih. Periferal dengan lebih dari dua saluran disebut multisaluran . Adalah umum untuk menafsirkan aliran stereo sebagai terdiri dari saluran kiri dan kanan , dan dengan ekstensi untuk menafsirkan aliran multichannel memiliki lokasi spasial yang sesuai dengan setiap saluran. Namun, itu juga cukup tepat (terutama untuk audio USB daripada HDMI ) untuk tidak menetapkan arti spasial standar tertentu untuk setiap saluran. Dalam hal ini, tergantung aplikasi dan pengguna untuk menentukan bagaimana setiap saluran digunakan. Misalnya, aliran input USB empat saluran mungkin memiliki tiga saluran pertama yang terpasang ke berbagai mikrofon di dalam ruangan, dan saluran terakhir menerima masukan dari radio AM.

Mode transfer Isochronous

Audio USB menggunakan mode transfer isochronous untuk karakteristik real-time-nya, dengan mengorbankan pemulihan kesalahan. Dalam mode isochronous, bandwidth dijamin, dan kesalahan transmisi data dideteksi menggunakan cyclic redundancy check (CRC). Tetapi tidak ada pengakuan paket atau transmisi ulang jika terjadi kesalahan.

Transmisi Isochronous terjadi setiap periode Start Of Frame (SOF). Periode SOF adalah satu milidetik untuk kecepatan penuh, dan 125 mikrodetik untuk kecepatan tinggi. Setiap frame kecepatan penuh membawa hingga 1.023 byte payload, dan frame kecepatan tinggi membawa hingga 1.024 byte. Dengan menggabungkan ini, kami menghitung kecepatan transfer maksimum sebagai 1.023.000 atau 8.192.000 byte per detik. Ini menetapkan batas atas teoretis pada laju sampel audio gabungan, jumlah saluran, dan kedalaman bit. Batas praktisnya lebih rendah.

Dalam mode isochronous, ada tiga sub-mode:

  • Adaptif
  • Asinkron
  • Sinkronis

Dalam sub-mode adaptif, sink periferal atau sumber beradaptasi dengan kecepatan sampel host yang berpotensi bervariasi.

Dalam sub-mode asinkron (juga disebut umpan balik implisit), sink atau sumber menentukan laju sampel, dan host mengakomodasi. Keuntungan teoritis utama dari sub-mode asynchronous adalah bahwa sumber atau sink jam USB secara fisik dan elektrik lebih dekat ke (dan memang mungkin sama dengan, atau berasal dari) jam yang menggerakkan DAC atau ADC. Kedekatan ini berarti bahwa sub-mode asinkron seharusnya tidak terlalu rentan terhadap jitter jam. Selain itu, jam yang digunakan oleh DAC atau ADC dapat dirancang untuk akurasi yang lebih tinggi dan penyimpangan yang lebih rendah daripada jam host.

Dalam sub-mode sinkron, sejumlah byte tetap ditransfer setiap periode SOF. Kecepatan sampel audio secara efektif berasal dari jam USB. Sub-mode sinkron tidak umum digunakan dengan audio karena host dan periferal bergantung pada jam USB.

Tabel di bawah ini merangkum sub-mode isochronous:

Sub-mode Hitungan byte
per paket
Tingkat sampel
ditetapkan oleh
Digunakan untuk audio
adaptif variabel tuan rumah Iya
asinkron variabel periferal Iya
sinkronis tetap Jam USB tidak

Dalam praktiknya, sub-mode tentu saja penting, tetapi faktor-faktor lain juga harus dipertimbangkan.

Dukungan Android untuk kelas audio USB

Mode pengembangan

Audio USB tidak didukung dalam mode pengembangan.

Mode host

Android 5.0 (API level 21) dan yang lebih baru mendukung subset fitur USB audio class 1 (UAC1):

  • Perangkat Android harus bertindak sebagai host
  • Format audio harus PCM (tipe antarmuka I)
  • Kedalaman bit harus 16-bit, 24-bit, atau 32-bit di mana 24 bit data audio yang berguna dibenarkan dalam bit 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)

Membaca kode sumber framework Android dengan teliti mungkin menampilkan kode tambahan di luar jumlah minimum yang diperlukan untuk mendukung fitur ini. Tetapi kode ini belum divalidasi, jadi fitur yang lebih canggih belum diklaim.

Mode aksesori

Android 4.1 (API level 16) menambahkan dukungan terbatas untuk pemutaran audio ke host. Saat berada dalam mode aksesori, Android secara otomatis merutekan output audio ke USB. Artinya, perangkat Android berfungsi sebagai sumber data ke host, misalnya dok.

Audio mode aksesori memiliki fitur berikut:

  • Perangkat Android harus dikontrol oleh host berpengetahuan yang dapat mentransisikan perangkat Android dari mode pengembangan ke mode aksesori terlebih dahulu, kemudian host harus mentransfer data audio dari titik akhir yang sesuai. Dengan demikian perangkat Android tidak tampak "tanpa pengemudi" bagi host.
  • Arahnya harus berupa masukan , dinyatakan relatif terhadap tuan rumah
  • Format audio harus PCM 16-bit
  • Kecepatan 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 yang ditunjukkan oleh namanya, sinyal audio digital USB diwakili oleh aliran data digital daripada sinyal analog yang digunakan oleh konektor headset mini TRS yang umum. Akhirnya setiap sinyal digital harus diubah menjadi analog sebelum dapat didengar. Ada pengorbanan dalam memilih tempat untuk melakukan konversi itu.

Kisah dua DAC

Pada diagram contoh di bawah ini, kami membandingkan dua desain. Pertama, kami memiliki perangkat seluler dengan Application Processor (AP), DAC on-board, amplifier, dan konektor TRS analog yang terpasang ke headphone. Kami juga mempertimbangkan perangkat seluler dengan USB yang terhubung ke DAC dan amplifier USB eksternal, juga dengan headphone.

Perbandingan DAC

Gambar 3. Perbandingan dua DAC

Desain mana yang lebih baik? Jawabannya tergantung kebutuhan Anda. Masing-masing memiliki kelebihan dan kekurangan.

Catatan: Ini adalah perbandingan buatan, karena perangkat Android asli 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-sama dapat diandalkan. Namun, biasanya ada pengorbanan kualitas audio vs. persyaratan lainnya. Misalnya, jika ini adalah perangkat pasar massal, ini mungkin dirancang agar sesuai dengan kebutuhan konsumen umum, bukan untuk audiophile.

Dalam desain kedua, periferal audio eksternal C dapat dirancang untuk kualitas audio yang lebih tinggi dan keluaran daya yang lebih besar tanpa mempengaruhi biaya perangkat Android pasar massal dasar B. Ya, ini adalah desain yang lebih mahal, tetapi biayanya hanya diserap oleh mereka yang menginginkannya.

Perangkat seluler terkenal memiliki papan sirkuit dengan kepadatan tinggi, yang dapat menghasilkan lebih banyak peluang untuk crosstalk yang menurunkan sinyal analog yang berdekatan. Komunikasi digital tidak terlalu rentan terhadap derau , jadi memindahkan DAC dari perangkat Android A ke papan sirkuit eksternal C memungkinkan tahap akhir analog diisolasi secara fisik dan elektrik dari papan sirkuit yang padat dan berisik, sehingga menghasilkan audio dengan ketepatan yang lebih tinggi.

Di sisi lain, desain kedua lebih kompleks, dan dengan kompleksitas tambahan datang lebih banyak peluang untuk gagal. Ada juga latensi tambahan dari pengontrol USB.

Aplikasi mode host

Aplikasi audio mode host USB yang umum meliputi:

  • mendengarkan musik
  • teleponi
  • pesan instan dan obrolan suara
  • rekaman

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 dari perangkat itu.

Tidak ada API khusus untuk audio digital USB. Untuk penggunaan tingkat lanjut, perutean otomatis dapat mengganggu aplikasi yang mendukung USB. Untuk aplikasi semacam itu, nonaktifkan perutean otomatis melalui kontrol yang sesuai di bagian Media Pengaturan / Opsi Pengembang .

Debugging saat dalam mode host

Saat dalam mode host USB, debugging adb melalui USB tidak tersedia. Lihat bagian Penggunaan nirkabel Android Debug Bridge untuk alternatif.

Menerapkan audio USB

Rekomendasi untuk vendor periferal audio

Untuk saling beroperasi dengan perangkat Android, vendor periferal audio harus:

  • desain untuk kepatuhan kelas audio; Saat ini Android menargetkan kelas 1, tetapi bijaksana untuk merencanakan kelas 2
  • hindari kebiasaan
  • uji interoperabilitas dengan referensi dan perangkat Android populer
  • dokumentasikan dengan jelas fitur yang didukung, kepatuhan kelas 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:

  • desain perangkat keras untuk mendukung mode host USB
  • aktifkan dukungan host USB generik pada tingkat kerangka kerja melalui tanda fitur android.hardware.usb.host.xml
  • aktifkan semua fitur kernel yang diperlukan: mode host USB, audio USB, mode transfer isochronous; lihat Konfigurasi Kernel Android
  • tetap up-to-date dengan rilis dan patch kernel terkini; Terlepas dari tujuan mulia kepatuhan kelas, masih ada periferal audio dengan kebiasaan , dan kernel terbaru memiliki solusi untuk kebiasaan semacam itu
  • aktifkan kebijakan audio USB seperti yang dijelaskan di bawah ini
  • tambahkan audio.usb.default ke PRODUCT_PACKAGES di device.mk
  • uji interoperabilitas dengan periferal audio USB umum

Cara mengaktifkan kebijakan audio USB

Untuk mengaktifkan audio USB, tambahkan entri ke file konfigurasi kebijakan audio. Ini biasanya terletak di sini:

device/oem/codename/audio_policy.conf

Komponen nama jalur "oem" harus diganti dengan nama OEM yang memproduksi perangkat Android, dan "nama kode" 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/

Audio USB HAL sangat bergantung pada tinyalsa , yang dijelaskan di Audio Terminology . Meskipun audio USB bergantung pada transfer isochronous, ini disarikan oleh implementasi ALSA. Jadi audio USB HAL dan tinyalsa tidak perlu khawatir dengan bagian dari protokol USB ini.

Menguji audio USB

Untuk informasi tentang pengujian CTS untuk audio USB, lihat Tes Verifikasi CTS Audio USB .