1949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenpage.title=USB Digital Audio 2949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten@jd:body 3949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 4bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy<!-- 5bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy Copyright 2014 The Android Open Source Project 6bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy 7bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy Licensed under the Apache License, Version 2.0 (the "License"); 8bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy you may not use this file except in compliance with the License. 9bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy You may obtain a copy of the License at 10bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy 11bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy http://www.apache.org/licenses/LICENSE-2.0 12bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy 13bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy Unless required by applicable law or agreed to in writing, software 14bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy distributed under the License is distributed on an "AS IS" BASIS, 15bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy See the License for the specific language governing permissions and 17bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy limitations under the License. 18bc92aea666f04a57b8717fa0c1d43f1f287acd9aClay Murphy--> 19949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<div id="qv-wrapper"> 20949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <div id="qv"> 21949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <h2>In this document</h2> 22949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <ol id="auto-toc"> 23949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten </ol> 24949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten </div> 25949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</div> 26949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 27949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 28949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThis article reviews Android support for USB digital audio and related 29949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenUSB-based protocols. 30949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 31949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 32949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="audience">Audience</h3> 33949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 34949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 35949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe target audience of this article is Android device OEMs, SoC vendors, 36949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenUSB audio peripheral suppliers, advanced audio application developers, 37949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand others seeking detailed understanding of USB digital audio internals on Android. 38949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 39949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 40949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 41949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenEnd users should see the <a href="https://support.google.com/android/">Help Center</a> instead. 42949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThough this article is not oriented towards end users, 43949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastencertain audiophile consumers may find portions of interest. 44949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 45949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 46949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h2 id="overview">Overview of USB</h2> 47949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 48949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 49949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenUniversal Serial Bus (USB) is informally described in the Wikipedia article 50949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/USB">USB</a>, 51949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand is formally defined by the standards published by the 52949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://www.usb.org/">USB Implementers Forum, Inc</a>. 53949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenFor convenience, we summarize the key USB concepts here, 54949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenbut the standards are the authoritative reference. 55949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 56949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 57949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="terminology">Basic concepts and terminology</h3> 58949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 59949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 60949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenUSB is a <a href="http://en.wikipedia.org/wiki/Bus_(computing)">bus</a> 61949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenwith a single initiator of data transfer operations, called the <i>host</i>. 62949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe host communicates with 63949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/Peripheral">peripherals</a> via the bus. 64949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 65949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 66949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 67949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<b>Note:</b> the terms <i>device</i> or <i>accessory</i> are common synonyms for 68949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<i>peripheral</i>. We avoid those terms here, as they could be confused with 69949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAndroid <a href="http://en.wikipedia.org/wiki/Mobile_device">device</a> 70949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenor the Android-specific concept called 71949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://developer.android.com/guide/topics/connectivity/usb/accessory.html">accessory mode</a>. 72949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 73949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 74949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 75949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenA critical host role is <i>enumeration</i>: 76949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthe process of detecting which peripherals are connected to the bus, 77949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand querying their properties expressed via <i>descriptors</i>. 78949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 79949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 80949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 81949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenA peripheral may be one physical object 82949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenbut actually implement multiple logical <i>functions</i>. 83949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenFor example, a webcam peripheral could have both a camera function and a 84949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenmicrophone audio function. 85949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 86949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 87949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 88949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenEach peripheral function has an <i>interface</i> that 89949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastendefines the protocol to communicate with that function. 90949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 91949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 92949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 93949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe host communicates with a peripheral over a 94949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/Stream_(computing)">pipe</a> 95949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastento an <a href="http://en.wikipedia.org/wiki/Communication_endpoint">endpoint</a>, 96949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastena data source or sink 97949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenprovided by one of the peripheral's functions. 98949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 99949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 100949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 101949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThere are two kinds of pipes: <i>message</i> and <i>stream</i>. 102949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenA message pipe is used for bi-directional control and status. 103949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenA stream pipe is used for uni-directional data transfer. 104949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 105949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 106949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 107949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe host initiates all data transfers, 108949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenhence the terms <i>input</i> and <i>output</i> are expressed relative to the host. 109949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAn input operation transfers data from the peripheral to the host, 110949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenwhile an output operation transfers data from the host to the peripheral. 111949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 112949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 113949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 114949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThere are three major data transfer modes: 115949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<i>interrupt</i>, <i>bulk</i>, and <i>isochronous</i>. 116949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIsochronous mode will be discussed further in the context of audio. 117949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 118949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 119949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 120949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe peripheral may have <i>terminals</i> that connect to the outside world, 121949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenbeyond the peripheral itself. In this way, the peripheral serves 122949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastento translate between USB protocol and "real world" signals. 123949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe terminals are logical objects of the function. 124949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 125949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 126949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h2 id="androidModes">Android USB modes</h2> 127949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 128949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="developmentMode">Development mode</h3> 129949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 130949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 131949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<i>Development mode</i> has been present since the initial release of Android. 132949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe Android device appears as a USB peripheral 133949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastento a host PC running a desktop operating system such as Linux, 134949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenMac OS X, or Windows. The only visible peripheral function is either 135949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/Android_software_development#Fastboot">Android fastboot</a> 136949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenor 137949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://developer.android.com/tools/help/adb.html">Android Debug Bridge (adb)</a>. 138949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe fastboot and adb protocols are layered over USB bulk data transfer mode. 139949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 140949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 141949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="hostMode">Host mode</h3> 142949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 143949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 144949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<i>Host mode</i> is introduced in Android 3.1 (API level 12). 145949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 146949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 147949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 148949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAs the Android device must act as host, and most Android devices include 149949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastena micro-USB connector that does not directly permit host operation, 150949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenan on-the-go (<a href="http://en.wikipedia.org/wiki/USB_On-The-Go">OTG</a>) adapter 151949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastensuch as this is usually required: 152949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 153949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 154949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<img src="audio/images/otg.jpg" style="image-orientation: 90deg;" height="50%" width="50%" alt="OTG"> 155949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 156949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 157949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAn Android device might not provide sufficient power to operate a 158949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenparticular peripheral, depending on how much power the peripheral needs, 159949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand how much the Android device is capable of supplying. Even if 160949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenadequate power is available, the Android device battery charge may 161949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenbe significantly shortened. For these situations, use a powered 162949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/USB_hub">hub</a> such as this: 163949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 164949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 165949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<img src="audio/images/hub.jpg" alt="Powered hub"> 166949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 167949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="accessoryMode">Accessory mode</h3> 168949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 169949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 170949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<i>Accessory mode</i> was introduced in Android 3.1 (API level 12) and back-ported to Android 2.3.4. 171949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn this mode, the Android device operates as a USB peripheral, 172949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenunder the control of another device such as a dock that serves as host. 173949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe difference between development mode and accessory mode 174949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenis that additional USB functions are visible to the host, beyond adb. 175949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe Android device begins in development mode and then 176949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastentransitions to accessory mode via a re-negotiation process. 177949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 178949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 179949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 180949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAccessory mode was extended with additional features in Android 4.1, 181949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenin particular audio described below. 182949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 183949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 184949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h2 id="audioClass">USB audio</h2> 185949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 186949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="class">USB classes</h3> 187949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 188949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 189949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenEach peripheral function has an associated <i>device class</i> document 190949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthat specifies the standard protocol for that function. 191949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThis enables <i>class compliant</i> hosts and peripheral functions 192949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastento inter-operate, without detailed knowledge of each other's workings. 193949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenClass compliance is critical if the host and peripheral are provided by 194949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastendifferent entities. 195949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 196949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 197949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 198949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe term <i>driverless</i> is a common synonym for <i>class compliant</i>, 199949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenindicating that it is possible to use the standard features of such a 200949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenperipheral without requiring an operating-system specific 201949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/Device_driver">driver</a> to be installed. 202949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenOne can assume that a peripheral advertised as "no driver needed" 203949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenfor major desktop operating systems 204949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenwill be class compliant, though there may be exceptions. 205949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 206949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 207949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="audioClass">USB audio class</h3> 208949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 209949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 210949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenHere we concern ourselves only with peripherals that implement 211949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenaudio functions, and thus adhere to the audio device class. There are two 212949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasteneditions of the USB audio class specification: class 1 (UAC1) and 2 (UAC2). 213949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 214949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 215949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="otherClasses">Comparison with other classes</h3> 216949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 217949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 218949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenUSB includes many other device classes, some of which may be confused 219949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenwith the audio class. The 220949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/USB_mass_storage_device_class">mass storage class</a> 221949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten(MSC) is used for 222949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastensector-oriented access to media, while 223949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/Media_Transfer_Protocol">Media Transfer Protocol</a> 224949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten(MTP) is for full file access to media. 225949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenBoth MSC and MTP may be used for transferring audio files, 226949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenbut only USB audio class is suitable for real-time streaming. 227949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 228949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 229949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="audioTerminals">Audio terminals</h3> 230949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 231949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 232949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe terminals of an audio peripheral are typically analog. 233949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe analog signal presented at the peripheral's input terminal is converted to digital by an 234949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/Analog-to-digital_converter">analog-to-digital converter</a> 235949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten(ADC), 236949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand is carried over USB protocol to be consumed by 237949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthe host. The ADC is a data <i>source</i> 238949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenfor the host. Similarly, the host sends a 239949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastendigital audio signal over USB protocol to the peripheral, where a 240949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/Digital-to-analog_converter">digital-to-analog converter</a> 241949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten(DAC) 242949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenconverts and presents to an analog output terminal. 243949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe DAC is a <i>sink</i> for the host. 244949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 245949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 246949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="channels">Channels</h3> 247949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 248949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 249949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenA peripheral with audio function can include a source terminal, sink terminal, or both. 250949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenEach direction may have one channel (<i>mono</i>), two channels 251949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten(<i>stereo</i>), or more. 252949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenPeripherals with more than two channels are called <i>multichannel</i>. 253949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIt is common to interpret a stereo stream as consisting of 254949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<i>left</i> and <i>right</i> channels, and by extension to interpret a multichannel stream as having 255949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenspatial locations corresponding to each channel. However, it is also quite appropriate 256949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten(especially for USB audio more so than 257949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/HDMI">HDMI</a>) 258949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastento not assign any particular 259949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenstandard spatial meaning to each channel. In this case, it is up to the 260949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenapplication and user to define how each channel is used. 261949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenFor example, a four-channel USB input stream might have the first three 262949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenchannels attached to various microphones within a room, and the final 263949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenchannel receiving input from an AM radio. 264949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 265949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 266949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="isochronous">Isochronous transfer mode</h3> 267949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 268949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 269949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenUSB audio uses isochronous transfer mode for its real-time characteristics, 270949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenat the expense of error recovery. 271949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn isochronous mode, bandwidth is guaranteed, and data transmission 272949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenerrors are detected using a cyclic redundancy check (CRC). But there is 273949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenno packet acknowledgement or re-transmission in the event of error. 274949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 275949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 276949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 277949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIsochronous transmissions occur each Start Of Frame (SOF) period. 278949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe SOF period is one millisecond for full-speed, and 125 microseconds for 279949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenhigh-speed. Each full-speed frame carries up to 1023 bytes of payload, 280949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand a high-speed frame carries up to 1024 bytes. Putting these together, 281949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenwe calculate the maximum transfer rate as 1,023,000 or 8,192,000 bytes 282949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenper second. This sets a theoretical upper limit on the combined audio 283949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastensample rate, channel count, and bit depth. The practical limit is lower. 284949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 285949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 286949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 287949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenWithin isochronous mode, there are three sub-modes: 288949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 289949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 290949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<ul> 291949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>Adaptive</li> 292949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>Asynchronous</li> 293949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>Synchronous</li> 294949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</ul> 295949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 296949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 297949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn adaptive sub-mode, the peripheral sink or source adapts to a potentially varying sample rate 298949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenof the host. 299949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 300949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 301949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 302949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn asynchronous (also called implicit feedback) sub-mode, 303949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthe sink or source determines the sample rate, and the host accomodates. 304949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe primary theoretical advantage of asynchronous sub-mode is that the source 305949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenor sink USB clock is physically and electrically closer to (and indeed may 306949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenbe the same as, or derived from) the clock that drives the DAC or ADC. 307949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThis proximity means that asynchronous sub-mode should be less susceptible 308949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastento clock jitter. In addition, the clock used by the DAC or ADC may be 309949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastendesigned for higher accuracy and lower drift than the host clock. 310949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 311949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 312949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 313949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn synchronous sub-mode, a fixed number of bytes is transferred each SOF period. 314949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe audio sample rate is effectively derived from the USB clock. 315949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenSynchronous sub-mode is not commonly used with audio because both 316949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenhost and peripheral are at the mercy of the USB clock. 317949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 318949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 319949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 320949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe table below summarizes the isochronous sub-modes: 321949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 322949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 323949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<table> 324949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<tr> 325949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <th>Sub-mode</th> 326949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <th>Byte count<br \>per packet</th> 327949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <th>Sample rate<br \>determined by</th> 328949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <th>Used for audio</th> 329949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</tr> 330949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<tr> 331949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>adaptive</td> 332949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>variable</td> 333949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>host</td> 334949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>yes</td> 335949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</tr> 336949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<tr> 337949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>asynchronous</td> 338949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>variable</td> 339949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>peripheral</td> 340949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>yes</td> 341949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</tr> 342949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<tr> 343949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>synchronous</td> 344949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>fixed</td> 345949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>USB clock</td> 346949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten <td>no</td> 347949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</tr> 348949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</table> 349949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 350949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 351949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn practice, the sub-mode does of course matter, but other factors 352949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenshould also be considered. 353949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 354949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 355949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h2 id="androidSupport">Android support for USB audio class</h2> 356949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 357949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="developmentAudio">Development mode</h3> 358949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 359949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 360949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenUSB audio is not supported in development mode. 361949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 362949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 363949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="hostAudio">Host mode</h3> 364949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 365949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 366949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAndroid 5.0 (API level 21) and above supports a subset of USB audio class 1 (UAC1) features: 367949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 368949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 369949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<ul> 370949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>The Android device must act as host</li> 371949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>The audio format must be PCM (interface type I)</li> 372949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>The bit depth must be 16-bits, 24-bits, or 32-bits where 373949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten24 bits of useful audio data are left-justified within the most significant 374949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenbits of the 32-bit word</li> 375949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>The sample rate must be either 48, 44.1, 32, 24, 22.05, 16, 12, 11.025, or 8 kHz</li> 376949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>The channel count must be 1 (mono) or 2 (stereo)</li> 377949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</ul> 378949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 379949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 380949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenPerusal of the Android framework source code may show additional code 381949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenbeyond the minimum needed to support these features. But this code 382949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenhas not been validated, so more advanced features are not yet claimed. 383949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 384949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 385949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="accessoryAudio">Accessory mode</h3> 386949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 387949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 388949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAndroid 4.1 (API level 16) added limited support for audio playback to the host. 389949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenWhile in accessory mode, Android automatically routes its audio output to USB. 390949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThat is, the Android device serves as a data source to the host, for example a dock. 391949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 392949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 393949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 394949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAccessory mode audio has these features: 395949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 396949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 397949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<ul> 398949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li> 399949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe Android device must be controlled by a knowledgeable host that 400949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastencan first transition the Android device from development mode to accessory mode, 401949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand then the host must transfer audio data from the appropriate endpoint. 402949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThus the Android device does not appear "driverless" to the host. 403949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</li> 404949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>The direction must be <i>input</i>, expressed relative to the host</li> 405949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>The audio format must be 16-bit PCM</li> 406949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>The sample rate must be 44.1 kHz</li> 407949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>The channel count must be 2 (stereo)</li> 408949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</ul> 409949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 410949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 411949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAccessory mode audio has not been widely adopted, 412949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand is not currently recommended for new designs. 413949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 414949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 415949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h2 id="applications">Applications of USB digital audio</h2> 416949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 417949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 418949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAs the name indicates, the USB digital audio signal is represented 419949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenby a <a href="http://en.wikipedia.org/wiki/Digital_data">digital</a> data stream 420949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenrather than the <a href="http://en.wikipedia.org/wiki/Analog_signal">analog</a> 421949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastensignal used by the common TRS mini 422949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href=" http://en.wikipedia.org/wiki/Phone_connector_(audio)">headset connector</a>. 423949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenEventually any digital signal must be converted to analog before it can be heard. 424949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThere are tradeoffs in choosing where to place that conversion. 425949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 426949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 427949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="comparison">A tale of two DACs</h3> 428949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 429949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 430949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn the example diagram below, we compare two designs. First we have a 431949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenmobile device with Application Processor (AP), on-board DAC, amplifier, 432949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand analog TRS connector attached to headphones. We also consider a 433949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenmobile device with USB connected to external USB DAC and amplifier, 434949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenalso with headphones. 435949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 436949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 437949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<img src="audio/images/dac.png" alt="DAC comparison"> 438949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 439949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 440949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenWhich design is better? The answer depends on your needs. 441949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenEach has advantages and disadvantages. 442949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<b>Note:</b> this is an artificial comparison, since 443949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastena real Android device would probably have both options available. 444949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 445949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 446949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 447949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe first design A is simpler, less expensive, uses less power, 448949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand will be a more reliable design assuming otherwise equally reliable components. 449949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenHowever, there are usually audio quality tradeoffs vs. other requirements. 450949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenFor example, if this is a mass-market device, it may be designed to fit 451949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthe needs of the general consumer, not for the audiophile. 452949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 453949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 454949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 455949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn the second design, the external audio peripheral C can be designed for 456949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenhigher audio quality and greater power output without impacting the cost of 457949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthe basic mass market Android device B. Yes, it is a more expensive design, 458949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenbut the cost is absorbed only by those who want it. 459949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 460949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 461949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 462949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenMobile devices are notorious for having high-density 463949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastencircuit boards, which can result in more opportunities for 464949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/Crosstalk_(electronics)">crosstalk</a> 465949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthat degrades adjacent analog signals. Digital communication is less susceptible to 466949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://en.wikipedia.org/wiki/Noise_(electronics)">noise</a>, 467949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenso moving the DAC from the Android device A to an external circuit board 468949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenC allows the final analog stages to be physically and electrically 469949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenisolated from the dense and noisy circuit board, resulting in higher fidelity audio. 470949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 471949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 472949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 473949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenOn the other hand, 474949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthe second design is more complex, and with added complexity come more 475949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenopportunities for things to fail. There is also additional latency 476949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenfrom the USB controllers. 477949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 478949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 479949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="applications">Applications</h3> 480949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 481949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 482949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenTypical USB host mode audio applications include: 483949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 484949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 485949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<ul> 486949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>music listening</li> 487949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>telephony</li> 488949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>instant messaging and voice chat</li> 489949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>recording</li> 490949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</ul> 491949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 492949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 493949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenFor all of these applications, Android detects a compatible USB digital 494949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenaudio peripheral, and automatically routes audio playback and capture 495949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenappropriately, based on the audio policy rules. 496949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenStereo content is played on the first two channels of the peripheral. 497949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 498949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 499949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 500949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThere are no APIs specific to USB digital audio. 501949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenFor advanced usage, the automatic routing may interfere with applications 502949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthat are USB-aware. For such applications, disable automatic routing 503949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenvia the corresponding control in the Media section of 504949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<a href="http://developer.android.com/tools/index.html">Settings / Developer Options</a>. 505949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 506949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 507949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h2 id="compatibility">Implementing USB audio</h2> 508949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 509949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="recommendationsPeripheral">Recommendations for audio peripheral vendors</h3> 510949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 511949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 512949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn order to inter-operate with Android devices, audio peripheral vendors should: 513949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 514949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 515949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<ul> 516949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>design for audio class compliance; 517949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastencurrently Android targets class 1, but it is wise to plan for class 2</li> 518949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>avoid <a href="http://en.wiktionary.org/wiki/quirk">quirks</a> 519949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>test for inter-operability with reference and popular Android devices</li> 520949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>clearly document supported features, audio class compliance, power requirements, etc. 521949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenso that consumers can make informed decisions</li> 522949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</ul> 523949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 524949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="recommendationsAndroid">Recommendations for Android device OEMs and SoC vendors</h3> 525949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 526949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 527949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenIn order to support USB digital audio, device OEMs and SoC vendors should: 528949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 529949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 530949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<ul> 531949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>enable all kernel features needed: USB host mode, USB audio, isochronous transfer mode</li> 532949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>keep up-to-date with recent kernel releases and patches; 533949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastendespite the noble goal of class compliance, there are extant audio peripherals 534949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenwith <a href="http://en.wiktionary.org/wiki/quirk">quirks</a>, 535949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand recent kernels have workarounds for such quirks 536949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</li> 537949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>enable USB audio policy as described below</li> 538949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<li>test for inter-operability with common USB audio peripherals</li> 539949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</ul> 540949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 541949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="enable">How to enable USB audio policy</h3> 542949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 543949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 544949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenTo enable USB audio, add an entry to the 545949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenaudio policy configuration file. This is typically 546949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenlocated here: 547949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<pre>device/oem/codename/audio_policy.conf</pre> 548949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe pathname component "oem" should be replaced by the name 549949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenof the OEM who manufactures the Android device, 550949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenand "codename" should be replaced by the device code name. 551949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 552949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 553949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 554949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenAn example entry is shown here: 555949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 556949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 557949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<pre> 558949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenaudio_hw_modules { 559949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten ... 560949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten usb { 561949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten outputs { 562949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten usb_accessory { 563949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten sampling_rates 44100 564949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten channel_masks AUDIO_CHANNEL_OUT_STEREO 565949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten formats AUDIO_FORMAT_PCM_16_BIT 566949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten devices AUDIO_DEVICE_OUT_USB_ACCESSORY 567949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten } 568949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten usb_device { 569949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten sampling_rates dynamic 570949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten channel_masks dynamic 571949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten formats dynamic 572949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten devices AUDIO_DEVICE_OUT_USB_DEVICE 573949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten } 574949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten } 575949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten inputs { 576949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten usb_device { 577949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten sampling_rates dynamic 578949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten channel_masks AUDIO_CHANNEL_IN_STEREO 579949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten formats AUDIO_FORMAT_PCM_16_BIT 580949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten devices AUDIO_DEVICE_IN_USB_DEVICE 581949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten } 582949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten } 583949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten } 584949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten ... 585949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten} 586949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</pre> 587949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 588949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<h3 id="sourceCode">Source code</h3> 589949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten 590949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<p> 591949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe audio Hardware Abstraction Layer (HAL) 592949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenimplementation for USB audio is located here: 593949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<pre>hardware/libhardware/modules/usbaudio/</pre> 594949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThe USB audio HAL relies heavily on 595949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten<i>tinyalsa</i>, described at <a href="audio_terminology.html">Audio Terminology</a>. 596949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenThough USB audio relies on isochronous transfers, 597949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthis is abstracted away by the ALSA implementation. 598949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn KastenSo the USB audio HAL and tinyalsa do not need to concern 599949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kastenthemselves with this part of USB protocol. 600949ae0bfad29dfa140bece1c4851f4d930c036e7Glenn Kasten</p> 601