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