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