Adding docs to all public objects
diff --git a/docs/reference/_audio_stream_8h_source.html b/docs/reference/_audio_stream_8h_source.html
deleted file mode 100644
index 458f302..0000000
--- a/docs/reference/_audio_stream_8h_source.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/AudioStream.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">AudioStream.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;ctime&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;oboe/ResultWithValue.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBuilder.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBase.h&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="namespaceoboe.html">   29</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;constexpr int64_t kDefaultTimeoutNanos = (2000 * kNanosPerMillisecond);</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html">   36</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> : <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> {</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>() {}</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> &amp;builder);</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keyword">virtual</span> Result <a class="code" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">open</a>();</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    <span class="keyword">virtual</span> Result <a class="code" href="classoboe_1_1_audio_stream.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a>() = 0;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="comment">/*</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">     * These are synchronous and will block until the operation is complete.</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="keyword">virtual</span> Result start(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="keyword">virtual</span> Result pause(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keyword">virtual</span> Result flush(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="keyword">virtual</span> Result stop(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="comment">/* Asynchronous requests.</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">     * Use waitForStateChange() if you need to wait for completion.</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keyword">virtual</span> Result requestStart() = 0;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keyword">virtual</span> Result requestPause() = 0;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keyword">virtual</span> Result requestFlush() = 0;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keyword">virtual</span> Result requestStop() = 0;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keyword">virtual</span> StreamState <a class="code" href="classoboe_1_1_audio_stream.html#a47bb5798275f14d76444283a6b6f35eb">getState</a>() = 0;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keyword">virtual</span> Result <a class="code" href="classoboe_1_1_audio_stream.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(StreamState inputState,</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;                                          StreamState *nextState,</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;                                          int64_t timeoutNanoseconds) = 0;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#ac93b18e18487e809151f63ec3c6228bb">  122</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="classoboe_1_1_audio_stream.html#ac93b18e18487e809151f63ec3c6228bb">setBufferSizeInFrames</a>(int32_t requestedFrames) {</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    }</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">  138</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;int32_t&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    }</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>() = 0;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keywordtype">bool</span> isPlaying();</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    int32_t getBytesPerFrame()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mChannelCount * getBytesPerSample(); }</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    int32_t getBytesPerSample() <span class="keyword">const</span>;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">  164</a></span>&#160;    <span class="keyword">virtual</span> int64_t <a class="code" href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>() { <span class="keywordflow">return</span> mFramesWritten; }</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keyword">virtual</span> int64_t getFramesRead() { <span class="keywordflow">return</span> mFramesRead; }</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">  191</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;double&gt;</a> <a class="code" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>() {</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;double&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    }</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="keyword">virtual</span> Result getTimestamp(clockid_t clockId,</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                                int64_t *framePosition,</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;                                int64_t *timeNanoseconds) {</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;        <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    }</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <span class="comment">// ============== I/O ===========================</span></div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#ab3f6bf8abed87f3804ac4df3472c3670">  213</a></span>&#160;<span class="comment"></span>    <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="classoboe_1_1_audio_stream.html#ab3f6bf8abed87f3804ac4df3472c3670">write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer,</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;                             int32_t numFrames,</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;                             int64_t timeoutNanoseconds) {</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;int32_t&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    }</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;int32_t&gt;</a> read(<span class="keywordtype">void</span> *buffer,</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;                            int32_t numFrames,</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;                            int64_t timeoutNanoseconds) {</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;int32_t&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    }</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> <a class="code" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">  234</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() == <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AudioApi::AAudio</a>;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    }</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">  246</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> *<a class="code" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    }</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <span class="keyword">virtual</span> int64_t incrementFramesWritten(int32_t frames) {</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <span class="keywordflow">return</span> mFramesWritten += frames;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    }</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    <span class="keyword">virtual</span> int64_t incrementFramesRead(int32_t frames) {</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        <span class="keywordflow">return</span> mFramesRead += frames;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    }</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    <span class="keyword">virtual</span> Result <a class="code" href="classoboe_1_1_audio_stream.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(StreamState startingState,</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;                                          StreamState endingState,</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;                                          int64_t timeoutNanoseconds);</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#abda7ae8e6832030572785de3964ed848">  276</a></span>&#160;    <span class="keyword">virtual</span> DataCallbackResult <a class="code" href="classoboe_1_1_audio_stream.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a>(<span class="keywordtype">void</span> *audioData, <span class="keywordtype">int</span> numFrames) {</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        <span class="keywordflow">return</span> DataCallbackResult::Stop;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    }</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    DataCallbackResult fireCallback(<span class="keywordtype">void</span> *audioData, <span class="keywordtype">int</span> numFrames);</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> setNativeFormat(AudioFormat format) {</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        mNativeFormat = format;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    }</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="comment">// TODO: make private</span></div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    <span class="comment">// These do not change after open.</span></div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    AudioFormat mNativeFormat = AudioFormat::Invalid;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    <span class="comment">// TODO these should be atomic like in AAudio</span></div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    int64_t              mFramesWritten = 0;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    int64_t              mFramesRead = 0;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    <span class="comment">// TODO these should be atomic like in AAudio</span></div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="keywordtype">int</span>                  mPreviousScheduler = -1;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;};</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">oboe::AudioApi::AAudio</a></div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:28</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a15cdaaaa4c1e8da322d6da33334c8147"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">oboe::AudioStream::usesAAudio</a></div><div class="ttdeci">bool usesAAudio() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:234</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_ad1a1d3bbf3b348ed92b7ed18ce9cc261"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">oboe::AudioStream::getXRunCount</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; getXRunCount() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:138</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a5458d7130415eb4defe3dbc11d479e2f"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">oboe::AudioStream::getUnderlyingStream</a></div><div class="ttdeci">virtual void * getUnderlyingStream() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:246</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_ab43dd4074e1de57bac1c3fd111430341"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">oboe::AudioStream::getFramesWritten</a></div><div class="ttdeci">virtual int64_t getFramesWritten()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:164</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_ad33a20f0d6792e322b9d8a2bcf14fcf8"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">oboe::AudioStream::close</a></div><div class="ttdeci">virtual Result close()=0</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_ac93b18e18487e809151f63ec3c6228bb"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ac93b18e18487e809151f63ec3c6228bb">oboe::AudioStream::setBufferSizeInFrames</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; setBufferSizeInFrames(int32_t requestedFrames)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:122</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a47bb5798275f14d76444283a6b6f35eb"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a47bb5798275f14d76444283a6b6f35eb">oboe::AudioStream::getState</a></div><div class="ttdeci">virtual StreamState getState()=0</div></div>
-<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:141</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a8adbacd6a55a94a532916ab037fba1d6"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a8adbacd6a55a94a532916ab037fba1d6">oboe::AudioStream::waitForStateTransition</a></div><div class="ttdeci">virtual Result waitForStateTransition(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_ac160acb656515814fa6fdd157c131a0a"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a">oboe::AudioStream::getFramesPerBurst</a></div><div class="ttdeci">virtual int32_t getFramesPerBurst()=0</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_ae023cb001f3261d064f423101798d6be"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">oboe::AudioStream::calculateLatencyMillis</a></div><div class="ttdeci">virtual ResultWithValue&lt; double &gt; calculateLatencyMillis()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:191</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a686c6ce8a29051c858fd1de386805dc6"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">oboe::AudioStream::open</a></div><div class="ttdeci">virtual Result open()</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html"><div class="ttname"><a href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:36</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:34</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_ab3f6bf8abed87f3804ac4df3472c3670"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ab3f6bf8abed87f3804ac4df3472c3670">oboe::AudioStream::write</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; write(const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:213</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_abda7ae8e6832030572785de3964ed848"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#abda7ae8e6832030572785de3964ed848">oboe::AudioStream::onDefaultCallback</a></div><div class="ttdeci">virtual DataCallbackResult onDefaultCallback(void *audioData, int numFrames)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:276</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a2b7a3cee7444114843dbdd1fc705f6bb"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">oboe::AudioStream::getAudioApi</a></div><div class="ttdeci">virtual AudioApi getAudioApi() const =0</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a0c865a5501f369d959c39d8ab8b46a07"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a0c865a5501f369d959c39d8ab8b46a07">oboe::AudioStream::waitForStateChange</a></div><div class="ttdeci">virtual Result waitForStateChange(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</div></div>
-<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a43d8a098440cde28f4ee8bedd6d107c4"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">oboe::AudioStream::isXRunCountSupported</a></div><div class="ttdeci">virtual bool isXRunCountSupported() const =0</div></div>
-<div class="ttc" id="classoboe_1_1_result_with_value_html"><div class="ttname"><a href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue</a></div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:27</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/_audio_stream_base_8h_source.html b/docs/reference/_audio_stream_base_8h_source.html
deleted file mode 100644
index 6633e44..0000000
--- a/docs/reference/_audio_stream_base_8h_source.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/AudioStreamBase.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">AudioStreamBase.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamCallback.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html">   34</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> {</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="comment">// This class only contains primitives so we can use default constructor and copy methods.</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#aa0b0a068097efaf967fb235c55383dd8">   49</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mChannelCount; }</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">   54</a></span>&#160;    Direction <a class="code" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mDirection; }</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">   59</a></span>&#160;    int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mSampleRate; }</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">   64</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mFramesPerCallback; }</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">   70</a></span>&#160;    AudioFormat <a class="code" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mFormat; }</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">   78</a></span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>() { <span class="keywordflow">return</span> mBufferSizeInFrames; };</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">   83</a></span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mBufferCapacityInFrames; }</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <a class="code" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> getSharingMode()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mSharingMode; }</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    PerformanceMode getPerformanceMode()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mPerformanceMode; }</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    int32_t getDeviceId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mDeviceId; }</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    AudioStreamCallback* getCallback()<span class="keyword"> const </span>{</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        <span class="keywordflow">return</span> mStreamCallback;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    }</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> getUsage()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mUsage; }</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <a class="code" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a> getContentType()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mContentType; }</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> getInputPreset()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mInputPreset; }</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> getSessionId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mSessionId; }</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    AudioStreamCallback            *mStreamCallback = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    int32_t                         mFramesPerCallback = kUnspecified;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    int32_t                         mChannelCount = kUnspecified;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    int32_t                         mSampleRate = kUnspecified;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    int32_t                         mDeviceId = kUnspecified;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    int32_t                         mBufferCapacityInFrames = kUnspecified;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    int32_t                         mBufferSizeInFrames = kUnspecified;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    int32_t                         mFramesPerBurst = kUnspecified;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <a class="code" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>                     mSharingMode = <a class="code" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a>;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    AudioFormat                     mFormat = AudioFormat::Unspecified;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    Direction                       mDirection = Direction::Output;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    PerformanceMode                 mPerformanceMode = PerformanceMode::None;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="comment">// Added in API 28</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>                           mUsage = <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a>;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <a class="code" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a>                     mContentType = ContentType::Music;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>                     mInputPreset = InputPreset::VoiceRecognition;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>                       mSessionId = SessionId::None;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;};</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BASE_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">oboe::Usage::Media</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:314</div></div>
-<div class="ttc" id="namespaceoboe_html_ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca"><div class="ttname"><a href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">oboe::SharingMode::Shared</a></div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab1e640461d7bf9d596decb913da7ac86"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">oboe::AudioStreamBase::getFormat</a></div><div class="ttdeci">AudioFormat getFormat() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:70</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae9d32f3e09174bad69e74f147ee33087"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">oboe::AudioStreamBase::getSampleRate</a></div><div class="ttdeci">int32_t getSampleRate() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:59</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:34</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_af5217ab05bfde0d7637024b599302d0b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">oboe::AudioStreamBase::getBufferSizeInFrames</a></div><div class="ttdeci">virtual int32_t getBufferSizeInFrames()</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:78</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_aa0b0a068097efaf967fb235c55383dd8"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#aa0b0a068097efaf967fb235c55383dd8">oboe::AudioStreamBase::getChannelCount</a></div><div class="ttdeci">int getChannelCount() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:49</div></div>
-<div class="ttc" id="namespaceoboe_html_a07eed38097ed944422063801f8f83406"><div class="ttname"><a href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:252</div></div>
-<div class="ttc" id="namespaceoboe_html_ae3a52556c58387e0cecba01f9abffdff"><div class="ttname"><a href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:113</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab1531253e64aaebe9e9eddbafb9098fc"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">oboe::AudioStreamBase::getBufferCapacityInFrames</a></div><div class="ttdeci">virtual int32_t getBufferCapacityInFrames() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:83</div></div>
-<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="namespaceoboe_html_a17f63a064de966efddd5d0335992bc04"><div class="ttname"><a href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:285</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a6f86f2233a04c5a0b056f0c1c261f1b1"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">oboe::AudioStreamBase::getDirection</a></div><div class="ttdeci">Direction getDirection() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:54</div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbb"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:174</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1c133e1949f0814f60bd8bb61346756b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">oboe::AudioStreamBase::getFramesPerCallback</a></div><div class="ttdeci">int getFramesPerCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:64</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/_audio_stream_builder_8h_source.html b/docs/reference/_audio_stream_builder_8h_source.html
deleted file mode 100644
index e344244..0000000
--- a/docs/reference/_audio_stream_builder_8h_source.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/AudioStreamBuilder.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">AudioStreamBuilder.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBase.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html">   28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> : <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> {</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>() : <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">   39</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(<span class="keywordtype">int</span> channelCount) {</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;        mChannelCount = channelCount;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    }</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">   49</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">setDirection</a>(Direction direction) {</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;        mDirection = direction;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    }</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">   65</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a>(int32_t sampleRate) {</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        mSampleRate = sampleRate;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    }</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">   84</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(<span class="keywordtype">int</span> framesPerCallback) {</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        mFramesPerCallback = framesPerCallback;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    }</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">   95</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(AudioFormat format) {</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        mFormat = format;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    }</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">  109</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames) {</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        mBufferCapacityInFrames = bufferCapacityInFrames;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    }</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> getAudioApi()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mAudioApi; }</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">  125</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(<a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> audioApi) {</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        mAudioApi = audioApi;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    }</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>();</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>();</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654">  156</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a>(<a class="code" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> sharingMode) {</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        mSharingMode = sharingMode;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    }</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">  169</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a>(PerformanceMode performanceMode) {</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;        mPerformanceMode = performanceMode;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    }</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">  187</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a>(<a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> usage) {</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        mUsage = usage;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    }</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">  204</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(<a class="code" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a> contentType) {</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        mContentType = contentType;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    }</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">  224</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a>(<a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> inputPreset) {</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;        mInputPreset = inputPreset;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    }</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d">  253</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d">setSessionId</a>(<a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> sessionId) {</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        mSessionId = sessionId;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    }</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">  270</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a>(int32_t deviceId) {</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        mDeviceId = deviceId;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    }</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">  293</a></span>&#160;    <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(<a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *streamCallback) {</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        mStreamCallback = streamCallback;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    }</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    Result <a class="code" href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> **stream);</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <a class="code" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a> *build();</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a>       mAudioApi = AudioApi::Unspecified;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;};</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BUILDER_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classoboe_1_1_audio_stream_builder_html_af36ddcd00686a9e1de661bdac0685a8e"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">oboe::AudioStreamBuilder::setDeviceId</a></div><div class="ttdeci">AudioStreamBuilder * setDeviceId(int32_t deviceId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:270</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:28</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a6cd1d65612e844e59da71a68ea0ab3ee"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">oboe::AudioStreamBuilder::setPerformanceMode</a></div><div class="ttdeci">AudioStreamBuilder * setPerformanceMode(PerformanceMode performanceMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:169</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a622732bbe5c6577356d749f7dc2108df"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">oboe::AudioStreamBuilder::isAAudioRecommended</a></div><div class="ttdeci">static bool isAAudioRecommended()</div></div>
-<div class="ttc" id="namespaceoboe_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:314</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a54c1651bdbe089d0d714af499e8a5f1d"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d">oboe::AudioStreamBuilder::setSessionId</a></div><div class="ttdeci">AudioStreamBuilder * setSessionId(SessionId sessionId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:253</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:26</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a6a17bafc217c2b624179fbbf77fe4468"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">oboe::AudioStreamBuilder::setContentType</a></div><div class="ttdeci">AudioStreamBuilder * setContentType(ContentType contentType)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:204</div></div>
-<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:141</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a593255a2f5eb972665775cfc5bc58f6a"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">oboe::AudioStreamBuilder::setUsage</a></div><div class="ttdeci">AudioStreamBuilder * setUsage(Usage usage)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:187</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a18e7b5f7554a4c2ca763e35e8117d699"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">oboe::AudioStreamBuilder::isAAudioSupported</a></div><div class="ttdeci">static bool isAAudioSupported()</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a3f397821f61eabaeedaf31064c859a54"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">oboe::AudioStreamBuilder::setFramesPerCallback</a></div><div class="ttdeci">AudioStreamBuilder * setFramesPerCallback(int framesPerCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:84</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_ab3fbd47b06197619c26393637e26354c"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">oboe::AudioStreamBuilder::setDirection</a></div><div class="ttdeci">AudioStreamBuilder * setDirection(Direction direction)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:49</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">oboe::AudioStreamBuilder::setFormat</a></div><div class="ttdeci">AudioStreamBuilder * setFormat(AudioFormat format)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:95</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html"><div class="ttname"><a href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:36</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a38c6d6c5e718df1e3ac69daaac47c391"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">oboe::AudioStreamBuilder::setAudioApi</a></div><div class="ttdeci">AudioStreamBuilder * setAudioApi(AudioApi audioApi)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:125</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a144a3d095fd668210282f1a91f23e1f0"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">oboe::AudioStreamBuilder::setInputPreset</a></div><div class="ttdeci">AudioStreamBuilder * setInputPreset(InputPreset inputPreset)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:224</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a30ef3d5f51d56a9f980dc09600ed139d"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">oboe::AudioStreamBuilder::setSampleRate</a></div><div class="ttdeci">AudioStreamBuilder * setSampleRate(int32_t sampleRate)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:65</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:34</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_abaff480867af51ca0899bfa6fd7cc3ef"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">oboe::AudioStreamBuilder::setBufferCapacityInFrames</a></div><div class="ttdeci">AudioStreamBuilder * setBufferCapacityInFrames(int32_t bufferCapacityInFrames)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:109</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a86b94cfa47729bef2e04dce1a9086074"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">oboe::AudioStreamBuilder::openStream</a></div><div class="ttdeci">Result openStream(AudioStream **stream)</div></div>
-<div class="ttc" id="namespaceoboe_html_a07eed38097ed944422063801f8f83406"><div class="ttname"><a href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:252</div></div>
-<div class="ttc" id="namespaceoboe_html_ae3a52556c58387e0cecba01f9abffdff"><div class="ttname"><a href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:113</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a3e991742acbbfb6fe5ebcf592c478654"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654">oboe::AudioStreamBuilder::setSharingMode</a></div><div class="ttdeci">AudioStreamBuilder * setSharingMode(SharingMode sharingMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:156</div></div>
-<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="namespaceoboe_html_a17f63a064de966efddd5d0335992bc04"><div class="ttname"><a href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:285</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a075d10291e1f998d90c2f73ef767b5a7"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">oboe::AudioStreamBuilder::setChannelCount</a></div><div class="ttdeci">AudioStreamBuilder * setChannelCount(int channelCount)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:39</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a698cefa9af73bc97c020c004821fccbd"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">oboe::AudioStreamBuilder::setCallback</a></div><div class="ttdeci">AudioStreamBuilder * setCallback(AudioStreamCallback *streamCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:293</div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbb"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:174</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/_audio_stream_callback_8h_source.html b/docs/reference/_audio_stream_callback_8h_source.html
deleted file mode 100644
index 919e471..0000000
--- a/docs/reference/_audio_stream_callback_8h_source.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/AudioStreamCallback.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">AudioStreamCallback.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">class </span>AudioStream;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_callback.html">   26</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> {</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keyword">virtual</span> DataCallbackResult <a class="code" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a>(</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;            <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream,</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;            <span class="keywordtype">void</span> *audioData,</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;            int32_t numFrames) = 0;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_callback.html#a2407ff537a60301fd161bd2c36913bfd">   51</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream_callback.html#a2407ff537a60301fd161bd2c36913bfd">onErrorBeforeClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, Result error) {}</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_callback.html#a7089c5e18a80cba89eb3f4fe2341aeba">   63</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream_callback.html#a7089c5e18a80cba89eb3f4fe2341aeba">onErrorAfterClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, Result error) {}</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;};</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor">#endif //OBOE_STREAM_CALLBACK_H</span></div><div class="ttc" id="classoboe_1_1_audio_stream_callback_html_a7089c5e18a80cba89eb3f4fe2341aeba"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html#a7089c5e18a80cba89eb3f4fe2341aeba">oboe::AudioStreamCallback::onErrorAfterClose</a></div><div class="ttdeci">virtual void onErrorAfterClose(AudioStream *oboeStream, Result error)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:63</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html_a2407ff537a60301fd161bd2c36913bfd"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html#a2407ff537a60301fd161bd2c36913bfd">oboe::AudioStreamCallback::onErrorBeforeClose</a></div><div class="ttdeci">virtual void onErrorBeforeClose(AudioStream *oboeStream, Result error)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:51</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:26</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html_af3a7c44f0254abe6e5e5bb566e2317df"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">oboe::AudioStreamCallback::onAudioReady</a></div><div class="ttdeci">virtual DataCallbackResult onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames)=0</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html"><div class="ttname"><a href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:36</div></div>
-<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/_definitions_8h_source.html b/docs/reference/_definitions_8h_source.html
deleted file mode 100644
index 12caaed..0000000
--- a/docs/reference/_definitions_8h_source.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/Definitions.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">Definitions.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;aaudio/AAudio.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment">// Ensure that all AAudio primitive data types are int32_t</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#define ASSERT_INT32(type) static_assert(std::is_same&lt;int32_t, type&gt;::value, \</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#type&quot; must be int32_t&quot;)</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;ASSERT_INT32(aaudio_stream_state_t);</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;ASSERT_INT32(aaudio_direction_t);</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;ASSERT_INT32(aaudio_format_t);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;ASSERT_INT32(aaudio_data_callback_result_t);</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;ASSERT_INT32(aaudio_result_t);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;ASSERT_INT32(aaudio_sharing_mode_t);</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;ASSERT_INT32(aaudio_performance_mode_t);</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    constexpr int32_t kUnspecified = 0;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="comment">// TODO: Investigate using std::chrono</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    constexpr int64_t kNanosPerMicrosecond =    1000;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    constexpr int64_t kNanosPerMillisecond =    kNanosPerMicrosecond * 1000;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    constexpr int64_t kMillisPerSecond =        1000;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    constexpr int64_t kNanosPerSecond =         kNanosPerMillisecond * kMillisPerSecond;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keyword">enum class</span> StreamState : aaudio_stream_state_t {</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;        Uninitialized = AAUDIO_STREAM_STATE_UNINITIALIZED,</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;        Unknown = AAUDIO_STREAM_STATE_UNKNOWN,</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;        Open = AAUDIO_STREAM_STATE_OPEN,</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;        Starting = AAUDIO_STREAM_STATE_STARTING,</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        Started = AAUDIO_STREAM_STATE_STARTED,</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;        Pausing = AAUDIO_STREAM_STATE_PAUSING,</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        Paused = AAUDIO_STREAM_STATE_PAUSED,</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;        Flushing = AAUDIO_STREAM_STATE_FLUSHING,</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        Flushed = AAUDIO_STREAM_STATE_FLUSHED,</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;        Stopping = AAUDIO_STREAM_STATE_STOPPING,</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        Stopped = AAUDIO_STREAM_STATE_STOPPED,</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        Closing = AAUDIO_STREAM_STATE_CLOSING,</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        Closed = AAUDIO_STREAM_STATE_CLOSED,</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        Disconnected = AAUDIO_STREAM_STATE_DISCONNECTED,</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    };</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="keyword">enum class</span> Direction : aaudio_direction_t {</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;        Output = AAUDIO_DIRECTION_OUTPUT,</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        Input = AAUDIO_DIRECTION_INPUT,</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    };</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keyword">enum class</span> AudioFormat : aaudio_format_t {</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        Invalid = AAUDIO_FORMAT_INVALID,</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;        <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = AAUDIO_FORMAT_UNSPECIFIED,</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        I16 = AAUDIO_FORMAT_PCM_I16,</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;        Float = AAUDIO_FORMAT_PCM_FLOAT,</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    };</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keyword">enum class</span> DataCallbackResult : aaudio_data_callback_result_t {</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        Continue = AAUDIO_CALLBACK_RESULT_CONTINUE,</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        Stop = AAUDIO_CALLBACK_RESULT_STOP,</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    };</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keyword">enum class</span> Result : aaudio_result_t {</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        OK,</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        ErrorBase = AAUDIO_ERROR_BASE,</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        ErrorDisconnected = AAUDIO_ERROR_DISCONNECTED,</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        ErrorIllegalArgument = AAUDIO_ERROR_ILLEGAL_ARGUMENT,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        ErrorInternal = AAUDIO_ERROR_INTERNAL,</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        ErrorInvalidState = AAUDIO_ERROR_INVALID_STATE,</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        ErrorInvalidHandle = AAUDIO_ERROR_INVALID_HANDLE,</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;        ErrorUnimplemented = AAUDIO_ERROR_UNIMPLEMENTED,</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;        ErrorUnavailable = AAUDIO_ERROR_UNAVAILABLE,</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        ErrorNoFreeHandles = AAUDIO_ERROR_NO_FREE_HANDLES,</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        ErrorNoMemory = AAUDIO_ERROR_NO_MEMORY,</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        ErrorNull = AAUDIO_ERROR_NULL,</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        ErrorTimeout = AAUDIO_ERROR_TIMEOUT,</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        ErrorWouldBlock = AAUDIO_ERROR_WOULD_BLOCK,</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        ErrorInvalidFormat = AAUDIO_ERROR_INVALID_FORMAT,</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        ErrorOutOfRange = AAUDIO_ERROR_OUT_OF_RANGE,</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        ErrorNoService = AAUDIO_ERROR_NO_SERVICE,</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        ErrorInvalidRate = AAUDIO_ERROR_INVALID_RATE,</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;        <span class="comment">// Reserved for future AAudio result types</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;        Reserved1,</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        Reserved2,</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        Reserved3,</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        Reserved4,</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        Reserved5,</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        Reserved6,</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        Reserved7,</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        Reserved8,</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        Reserved9,</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        Reserved10,</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        ErrorClosed,</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    };</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">  113</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> : aaudio_sharing_mode_t {</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <a class="code" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971">Exclusive</a> = AAUDIO_SHARING_MODE_EXCLUSIVE,</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        <a class="code" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">Shared</a> = AAUDIO_SHARING_MODE_SHARED,</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    };</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keyword">enum class</span> PerformanceMode : aaudio_performance_mode_t {</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        <span class="comment">// No particular performance needs. Default.</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = AAUDIO_PERFORMANCE_MODE_NONE,</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="comment">// Extending battery life is most important.</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        PowerSaving = AAUDIO_PERFORMANCE_MODE_POWER_SAVING,</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        <span class="comment">// Reducing latency is most important.</span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        LowLatency = AAUDIO_PERFORMANCE_MODE_LOW_LATENCY</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    };</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">  141</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> : int32_t {</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = kUnspecified,</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b">OpenSLES</a>,</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AAudio</a></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    };</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment">// Hard code constants so they can be compiled with versions of the NDK before P.</span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="preprocessor">#if __ANDROID_API_LEVEL__ &gt;= __ANDROID_API_P__</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="preprocessor">#define CONSTANT_API_P(hard_constant, soft_constant) (soft_constant)</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="preprocessor">#define CONSTANT_API_P(hard_constant, soft_constant) (hard_constant)</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">  174</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> : aaudio_usage_t {</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Media</a> = CONSTANT_API_P(1, AAUDIO_USAGE_MEDIA),</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        <a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = CONSTANT_API_P(2, AAUDIO_USAGE_VOICE_COMMUNICATION),</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74">VoiceCommunicationSignalling</a> = CONSTANT_API_P(3,</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;                                                      AAUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING),</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba46c4c4d980dfe025ae5b35aa0011dde4">Alarm</a> = CONSTANT_API_P(4, AAUDIO_USAGE_ALARM),</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71">Notification</a> = CONSTANT_API_P(5, AAUDIO_USAGE_NOTIFICATION),</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf">NotificationRingtone</a> = CONSTANT_API_P(6, AAUDIO_USAGE_NOTIFICATION_RINGTONE),</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f">NotificationEvent</a> = CONSTANT_API_P(10, AAUDIO_USAGE_NOTIFICATION_EVENT),</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba639ffd54516c1a84a288a363c9469df8">AssistanceAccessibility</a> = CONSTANT_API_P(11, AAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY),</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbbade058a1314f9a8504593259ff4f21a1e">AssistanceNavigationGuidance</a> = CONSTANT_API_P(12,</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;                                                      AAUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE),</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7">AssistanceSonification</a> = CONSTANT_API_P(13, AAUDIO_USAGE_ASSISTANCE_SONIFICATION),</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb">Game</a> = CONSTANT_API_P(14, AAUDIO_USAGE_GAME),</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;        <a class="code" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b">Assistant</a> = CONSTANT_API_P(16, AAUDIO_USAGE_ASSISTANT),</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    };</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">  252</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a> : aaudio_content_type_t {</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">  257</a></span>&#160;        <a class="code" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">Speech</a> = CONSTANT_API_P(1, AAUDIO_CONTENT_TYPE_SPEECH),</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">  262</a></span>&#160;        <a class="code" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">Music</a> = CONSTANT_API_P(2, AAUDIO_CONTENT_TYPE_MUSIC),</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">  267</a></span>&#160;        <a class="code" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">Movie</a> = CONSTANT_API_P(3, AAUDIO_CONTENT_TYPE_MOVIE),</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">  273</a></span>&#160;        <a class="code" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">Sonification</a> = CONSTANT_API_P(4, AAUDIO_CONTENT_TYPE_SONIFICATION),</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    };</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">  285</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> : aaudio_input_preset_t {</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">  289</a></span>&#160;        <a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">Generic</a> = CONSTANT_API_P(1, AAUDIO_INPUT_PRESET_GENERIC),</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">  294</a></span>&#160;        <a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">Camcorder</a> = CONSTANT_API_P(5, AAUDIO_INPUT_PRESET_CAMCORDER),</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">  299</a></span>&#160;        <a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">VoiceRecognition</a> = CONSTANT_API_P(6, AAUDIO_INPUT_PRESET_VOICE_RECOGNITION),</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">  304</a></span>&#160;        <a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = CONSTANT_API_P(7, AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION),</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">  311</a></span>&#160;        <a class="code" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">Unprocessed</a> = CONSTANT_API_P(9, AAUDIO_INPUT_PRESET_UNPROCESSED),</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    };</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">  314</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> {</div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">  322</a></span>&#160;         <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = CONSTANT_API_P(-1, AAUDIO_SESSION_ID_NONE),</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">  333</a></span>&#160;         <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">Allocate</a> = CONSTANT_API_P(0, AAUDIO_SESSION_ID_ALLOCATE),</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    };</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029">  336</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029">ChannelCount</a> : int32_t {</div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">  340</a></span>&#160;      <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = kUnspecified,</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">  345</a></span>&#160;      <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">Mono</a> = 1,</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">  350</a></span>&#160;      <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">Stereo</a> = 2,</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    };</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;<span class="preprocessor">#undef CONSTANT_API_P</span></div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html">  355</a></span>&#160;    <span class="keyword">class </span><a class="code" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a> {</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">  377</a></span>&#160;        <span class="keyword">static</span> int32_t <a class="code" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a>;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;        <span class="keyword">static</span> int32_t FramesPerBurst;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        <span class="keyword">static</span> int32_t <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029">ChannelCount</a>;</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    };</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="preprocessor">#endif // OBOE_DEFINITIONS_H</span></div><div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74">oboe::Usage::VoiceCommunicationSignalling</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">oboe::AudioApi::AAudio</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">oboe::Usage::Media</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba639ffd54516c1a84a288a363c9469df8"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba639ffd54516c1a84a288a363c9469df8">oboe::Usage::AssistanceAccessibility</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799"><div class="ttname"><a href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">oboe::Sonification</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:273</div></div>
-<div class="ttc" id="namespaceoboe_html_a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123"><div class="ttname"><a href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">oboe::Allocate</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:333</div></div>
-<div class="ttc" id="namespaceoboe_html_a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f"><div class="ttname"><a href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">oboe::None</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:322</div></div>
-<div class="ttc" id="namespaceoboe_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:314</div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7">oboe::Usage::AssistanceSonification</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f"><div class="ttname"><a href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">oboe::Unprocessed</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:311</div></div>
-<div class="ttc" id="namespaceoboe_html_ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca"><div class="ttname"><a href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">oboe::SharingMode::Shared</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:141</div></div>
-<div class="ttc" id="classoboe_1_1_default_stream_values_html"><div class="ttname"><a href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:355</div></div>
-<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b">oboe::AudioApi::OpenSLES</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf">oboe::Usage::NotificationRingtone</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517"><div class="ttname"><a href="namespaceoboe.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">oboe::Music</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:262</div></div>
-<div class="ttc" id="namespaceoboe_html_a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe"><div class="ttname"><a href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">oboe::Camcorder</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:294</div></div>
-<div class="ttc" id="namespaceoboe_html_a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d"><div class="ttname"><a href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">oboe::VoiceCommunication</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:304</div></div>
-<div class="ttc" id="namespaceoboe_html_ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971"><div class="ttname"><a href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971">oboe::SharingMode::Exclusive</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544"><div class="ttname"><a href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">oboe::Generic</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:289</div></div>
-<div class="ttc" id="namespaceoboe_html_a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba"><div class="ttname"><a href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">oboe::Stereo</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:350</div></div>
-<div class="ttc" id="namespaceoboe_html_a07eed38097ed944422063801f8f83406"><div class="ttname"><a href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:252</div></div>
-<div class="ttc" id="namespaceoboe_html_a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79"><div class="ttname"><a href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">oboe::Mono</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:345</div></div>
-<div class="ttc" id="namespaceoboe_html_a522e6806948369987639a0d1df03c029"><div class="ttname"><a href="namespaceoboe.html#a522e6806948369987639a0d1df03c029">oboe::ChannelCount</a></div><div class="ttdeci">ChannelCount</div><div class="ttdef"><b>Definition:</b> Definitions.h:336</div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbbade058a1314f9a8504593259ff4f21a1e"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbbade058a1314f9a8504593259ff4f21a1e">oboe::Usage::AssistanceNavigationGuidance</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b">oboe::Usage::Assistant</a></div></div>
-<div class="ttc" id="namespaceoboe_html_ae3a52556c58387e0cecba01f9abffdff"><div class="ttname"><a href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:113</div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f">oboe::Usage::NotificationEvent</a></div></div>
-<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71">oboe::Usage::Notification</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb">oboe::Usage::Game</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76"><div class="ttname"><a href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">oboe::Unspecified</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:340</div></div>
-<div class="ttc" id="namespaceoboe_html_a17f63a064de966efddd5d0335992bc04"><div class="ttname"><a href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:285</div></div>
-<div class="ttc" id="classoboe_1_1_default_stream_values_html_a46a5d9a653f2153f618cadcab764e1b1"><div class="ttname"><a href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">oboe::DefaultStreamValues::SampleRate</a></div><div class="ttdeci">static int32_t SampleRate</div><div class="ttdef"><b>Definition:</b> Definitions.h:377</div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbb"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:174</div></div>
-<div class="ttc" id="namespaceoboe_html_a1b2a1bdc891d640eb82724dcd9b7afbba46c4c4d980dfe025ae5b35aa0011dde4"><div class="ttname"><a href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba46c4c4d980dfe025ae5b35aa0011dde4">oboe::Usage::Alarm</a></div></div>
-<div class="ttc" id="namespaceoboe_html_a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1"><div class="ttname"><a href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">oboe::Speech</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:257</div></div>
-<div class="ttc" id="namespaceoboe_html_a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc"><div class="ttname"><a href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">oboe::VoiceRecognition</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:299</div></div>
-<div class="ttc" id="namespaceoboe_html_a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1"><div class="ttname"><a href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">oboe::Movie</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:267</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/_latency_tuner_8h_source.html b/docs/reference/_latency_tuner_8h_source.html
deleted file mode 100644
index 66e82f8..0000000
--- a/docs/reference/_latency_tuner_8h_source.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/LatencyTuner.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">LatencyTuner.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStream.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classoboe_1_1_latency_tuner.html">   42</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a> {</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> &amp;stream);</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    Result <a class="code" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune</a>();</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>();</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keywordtype">void</span> reset();</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keyword">enum class</span> State {</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        Idle,</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        Active,</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        AtMax,</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        Unsupported</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    } ;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="comment">// arbitrary number of calls to wait before bumping up the latency</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keyword">static</span> constexpr int32_t kIdleCount = 8;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>           &amp;mStream;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    State                 mState = State::Idle;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    int32_t               mPreviousXRuns = 0;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    int32_t               mIdleCountDown = 0;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    std::atomic&lt;int32_t&gt;  mLatencyTriggerRequests{0}; <span class="comment">// TODO user atomic requester from AAudio</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    std::atomic&lt;int32_t&gt;  mLatencyTriggerResponses{0};</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;};</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="preprocessor">#endif // OBOE_LATENCY_TUNER_</span></div><div class="ttc" id="classoboe_1_1_latency_tuner_html_a6c0142e08dc65eda8f758b4794450867"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">oboe::LatencyTuner::requestReset</a></div><div class="ttdeci">void requestReset()</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html"><div class="ttname"><a href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:36</div></div>
-<div class="ttc" id="classoboe_1_1_latency_tuner_html_ad2be756965e6a9af3114008eda892174"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">oboe::LatencyTuner::tune</a></div><div class="ttdeci">Result tune()</div></div>
-<div class="ttc" id="classoboe_1_1_latency_tuner_html"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></div><div class="ttdef"><b>Definition:</b> LatencyTuner.h:42</div></div>
-<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/_oboe_8h_source.html b/docs/reference/_oboe_8h_source.html
deleted file mode 100644
index 11346b9..0000000
--- a/docs/reference/_oboe_8h_source.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/Oboe.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">Oboe.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_OBOE_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_OBOE_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;oboe/ResultWithValue.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/LatencyTuner.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStream.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBase.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBuilder.h&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;oboe/Utilities.h&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &quot;oboe/Version.h&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#endif //OBOE_OBOE_H</span></div></div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/_result_with_value_8h_source.html b/docs/reference/_result_with_value_8h_source.html
deleted file mode 100644
index 8eeb933..0000000
--- a/docs/reference/_result_with_value_8h_source.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/ResultWithValue.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">ResultWithValue.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2018 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_RESULT_WITH_VALUE_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_RESULT_WITH_VALUE_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classoboe_1_1_result_with_value.html">   27</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> {</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>(oboe::Result error)</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;            : mValue{}</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;            , mError(error) {}</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>(T value)</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;            : mValue(value)</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;            , mError(oboe::Result::OK) {}</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    oboe::Result error()<span class="keyword"> const </span>{</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;        <span class="keywordflow">return</span> mError;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    }</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    T value()<span class="keyword"> const </span>{</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;        <span class="keywordflow">return</span> mValue;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    }</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classoboe_1_1_result_with_value.html#ae32b1953b777af7d1d0c94862ca39986">   48</a></span>&#160;    <span class="keyword">explicit</span> <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mError == oboe::Result::OK; }</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classoboe_1_1_result_with_value.html#a2dbc8b09ead8b073a78af95b4b0186e3">   60</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_result_with_value.html#a2dbc8b09ead8b073a78af95b4b0186e3">operator !</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mError != oboe::Result::OK; }</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classoboe_1_1_result_with_value.html#af62107817c0bc76047e6b655a78504ba">   70</a></span>&#160;    <span class="keyword">operator</span> Result()<span class="keyword"> const </span>{</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        <span class="keywordflow">return</span> mError;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    }</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classoboe_1_1_result_with_value.html#a2304c6120e2aad8f2189383a98c7b0a7">   81</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;T&gt;</a> <a class="code" href="classoboe_1_1_result_with_value.html#a2304c6120e2aad8f2189383a98c7b0a7">createBasedOnSign</a>(T numericResult){</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        <span class="comment">// Ensure that the type is either an integer or float</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        static_assert(std::is_arithmetic&lt;T&gt;::value,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                      <span class="stringliteral">&quot;createBasedOnSign can only be called for numeric types (int or float)&quot;</span>);</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="keywordflow">if</span> (numericResult &gt;= 0){</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;            <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;T&gt;</a>(numericResult);</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;            <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue&lt;T&gt;</a>(<span class="keyword">static_cast&lt;</span>Result<span class="keyword">&gt;</span>(numericResult));</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        }</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    }</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="keyword">const</span> T             mValue;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keyword">const</span> oboe::Result  mError;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;};</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;std::ostream&amp; operator&lt;&lt;(std::ostream &amp;strm, const ResultWithValue&lt;T&gt; &amp;result) {</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">if</span> (!result) {</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        strm &lt;&lt; <a class="code" href="namespaceoboe.html#a8d1ae211254cc239019f165b607f4365">convertToText</a>(result.error());</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        strm &lt;&lt; result.value();</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    }</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;   <span class="keywordflow">return</span> strm;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;}</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="preprocessor">#endif //OBOE_RESULT_WITH_VALUE_H</span></div><div class="ttc" id="classoboe_1_1_result_with_value_html_a2304c6120e2aad8f2189383a98c7b0a7"><div class="ttname"><a href="classoboe_1_1_result_with_value.html#a2304c6120e2aad8f2189383a98c7b0a7">oboe::ResultWithValue::createBasedOnSign</a></div><div class="ttdeci">static ResultWithValue&lt; T &gt; createBasedOnSign(T numericResult)</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:81</div></div>
-<div class="ttc" id="namespaceoboe_html_a8d1ae211254cc239019f165b607f4365"><div class="ttname"><a href="namespaceoboe.html#a8d1ae211254cc239019f165b607f4365">oboe::convertToText</a></div><div class="ttdeci">const char * convertToText(FromType)</div></div>
-<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="classoboe_1_1_result_with_value_html_a2dbc8b09ead8b073a78af95b4b0186e3"><div class="ttname"><a href="classoboe_1_1_result_with_value.html#a2dbc8b09ead8b073a78af95b4b0186e3">oboe::ResultWithValue::operator!</a></div><div class="ttdeci">bool operator!() const</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:60</div></div>
-<div class="ttc" id="classoboe_1_1_result_with_value_html"><div class="ttname"><a href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue</a></div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:27</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/_utilities_8h_source.html b/docs/reference/_utilities_8h_source.html
deleted file mode 100644
index 8797fcb..0000000
--- a/docs/reference/_utilities_8h_source.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/Utilities.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">Utilities.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_UTILITIES_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_UTILITIES_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keywordtype">void</span> convertFloatToPcm16(<span class="keyword">const</span> <span class="keywordtype">float</span> *source, int16_t *destination, int32_t numSamples);</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keywordtype">void</span> convertPcm16ToFloat(<span class="keyword">const</span> int16_t *source, <span class="keywordtype">float</span> *destination, int32_t numSamples);</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;int32_t <a class="code" href="namespaceoboe.html#ac67383a3df0f6e7a51f8415ffd9fdaca">convertFormatToSizeInBytes</a>(AudioFormat format);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> FromType&gt;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="namespaceoboe.html#a8d1ae211254cc239019f165b607f4365">convertToText</a>(FromType);</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keywordtype">int</span> <a class="code" href="namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db">getSdkVersion</a>();</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#endif //OBOE_UTILITIES_H</span></div><div class="ttc" id="namespaceoboe_html_a8d1ae211254cc239019f165b607f4365"><div class="ttname"><a href="namespaceoboe.html#a8d1ae211254cc239019f165b607f4365">oboe::convertToText</a></div><div class="ttdeci">const char * convertToText(FromType)</div></div>
-<div class="ttc" id="namespaceoboe_html_ac67383a3df0f6e7a51f8415ffd9fdaca"><div class="ttname"><a href="namespaceoboe.html#ac67383a3df0f6e7a51f8415ffd9fdaca">oboe::convertFormatToSizeInBytes</a></div><div class="ttdeci">int32_t convertFormatToSizeInBytes(AudioFormat format)</div></div>
-<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="namespaceoboe_html_a54528938e9fccab7ad8947ccf0e409db"><div class="ttname"><a href="namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db">oboe::getSdkVersion</a></div><div class="ttdeci">int getSdkVersion()</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/_version_8h_source.html b/docs/reference/_version_8h_source.html
deleted file mode 100644
index 348ac58..0000000
--- a/docs/reference/_version_8h_source.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: include/oboe/Version.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_768f6301d9838e45d679001914ab2803.html">oboe</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">Version.h</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#define OBOE_VERSION_MAJOR 0</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#define OBOE_VERSION_MINOR 12</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">// Type: 16-bit unsigned int. Min value: 0 Max value: 65535. See below for description.</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#define OBOE_VERSION_PATCH 0</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#define OBOE_STRINGIFY(x) #x</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#define OBOE_TOSTRING(x) OBOE_STRINGIFY(x)</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">// Type: String literal. See below for description.</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#define OBOE_VERSION_TEXT \</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">        OBOE_TOSTRING(OBOE_VERSION_MAJOR) &quot;.&quot; \</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">        OBOE_TOSTRING(OBOE_VERSION_MINOR) &quot;.&quot; \</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">        OBOE_TOSTRING(OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">// Type: 32-bit unsigned int. See below for description.</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#define OBOE_VERSION_NUMBER ((OBOE_VERSION_MAJOR &lt;&lt; 24) | (OBOE_VERSION_MINOR &lt;&lt; 16) | OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html">   54</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structoboe_1_1_version.html">Version</a> {</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276">   58</a></span>&#160;    <span class="keyword">static</span> constexpr uint8_t <a class="code" href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276">Major</a> = OBOE_VERSION_MAJOR;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469">   64</a></span>&#160;    <span class="keyword">static</span> constexpr uint8_t <a class="code" href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469">Minor</a> = OBOE_VERSION_MINOR;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2">   70</a></span>&#160;    <span class="keyword">static</span> constexpr uint16_t <a class="code" href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a> = OBOE_VERSION_PATCH;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503">   75</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503">Text</a> = OBOE_VERSION_TEXT;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0">   81</a></span>&#160;    <span class="keyword">static</span> constexpr uint32_t <a class="code" href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;};</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="preprocessor">#endif //OBOE_VERSIONINFO_H</span></div><div class="ttc" id="structoboe_1_1_version_html"><div class="ttname"><a href="structoboe_1_1_version.html">oboe::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:54</div></div>
-<div class="ttc" id="structoboe_1_1_version_html_ae460bb95e3a9099696205a35fffb5469"><div class="ttname"><a href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469">oboe::Version::Minor</a></div><div class="ttdeci">static constexpr uint8_t Minor</div><div class="ttdef"><b>Definition:</b> Version.h:64</div></div>
-<div class="ttc" id="structoboe_1_1_version_html_a270f2e92582d5187be339eeda8e2b276"><div class="ttname"><a href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276">oboe::Version::Major</a></div><div class="ttdeci">static constexpr uint8_t Major</div><div class="ttdef"><b>Definition:</b> Version.h:58</div></div>
-<div class="ttc" id="structoboe_1_1_version_html_ac579661e79bcee45dc676d4647891de0"><div class="ttname"><a href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0">oboe::Version::Number</a></div><div class="ttdeci">static constexpr uint32_t Number</div><div class="ttdef"><b>Definition:</b> Version.h:81</div></div>
-<div class="ttc" id="structoboe_1_1_version_html_a2c86e578b827fbca5f40c460a7754503"><div class="ttname"><a href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503">oboe::Version::Text</a></div><div class="ttdeci">static constexpr const char * Text</div><div class="ttdef"><b>Definition:</b> Version.h:75</div></div>
-<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="structoboe_1_1_version_html_a690110f2b3e887892da8f29ab5c057b2"><div class="ttname"><a href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2">oboe::Version::Patch</a></div><div class="ttdeci">static constexpr uint16_t Patch</div><div class="ttdef"><b>Definition:</b> Version.h:70</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/a00002_source.html b/docs/reference/a00002_source.html
index c9ff42a..e22584d 100644
--- a/docs/reference/a00002_source.html
+++ b/docs/reference/a00002_source.html
@@ -71,29 +71,58 @@
 <div class="title">AudioStream.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;ctime&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;oboe/ResultWithValue.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBuilder.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBase.h&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="a00032.html">   29</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;constexpr int64_t kDefaultTimeoutNanos = (2000 * kNanosPerMillisecond);</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="a00036.html">   36</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00036.html">AudioStream</a> : <span class="keyword">public</span> <a class="code" href="a00040.html">AudioStreamBase</a> {</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <a class="code" href="a00036.html">AudioStream</a>() {}</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="a00036.html">AudioStream</a>(<span class="keyword">const</span> <a class="code" href="a00044.html">AudioStreamBuilder</a> &amp;builder);</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">virtual</span> ~<a class="code" href="a00036.html">AudioStream</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keyword">virtual</span> Result <a class="code" href="a00036.html#a686c6ce8a29051c858fd1de386805dc6">open</a>();</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    <span class="keyword">virtual</span> Result <a class="code" href="a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a>() = 0;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="comment">/*</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">     * These are synchronous and will block until the operation is complete.</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="keyword">virtual</span> Result start(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="keyword">virtual</span> Result pause(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keyword">virtual</span> Result flush(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="keyword">virtual</span> Result stop(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="comment">/* Asynchronous requests.</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">     * Use waitForStateChange() if you need to wait for completion.</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keyword">virtual</span> Result requestStart() = 0;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keyword">virtual</span> Result requestPause() = 0;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keyword">virtual</span> Result requestFlush() = 0;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keyword">virtual</span> Result requestStop() = 0;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keyword">virtual</span> StreamState <a class="code" href="a00036.html#a47bb5798275f14d76444283a6b6f35eb">getState</a>() = 0;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keyword">virtual</span> Result <a class="code" href="a00036.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(StreamState inputState,</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;                                          StreamState *nextState,</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;                                          int64_t timeoutNanoseconds) = 0;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="a00036.html#ac93b18e18487e809151f63ec3c6228bb">  122</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="a00036.html#ac93b18e18487e809151f63ec3c6228bb">setBufferSizeInFrames</a>(int32_t requestedFrames) {</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    }</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">  138</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    }</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00036.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="a00036.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>() = 0;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keywordtype">bool</span> isPlaying();</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    int32_t getBytesPerFrame()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mChannelCount * getBytesPerSample(); }</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    int32_t getBytesPerSample() <span class="keyword">const</span>;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">  164</a></span>&#160;    <span class="keyword">virtual</span> int64_t <a class="code" href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>() { <span class="keywordflow">return</span> mFramesWritten; }</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keyword">virtual</span> int64_t getFramesRead() { <span class="keywordflow">return</span> mFramesRead; }</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="a00036.html#ae023cb001f3261d064f423101798d6be">  191</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;double&gt;</a> <a class="code" href="a00036.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>() {</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;double&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    }</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="keyword">virtual</span> Result getTimestamp(clockid_t clockId,</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                                int64_t *framePosition,</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;                                int64_t *timeNanoseconds) {</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;        <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    }</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <span class="comment">// ============== I/O ===========================</span></div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="a00036.html#ab3f6bf8abed87f3804ac4df3472c3670">  213</a></span>&#160;<span class="comment"></span>    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="a00036.html#ab3f6bf8abed87f3804ac4df3472c3670">write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer,</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;                             int32_t numFrames,</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;                             int64_t timeoutNanoseconds) {</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    }</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a> read(<span class="keywordtype">void</span> *buffer,</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;                            int32_t numFrames,</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;                            int64_t timeoutNanoseconds) {</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    }</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> <a class="code" href="a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="a00036.html#a15cdaaaa4c1e8da322d6da33334c8147">  234</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="a00036.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() == <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AudioApi::AAudio</a>;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    }</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">  246</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> *<a class="code" href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    }</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <span class="keyword">virtual</span> int64_t incrementFramesWritten(int32_t frames) {</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <span class="keywordflow">return</span> mFramesWritten += frames;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    }</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    <span class="keyword">virtual</span> int64_t incrementFramesRead(int32_t frames) {</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        <span class="keywordflow">return</span> mFramesRead += frames;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    }</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    <span class="keyword">virtual</span> Result <a class="code" href="a00036.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(StreamState startingState,</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;                                          StreamState endingState,</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;                                          int64_t timeoutNanoseconds);</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="a00036.html#abda7ae8e6832030572785de3964ed848">  276</a></span>&#160;    <span class="keyword">virtual</span> DataCallbackResult <a class="code" href="a00036.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a>(<span class="keywordtype">void</span> *audioData, <span class="keywordtype">int</span> numFrames) {</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        <span class="keywordflow">return</span> DataCallbackResult::Stop;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    }</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    DataCallbackResult fireCallback(<span class="keywordtype">void</span> *audioData, <span class="keywordtype">int</span> numFrames);</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> setNativeFormat(AudioFormat format) {</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        mNativeFormat = format;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    }</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="comment">// TODO: make private</span></div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    <span class="comment">// These do not change after open.</span></div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    AudioFormat mNativeFormat = AudioFormat::Invalid;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    <span class="comment">// TODO these should be atomic like in AAudio</span></div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    int64_t              mFramesWritten = 0;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    int64_t              mFramesRead = 0;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    <span class="comment">// TODO these should be atomic like in AAudio</span></div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="keywordtype">int</span>                  mPreviousScheduler = -1;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;};</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="a00036_html_a47bb5798275f14d76444283a6b6f35eb"><div class="ttname"><a href="a00036.html#a47bb5798275f14d76444283a6b6f35eb">oboe::AudioStream::getState</a></div><div class="ttdeci">virtual StreamState getState()=0</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;ctime&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;oboe/ResultWithValue.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBuilder.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBase.h&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="a00032.html">   29</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">   37</a></span>&#160;constexpr int64_t <a class="code" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a> = (2000 * <a class="code" href="a00032.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a>);</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00036.html">   42</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00036.html">AudioStream</a> : <span class="keyword">public</span> <a class="code" href="a00040.html">AudioStreamBase</a> {</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <a class="code" href="a00036.html">AudioStream</a>() {}</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="a00036.html">AudioStream</a>(<span class="keyword">const</span> <a class="code" href="a00044.html">AudioStreamBuilder</a> &amp;builder);</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keyword">virtual</span> ~<a class="code" href="a00036.html">AudioStream</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a686c6ce8a29051c858fd1de386805dc6">open</a>();</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a>() = 0;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#af04f03eb6b64b564f1c4401688987d21">start</a>(int64_t timeoutNanoseconds = <a class="code" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a04f29836748a8e5842aef2be200022ad">pause</a>(int64_t timeoutNanoseconds = <a class="code" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a32c25c0333eab3d65ce02275ad4acb3d">flush</a>(int64_t timeoutNanoseconds = <a class="code" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#aec093859d42f0470c884edd1e976d9f3">stop</a>(int64_t timeoutNanoseconds = <a class="code" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="comment">/* Asynchronous requests.</span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment">     * Use waitForStateChange() if you need to wait for completion.</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a3c484e314dee8dfed1d419f487b5d601">requestStart</a>() = 0;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">requestPause</a>() = 0;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a6bd5d633ff999e4da1faf3cd949aa602">requestFlush</a>() = 0;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a820e634f741e6b5efdcef8104cecb919">requestStop</a>() = 0;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> <a class="code" href="a00036.html#a47bb5798275f14d76444283a6b6f35eb">getState</a>() = 0;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(<a class="code" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> inputState,</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;                                          <a class="code" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> *nextState,</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;                                          int64_t timeoutNanoseconds) = 0;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="a00036.html#ac93b18e18487e809151f63ec3c6228bb">  170</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="a00036.html#ac93b18e18487e809151f63ec3c6228bb">setBufferSizeInFrames</a>(int32_t requestedFrames) {</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    }</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">  186</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    }</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00036.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="a00036.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>() = 0;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="a00036.html#ad5260e2cc71108b1b2e694bf6162279f">isPlaying</a>();</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00036.html#a5c01907a59d5f89a5e4b819fe66b08bc">  216</a></span>&#160;    int32_t <a class="code" href="a00036.html#a5c01907a59d5f89a5e4b819fe66b08bc">getBytesPerFrame</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> * <a class="code" href="a00036.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a>(); }</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    int32_t <a class="code" href="a00036.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">  232</a></span>&#160;    <span class="keyword">virtual</span> int64_t <a class="code" href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>() { <span class="keywordflow">return</span> <a class="code" href="a00036.html#aa88d2a712b91a8b763f2721d78480ba8">mFramesWritten</a>; }</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="a00036.html#aeebfc59abd978cd6dff07c16cfe266df">  240</a></span>&#160;    <span class="keyword">virtual</span> int64_t <a class="code" href="a00036.html#aeebfc59abd978cd6dff07c16cfe266df">getFramesRead</a>() { <span class="keywordflow">return</span> <a class="code" href="a00036.html#a2b9124ba3b0f564fa58b0651438250e7">mFramesRead</a>; }</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="a00036.html#ae023cb001f3261d064f423101798d6be">  265</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;double&gt;</a> <a class="code" href="a00036.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>() {</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;double&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    }</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d">  278</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d">getTimestamp</a>(clockid_t clockId,</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;                                int64_t *framePosition,</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;                                int64_t *timeNanoseconds) {</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    }</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    <span class="comment">// ============== I/O ===========================</span></div><div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="a00036.html#ab3f6bf8abed87f3804ac4df3472c3670">  297</a></span>&#160;<span class="comment"></span>    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="a00036.html#ab3f6bf8abed87f3804ac4df3472c3670">write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer,</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;                             int32_t numFrames,</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;                             int64_t timeoutNanoseconds) {</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    }</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="a00036.html#acbf3933af829313d281b5455053338da">  315</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a> <a class="code" href="a00036.html#acbf3933af829313d281b5455053338da">read</a>(<span class="keywordtype">void</span> *buffer,</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;                            int32_t numFrames,</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;                            int64_t timeoutNanoseconds) {</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;int32_t&gt;</a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    }</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> <a class="code" href="a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="a00036.html#a15cdaaaa4c1e8da322d6da33334c8147">  333</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="a00036.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() == <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AudioApi::AAudio</a>;</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    }</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">  345</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> *<a class="code" href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    }</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="a00036.html#ad6b4c63f6ed1ecb509f7b80352a9c0bd">  357</a></span>&#160;    <span class="keyword">virtual</span> int64_t <a class="code" href="a00036.html#ad6b4c63f6ed1ecb509f7b80352a9c0bd">incrementFramesWritten</a>(int32_t frames) {</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00036.html#aa88d2a712b91a8b763f2721d78480ba8">mFramesWritten</a> += frames;</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    }</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;</div><div class="line"><a name="l00367"></a><span class="lineno"><a class="line" href="a00036.html#a81568482a217b314498e2501210758d7">  367</a></span>&#160;    <span class="keyword">virtual</span> int64_t <a class="code" href="a00036.html#a81568482a217b314498e2501210758d7">incrementFramesRead</a>(int32_t frames) {</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00036.html#a2b9124ba3b0f564fa58b0651438250e7">mFramesRead</a> += frames;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    }</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00036.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(<a class="code" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> startingState,</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;                                          <a class="code" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> endingState,</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;                                          int64_t timeoutNanoseconds);</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno"><a class="line" href="a00036.html#abda7ae8e6832030572785de3964ed848">  388</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a> <a class="code" href="a00036.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a>(<span class="keywordtype">void</span> *audioData, <span class="keywordtype">int</span> numFrames) {</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;        <span class="keywordflow">return</span> DataCallbackResult::Stop;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    }</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    <a class="code" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a> <a class="code" href="a00036.html#a0c4fd19b01a4ef750dd9d6ae3a512eda">fireCallback</a>(<span class="keywordtype">void</span> *audioData, <span class="keywordtype">int</span> numFrames);</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="a00036.html#ab01c37fca9110e916a482a909f5cc82d">  405</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00036.html#ab01c37fca9110e916a482a909f5cc82d">setNativeFormat</a>(<a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> format) {</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        <a class="code" href="a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60">mNativeFormat</a> = format;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    }</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60">  415</a></span>&#160;    <a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> <a class="code" href="a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60">mNativeFormat</a> = <a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b">AudioFormat::Invalid</a>;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;</div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="a00036.html#aa88d2a712b91a8b763f2721d78480ba8">  422</a></span>&#160;    int64_t              <a class="code" href="a00036.html#aa88d2a712b91a8b763f2721d78480ba8">mFramesWritten</a> = 0;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;</div><div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="a00036.html#a2b9124ba3b0f564fa58b0651438250e7">  429</a></span>&#160;    int64_t              <a class="code" href="a00036.html#a2b9124ba3b0f564fa58b0651438250e7">mFramesRead</a> = 0;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    <span class="keywordtype">int</span>                  mPreviousScheduler = -1;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;};</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="a00036_html_a3c484e314dee8dfed1d419f487b5d601"><div class="ttname"><a href="a00036.html#a3c484e314dee8dfed1d419f487b5d601">oboe::AudioStream::requestStart</a></div><div class="ttdeci">virtual Result requestStart()=0</div></div>
+<div class="ttc" id="a00036_html_a820e634f741e6b5efdcef8104cecb919"><div class="ttname"><a href="a00036.html#a820e634f741e6b5efdcef8104cecb919">oboe::AudioStream::requestStop</a></div><div class="ttdeci">virtual Result requestStop()=0</div></div>
+<div class="ttc" id="a00032_html_a831e887150474c087170679eaca8672b"><div class="ttname"><a href="a00032.html#a831e887150474c087170679eaca8672b">oboe::kNanosPerMillisecond</a></div><div class="ttdeci">constexpr int64_t kNanosPerMillisecond</div><div class="ttdef"><b>Definition:</b> Definitions.h:52</div></div>
+<div class="ttc" id="a00036_html_ad5260e2cc71108b1b2e694bf6162279f"><div class="ttname"><a href="a00036.html#ad5260e2cc71108b1b2e694bf6162279f">oboe::AudioStream::isPlaying</a></div><div class="ttdeci">bool isPlaying()</div></div>
+<div class="ttc" id="a00036_html_a47bb5798275f14d76444283a6b6f35eb"><div class="ttname"><a href="a00036.html#a47bb5798275f14d76444283a6b6f35eb">oboe::AudioStream::getState</a></div><div class="ttdeci">virtual StreamState getState()=0</div></div>
 <div class="ttc" id="a00044_html"><div class="ttname"><a href="a00044.html">oboe::AudioStreamBuilder</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:28</div></div>
 <div class="ttc" id="a00036_html_ad33a20f0d6792e322b9d8a2bcf14fcf8"><div class="ttname"><a href="a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">oboe::AudioStream::close</a></div><div class="ttdeci">virtual Result close()=0</div></div>
+<div class="ttc" id="a00036_html_aa88d2a712b91a8b763f2721d78480ba8"><div class="ttname"><a href="a00036.html#aa88d2a712b91a8b763f2721d78480ba8">oboe::AudioStream::mFramesWritten</a></div><div class="ttdeci">int64_t mFramesWritten</div><div class="ttdef"><b>Definition:</b> AudioStream.h:422</div></div>
+<div class="ttc" id="a00036_html_aec093859d42f0470c884edd1e976d9f3"><div class="ttname"><a href="a00036.html#aec093859d42f0470c884edd1e976d9f3">oboe::AudioStream::stop</a></div><div class="ttdeci">virtual Result stop(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</div></div>
+<div class="ttc" id="a00036_html_a5c01907a59d5f89a5e4b819fe66b08bc"><div class="ttname"><a href="a00036.html#a5c01907a59d5f89a5e4b819fe66b08bc">oboe::AudioStream::getBytesPerFrame</a></div><div class="ttdeci">int32_t getBytesPerFrame() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:216</div></div>
+<div class="ttc" id="a00036_html_a44dda61e6e948e49b68f87172f084d62"><div class="ttname"><a href="a00036.html#a44dda61e6e948e49b68f87172f084d62">oboe::AudioStream::getBytesPerSample</a></div><div class="ttdeci">int32_t getBytesPerSample() const</div></div>
+<div class="ttc" id="a00036_html_a07ed6b5e5bd4bc276bc1e1fc08e51d60"><div class="ttname"><a href="a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60">oboe::AudioStream::mNativeFormat</a></div><div class="ttdeci">AudioFormat mNativeFormat</div><div class="ttdef"><b>Definition:</b> AudioStream.h:415</div></div>
+<div class="ttc" id="a00036_html_a1d7cf4e43fb9d7b31857a90d9eceee6d"><div class="ttname"><a href="a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d">oboe::AudioStream::getTimestamp</a></div><div class="ttdeci">virtual Result getTimestamp(clockid_t clockId, int64_t *framePosition, int64_t *timeNanoseconds)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:278</div></div>
 <div class="ttc" id="a00036_html_a8adbacd6a55a94a532916ab037fba1d6"><div class="ttname"><a href="a00036.html#a8adbacd6a55a94a532916ab037fba1d6">oboe::AudioStream::waitForStateTransition</a></div><div class="ttdeci">virtual Result waitForStateTransition(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</div></div>
+<div class="ttc" id="a00040_html_a5ff460bac9d14dfeac4eeddfcbb6e206"><div class="ttname"><a href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase::mChannelCount</a></div><div class="ttdeci">int32_t mChannelCount</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:135</div></div>
 <div class="ttc" id="a00036_html_ac160acb656515814fa6fdd157c131a0a"><div class="ttname"><a href="a00036.html#ac160acb656515814fa6fdd157c131a0a">oboe::AudioStream::getFramesPerBurst</a></div><div class="ttdeci">virtual int32_t getFramesPerBurst()=0</div></div>
-<div class="ttc" id="a00036_html_a5458d7130415eb4defe3dbc11d479e2f"><div class="ttname"><a href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">oboe::AudioStream::getUnderlyingStream</a></div><div class="ttdeci">virtual void * getUnderlyingStream() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:246</div></div>
+<div class="ttc" id="a00032_html_aab8f5f081a8b2147e16ec920347c1b5c"><div class="ttname"><a href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">oboe::kDefaultTimeoutNanos</a></div><div class="ttdeci">constexpr int64_t kDefaultTimeoutNanos</div><div class="ttdef"><b>Definition:</b> AudioStream.h:37</div></div>
+<div class="ttc" id="a00036_html_af04f03eb6b64b564f1c4401688987d21"><div class="ttname"><a href="a00036.html#af04f03eb6b64b564f1c4401688987d21">oboe::AudioStream::start</a></div><div class="ttdeci">virtual Result start(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</div></div>
+<div class="ttc" id="a00036_html_a0c4fd19b01a4ef750dd9d6ae3a512eda"><div class="ttname"><a href="a00036.html#a0c4fd19b01a4ef750dd9d6ae3a512eda">oboe::AudioStream::fireCallback</a></div><div class="ttdeci">DataCallbackResult fireCallback(void *audioData, int numFrames)</div></div>
+<div class="ttc" id="a00036_html_a5458d7130415eb4defe3dbc11d479e2f"><div class="ttname"><a href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">oboe::AudioStream::getUnderlyingStream</a></div><div class="ttdeci">virtual void * getUnderlyingStream() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:345</div></div>
 <div class="ttc" id="a00036_html_a43d8a098440cde28f4ee8bedd6d107c4"><div class="ttname"><a href="a00036.html#a43d8a098440cde28f4ee8bedd6d107c4">oboe::AudioStream::isXRunCountSupported</a></div><div class="ttdeci">virtual bool isXRunCountSupported() const =0</div></div>
-<div class="ttc" id="a00036_html_ab3f6bf8abed87f3804ac4df3472c3670"><div class="ttname"><a href="a00036.html#ab3f6bf8abed87f3804ac4df3472c3670">oboe::AudioStream::write</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; write(const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:213</div></div>
-<div class="ttc" id="a00036_html_ad1a1d3bbf3b348ed92b7ed18ce9cc261"><div class="ttname"><a href="a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">oboe::AudioStream::getXRunCount</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; getXRunCount() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:138</div></div>
+<div class="ttc" id="a00036_html_ab3f6bf8abed87f3804ac4df3472c3670"><div class="ttname"><a href="a00036.html#ab3f6bf8abed87f3804ac4df3472c3670">oboe::AudioStream::write</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; write(const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:297</div></div>
+<div class="ttc" id="a00036_html_ad1a1d3bbf3b348ed92b7ed18ce9cc261"><div class="ttname"><a href="a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">oboe::AudioStream::getXRunCount</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; getXRunCount() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:186</div></div>
 <div class="ttc" id="a00036_html_a2b7a3cee7444114843dbdd1fc705f6bb"><div class="ttname"><a href="a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb">oboe::AudioStream::getAudioApi</a></div><div class="ttdeci">virtual AudioApi getAudioApi() const =0</div></div>
+<div class="ttc" id="a00036_html_a81568482a217b314498e2501210758d7"><div class="ttname"><a href="a00036.html#a81568482a217b314498e2501210758d7">oboe::AudioStream::incrementFramesRead</a></div><div class="ttdeci">virtual int64_t incrementFramesRead(int32_t frames)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:367</div></div>
+<div class="ttc" id="a00036_html_a2b9124ba3b0f564fa58b0651438250e7"><div class="ttname"><a href="a00036.html#a2b9124ba3b0f564fa58b0651438250e7">oboe::AudioStream::mFramesRead</a></div><div class="ttdeci">int64_t mFramesRead</div><div class="ttdef"><b>Definition:</b> AudioStream.h:429</div></div>
+<div class="ttc" id="a00036_html_a32c25c0333eab3d65ce02275ad4acb3d"><div class="ttname"><a href="a00036.html#a32c25c0333eab3d65ce02275ad4acb3d">oboe::AudioStream::flush</a></div><div class="ttdeci">virtual Result flush(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</div></div>
+<div class="ttc" id="a00036_html_a7f18bb3cc5490fd7fbc1f6da63c730f6"><div class="ttname"><a href="a00036.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">oboe::AudioStream::requestPause</a></div><div class="ttdeci">virtual Result requestPause()=0</div></div>
 <div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="a00032_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:141</div></div>
-<div class="ttc" id="a00036_html_abda7ae8e6832030572785de3964ed848"><div class="ttname"><a href="a00036.html#abda7ae8e6832030572785de3964ed848">oboe::AudioStream::onDefaultCallback</a></div><div class="ttdeci">virtual DataCallbackResult onDefaultCallback(void *audioData, int numFrames)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:276</div></div>
-<div class="ttc" id="a00036_html_ac93b18e18487e809151f63ec3c6228bb"><div class="ttname"><a href="a00036.html#ac93b18e18487e809151f63ec3c6228bb">oboe::AudioStream::setBufferSizeInFrames</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; setBufferSizeInFrames(int32_t requestedFrames)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:122</div></div>
-<div class="ttc" id="a00036_html_ae023cb001f3261d064f423101798d6be"><div class="ttname"><a href="a00036.html#ae023cb001f3261d064f423101798d6be">oboe::AudioStream::calculateLatencyMillis</a></div><div class="ttdeci">virtual ResultWithValue&lt; double &gt; calculateLatencyMillis()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:191</div></div>
-<div class="ttc" id="a00036_html_a15cdaaaa4c1e8da322d6da33334c8147"><div class="ttname"><a href="a00036.html#a15cdaaaa4c1e8da322d6da33334c8147">oboe::AudioStream::usesAAudio</a></div><div class="ttdeci">bool usesAAudio() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:234</div></div>
-<div class="ttc" id="a00040_html"><div class="ttname"><a href="a00040.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:34</div></div>
-<div class="ttc" id="a00060_html"><div class="ttname"><a href="a00060.html">oboe::ResultWithValue</a></div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:27</div></div>
+<div class="ttc" id="a00036_html_aeebfc59abd978cd6dff07c16cfe266df"><div class="ttname"><a href="a00036.html#aeebfc59abd978cd6dff07c16cfe266df">oboe::AudioStream::getFramesRead</a></div><div class="ttdeci">virtual int64_t getFramesRead()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:240</div></div>
+<div class="ttc" id="a00032_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:216</div></div>
+<div class="ttc" id="a00036_html_abda7ae8e6832030572785de3964ed848"><div class="ttname"><a href="a00036.html#abda7ae8e6832030572785de3964ed848">oboe::AudioStream::onDefaultCallback</a></div><div class="ttdeci">virtual DataCallbackResult onDefaultCallback(void *audioData, int numFrames)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:388</div></div>
+<div class="ttc" id="a00036_html_acbf3933af829313d281b5455053338da"><div class="ttname"><a href="a00036.html#acbf3933af829313d281b5455053338da">oboe::AudioStream::read</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; read(void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:315</div></div>
+<div class="ttc" id="a00036_html_ac93b18e18487e809151f63ec3c6228bb"><div class="ttname"><a href="a00036.html#ac93b18e18487e809151f63ec3c6228bb">oboe::AudioStream::setBufferSizeInFrames</a></div><div class="ttdeci">virtual ResultWithValue&lt; int32_t &gt; setBufferSizeInFrames(int32_t requestedFrames)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:170</div></div>
+<div class="ttc" id="a00036_html_ae023cb001f3261d064f423101798d6be"><div class="ttname"><a href="a00036.html#ae023cb001f3261d064f423101798d6be">oboe::AudioStream::calculateLatencyMillis</a></div><div class="ttdeci">virtual ResultWithValue&lt; double &gt; calculateLatencyMillis()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:265</div></div>
+<div class="ttc" id="a00032_html_a5e32586b07bf64da91f99fc33c043cb1"><div class="ttname"><a href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:140</div></div>
+<div class="ttc" id="a00036_html_a15cdaaaa4c1e8da322d6da33334c8147"><div class="ttname"><a href="a00036.html#a15cdaaaa4c1e8da322d6da33334c8147">oboe::AudioStream::usesAAudio</a></div><div class="ttdeci">bool usesAAudio() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:333</div></div>
+<div class="ttc" id="a00040_html"><div class="ttname"><a href="a00040.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:29</div></div>
+<div class="ttc" id="a00036_html_a04f29836748a8e5842aef2be200022ad"><div class="ttname"><a href="a00036.html#a04f29836748a8e5842aef2be200022ad">oboe::AudioStream::pause</a></div><div class="ttdeci">virtual Result pause(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</div></div>
+<div class="ttc" id="a00032_html_a58191d1a396041246bd4e0a87dbfdec9"><div class="ttname"><a href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">oboe::AudioFormat</a></div><div class="ttdeci">AudioFormat</div><div class="ttdef"><b>Definition:</b> Definitions.h:103</div></div>
+<div class="ttc" id="a00060_html"><div class="ttname"><a href="a00060.html">oboe::ResultWithValue</a></div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:47</div></div>
 <div class="ttc" id="a00036_html_a0c865a5501f369d959c39d8ab8b46a07"><div class="ttname"><a href="a00036.html#a0c865a5501f369d959c39d8ab8b46a07">oboe::AudioStream::waitForStateChange</a></div><div class="ttdeci">virtual Result waitForStateChange(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</div></div>
+<div class="ttc" id="a00032_html_a9cb0d39766aa6d50132a2daa6e826457"><div class="ttname"><a href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">oboe::DataCallbackResult</a></div><div class="ttdeci">DataCallbackResult</div><div class="ttdef"><b>Definition:</b> Definitions.h:128</div></div>
+<div class="ttc" id="a00036_html_ad6b4c63f6ed1ecb509f7b80352a9c0bd"><div class="ttname"><a href="a00036.html#ad6b4c63f6ed1ecb509f7b80352a9c0bd">oboe::AudioStream::incrementFramesWritten</a></div><div class="ttdeci">virtual int64_t incrementFramesWritten(int32_t frames)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:357</div></div>
 <div class="ttc" id="a00032_html_a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b"><div class="ttname"><a href="a00032.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">oboe::AudioApi::AAudio</a></div></div>
+<div class="ttc" id="a00032_html_a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b"><div class="ttname"><a href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b">oboe::AudioFormat::Invalid</a></div></div>
 <div class="ttc" id="a00036_html_a686c6ce8a29051c858fd1de386805dc6"><div class="ttname"><a href="a00036.html#a686c6ce8a29051c858fd1de386805dc6">oboe::AudioStream::open</a></div><div class="ttdeci">virtual Result open()</div></div>
-<div class="ttc" id="a00036_html_ab43dd4074e1de57bac1c3fd111430341"><div class="ttname"><a href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">oboe::AudioStream::getFramesWritten</a></div><div class="ttdeci">virtual int64_t getFramesWritten()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:164</div></div>
-<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:36</div></div>
+<div class="ttc" id="a00036_html_ab01c37fca9110e916a482a909f5cc82d"><div class="ttname"><a href="a00036.html#ab01c37fca9110e916a482a909f5cc82d">oboe::AudioStream::setNativeFormat</a></div><div class="ttdeci">virtual void setNativeFormat(AudioFormat format)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:405</div></div>
+<div class="ttc" id="a00032_html_a7fd7bd0828b61e3b3097e33dc90ac123"><div class="ttname"><a href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">oboe::StreamState</a></div><div class="ttdeci">StreamState</div><div class="ttdef"><b>Definition:</b> Definitions.h:67</div></div>
+<div class="ttc" id="a00036_html_a6bd5d633ff999e4da1faf3cd949aa602"><div class="ttname"><a href="a00036.html#a6bd5d633ff999e4da1faf3cd949aa602">oboe::AudioStream::requestFlush</a></div><div class="ttdeci">virtual Result requestFlush()=0</div></div>
+<div class="ttc" id="a00036_html_ab43dd4074e1de57bac1c3fd111430341"><div class="ttname"><a href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">oboe::AudioStream::getFramesWritten</a></div><div class="ttdeci">virtual int64_t getFramesWritten()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:232</div></div>
+<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:42</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00005_source.html b/docs/reference/a00005_source.html
index f2f1594..167090c 100644
--- a/docs/reference/a00005_source.html
+++ b/docs/reference/a00005_source.html
@@ -71,22 +71,53 @@
 <div class="title">AudioStreamBase.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamCallback.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="a00040.html">   34</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00040.html">AudioStreamBase</a> {</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    <a class="code" href="a00040.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keyword">virtual</span> ~<a class="code" href="a00040.html">AudioStreamBase</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="comment">// This class only contains primitives so we can use default constructor and copy methods.</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <a class="code" href="a00040.html">AudioStreamBase</a>(<span class="keyword">const</span> <a class="code" href="a00040.html">AudioStreamBase</a>&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <a class="code" href="a00040.html">AudioStreamBase</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="a00040.html">AudioStreamBase</a>&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">   49</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mChannelCount; }</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">   54</a></span>&#160;    Direction <a class="code" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mDirection; }</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">   59</a></span>&#160;    int32_t <a class="code" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mSampleRate; }</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">   64</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mFramesPerCallback; }</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">   70</a></span>&#160;    AudioFormat <a class="code" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mFormat; }</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">   78</a></span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>() { <span class="keywordflow">return</span> mBufferSizeInFrames; };</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">   83</a></span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mBufferCapacityInFrames; }</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> getSharingMode()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mSharingMode; }</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    PerformanceMode getPerformanceMode()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mPerformanceMode; }</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    int32_t getDeviceId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mDeviceId; }</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    AudioStreamCallback* getCallback()<span class="keyword"> const </span>{</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        <span class="keywordflow">return</span> mStreamCallback;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    }</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> getUsage()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mUsage; }</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a> getContentType()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mContentType; }</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> getInputPreset()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mInputPreset; }</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> getSessionId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mSessionId; }</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    AudioStreamCallback            *mStreamCallback = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    int32_t                         mFramesPerCallback = kUnspecified;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    int32_t                         mChannelCount = kUnspecified;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    int32_t                         mSampleRate = kUnspecified;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    int32_t                         mDeviceId = kUnspecified;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    int32_t                         mBufferCapacityInFrames = kUnspecified;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    int32_t                         mBufferSizeInFrames = kUnspecified;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    int32_t                         mFramesPerBurst = kUnspecified;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>                     mSharingMode = <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a>;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    AudioFormat                     mFormat = AudioFormat::Unspecified;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    Direction                       mDirection = Direction::Output;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    PerformanceMode                 mPerformanceMode = PerformanceMode::None;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="comment">// Added in API 28</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>                           mUsage = <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a>;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>                     mContentType = ContentType::Music;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>                     mInputPreset = InputPreset::VoiceRecognition;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>                       mSessionId = SessionId::None;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;};</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BASE_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="a00040_html_af5217ab05bfde0d7637024b599302d0b"><div class="ttname"><a href="a00040.html#af5217ab05bfde0d7637024b599302d0b">oboe::AudioStreamBase::getBufferSizeInFrames</a></div><div class="ttdeci">virtual int32_t getBufferSizeInFrames()</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:78</div></div>
-<div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:314</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamCallback.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="a00040.html">   29</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00040.html">AudioStreamBase</a> {</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    <a class="code" href="a00040.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keyword">virtual</span> ~<a class="code" href="a00040.html">AudioStreamBase</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="comment">// This class only contains primitives so we can use default constructor and copy methods.</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <a class="code" href="a00040.html">AudioStreamBase</a>(<span class="keyword">const</span> <a class="code" href="a00040.html">AudioStreamBase</a>&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <a class="code" href="a00040.html">AudioStreamBase</a>&amp; <a class="code" href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(<span class="keyword">const</span> <a class="code" href="a00040.html">AudioStreamBase</a>&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">   51</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a>; }</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">   56</a></span>&#160;    <a class="code" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a> <a class="code" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a>; }</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">   61</a></span>&#160;    int32_t <a class="code" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a>; }</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">   66</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a>; }</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">   71</a></span>&#160;    <a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> <a class="code" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a>; }</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">   79</a></span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>() { <span class="keywordflow">return</span> <a class="code" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a>; };</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">   84</a></span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a>; }</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">   89</a></span>&#160;    <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> <a class="code" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#ae9187492b679c97a0963e264954be473">mSharingMode</a>; }</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">   94</a></span>&#160;    <a class="code" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a> <a class="code" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a>; }</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00040.html#a093057d625bc896864b959974c265f21">   99</a></span>&#160;    int32_t <a class="code" href="a00040.html#a093057d625bc896864b959974c265f21">getDeviceId</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a>; }</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">  104</a></span>&#160;    <a class="code" href="a00048.html">AudioStreamCallback</a>* <a class="code" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a>;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    }</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">  111</a></span>&#160;    <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> <a class="code" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a>; }</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">  116</a></span>&#160;    <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a> <a class="code" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a>; }</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">  121</a></span>&#160;    <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> <a class="code" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a>; }</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">  126</a></span>&#160;    <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> <a class="code" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">getSessionId</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a>; }</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">  131</a></span>&#160;    <a class="code" href="a00048.html">AudioStreamCallback</a>            *<a class="code" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="a00040.html#a3962eb94420ad0ecea70029236001899">  133</a></span>&#160;    int32_t                         <a class="code" href="a00040.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">  135</a></span>&#160;    int32_t                         <a class="code" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">  137</a></span>&#160;    int32_t                         <a class="code" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a> = <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">  139</a></span>&#160;    int32_t                         <a class="code" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a> = <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">  141</a></span>&#160;    int32_t                         <a class="code" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a> = <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">  143</a></span>&#160;    int32_t                         <a class="code" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a> = <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="a00040.html#a54061319ed348329a29d883a5de2482e">  148</a></span>&#160;    int32_t                         <a class="code" href="a00040.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a> = <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="a00040.html#ae9187492b679c97a0963e264954be473">  151</a></span>&#160;    <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>                     <a class="code" href="a00040.html#ae9187492b679c97a0963e264954be473">mSharingMode</a> = <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a>;</div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">  153</a></span>&#160;    <a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>                     <a class="code" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a> = AudioFormat::Unspecified;</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">  155</a></span>&#160;    <a class="code" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a>                       <a class="code" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a> = <a class="code" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a>;</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">  157</a></span>&#160;    <a class="code" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a>                 <a class="code" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a> = PerformanceMode::None;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">  160</a></span>&#160;    <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>                           <a class="code" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a> = <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a>;</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">  162</a></span>&#160;    <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>                     <a class="code" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a> = ContentType::Music;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">  164</a></span>&#160;    <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>                     <a class="code" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a> = InputPreset::VoiceRecognition;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">  166</a></span>&#160;    <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>                       <a class="code" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a> = SessionId::None;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;};</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BASE_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="a00040_html_a5c773b93b8aa38191c7199cab023428a"><div class="ttname"><a href="a00040.html#a5c773b93b8aa38191c7199cab023428a">oboe::AudioStreamBase::getInputPreset</a></div><div class="ttdeci">InputPreset getInputPreset() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:121</div></div>
+<div class="ttc" id="a00040_html_a998885bb6c4f37e145f4626ad4177dea"><div class="ttname"><a href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">oboe::AudioStreamBase::mSampleRate</a></div><div class="ttdeci">int32_t mSampleRate</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:137</div></div>
+<div class="ttc" id="a00040_html_af5217ab05bfde0d7637024b599302d0b"><div class="ttname"><a href="a00040.html#af5217ab05bfde0d7637024b599302d0b">oboe::AudioStreamBase::getBufferSizeInFrames</a></div><div class="ttdeci">virtual int32_t getBufferSizeInFrames()</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:79</div></div>
+<div class="ttc" id="a00040_html_abe1c1e9cada1ced9b5c1504ac9b07737"><div class="ttname"><a href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">oboe::AudioStreamBase::mSessionId</a></div><div class="ttdeci">SessionId mSessionId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:166</div></div>
+<div class="ttc" id="a00040_html_a1e5d4f5b30c4cc36f81ffd858cc00589"><div class="ttname"><a href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">oboe::AudioStreamBase::mInputPreset</a></div><div class="ttdeci">InputPreset mInputPreset</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:164</div></div>
+<div class="ttc" id="a00040_html_a54061319ed348329a29d883a5de2482e"><div class="ttname"><a href="a00040.html#a54061319ed348329a29d883a5de2482e">oboe::AudioStreamBase::mFramesPerBurst</a></div><div class="ttdeci">int32_t mFramesPerBurst</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:148</div></div>
+<div class="ttc" id="a00040_html_a5f8f0e5add381b841856de80ea4cdb2b"><div class="ttname"><a href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase::mContentType</a></div><div class="ttdeci">ContentType mContentType</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:162</div></div>
+<div class="ttc" id="a00040_html_a2ddb935de0e24dd7ae8e2cfbecac9fdc"><div class="ttname"><a href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">oboe::AudioStreamBase::getPerformanceMode</a></div><div class="ttdeci">PerformanceMode getPerformanceMode() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:94</div></div>
+<div class="ttc" id="a00040_html_ab99671c2d0552557e75dc7b4afe91765"><div class="ttname"><a href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">oboe::AudioStreamBase::mPerformanceMode</a></div><div class="ttdeci">PerformanceMode mPerformanceMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:157</div></div>
+<div class="ttc" id="a00032_html_aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54"><div class="ttname"><a href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">oboe::Direction::Output</a></div></div>
+<div class="ttc" id="a00040_html_aa9c987a59555d7a60b9f7a63f4afc7fc"><div class="ttname"><a href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">oboe::AudioStreamBase::operator=</a></div><div class="ttdeci">AudioStreamBase &amp; operator=(const AudioStreamBase &amp;)=default</div></div>
+<div class="ttc" id="a00040_html_a5ff460bac9d14dfeac4eeddfcbb6e206"><div class="ttname"><a href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase::mChannelCount</a></div><div class="ttdeci">int32_t mChannelCount</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:135</div></div>
+<div class="ttc" id="a00040_html_a1fb033fc963f971bd1aa8f6707e49b41"><div class="ttname"><a href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">oboe::AudioStreamBase::getSharingMode</a></div><div class="ttdeci">SharingMode getSharingMode() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:89</div></div>
+<div class="ttc" id="a00040_html_a3b65595d26d1eae1b8ce9925a5b98f6a"><div class="ttname"><a href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">oboe::AudioStreamBase::mBufferSizeInFrames</a></div><div class="ttdeci">int32_t mBufferSizeInFrames</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:143</div></div>
+<div class="ttc" id="a00040_html_ac81d4719b350f8138aad1af38f0873b6"><div class="ttname"><a href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">oboe::AudioStreamBase::mBufferCapacityInFrames</a></div><div class="ttdeci">int32_t mBufferCapacityInFrames</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:141</div></div>
+<div class="ttc" id="a00040_html_ab12e2d068fa87e0553b01a400d96eb82"><div class="ttname"><a href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">oboe::AudioStreamBase::getContentType</a></div><div class="ttdeci">ContentType getContentType() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:116</div></div>
+<div class="ttc" id="a00040_html_ae9187492b679c97a0963e264954be473"><div class="ttname"><a href="a00040.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase::mSharingMode</a></div><div class="ttdeci">SharingMode mSharingMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:151</div></div>
+<div class="ttc" id="a00040_html_aa3c502ce09bbad7690a2dd6acaf8892e"><div class="ttname"><a href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">oboe::AudioStreamBase::getSessionId</a></div><div class="ttdeci">SessionId getSessionId() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:126</div></div>
+<div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:394</div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">oboe::Usage::Media</a></div></div>
-<div class="ttc" id="a00040_html_a6f86f2233a04c5a0b056f0c1c261f1b1"><div class="ttname"><a href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">oboe::AudioStreamBase::getDirection</a></div><div class="ttdeci">Direction getDirection() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:54</div></div>
-<div class="ttc" id="a00040_html_aa0b0a068097efaf967fb235c55383dd8"><div class="ttname"><a href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">oboe::AudioStreamBase::getChannelCount</a></div><div class="ttdeci">int getChannelCount() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:49</div></div>
-<div class="ttc" id="a00040_html_ab1e640461d7bf9d596decb913da7ac86"><div class="ttname"><a href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">oboe::AudioStreamBase::getFormat</a></div><div class="ttdeci">AudioFormat getFormat() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:70</div></div>
+<div class="ttc" id="a00040_html_a23dafa12fb1a6242b088ebd5a52798c8"><div class="ttname"><a href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase::mDeviceId</a></div><div class="ttdeci">int32_t mDeviceId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:139</div></div>
+<div class="ttc" id="a00040_html_a5b518e82f39c9fcbd7050fd66adb253c"><div class="ttname"><a href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase::mUsage</a></div><div class="ttdeci">Usage mUsage</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:160</div></div>
+<div class="ttc" id="a00040_html_a6f86f2233a04c5a0b056f0c1c261f1b1"><div class="ttname"><a href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">oboe::AudioStreamBase::getDirection</a></div><div class="ttdeci">Direction getDirection() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:56</div></div>
+<div class="ttc" id="a00040_html_a3962eb94420ad0ecea70029236001899"><div class="ttname"><a href="a00040.html#a3962eb94420ad0ecea70029236001899">oboe::AudioStreamBase::mFramesPerCallback</a></div><div class="ttdeci">int32_t mFramesPerCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:133</div></div>
+<div class="ttc" id="a00040_html_a093057d625bc896864b959974c265f21"><div class="ttname"><a href="a00040.html#a093057d625bc896864b959974c265f21">oboe::AudioStreamBase::getDeviceId</a></div><div class="ttdeci">int32_t getDeviceId() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:99</div></div>
+<div class="ttc" id="a00040_html_aa0b0a068097efaf967fb235c55383dd8"><div class="ttname"><a href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">oboe::AudioStreamBase::getChannelCount</a></div><div class="ttdeci">int getChannelCount() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:51</div></div>
+<div class="ttc" id="a00040_html_ab1e640461d7bf9d596decb913da7ac86"><div class="ttname"><a href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">oboe::AudioStreamBase::getFormat</a></div><div class="ttdeci">AudioFormat getFormat() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:71</div></div>
 <div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="a00040_html_ab1531253e64aaebe9e9eddbafb9098fc"><div class="ttname"><a href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">oboe::AudioStreamBase::getBufferCapacityInFrames</a></div><div class="ttdeci">virtual int32_t getBufferCapacityInFrames() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:83</div></div>
-<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:252</div></div>
-<div class="ttc" id="a00032_html_ae3a52556c58387e0cecba01f9abffdff"><div class="ttname"><a href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:113</div></div>
-<div class="ttc" id="a00040_html"><div class="ttname"><a href="a00040.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:34</div></div>
-<div class="ttc" id="a00040_html_ae9d32f3e09174bad69e74f147ee33087"><div class="ttname"><a href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">oboe::AudioStreamBase::getSampleRate</a></div><div class="ttdeci">int32_t getSampleRate() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:59</div></div>
+<div class="ttc" id="a00040_html_ab1531253e64aaebe9e9eddbafb9098fc"><div class="ttname"><a href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">oboe::AudioStreamBase::getBufferCapacityInFrames</a></div><div class="ttdeci">virtual int32_t getBufferCapacityInFrames() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:84</div></div>
+<div class="ttc" id="a00040_html_a1b4a2a191546708da657510c3cd6b797"><div class="ttname"><a href="a00040.html#a1b4a2a191546708da657510c3cd6b797">oboe::AudioStreamBase::getCallback</a></div><div class="ttdeci">AudioStreamCallback * getCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:104</div></div>
+<div class="ttc" id="a00032_html_aea1c5f88e3dd4144f51ed5a434fb387b"><div class="ttname"><a href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">oboe::Direction</a></div><div class="ttdeci">Direction</div><div class="ttdef"><b>Definition:</b> Definitions.h:87</div></div>
+<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:327</div></div>
+<div class="ttc" id="a00040_html_a26e9294721561d3b16bcaeec5faf4880"><div class="ttname"><a href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase::mDirection</a></div><div class="ttdeci">Direction mDirection</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:155</div></div>
+<div class="ttc" id="a00032_html_ae3a52556c58387e0cecba01f9abffdff"><div class="ttname"><a href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:176</div></div>
+<div class="ttc" id="a00040_html"><div class="ttname"><a href="a00040.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:29</div></div>
+<div class="ttc" id="a00040_html_ae3f72318212dd9977d7fa0ced92c91f4"><div class="ttname"><a href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">oboe::AudioStreamBase::mStreamCallback</a></div><div class="ttdeci">AudioStreamCallback * mStreamCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:131</div></div>
+<div class="ttc" id="a00032_html_a58191d1a396041246bd4e0a87dbfdec9"><div class="ttname"><a href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">oboe::AudioFormat</a></div><div class="ttdeci">AudioFormat</div><div class="ttdef"><b>Definition:</b> Definitions.h:103</div></div>
+<div class="ttc" id="a00040_html_ae9d32f3e09174bad69e74f147ee33087"><div class="ttname"><a href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">oboe::AudioStreamBase::getSampleRate</a></div><div class="ttdeci">int32_t getSampleRate() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:61</div></div>
 <div class="ttc" id="a00032_html_ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca"><div class="ttname"><a href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">oboe::SharingMode::Shared</a></div></div>
-<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:285</div></div>
-<div class="ttc" id="a00040_html_a1c133e1949f0814f60bd8bb61346756b"><div class="ttname"><a href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">oboe::AudioStreamBase::getFramesPerCallback</a></div><div class="ttdeci">int getFramesPerCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:64</div></div>
-<div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbb"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:174</div></div>
+<div class="ttc" id="a00040_html_a0bcfb2f8bd11c92b541fd910da9af397"><div class="ttname"><a href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">oboe::AudioStreamBase::getUsage</a></div><div class="ttdeci">Usage getUsage() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:111</div></div>
+<div class="ttc" id="a00040_html_a7869f04836c2c2bdc10c7309ad4b8e09"><div class="ttname"><a href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase::mFormat</a></div><div class="ttdeci">AudioFormat mFormat</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:153</div></div>
+<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:360</div></div>
+<div class="ttc" id="a00040_html_a1c133e1949f0814f60bd8bb61346756b"><div class="ttname"><a href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">oboe::AudioStreamBase::getFramesPerCallback</a></div><div class="ttdeci">int getFramesPerCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:66</div></div>
+<div class="ttc" id="a00032_html_ab0772052200184e514082eaa89be7905"><div class="ttname"><a href="a00032.html#ab0772052200184e514082eaa89be7905">oboe::kUnspecified</a></div><div class="ttdeci">constexpr int32_t kUnspecified</div><div class="ttdef"><b>Definition:</b> Definitions.h:41</div></div>
+<div class="ttc" id="a00032_html_acd0e87a1512eca01c60eb3b7a6676fde"><div class="ttname"><a href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">oboe::PerformanceMode</a></div><div class="ttdeci">PerformanceMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:195</div></div>
+<div class="ttc" id="a00048_html"><div class="ttname"><a href="a00048.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:33</div></div>
+<div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbb"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:249</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00008_source.html b/docs/reference/a00008_source.html
index 0ebd4b3..2f09689 100644
--- a/docs/reference/a00008_source.html
+++ b/docs/reference/a00008_source.html
@@ -71,35 +71,54 @@
 <div class="title">AudioStreamBuilder.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBase.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="a00044.html">   28</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00044.html">AudioStreamBuilder</a> : <span class="keyword">public</span> <a class="code" href="a00040.html">AudioStreamBase</a> {</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a>() : <a class="code" href="a00040.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="a00044.html#a075d10291e1f998d90c2f73ef767b5a7">   39</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(<span class="keywordtype">int</span> channelCount) {</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;        mChannelCount = channelCount;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    }</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="a00044.html#ab3fbd47b06197619c26393637e26354c">   49</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#ab3fbd47b06197619c26393637e26354c">setDirection</a>(Direction direction) {</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;        mDirection = direction;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    }</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="a00044.html#a30ef3d5f51d56a9f980dc09600ed139d">   65</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a>(int32_t sampleRate) {</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        mSampleRate = sampleRate;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    }</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00044.html#a3f397821f61eabaeedaf31064c859a54">   84</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(<span class="keywordtype">int</span> framesPerCallback) {</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        mFramesPerCallback = framesPerCallback;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    }</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">   95</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(AudioFormat format) {</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        mFormat = format;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    }</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00044.html#abaff480867af51ca0899bfa6fd7cc3ef">  109</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames) {</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        mBufferCapacityInFrames = bufferCapacityInFrames;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    }</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> getAudioApi()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mAudioApi; }</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00044.html#a38c6d6c5e718df1e3ac69daaac47c391">  125</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(<a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> audioApi) {</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        mAudioApi = audioApi;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    }</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="a00044.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>();</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="a00044.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>();</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00044.html#a3e991742acbbfb6fe5ebcf592c478654">  156</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a>(<a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> sharingMode) {</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        mSharingMode = sharingMode;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    }</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">  169</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a>(PerformanceMode performanceMode) {</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;        mPerformanceMode = performanceMode;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    }</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="a00044.html#a593255a2f5eb972665775cfc5bc58f6a">  187</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a>(<a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> usage) {</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        mUsage = usage;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    }</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="a00044.html#a6a17bafc217c2b624179fbbf77fe4468">  204</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(<a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a> contentType) {</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        mContentType = contentType;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    }</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="a00044.html#a144a3d095fd668210282f1a91f23e1f0">  224</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a>(<a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> inputPreset) {</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;        mInputPreset = inputPreset;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    }</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="a00044.html#a54c1651bdbe089d0d714af499e8a5f1d">  253</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a54c1651bdbe089d0d714af499e8a5f1d">setSessionId</a>(<a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> sessionId) {</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        mSessionId = sessionId;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    }</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="a00044.html#af36ddcd00686a9e1de661bdac0685a8e">  270</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a>(int32_t deviceId) {</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        mDeviceId = deviceId;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    }</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="a00044.html#a698cefa9af73bc97c020c004821fccbd">  293</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(<a class="code" href="a00048.html">AudioStreamCallback</a> *streamCallback) {</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        mStreamCallback = streamCallback;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    }</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    Result <a class="code" href="a00044.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(<a class="code" href="a00036.html">AudioStream</a> **stream);</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <a class="code" href="a00036.html">oboe::AudioStream</a> *build();</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a>       mAudioApi = AudioApi::Unspecified;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;};</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BUILDER_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="a00044_html"><div class="ttname"><a href="a00044.html">oboe::AudioStreamBuilder</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:28</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStreamBase.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="a00044.html">   28</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00044.html">AudioStreamBuilder</a> : <span class="keyword">public</span> <a class="code" href="a00040.html">AudioStreamBase</a> {</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a>() : <a class="code" href="a00040.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="a00044.html#a075d10291e1f998d90c2f73ef767b5a7">   39</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(<span class="keywordtype">int</span> channelCount) {</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;        <a class="code" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = channelCount;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    }</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="a00044.html#ab3fbd47b06197619c26393637e26354c">   49</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#ab3fbd47b06197619c26393637e26354c">setDirection</a>(<a class="code" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a> direction) {</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;        <a class="code" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a> = direction;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    }</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="a00044.html#a30ef3d5f51d56a9f980dc09600ed139d">   65</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a>(int32_t sampleRate) {</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        <a class="code" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a> = sampleRate;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    }</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00044.html#a3f397821f61eabaeedaf31064c859a54">   84</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(<span class="keywordtype">int</span> framesPerCallback) {</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        <a class="code" href="a00040.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = framesPerCallback;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    }</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">   95</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(<a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> format) {</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        <a class="code" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a> = format;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    }</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00044.html#abaff480867af51ca0899bfa6fd7cc3ef">  109</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames) {</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        <a class="code" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a> = bufferCapacityInFrames;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    }</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="a00044.html#ac9d41811c297fd28bc61833f640bb8d0">  121</a></span>&#160;    <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> <a class="code" href="a00044.html#ac9d41811c297fd28bc61833f640bb8d0">getAudioApi</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mAudioApi; }</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="a00044.html#a38c6d6c5e718df1e3ac69daaac47c391">  132</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(<a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> audioApi) {</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        mAudioApi = audioApi;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    }</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="a00044.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>();</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="a00044.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>();</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="a00044.html#a3e991742acbbfb6fe5ebcf592c478654">  163</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a>(<a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> sharingMode) {</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        <a class="code" href="a00040.html#ae9187492b679c97a0963e264954be473">mSharingMode</a> = sharingMode;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    }</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">  176</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a>(<a class="code" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a> performanceMode) {</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        <a class="code" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a> = performanceMode;</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    }</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="a00044.html#a593255a2f5eb972665775cfc5bc58f6a">  194</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a>(<a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> usage) {</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;        <a class="code" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a> = usage;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    }</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="a00044.html#a6a17bafc217c2b624179fbbf77fe4468">  211</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(<a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a> contentType) {</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        <a class="code" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a> = contentType;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    }</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="a00044.html#a144a3d095fd668210282f1a91f23e1f0">  231</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a>(<a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> inputPreset) {</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;        <a class="code" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a> = inputPreset;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    }</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="a00044.html#a54c1651bdbe089d0d714af499e8a5f1d">  260</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a54c1651bdbe089d0d714af499e8a5f1d">setSessionId</a>(<a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> sessionId) {</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        <a class="code" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a> = sessionId;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    }</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="a00044.html#af36ddcd00686a9e1de661bdac0685a8e">  277</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a>(int32_t deviceId) {</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        <a class="code" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a> = deviceId;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    }</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="a00044.html#a698cefa9af73bc97c020c004821fccbd">  300</a></span>&#160;    <a class="code" href="a00044.html">AudioStreamBuilder</a> *<a class="code" href="a00044.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(<a class="code" href="a00048.html">AudioStreamCallback</a> *streamCallback) {</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        <a class="code" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = streamCallback;</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    }</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00044.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(<a class="code" href="a00036.html">AudioStream</a> **stream);</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <a class="code" href="a00036.html">oboe::AudioStream</a> *build();</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a>       mAudioApi = AudioApi::Unspecified;</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;};</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BUILDER_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="a00040_html_a998885bb6c4f37e145f4626ad4177dea"><div class="ttname"><a href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">oboe::AudioStreamBase::mSampleRate</a></div><div class="ttdeci">int32_t mSampleRate</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:137</div></div>
+<div class="ttc" id="a00044_html"><div class="ttname"><a href="a00044.html">oboe::AudioStreamBuilder</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:28</div></div>
+<div class="ttc" id="a00040_html_abe1c1e9cada1ced9b5c1504ac9b07737"><div class="ttname"><a href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">oboe::AudioStreamBase::mSessionId</a></div><div class="ttdeci">SessionId mSessionId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:166</div></div>
 <div class="ttc" id="a00044_html_a622732bbe5c6577356d749f7dc2108df"><div class="ttname"><a href="a00044.html#a622732bbe5c6577356d749f7dc2108df">oboe::AudioStreamBuilder::isAAudioRecommended</a></div><div class="ttdeci">static bool isAAudioRecommended()</div></div>
-<div class="ttc" id="a00044_html_a593255a2f5eb972665775cfc5bc58f6a"><div class="ttname"><a href="a00044.html#a593255a2f5eb972665775cfc5bc58f6a">oboe::AudioStreamBuilder::setUsage</a></div><div class="ttdeci">AudioStreamBuilder * setUsage(Usage usage)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:187</div></div>
-<div class="ttc" id="a00044_html_a6a17bafc217c2b624179fbbf77fe4468"><div class="ttname"><a href="a00044.html#a6a17bafc217c2b624179fbbf77fe4468">oboe::AudioStreamBuilder::setContentType</a></div><div class="ttdeci">AudioStreamBuilder * setContentType(ContentType contentType)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:204</div></div>
+<div class="ttc" id="a00040_html_a1e5d4f5b30c4cc36f81ffd858cc00589"><div class="ttname"><a href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">oboe::AudioStreamBase::mInputPreset</a></div><div class="ttdeci">InputPreset mInputPreset</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:164</div></div>
+<div class="ttc" id="a00040_html_a5f8f0e5add381b841856de80ea4cdb2b"><div class="ttname"><a href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase::mContentType</a></div><div class="ttdeci">ContentType mContentType</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:162</div></div>
+<div class="ttc" id="a00040_html_ab99671c2d0552557e75dc7b4afe91765"><div class="ttname"><a href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">oboe::AudioStreamBase::mPerformanceMode</a></div><div class="ttdeci">PerformanceMode mPerformanceMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:157</div></div>
+<div class="ttc" id="a00040_html_a5ff460bac9d14dfeac4eeddfcbb6e206"><div class="ttname"><a href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase::mChannelCount</a></div><div class="ttdeci">int32_t mChannelCount</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:135</div></div>
+<div class="ttc" id="a00044_html_a593255a2f5eb972665775cfc5bc58f6a"><div class="ttname"><a href="a00044.html#a593255a2f5eb972665775cfc5bc58f6a">oboe::AudioStreamBuilder::setUsage</a></div><div class="ttdeci">AudioStreamBuilder * setUsage(Usage usage)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:194</div></div>
+<div class="ttc" id="a00044_html_a6a17bafc217c2b624179fbbf77fe4468"><div class="ttname"><a href="a00044.html#a6a17bafc217c2b624179fbbf77fe4468">oboe::AudioStreamBuilder::setContentType</a></div><div class="ttdeci">AudioStreamBuilder * setContentType(ContentType contentType)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:211</div></div>
 <div class="ttc" id="a00044_html_ab3fbd47b06197619c26393637e26354c"><div class="ttname"><a href="a00044.html#ab3fbd47b06197619c26393637e26354c">oboe::AudioStreamBuilder::setDirection</a></div><div class="ttdeci">AudioStreamBuilder * setDirection(Direction direction)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:49</div></div>
-<div class="ttc" id="a00044_html_af36ddcd00686a9e1de661bdac0685a8e"><div class="ttname"><a href="a00044.html#af36ddcd00686a9e1de661bdac0685a8e">oboe::AudioStreamBuilder::setDeviceId</a></div><div class="ttdeci">AudioStreamBuilder * setDeviceId(int32_t deviceId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:270</div></div>
-<div class="ttc" id="a00044_html_a144a3d095fd668210282f1a91f23e1f0"><div class="ttname"><a href="a00044.html#a144a3d095fd668210282f1a91f23e1f0">oboe::AudioStreamBuilder::setInputPreset</a></div><div class="ttdeci">AudioStreamBuilder * setInputPreset(InputPreset inputPreset)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:224</div></div>
+<div class="ttc" id="a00044_html_af36ddcd00686a9e1de661bdac0685a8e"><div class="ttname"><a href="a00044.html#af36ddcd00686a9e1de661bdac0685a8e">oboe::AudioStreamBuilder::setDeviceId</a></div><div class="ttdeci">AudioStreamBuilder * setDeviceId(int32_t deviceId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:277</div></div>
+<div class="ttc" id="a00044_html_a144a3d095fd668210282f1a91f23e1f0"><div class="ttname"><a href="a00044.html#a144a3d095fd668210282f1a91f23e1f0">oboe::AudioStreamBuilder::setInputPreset</a></div><div class="ttdeci">AudioStreamBuilder * setInputPreset(InputPreset inputPreset)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:231</div></div>
 <div class="ttc" id="a00044_html_a86b94cfa47729bef2e04dce1a9086074"><div class="ttname"><a href="a00044.html#a86b94cfa47729bef2e04dce1a9086074">oboe::AudioStreamBuilder::openStream</a></div><div class="ttdeci">Result openStream(AudioStream **stream)</div></div>
-<div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:314</div></div>
+<div class="ttc" id="a00040_html_ac81d4719b350f8138aad1af38f0873b6"><div class="ttname"><a href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">oboe::AudioStreamBase::mBufferCapacityInFrames</a></div><div class="ttdeci">int32_t mBufferCapacityInFrames</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:141</div></div>
+<div class="ttc" id="a00040_html_ae9187492b679c97a0963e264954be473"><div class="ttname"><a href="a00040.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase::mSharingMode</a></div><div class="ttdeci">SharingMode mSharingMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:151</div></div>
+<div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:394</div></div>
+<div class="ttc" id="a00040_html_a23dafa12fb1a6242b088ebd5a52798c8"><div class="ttname"><a href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase::mDeviceId</a></div><div class="ttdeci">int32_t mDeviceId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:139</div></div>
 <div class="ttc" id="a00044_html_abaff480867af51ca0899bfa6fd7cc3ef"><div class="ttname"><a href="a00044.html#abaff480867af51ca0899bfa6fd7cc3ef">oboe::AudioStreamBuilder::setBufferCapacityInFrames</a></div><div class="ttdeci">AudioStreamBuilder * setBufferCapacityInFrames(int32_t bufferCapacityInFrames)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:109</div></div>
-<div class="ttc" id="a00044_html_a38c6d6c5e718df1e3ac69daaac47c391"><div class="ttname"><a href="a00044.html#a38c6d6c5e718df1e3ac69daaac47c391">oboe::AudioStreamBuilder::setAudioApi</a></div><div class="ttdeci">AudioStreamBuilder * setAudioApi(AudioApi audioApi)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:125</div></div>
+<div class="ttc" id="a00044_html_a38c6d6c5e718df1e3ac69daaac47c391"><div class="ttname"><a href="a00044.html#a38c6d6c5e718df1e3ac69daaac47c391">oboe::AudioStreamBuilder::setAudioApi</a></div><div class="ttdeci">AudioStreamBuilder * setAudioApi(AudioApi audioApi)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:132</div></div>
+<div class="ttc" id="a00040_html_a5b518e82f39c9fcbd7050fd66adb253c"><div class="ttname"><a href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase::mUsage</a></div><div class="ttdeci">Usage mUsage</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:160</div></div>
 <div class="ttc" id="a00044_html_a3f397821f61eabaeedaf31064c859a54"><div class="ttname"><a href="a00044.html#a3f397821f61eabaeedaf31064c859a54">oboe::AudioStreamBuilder::setFramesPerCallback</a></div><div class="ttdeci">AudioStreamBuilder * setFramesPerCallback(int framesPerCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:84</div></div>
 <div class="ttc" id="a00044_html_aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><div class="ttname"><a href="a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">oboe::AudioStreamBuilder::setFormat</a></div><div class="ttdeci">AudioStreamBuilder * setFormat(AudioFormat format)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:95</div></div>
-<div class="ttc" id="a00044_html_a54c1651bdbe089d0d714af499e8a5f1d"><div class="ttname"><a href="a00044.html#a54c1651bdbe089d0d714af499e8a5f1d">oboe::AudioStreamBuilder::setSessionId</a></div><div class="ttdeci">AudioStreamBuilder * setSessionId(SessionId sessionId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:253</div></div>
-<div class="ttc" id="a00044_html_a698cefa9af73bc97c020c004821fccbd"><div class="ttname"><a href="a00044.html#a698cefa9af73bc97c020c004821fccbd">oboe::AudioStreamBuilder::setCallback</a></div><div class="ttdeci">AudioStreamBuilder * setCallback(AudioStreamCallback *streamCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:293</div></div>
+<div class="ttc" id="a00044_html_a54c1651bdbe089d0d714af499e8a5f1d"><div class="ttname"><a href="a00044.html#a54c1651bdbe089d0d714af499e8a5f1d">oboe::AudioStreamBuilder::setSessionId</a></div><div class="ttdeci">AudioStreamBuilder * setSessionId(SessionId sessionId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:260</div></div>
+<div class="ttc" id="a00040_html_a3962eb94420ad0ecea70029236001899"><div class="ttname"><a href="a00040.html#a3962eb94420ad0ecea70029236001899">oboe::AudioStreamBase::mFramesPerCallback</a></div><div class="ttdeci">int32_t mFramesPerCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:133</div></div>
+<div class="ttc" id="a00044_html_a698cefa9af73bc97c020c004821fccbd"><div class="ttname"><a href="a00044.html#a698cefa9af73bc97c020c004821fccbd">oboe::AudioStreamBuilder::setCallback</a></div><div class="ttdeci">AudioStreamBuilder * setCallback(AudioStreamCallback *streamCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:300</div></div>
 <div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
 <div class="ttc" id="a00044_html_a30ef3d5f51d56a9f980dc09600ed139d"><div class="ttname"><a href="a00044.html#a30ef3d5f51d56a9f980dc09600ed139d">oboe::AudioStreamBuilder::setSampleRate</a></div><div class="ttdeci">AudioStreamBuilder * setSampleRate(int32_t sampleRate)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:65</div></div>
-<div class="ttc" id="a00032_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:141</div></div>
-<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:252</div></div>
+<div class="ttc" id="a00032_html_aea1c5f88e3dd4144f51ed5a434fb387b"><div class="ttname"><a href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">oboe::Direction</a></div><div class="ttdeci">Direction</div><div class="ttdef"><b>Definition:</b> Definitions.h:87</div></div>
+<div class="ttc" id="a00032_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:216</div></div>
+<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:327</div></div>
+<div class="ttc" id="a00040_html_a26e9294721561d3b16bcaeec5faf4880"><div class="ttname"><a href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase::mDirection</a></div><div class="ttdeci">Direction mDirection</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:155</div></div>
 <div class="ttc" id="a00044_html_a18e7b5f7554a4c2ca763e35e8117d699"><div class="ttname"><a href="a00044.html#a18e7b5f7554a4c2ca763e35e8117d699">oboe::AudioStreamBuilder::isAAudioSupported</a></div><div class="ttdeci">static bool isAAudioSupported()</div></div>
-<div class="ttc" id="a00032_html_ae3a52556c58387e0cecba01f9abffdff"><div class="ttname"><a href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:113</div></div>
-<div class="ttc" id="a00040_html"><div class="ttname"><a href="a00040.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:34</div></div>
-<div class="ttc" id="a00044_html_a3e991742acbbfb6fe5ebcf592c478654"><div class="ttname"><a href="a00044.html#a3e991742acbbfb6fe5ebcf592c478654">oboe::AudioStreamBuilder::setSharingMode</a></div><div class="ttdeci">AudioStreamBuilder * setSharingMode(SharingMode sharingMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:156</div></div>
+<div class="ttc" id="a00044_html_ac9d41811c297fd28bc61833f640bb8d0"><div class="ttname"><a href="a00044.html#ac9d41811c297fd28bc61833f640bb8d0">oboe::AudioStreamBuilder::getAudioApi</a></div><div class="ttdeci">AudioApi getAudioApi() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:121</div></div>
+<div class="ttc" id="a00032_html_a5e32586b07bf64da91f99fc33c043cb1"><div class="ttname"><a href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:140</div></div>
+<div class="ttc" id="a00032_html_ae3a52556c58387e0cecba01f9abffdff"><div class="ttname"><a href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:176</div></div>
+<div class="ttc" id="a00040_html"><div class="ttname"><a href="a00040.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:29</div></div>
+<div class="ttc" id="a00040_html_ae3f72318212dd9977d7fa0ced92c91f4"><div class="ttname"><a href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">oboe::AudioStreamBase::mStreamCallback</a></div><div class="ttdeci">AudioStreamCallback * mStreamCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:131</div></div>
+<div class="ttc" id="a00032_html_a58191d1a396041246bd4e0a87dbfdec9"><div class="ttname"><a href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">oboe::AudioFormat</a></div><div class="ttdeci">AudioFormat</div><div class="ttdef"><b>Definition:</b> Definitions.h:103</div></div>
+<div class="ttc" id="a00040_html_a7869f04836c2c2bdc10c7309ad4b8e09"><div class="ttname"><a href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase::mFormat</a></div><div class="ttdeci">AudioFormat mFormat</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:153</div></div>
+<div class="ttc" id="a00044_html_a3e991742acbbfb6fe5ebcf592c478654"><div class="ttname"><a href="a00044.html#a3e991742acbbfb6fe5ebcf592c478654">oboe::AudioStreamBuilder::setSharingMode</a></div><div class="ttdeci">AudioStreamBuilder * setSharingMode(SharingMode sharingMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:163</div></div>
 <div class="ttc" id="a00044_html_a075d10291e1f998d90c2f73ef767b5a7"><div class="ttname"><a href="a00044.html#a075d10291e1f998d90c2f73ef767b5a7">oboe::AudioStreamBuilder::setChannelCount</a></div><div class="ttdeci">AudioStreamBuilder * setChannelCount(int channelCount)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:39</div></div>
-<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:285</div></div>
-<div class="ttc" id="a00044_html_a6cd1d65612e844e59da71a68ea0ab3ee"><div class="ttname"><a href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">oboe::AudioStreamBuilder::setPerformanceMode</a></div><div class="ttdeci">AudioStreamBuilder * setPerformanceMode(PerformanceMode performanceMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:169</div></div>
-<div class="ttc" id="a00048_html"><div class="ttname"><a href="a00048.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:26</div></div>
-<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:36</div></div>
-<div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbb"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:174</div></div>
+<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:360</div></div>
+<div class="ttc" id="a00032_html_acd0e87a1512eca01c60eb3b7a6676fde"><div class="ttname"><a href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">oboe::PerformanceMode</a></div><div class="ttdeci">PerformanceMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:195</div></div>
+<div class="ttc" id="a00044_html_a6cd1d65612e844e59da71a68ea0ab3ee"><div class="ttname"><a href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">oboe::AudioStreamBuilder::setPerformanceMode</a></div><div class="ttdeci">AudioStreamBuilder * setPerformanceMode(PerformanceMode performanceMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:176</div></div>
+<div class="ttc" id="a00048_html"><div class="ttname"><a href="a00048.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:33</div></div>
+<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:42</div></div>
+<div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbb"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:249</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00011_source.html b/docs/reference/a00011_source.html
index 3c2af5c..79c719f 100644
--- a/docs/reference/a00011_source.html
+++ b/docs/reference/a00011_source.html
@@ -71,12 +71,14 @@
 <div class="title">AudioStreamCallback.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">class </span>AudioStream;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="a00048.html">   26</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00048.html">AudioStreamCallback</a> {</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    <span class="keyword">virtual</span> ~<a class="code" href="a00048.html">AudioStreamCallback</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keyword">virtual</span> DataCallbackResult <a class="code" href="a00048.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a>(</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;            <a class="code" href="a00036.html">AudioStream</a> *oboeStream,</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;            <span class="keywordtype">void</span> *audioData,</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;            int32_t numFrames) = 0;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="a00048.html#a2407ff537a60301fd161bd2c36913bfd">   51</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00048.html#a2407ff537a60301fd161bd2c36913bfd">onErrorBeforeClose</a>(<a class="code" href="a00036.html">AudioStream</a> *oboeStream, Result error) {}</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba">   63</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba">onErrorAfterClose</a>(<a class="code" href="a00036.html">AudioStream</a> *oboeStream, Result error) {}</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;};</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor">#endif //OBOE_STREAM_CALLBACK_H</span></div><div class="ttc" id="a00048_html_af3a7c44f0254abe6e5e5bb566e2317df"><div class="ttname"><a href="a00048.html#af3a7c44f0254abe6e5e5bb566e2317df">oboe::AudioStreamCallback::onAudioReady</a></div><div class="ttdeci">virtual DataCallbackResult onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames)=0</div></div>
-<div class="ttc" id="a00048_html_a2407ff537a60301fd161bd2c36913bfd"><div class="ttname"><a href="a00048.html#a2407ff537a60301fd161bd2c36913bfd">oboe::AudioStreamCallback::onErrorBeforeClose</a></div><div class="ttdeci">virtual void onErrorBeforeClose(AudioStream *oboeStream, Result error)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:51</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">class </span>AudioStream;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="a00048.html">   33</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00048.html">AudioStreamCallback</a> {</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keyword">virtual</span> ~<a class="code" href="a00048.html">AudioStreamCallback</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a> <a class="code" href="a00048.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a>(</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;            <a class="code" href="a00036.html">AudioStream</a> *oboeStream,</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;            <span class="keywordtype">void</span> *audioData,</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;            int32_t numFrames) = 0;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="a00048.html#a2407ff537a60301fd161bd2c36913bfd">   58</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00048.html#a2407ff537a60301fd161bd2c36913bfd">onErrorBeforeClose</a>(<a class="code" href="a00036.html">AudioStream</a> *oboeStream, <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> error) {}</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba">   70</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba">onErrorAfterClose</a>(<a class="code" href="a00036.html">AudioStream</a> *oboeStream, <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> error) {}</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;};</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="preprocessor">#endif //OBOE_STREAM_CALLBACK_H</span></div><div class="ttc" id="a00048_html_af3a7c44f0254abe6e5e5bb566e2317df"><div class="ttname"><a href="a00048.html#af3a7c44f0254abe6e5e5bb566e2317df">oboe::AudioStreamCallback::onAudioReady</a></div><div class="ttdeci">virtual DataCallbackResult onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames)=0</div></div>
+<div class="ttc" id="a00048_html_a2407ff537a60301fd161bd2c36913bfd"><div class="ttname"><a href="a00048.html#a2407ff537a60301fd161bd2c36913bfd">oboe::AudioStreamCallback::onErrorBeforeClose</a></div><div class="ttdeci">virtual void onErrorBeforeClose(AudioStream *oboeStream, Result error)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:58</div></div>
 <div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="a00048_html"><div class="ttname"><a href="a00048.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:26</div></div>
-<div class="ttc" id="a00048_html_a7089c5e18a80cba89eb3f4fe2341aeba"><div class="ttname"><a href="a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba">oboe::AudioStreamCallback::onErrorAfterClose</a></div><div class="ttdeci">virtual void onErrorAfterClose(AudioStream *oboeStream, Result error)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:63</div></div>
-<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:36</div></div>
+<div class="ttc" id="a00032_html_a5e32586b07bf64da91f99fc33c043cb1"><div class="ttname"><a href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:140</div></div>
+<div class="ttc" id="a00032_html_a9cb0d39766aa6d50132a2daa6e826457"><div class="ttname"><a href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">oboe::DataCallbackResult</a></div><div class="ttdeci">DataCallbackResult</div><div class="ttdef"><b>Definition:</b> Definitions.h:128</div></div>
+<div class="ttc" id="a00048_html"><div class="ttname"><a href="a00048.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:33</div></div>
+<div class="ttc" id="a00048_html_a7089c5e18a80cba89eb3f4fe2341aeba"><div class="ttname"><a href="a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba">oboe::AudioStreamCallback::onErrorAfterClose</a></div><div class="ttdeci">virtual void onErrorAfterClose(AudioStream *oboeStream, Result error)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:70</div></div>
+<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:42</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00014_source.html b/docs/reference/a00014_source.html
index c2fc1d5..6985f7d 100644
--- a/docs/reference/a00014_source.html
+++ b/docs/reference/a00014_source.html
@@ -71,45 +71,65 @@
 <div class="title">Definitions.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;aaudio/AAudio.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment">// Ensure that all AAudio primitive data types are int32_t</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#define ASSERT_INT32(type) static_assert(std::is_same&lt;int32_t, type&gt;::value, \</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#type&quot; must be int32_t&quot;)</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;ASSERT_INT32(aaudio_stream_state_t);</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;ASSERT_INT32(aaudio_direction_t);</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;ASSERT_INT32(aaudio_format_t);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;ASSERT_INT32(aaudio_data_callback_result_t);</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;ASSERT_INT32(aaudio_result_t);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;ASSERT_INT32(aaudio_sharing_mode_t);</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;ASSERT_INT32(aaudio_performance_mode_t);</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    constexpr int32_t kUnspecified = 0;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="comment">// TODO: Investigate using std::chrono</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    constexpr int64_t kNanosPerMicrosecond =    1000;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    constexpr int64_t kNanosPerMillisecond =    kNanosPerMicrosecond * 1000;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    constexpr int64_t kMillisPerSecond =        1000;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    constexpr int64_t kNanosPerSecond =         kNanosPerMillisecond * kMillisPerSecond;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keyword">enum class</span> StreamState : aaudio_stream_state_t {</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;        Uninitialized = AAUDIO_STREAM_STATE_UNINITIALIZED,</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;        Unknown = AAUDIO_STREAM_STATE_UNKNOWN,</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;        Open = AAUDIO_STREAM_STATE_OPEN,</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;        Starting = AAUDIO_STREAM_STATE_STARTING,</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        Started = AAUDIO_STREAM_STATE_STARTED,</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;        Pausing = AAUDIO_STREAM_STATE_PAUSING,</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        Paused = AAUDIO_STREAM_STATE_PAUSED,</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;        Flushing = AAUDIO_STREAM_STATE_FLUSHING,</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        Flushed = AAUDIO_STREAM_STATE_FLUSHED,</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;        Stopping = AAUDIO_STREAM_STATE_STOPPING,</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        Stopped = AAUDIO_STREAM_STATE_STOPPED,</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        Closing = AAUDIO_STREAM_STATE_CLOSING,</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        Closed = AAUDIO_STREAM_STATE_CLOSED,</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        Disconnected = AAUDIO_STREAM_STATE_DISCONNECTED,</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    };</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="keyword">enum class</span> Direction : aaudio_direction_t {</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;        Output = AAUDIO_DIRECTION_OUTPUT,</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        Input = AAUDIO_DIRECTION_INPUT,</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    };</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keyword">enum class</span> AudioFormat : aaudio_format_t {</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        Invalid = AAUDIO_FORMAT_INVALID,</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;        <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = AAUDIO_FORMAT_UNSPECIFIED,</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        I16 = AAUDIO_FORMAT_PCM_I16,</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;        Float = AAUDIO_FORMAT_PCM_FLOAT,</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    };</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keyword">enum class</span> DataCallbackResult : aaudio_data_callback_result_t {</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        Continue = AAUDIO_CALLBACK_RESULT_CONTINUE,</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        Stop = AAUDIO_CALLBACK_RESULT_STOP,</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    };</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keyword">enum class</span> Result : aaudio_result_t {</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        OK,</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        ErrorBase = AAUDIO_ERROR_BASE,</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        ErrorDisconnected = AAUDIO_ERROR_DISCONNECTED,</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        ErrorIllegalArgument = AAUDIO_ERROR_ILLEGAL_ARGUMENT,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        ErrorInternal = AAUDIO_ERROR_INTERNAL,</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        ErrorInvalidState = AAUDIO_ERROR_INVALID_STATE,</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        ErrorInvalidHandle = AAUDIO_ERROR_INVALID_HANDLE,</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;        ErrorUnimplemented = AAUDIO_ERROR_UNIMPLEMENTED,</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;        ErrorUnavailable = AAUDIO_ERROR_UNAVAILABLE,</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        ErrorNoFreeHandles = AAUDIO_ERROR_NO_FREE_HANDLES,</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        ErrorNoMemory = AAUDIO_ERROR_NO_MEMORY,</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        ErrorNull = AAUDIO_ERROR_NULL,</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        ErrorTimeout = AAUDIO_ERROR_TIMEOUT,</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        ErrorWouldBlock = AAUDIO_ERROR_WOULD_BLOCK,</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        ErrorInvalidFormat = AAUDIO_ERROR_INVALID_FORMAT,</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        ErrorOutOfRange = AAUDIO_ERROR_OUT_OF_RANGE,</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        ErrorNoService = AAUDIO_ERROR_NO_SERVICE,</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        ErrorInvalidRate = AAUDIO_ERROR_INVALID_RATE,</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;        <span class="comment">// Reserved for future AAudio result types</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;        Reserved1,</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        Reserved2,</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        Reserved3,</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        Reserved4,</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        Reserved5,</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        Reserved6,</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        Reserved7,</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        Reserved8,</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        Reserved9,</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        Reserved10,</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        ErrorClosed,</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    };</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">  113</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> : aaudio_sharing_mode_t {</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971">Exclusive</a> = AAUDIO_SHARING_MODE_EXCLUSIVE,</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">Shared</a> = AAUDIO_SHARING_MODE_SHARED,</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    };</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keyword">enum class</span> PerformanceMode : aaudio_performance_mode_t {</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        <span class="comment">// No particular performance needs. Default.</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = AAUDIO_PERFORMANCE_MODE_NONE,</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="comment">// Extending battery life is most important.</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        PowerSaving = AAUDIO_PERFORMANCE_MODE_POWER_SAVING,</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        <span class="comment">// Reducing latency is most important.</span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        LowLatency = AAUDIO_PERFORMANCE_MODE_LOW_LATENCY</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    };</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">  141</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> : int32_t {</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = kUnspecified,</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b">OpenSLES</a>,</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AAudio</a></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    };</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment">// Hard code constants so they can be compiled with versions of the NDK before P.</span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="preprocessor">#if __ANDROID_API_LEVEL__ &gt;= __ANDROID_API_P__</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="preprocessor">#define CONSTANT_API_P(hard_constant, soft_constant) (soft_constant)</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="preprocessor">#define CONSTANT_API_P(hard_constant, soft_constant) (hard_constant)</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">  174</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> : aaudio_usage_t {</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Media</a> = CONSTANT_API_P(1, AAUDIO_USAGE_MEDIA),</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = CONSTANT_API_P(2, AAUDIO_USAGE_VOICE_COMMUNICATION),</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74">VoiceCommunicationSignalling</a> = CONSTANT_API_P(3,</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;                                                      AAUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING),</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba46c4c4d980dfe025ae5b35aa0011dde4">Alarm</a> = CONSTANT_API_P(4, AAUDIO_USAGE_ALARM),</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71">Notification</a> = CONSTANT_API_P(5, AAUDIO_USAGE_NOTIFICATION),</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf">NotificationRingtone</a> = CONSTANT_API_P(6, AAUDIO_USAGE_NOTIFICATION_RINGTONE),</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f">NotificationEvent</a> = CONSTANT_API_P(10, AAUDIO_USAGE_NOTIFICATION_EVENT),</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba639ffd54516c1a84a288a363c9469df8">AssistanceAccessibility</a> = CONSTANT_API_P(11, AAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY),</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbbade058a1314f9a8504593259ff4f21a1e">AssistanceNavigationGuidance</a> = CONSTANT_API_P(12,</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;                                                      AAUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE),</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7">AssistanceSonification</a> = CONSTANT_API_P(13, AAUDIO_USAGE_ASSISTANCE_SONIFICATION),</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb">Game</a> = CONSTANT_API_P(14, AAUDIO_USAGE_GAME),</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b">Assistant</a> = CONSTANT_API_P(16, AAUDIO_USAGE_ASSISTANT),</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    };</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406">  252</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a> : aaudio_content_type_t {</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">  257</a></span>&#160;        <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">Speech</a> = CONSTANT_API_P(1, AAUDIO_CONTENT_TYPE_SPEECH),</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">  262</a></span>&#160;        <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">Music</a> = CONSTANT_API_P(2, AAUDIO_CONTENT_TYPE_MUSIC),</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">  267</a></span>&#160;        <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">Movie</a> = CONSTANT_API_P(3, AAUDIO_CONTENT_TYPE_MOVIE),</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">  273</a></span>&#160;        <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">Sonification</a> = CONSTANT_API_P(4, AAUDIO_CONTENT_TYPE_SONIFICATION),</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    };</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04">  285</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> : aaudio_input_preset_t {</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">  289</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">Generic</a> = CONSTANT_API_P(1, AAUDIO_INPUT_PRESET_GENERIC),</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">  294</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">Camcorder</a> = CONSTANT_API_P(5, AAUDIO_INPUT_PRESET_CAMCORDER),</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">  299</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">VoiceRecognition</a> = CONSTANT_API_P(6, AAUDIO_INPUT_PRESET_VOICE_RECOGNITION),</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">  304</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = CONSTANT_API_P(7, AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION),</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">  311</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">Unprocessed</a> = CONSTANT_API_P(9, AAUDIO_INPUT_PRESET_UNPROCESSED),</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    };</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">  314</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> {</div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">  322</a></span>&#160;         <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = CONSTANT_API_P(-1, AAUDIO_SESSION_ID_NONE),</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="a00032.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">  333</a></span>&#160;         <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">Allocate</a> = CONSTANT_API_P(0, AAUDIO_SESSION_ID_ALLOCATE),</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    };</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="a00032.html#a522e6806948369987639a0d1df03c029">  336</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029">ChannelCount</a> : int32_t {</div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">  340</a></span>&#160;      <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = kUnspecified,</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">  345</a></span>&#160;      <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">Mono</a> = 1,</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">  350</a></span>&#160;      <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">Stereo</a> = 2,</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    };</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;<span class="preprocessor">#undef CONSTANT_API_P</span></div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="a00052.html">  355</a></span>&#160;    <span class="keyword">class </span><a class="code" href="a00052.html">DefaultStreamValues</a> {</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="a00052.html#a46a5d9a653f2153f618cadcab764e1b1">  377</a></span>&#160;        <span class="keyword">static</span> int32_t <a class="code" href="a00052.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a>;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;        <span class="keyword">static</span> int32_t FramesPerBurst;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        <span class="keyword">static</span> int32_t <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029">ChannelCount</a>;</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    };</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="preprocessor">#endif // OBOE_DEFINITIONS_H</span></div><div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">oboe::Allocate</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:333</div></div>
-<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">oboe::VoiceRecognition</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:299</div></div>
-<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">oboe::Speech</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:257</div></div>
-<div class="ttc" id="a00032_html_a522e6806948369987639a0d1df03c029"><div class="ttname"><a href="a00032.html#a522e6806948369987639a0d1df03c029">oboe::ChannelCount</a></div><div class="ttdeci">ChannelCount</div><div class="ttdef"><b>Definition:</b> Definitions.h:336</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;aaudio/AAudio.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment">// Ensure that all AAudio primitive data types are int32_t</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#define ASSERT_INT32(type) static_assert(std::is_same&lt;int32_t, type&gt;::value, \</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#type&quot; must be int32_t&quot;)</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;ASSERT_INT32(aaudio_stream_state_t);</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;ASSERT_INT32(aaudio_direction_t);</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;ASSERT_INT32(aaudio_format_t);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;ASSERT_INT32(aaudio_data_callback_result_t);</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;ASSERT_INT32(aaudio_result_t);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;ASSERT_INT32(aaudio_sharing_mode_t);</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;ASSERT_INT32(aaudio_performance_mode_t);</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00032.html#ab0772052200184e514082eaa89be7905">   41</a></span>&#160;    constexpr int32_t <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a> = 0;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="comment">// TODO: Investigate using std::chrono</span></div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00032.html#aedef0759ae3622b6f0324799bcbdebf0">   47</a></span>&#160;<span class="comment"></span>    constexpr int64_t <a class="code" href="a00032.html#aedef0759ae3622b6f0324799bcbdebf0">kNanosPerMicrosecond</a> =    1000;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="a00032.html#a831e887150474c087170679eaca8672b">   52</a></span>&#160;    constexpr int64_t <a class="code" href="a00032.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a> =    <a class="code" href="a00032.html#aedef0759ae3622b6f0324799bcbdebf0">kNanosPerMicrosecond</a> * 1000;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="a00032.html#ad1bb9f5626cec20d3a052a8721959873">   57</a></span>&#160;    constexpr int64_t <a class="code" href="a00032.html#ad1bb9f5626cec20d3a052a8721959873">kMillisPerSecond</a> =        1000;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="a00032.html#a5948466b593c4eab65f7025846a39f51">   62</a></span>&#160;    constexpr int64_t <a class="code" href="a00032.html#a5948466b593c4eab65f7025846a39f51">kNanosPerSecond</a> =         <a class="code" href="a00032.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a> * <a class="code" href="a00032.html#ad1bb9f5626cec20d3a052a8721959873">kMillisPerSecond</a>;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">   67</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> : aaudio_stream_state_t {</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        Uninitialized = AAUDIO_STREAM_STATE_UNINITIALIZED,</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        Unknown = AAUDIO_STREAM_STATE_UNKNOWN,</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;        Open = AAUDIO_STREAM_STATE_OPEN,</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        Starting = AAUDIO_STREAM_STATE_STARTING,</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;        Started = AAUDIO_STREAM_STATE_STARTED,</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;        Pausing = AAUDIO_STREAM_STATE_PAUSING,</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        Paused = AAUDIO_STREAM_STATE_PAUSED,</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        Flushing = AAUDIO_STREAM_STATE_FLUSHING,</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        Flushed = AAUDIO_STREAM_STATE_FLUSHED,</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        Stopping = AAUDIO_STREAM_STATE_STOPPING,</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        Stopped = AAUDIO_STREAM_STATE_STOPPED,</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        Closing = AAUDIO_STREAM_STATE_CLOSING,</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        Closed = AAUDIO_STREAM_STATE_CLOSED,</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        Disconnected = AAUDIO_STREAM_STATE_DISCONNECTED,</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    };</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">   87</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a> : aaudio_direction_t {</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        <a class="code" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Output</a> = AAUDIO_DIRECTION_OUTPUT,</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        <a class="code" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba324118a6721dd6b8a9b9f4e327df2bf5">Input</a> = AAUDIO_DIRECTION_INPUT,</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    };</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">  103</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> : aaudio_format_t {</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        <a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b">Invalid</a> = AAUDIO_FORMAT_INVALID,</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = AAUDIO_FORMAT_UNSPECIFIED,</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        <a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9abcd774f891b5f9df7099f3ea75dadf8d">I16</a> = AAUDIO_FORMAT_PCM_I16,</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        <a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a22ae0e2b89e5e3d477f988cc36d3272b">Float</a> = AAUDIO_FORMAT_PCM_FLOAT,</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    };</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">  128</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a> : aaudio_data_callback_result_t {</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        <span class="comment">// Indicates to the caller that the callbacks should continue.</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        Continue = AAUDIO_CALLBACK_RESULT_CONTINUE,</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        <span class="comment">// Indicates to the caller that the callbacks should stop immediately.</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        Stop = AAUDIO_CALLBACK_RESULT_STOP,</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    };</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">  140</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> : aaudio_result_t {</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        OK,</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        ErrorBase = AAUDIO_ERROR_BASE,</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        ErrorDisconnected = AAUDIO_ERROR_DISCONNECTED,</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        ErrorIllegalArgument = AAUDIO_ERROR_ILLEGAL_ARGUMENT,</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        ErrorInternal = AAUDIO_ERROR_INTERNAL,</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        ErrorInvalidState = AAUDIO_ERROR_INVALID_STATE,</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        ErrorInvalidHandle = AAUDIO_ERROR_INVALID_HANDLE,</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        ErrorUnimplemented = AAUDIO_ERROR_UNIMPLEMENTED,</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        ErrorUnavailable = AAUDIO_ERROR_UNAVAILABLE,</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        ErrorNoFreeHandles = AAUDIO_ERROR_NO_FREE_HANDLES,</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        ErrorNoMemory = AAUDIO_ERROR_NO_MEMORY,</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        ErrorNull = AAUDIO_ERROR_NULL,</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;        ErrorTimeout = AAUDIO_ERROR_TIMEOUT,</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;        ErrorWouldBlock = AAUDIO_ERROR_WOULD_BLOCK,</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        ErrorInvalidFormat = AAUDIO_ERROR_INVALID_FORMAT,</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        ErrorOutOfRange = AAUDIO_ERROR_OUT_OF_RANGE,</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        ErrorNoService = AAUDIO_ERROR_NO_SERVICE,</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        ErrorInvalidRate = AAUDIO_ERROR_INVALID_RATE,</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        <span class="comment">// Reserved for future AAudio result types</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        Reserved1,</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        Reserved2,</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        Reserved3,</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        Reserved4,</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        Reserved5,</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        Reserved6,</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        Reserved7,</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        Reserved8,</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        Reserved9,</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        Reserved10,</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;        ErrorClosed,</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    };</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">  176</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> : aaudio_sharing_mode_t {</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971">Exclusive</a> = AAUDIO_SHARING_MODE_EXCLUSIVE,</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        <a class="code" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">Shared</a> = AAUDIO_SHARING_MODE_SHARED,</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    };</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">  195</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a> : aaudio_performance_mode_t {</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = AAUDIO_PERFORMANCE_MODE_NONE,</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        <a class="code" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fdeabbad080463ed11f9d77797c04aa1e5b1">PowerSaving</a> = AAUDIO_PERFORMANCE_MODE_POWER_SAVING,</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        <a class="code" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fdea611907b5ab1865515c35357efa41a9b9">LowLatency</a> = AAUDIO_PERFORMANCE_MODE_LOW_LATENCY</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    };</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">  216</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> : int32_t {</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>,</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;        <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b">OpenSLES</a>,</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;        <a class="code" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AAudio</a></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    };</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;<span class="comment">// Hard code constants so they can be compiled with versions of the NDK before P.</span></div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;<span class="preprocessor">#if __ANDROID_API_LEVEL__ &gt;= __ANDROID_API_P__</span></div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="preprocessor">#define CONSTANT_API_P(hard_constant, soft_constant) (soft_constant)</span></div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;<span class="preprocessor">#define CONSTANT_API_P(hard_constant, soft_constant) (hard_constant)</span></div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">  249</a></span>&#160;    <span class="keyword">enum class</span> <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> : aaudio_usage_t {</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Media</a> = CONSTANT_API_P(1, AAUDIO_USAGE_MEDIA),</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = CONSTANT_API_P(2, AAUDIO_USAGE_VOICE_COMMUNICATION),</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74">VoiceCommunicationSignalling</a> = CONSTANT_API_P(3,</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;                                                      AAUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING),</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba46c4c4d980dfe025ae5b35aa0011dde4">Alarm</a> = CONSTANT_API_P(4, AAUDIO_USAGE_ALARM),</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71">Notification</a> = CONSTANT_API_P(5, AAUDIO_USAGE_NOTIFICATION),</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf">NotificationRingtone</a> = CONSTANT_API_P(6, AAUDIO_USAGE_NOTIFICATION_RINGTONE),</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f">NotificationEvent</a> = CONSTANT_API_P(10, AAUDIO_USAGE_NOTIFICATION_EVENT),</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba639ffd54516c1a84a288a363c9469df8">AssistanceAccessibility</a> = CONSTANT_API_P(11, AAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY),</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbbade058a1314f9a8504593259ff4f21a1e">AssistanceNavigationGuidance</a> = CONSTANT_API_P(12,</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;                                                      AAUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE),</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7">AssistanceSonification</a> = CONSTANT_API_P(13, AAUDIO_USAGE_ASSISTANCE_SONIFICATION),</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb">Game</a> = CONSTANT_API_P(14, AAUDIO_USAGE_GAME),</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;        <a class="code" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b">Assistant</a> = CONSTANT_API_P(16, AAUDIO_USAGE_ASSISTANT),</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    };</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406">  327</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a> : aaudio_content_type_t {</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">  332</a></span>&#160;        <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">Speech</a> = CONSTANT_API_P(1, AAUDIO_CONTENT_TYPE_SPEECH),</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">  337</a></span>&#160;        <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">Music</a> = CONSTANT_API_P(2, AAUDIO_CONTENT_TYPE_MUSIC),</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">  342</a></span>&#160;        <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">Movie</a> = CONSTANT_API_P(3, AAUDIO_CONTENT_TYPE_MOVIE),</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">  348</a></span>&#160;        <a class="code" href="a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">Sonification</a> = CONSTANT_API_P(4, AAUDIO_CONTENT_TYPE_SONIFICATION),</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    };</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04">  360</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> : aaudio_input_preset_t {</div><div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">  364</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">Generic</a> = CONSTANT_API_P(1, AAUDIO_INPUT_PRESET_GENERIC),</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">  369</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">Camcorder</a> = CONSTANT_API_P(5, AAUDIO_INPUT_PRESET_CAMCORDER),</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">  374</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">VoiceRecognition</a> = CONSTANT_API_P(6, AAUDIO_INPUT_PRESET_VOICE_RECOGNITION),</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">  379</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = CONSTANT_API_P(7, AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION),</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">  386</a></span>&#160;        <a class="code" href="a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">Unprocessed</a> = CONSTANT_API_P(9, AAUDIO_INPUT_PRESET_UNPROCESSED),</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    };</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">  394</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> {</div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">  400</a></span>&#160;         <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = CONSTANT_API_P(-1, AAUDIO_SESSION_ID_NONE),</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="a00032.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">  409</a></span>&#160;         <a class="code" href="a00032.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">Allocate</a> = CONSTANT_API_P(0, AAUDIO_SESSION_ID_ALLOCATE),</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    };</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;</div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="a00032.html#a522e6806948369987639a0d1df03c029">  422</a></span>&#160;    <span class="keyword">enum</span> <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029">ChannelCount</a> : int32_t {</div><div class="line"><a name="l00426"></a><span class="lineno"><a class="line" href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">  426</a></span>&#160;      <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = <a class="code" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>,</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">  431</a></span>&#160;      <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">Mono</a> = 1,</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">  436</a></span>&#160;      <a class="code" href="a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">Stereo</a> = 2,</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    };</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;<span class="preprocessor">#undef CONSTANT_API_P</span></div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="a00052.html">  459</a></span>&#160;    <span class="keyword">class </span><a class="code" href="a00052.html">DefaultStreamValues</a> {</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="a00052.html#a46a5d9a653f2153f618cadcab764e1b1">  464</a></span>&#160;        <span class="keyword">static</span> int32_t <a class="code" href="a00052.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a>;</div><div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="a00052.html#ab5ea5576699cebc56193f5c297d3e300">  466</a></span>&#160;        <span class="keyword">static</span> int32_t <a class="code" href="a00052.html#ab5ea5576699cebc56193f5c297d3e300">FramesPerBurst</a>;</div><div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="a00052.html#ad5dce538d5963c81bf58350ab730962d">  468</a></span>&#160;        <span class="keyword">static</span> int32_t <a class="code" href="a00052.html#ad5dce538d5963c81bf58350ab730962d">ChannelCount</a>;</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    };</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="preprocessor">#endif // OBOE_DEFINITIONS_H</span></div><div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">oboe::Allocate</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:409</div></div>
+<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">oboe::VoiceRecognition</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:374</div></div>
+<div class="ttc" id="a00032_html_a831e887150474c087170679eaca8672b"><div class="ttname"><a href="a00032.html#a831e887150474c087170679eaca8672b">oboe::kNanosPerMillisecond</a></div><div class="ttdeci">constexpr int64_t kNanosPerMillisecond</div><div class="ttdef"><b>Definition:</b> Definitions.h:52</div></div>
+<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">oboe::Speech</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:332</div></div>
+<div class="ttc" id="a00032_html_a522e6806948369987639a0d1df03c029"><div class="ttname"><a href="a00032.html#a522e6806948369987639a0d1df03c029">oboe::ChannelCount</a></div><div class="ttdeci">ChannelCount</div><div class="ttdef"><b>Definition:</b> Definitions.h:422</div></div>
+<div class="ttc" id="a00032_html_acd0e87a1512eca01c60eb3b7a6676fdea611907b5ab1865515c35357efa41a9b9"><div class="ttname"><a href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fdea611907b5ab1865515c35357efa41a9b9">oboe::PerformanceMode::LowLatency</a></div></div>
+<div class="ttc" id="a00052_html_ab5ea5576699cebc56193f5c297d3e300"><div class="ttname"><a href="a00052.html#ab5ea5576699cebc56193f5c297d3e300">oboe::DefaultStreamValues::FramesPerBurst</a></div><div class="ttdeci">static int32_t FramesPerBurst</div><div class="ttdef"><b>Definition:</b> Definitions.h:466</div></div>
+<div class="ttc" id="a00052_html_ad5dce538d5963c81bf58350ab730962d"><div class="ttname"><a href="a00052.html#ad5dce538d5963c81bf58350ab730962d">oboe::DefaultStreamValues::ChannelCount</a></div><div class="ttdeci">static int32_t ChannelCount</div><div class="ttdef"><b>Definition:</b> Definitions.h:468</div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf">oboe::Usage::NotificationRingtone</a></div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbbade058a1314f9a8504593259ff4f21a1e"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbbade058a1314f9a8504593259ff4f21a1e">oboe::Usage::AssistanceNavigationGuidance</a></div></div>
-<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">oboe::VoiceCommunication</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:304</div></div>
-<div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:314</div></div>
-<div class="ttc" id="a00052_html_a46a5d9a653f2153f618cadcab764e1b1"><div class="ttname"><a href="a00052.html#a46a5d9a653f2153f618cadcab764e1b1">oboe::DefaultStreamValues::SampleRate</a></div><div class="ttdeci">static int32_t SampleRate</div><div class="ttdef"><b>Definition:</b> Definitions.h:377</div></div>
+<div class="ttc" id="a00032_html_aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54"><div class="ttname"><a href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">oboe::Direction::Output</a></div></div>
+<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">oboe::VoiceCommunication</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:379</div></div>
+<div class="ttc" id="a00032_html_aedef0759ae3622b6f0324799bcbdebf0"><div class="ttname"><a href="a00032.html#aedef0759ae3622b6f0324799bcbdebf0">oboe::kNanosPerMicrosecond</a></div><div class="ttdeci">constexpr int64_t kNanosPerMicrosecond</div><div class="ttdef"><b>Definition:</b> Definitions.h:47</div></div>
+<div class="ttc" id="a00032_html_a58191d1a396041246bd4e0a87dbfdec9abcd774f891b5f9df7099f3ea75dadf8d"><div class="ttname"><a href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9abcd774f891b5f9df7099f3ea75dadf8d">oboe::AudioFormat::I16</a></div></div>
+<div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:394</div></div>
+<div class="ttc" id="a00052_html_a46a5d9a653f2153f618cadcab764e1b1"><div class="ttname"><a href="a00052.html#a46a5d9a653f2153f618cadcab764e1b1">oboe::DefaultStreamValues::SampleRate</a></div><div class="ttdeci">static int32_t SampleRate</div><div class="ttdef"><b>Definition:</b> Definitions.h:464</div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">oboe::Usage::Media</a></div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74">oboe::Usage::VoiceCommunicationSignalling</a></div></div>
-<div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">oboe::None</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:322</div></div>
-<div class="ttc" id="a00032_html_a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76"><div class="ttname"><a href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">oboe::Unspecified</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:340</div></div>
-<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">oboe::Unprocessed</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:311</div></div>
-<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">oboe::Movie</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:267</div></div>
+<div class="ttc" id="a00032_html_a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f"><div class="ttname"><a href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">oboe::None</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:400</div></div>
+<div class="ttc" id="a00032_html_a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76"><div class="ttname"><a href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">oboe::Unspecified</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:426</div></div>
+<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">oboe::Unprocessed</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:386</div></div>
+<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">oboe::Movie</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:342</div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb">oboe::Usage::Game</a></div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba46c4c4d980dfe025ae5b35aa0011dde4"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba46c4c4d980dfe025ae5b35aa0011dde4">oboe::Usage::Alarm</a></div></div>
-<div class="ttc" id="a00032_html_a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba"><div class="ttname"><a href="a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">oboe::Stereo</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:350</div></div>
-<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">oboe::Music</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:262</div></div>
+<div class="ttc" id="a00032_html_acd0e87a1512eca01c60eb3b7a6676fdeabbad080463ed11f9d77797c04aa1e5b1"><div class="ttname"><a href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fdeabbad080463ed11f9d77797c04aa1e5b1">oboe::PerformanceMode::PowerSaving</a></div></div>
+<div class="ttc" id="a00032_html_a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba"><div class="ttname"><a href="a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">oboe::Stereo</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:436</div></div>
+<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">oboe::Music</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:337</div></div>
+<div class="ttc" id="a00032_html_a5948466b593c4eab65f7025846a39f51"><div class="ttname"><a href="a00032.html#a5948466b593c4eab65f7025846a39f51">oboe::kNanosPerSecond</a></div><div class="ttdeci">constexpr int64_t kNanosPerSecond</div><div class="ttdef"><b>Definition:</b> Definitions.h:62</div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71">oboe::Usage::Notification</a></div></div>
-<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">oboe::Generic</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:289</div></div>
+<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">oboe::Generic</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:364</div></div>
 <div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
+<div class="ttc" id="a00032_html_aea1c5f88e3dd4144f51ed5a434fb387b"><div class="ttname"><a href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">oboe::Direction</a></div><div class="ttdeci">Direction</div><div class="ttdef"><b>Definition:</b> Definitions.h:87</div></div>
 <div class="ttc" id="a00032_html_a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b"><div class="ttname"><a href="a00032.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b">oboe::AudioApi::OpenSLES</a></div></div>
-<div class="ttc" id="a00032_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:141</div></div>
-<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:252</div></div>
-<div class="ttc" id="a00052_html"><div class="ttname"><a href="a00052.html">oboe::DefaultStreamValues</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:355</div></div>
-<div class="ttc" id="a00032_html_ae3a52556c58387e0cecba01f9abffdff"><div class="ttname"><a href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:113</div></div>
-<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">oboe::Camcorder</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:294</div></div>
-<div class="ttc" id="a00032_html_a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79"><div class="ttname"><a href="a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">oboe::Mono</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:345</div></div>
+<div class="ttc" id="a00032_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:216</div></div>
+<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:327</div></div>
+<div class="ttc" id="a00032_html_a58191d1a396041246bd4e0a87dbfdec9a22ae0e2b89e5e3d477f988cc36d3272b"><div class="ttname"><a href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a22ae0e2b89e5e3d477f988cc36d3272b">oboe::AudioFormat::Float</a></div></div>
+<div class="ttc" id="a00052_html"><div class="ttname"><a href="a00052.html">oboe::DefaultStreamValues</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:459</div></div>
+<div class="ttc" id="a00032_html_a5e32586b07bf64da91f99fc33c043cb1"><div class="ttname"><a href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:140</div></div>
+<div class="ttc" id="a00032_html_ae3a52556c58387e0cecba01f9abffdff"><div class="ttname"><a href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:176</div></div>
+<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">oboe::Camcorder</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:369</div></div>
+<div class="ttc" id="a00032_html_a58191d1a396041246bd4e0a87dbfdec9"><div class="ttname"><a href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">oboe::AudioFormat</a></div><div class="ttdeci">AudioFormat</div><div class="ttdef"><b>Definition:</b> Definitions.h:103</div></div>
+<div class="ttc" id="a00032_html_ad1bb9f5626cec20d3a052a8721959873"><div class="ttname"><a href="a00032.html#ad1bb9f5626cec20d3a052a8721959873">oboe::kMillisPerSecond</a></div><div class="ttdeci">constexpr int64_t kMillisPerSecond</div><div class="ttdef"><b>Definition:</b> Definitions.h:57</div></div>
+<div class="ttc" id="a00032_html_a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79"><div class="ttname"><a href="a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">oboe::Mono</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:431</div></div>
 <div class="ttc" id="a00032_html_ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca"><div class="ttname"><a href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">oboe::SharingMode::Shared</a></div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba639ffd54516c1a84a288a363c9469df8"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba639ffd54516c1a84a288a363c9469df8">oboe::Usage::AssistanceAccessibility</a></div></div>
 <div class="ttc" id="a00032_html_ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971"><div class="ttname"><a href="a00032.html#ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971">oboe::SharingMode::Exclusive</a></div></div>
+<div class="ttc" id="a00032_html_a9cb0d39766aa6d50132a2daa6e826457"><div class="ttname"><a href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">oboe::DataCallbackResult</a></div><div class="ttdeci">DataCallbackResult</div><div class="ttdef"><b>Definition:</b> Definitions.h:128</div></div>
 <div class="ttc" id="a00032_html_a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b"><div class="ttname"><a href="a00032.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">oboe::AudioApi::AAudio</a></div></div>
-<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:285</div></div>
+<div class="ttc" id="a00032_html_a17f63a064de966efddd5d0335992bc04"><div class="ttname"><a href="a00032.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:360</div></div>
+<div class="ttc" id="a00032_html_a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b"><div class="ttname"><a href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b">oboe::AudioFormat::Invalid</a></div></div>
+<div class="ttc" id="a00032_html_ab0772052200184e514082eaa89be7905"><div class="ttname"><a href="a00032.html#ab0772052200184e514082eaa89be7905">oboe::kUnspecified</a></div><div class="ttdeci">constexpr int32_t kUnspecified</div><div class="ttdef"><b>Definition:</b> Definitions.h:41</div></div>
+<div class="ttc" id="a00032_html_acd0e87a1512eca01c60eb3b7a6676fde"><div class="ttname"><a href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">oboe::PerformanceMode</a></div><div class="ttdeci">PerformanceMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:195</div></div>
+<div class="ttc" id="a00032_html_aea1c5f88e3dd4144f51ed5a434fb387ba324118a6721dd6b8a9b9f4e327df2bf5"><div class="ttname"><a href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba324118a6721dd6b8a9b9f4e327df2bf5">oboe::Direction::Input</a></div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f">oboe::Usage::NotificationEvent</a></div></div>
-<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">oboe::Sonification</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:273</div></div>
+<div class="ttc" id="a00032_html_a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799"><div class="ttname"><a href="a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">oboe::Sonification</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:348</div></div>
+<div class="ttc" id="a00032_html_a7fd7bd0828b61e3b3097e33dc90ac123"><div class="ttname"><a href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">oboe::StreamState</a></div><div class="ttdeci">StreamState</div><div class="ttdef"><b>Definition:</b> Definitions.h:67</div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b">oboe::Usage::Assistant</a></div></div>
 <div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7">oboe::Usage::AssistanceSonification</a></div></div>
-<div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbb"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:174</div></div>
+<div class="ttc" id="a00032_html_a1b2a1bdc891d640eb82724dcd9b7afbb"><div class="ttname"><a href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:249</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00017_source.html b/docs/reference/a00017_source.html
index e4ed0f4..0ea1a32 100644
--- a/docs/reference/a00017_source.html
+++ b/docs/reference/a00017_source.html
@@ -71,11 +71,13 @@
 <div class="title">LatencyTuner.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStream.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00056.html">   42</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00056.html">LatencyTuner</a> {</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="a00056.html">LatencyTuner</a>(<a class="code" href="a00036.html">AudioStream</a> &amp;stream);</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    Result <a class="code" href="a00056.html#ad2be756965e6a9af3114008eda892174">tune</a>();</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="a00056.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>();</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keywordtype">void</span> reset();</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keyword">enum class</span> State {</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        Idle,</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        Active,</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        AtMax,</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        Unsupported</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    } ;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="comment">// arbitrary number of calls to wait before bumping up the latency</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keyword">static</span> constexpr int32_t kIdleCount = 8;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <a class="code" href="a00036.html">AudioStream</a>           &amp;mStream;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    State                 mState = State::Idle;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    int32_t               mPreviousXRuns = 0;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    int32_t               mIdleCountDown = 0;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    std::atomic&lt;int32_t&gt;  mLatencyTriggerRequests{0}; <span class="comment">// TODO user atomic requester from AAudio</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    std::atomic&lt;int32_t&gt;  mLatencyTriggerResponses{0};</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;};</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="preprocessor">#endif // OBOE_LATENCY_TUNER_</span></div><div class="ttc" id="a00056_html"><div class="ttname"><a href="a00056.html">oboe::LatencyTuner</a></div><div class="ttdef"><b>Definition:</b> LatencyTuner.h:42</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;oboe/AudioStream.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00056.html">   41</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00056.html">LatencyTuner</a> {</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="a00056.html#a0263b9a55825c0a403653b2b508073ea">LatencyTuner</a>(<a class="code" href="a00036.html">AudioStream</a> &amp;stream);</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> <a class="code" href="a00056.html#ad2be756965e6a9af3114008eda892174">tune</a>();</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="a00056.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>();</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keywordtype">void</span> reset();</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keyword">enum class</span> State {</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        Idle,</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        Active,</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        AtMax,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        Unsupported</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    } ;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="comment">// arbitrary number of calls to wait before bumping up the latency</span></div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keyword">static</span> constexpr int32_t kIdleCount = 8;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <a class="code" href="a00036.html">AudioStream</a>           &amp;mStream;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    State                 mState = State::Idle;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    int32_t               mPreviousXRuns = 0;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    int32_t               mIdleCountDown = 0;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    std::atomic&lt;int32_t&gt;  mLatencyTriggerRequests{0}; <span class="comment">// TODO user atomic requester from AAudio</span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    std::atomic&lt;int32_t&gt;  mLatencyTriggerResponses{0};</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;};</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="preprocessor">#endif // OBOE_LATENCY_TUNER_</span></div><div class="ttc" id="a00056_html"><div class="ttname"><a href="a00056.html">oboe::LatencyTuner</a></div><div class="ttdef"><b>Definition:</b> LatencyTuner.h:41</div></div>
 <div class="ttc" id="a00056_html_a6c0142e08dc65eda8f758b4794450867"><div class="ttname"><a href="a00056.html#a6c0142e08dc65eda8f758b4794450867">oboe::LatencyTuner::requestReset</a></div><div class="ttdeci">void requestReset()</div></div>
+<div class="ttc" id="a00056_html_a0263b9a55825c0a403653b2b508073ea"><div class="ttname"><a href="a00056.html#a0263b9a55825c0a403653b2b508073ea">oboe::LatencyTuner::LatencyTuner</a></div><div class="ttdeci">LatencyTuner(AudioStream &amp;stream)</div></div>
 <div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
+<div class="ttc" id="a00032_html_a5e32586b07bf64da91f99fc33c043cb1"><div class="ttname"><a href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:140</div></div>
 <div class="ttc" id="a00056_html_ad2be756965e6a9af3114008eda892174"><div class="ttname"><a href="a00056.html#ad2be756965e6a9af3114008eda892174">oboe::LatencyTuner::tune</a></div><div class="ttdeci">Result tune()</div></div>
-<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:36</div></div>
+<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:42</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00023_source.html b/docs/reference/a00023_source.html
index e24f9e2..3d1bc93 100644
--- a/docs/reference/a00023_source.html
+++ b/docs/reference/a00023_source.html
@@ -71,11 +71,16 @@
 <div class="title">ResultWithValue.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2018 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_RESULT_WITH_VALUE_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_RESULT_WITH_VALUE_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="a00060.html">   27</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00060.html">ResultWithValue</a> {</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <a class="code" href="a00060.html">ResultWithValue</a>(oboe::Result error)</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;            : mValue{}</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;            , mError(error) {}</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="a00060.html">ResultWithValue</a>(T value)</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;            : mValue(value)</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;            , mError(oboe::Result::OK) {}</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    oboe::Result error()<span class="keyword"> const </span>{</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;        <span class="keywordflow">return</span> mError;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    }</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    T value()<span class="keyword"> const </span>{</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;        <span class="keywordflow">return</span> mValue;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    }</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00060.html#ae32b1953b777af7d1d0c94862ca39986">   48</a></span>&#160;    <span class="keyword">explicit</span> <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mError == oboe::Result::OK; }</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3">   60</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3">operator !</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mError != oboe::Result::OK; }</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00060.html#af62107817c0bc76047e6b655a78504ba">   70</a></span>&#160;    <span class="keyword">operator</span> Result()<span class="keyword"> const </span>{</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        <span class="keywordflow">return</span> mError;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    }</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="a00060.html#a2304c6120e2aad8f2189383a98c7b0a7">   81</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="a00060.html">ResultWithValue&lt;T&gt;</a> <a class="code" href="a00060.html#a2304c6120e2aad8f2189383a98c7b0a7">createBasedOnSign</a>(T numericResult){</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        <span class="comment">// Ensure that the type is either an integer or float</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        static_assert(std::is_arithmetic&lt;T&gt;::value,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                      <span class="stringliteral">&quot;createBasedOnSign can only be called for numeric types (int or float)&quot;</span>);</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="keywordflow">if</span> (numericResult &gt;= 0){</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;            <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;T&gt;</a>(numericResult);</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;            <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;T&gt;</a>(<span class="keyword">static_cast&lt;</span>Result<span class="keyword">&gt;</span>(numericResult));</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        }</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    }</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="keyword">const</span> T             mValue;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keyword">const</span> oboe::Result  mError;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;};</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;std::ostream&amp; operator&lt;&lt;(std::ostream &amp;strm, const ResultWithValue&lt;T&gt; &amp;result) {</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">if</span> (!result) {</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        strm &lt;&lt; <a class="code" href="a00032.html#a8d1ae211254cc239019f165b607f4365">convertToText</a>(result.error());</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        strm &lt;&lt; result.value();</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    }</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;   <span class="keywordflow">return</span> strm;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;}</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="preprocessor">#endif //OBOE_RESULT_WITH_VALUE_H</span></div><div class="ttc" id="a00032_html_a8d1ae211254cc239019f165b607f4365"><div class="ttname"><a href="a00032.html#a8d1ae211254cc239019f165b607f4365">oboe::convertToText</a></div><div class="ttdeci">const char * convertToText(FromType)</div></div>
-<div class="ttc" id="a00060_html_a2304c6120e2aad8f2189383a98c7b0a7"><div class="ttname"><a href="a00060.html#a2304c6120e2aad8f2189383a98c7b0a7">oboe::ResultWithValue::createBasedOnSign</a></div><div class="ttdeci">static ResultWithValue&lt; T &gt; createBasedOnSign(T numericResult)</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:81</div></div>
-<div class="ttc" id="a00060_html_a2dbc8b09ead8b073a78af95b4b0186e3"><div class="ttname"><a href="a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3">oboe::ResultWithValue::operator!</a></div><div class="ttdeci">bool operator!() const</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:60</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 2018 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_RESULT_WITH_VALUE_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_RESULT_WITH_VALUE_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00060.html">   47</a></span>&#160;<span class="keyword">class </span><a class="code" href="a00060.html">ResultWithValue</a> {</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="a00060.html#aae75caa0d16a9e23a012f77fb50c5927">   55</a></span>&#160;    <a class="code" href="a00060.html#aae75caa0d16a9e23a012f77fb50c5927">ResultWithValue</a>(<a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a> <a class="code" href="a00060.html#adfc76ae6db81535c2e82b856975eed41">error</a>)</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;            : mValue{}</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;            , mError(<a class="code" href="a00060.html#adfc76ae6db81535c2e82b856975eed41">error</a>) {}</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="a00060.html#a600309367db58d71f0ec16e90f7ebea5">   64</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="a00060.html#a600309367db58d71f0ec16e90f7ebea5">ResultWithValue</a>(T <a class="code" href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">value</a>)</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;            : mValue(<a class="code" href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">value</a>)</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;            , mError(<a class="code" href="a00032.html">oboe</a>::<a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>::OK) {}</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="a00060.html#adfc76ae6db81535c2e82b856975eed41">   73</a></span>&#160;    <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a> <a class="code" href="a00060.html#adfc76ae6db81535c2e82b856975eed41">error</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <span class="keywordflow">return</span> mError;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    }</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">   81</a></span>&#160;    T <a class="code" href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">value</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        <span class="keywordflow">return</span> mValue;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    }</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="a00060.html#ae32b1953b777af7d1d0c94862ca39986">   88</a></span>&#160;    <span class="keyword">explicit</span> <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mError == oboe::Result::OK; }</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3">  100</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3">operator !</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mError != oboe::Result::OK; }</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="a00060.html#af62107817c0bc76047e6b655a78504ba">  110</a></span>&#160;    <span class="keyword">operator</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <span class="keywordflow">return</span> mError;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    }</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="a00060.html#a2304c6120e2aad8f2189383a98c7b0a7">  121</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="a00060.html">ResultWithValue&lt;T&gt;</a> <a class="code" href="a00060.html#a2304c6120e2aad8f2189383a98c7b0a7">createBasedOnSign</a>(T numericResult){</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        <span class="comment">// Ensure that the type is either an integer or float</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        static_assert(std::is_arithmetic&lt;T&gt;::value,</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;                      <span class="stringliteral">&quot;createBasedOnSign can only be called for numeric types (int or float)&quot;</span>);</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        <span class="keywordflow">if</span> (numericResult &gt;= 0){</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;            <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;T&gt;</a>(numericResult);</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;            <span class="keywordflow">return</span> <a class="code" href="a00060.html">ResultWithValue&lt;T&gt;</a>(<span class="keyword">static_cast&lt;</span><a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a><span class="keyword">&gt;</span>(numericResult));</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        }</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    }</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="keyword">const</span> T             mValue;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keyword">const</span> <a class="code" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a>  mError;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;};</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00032.html#aa403103686222502d1cfc47bafc10aeb">  143</a></span>&#160;std::ostream&amp; operator&lt;&lt;(std::ostream &amp;strm, const ResultWithValue&lt;T&gt; &amp;result) {</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">if</span> (!result) {</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        strm &lt;&lt; <a class="code" href="a00032.html#af65aaea3c5d82eee6906664d61c094b3">convertToText</a>(result.error());</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        strm &lt;&lt; result.value();</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    }</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;   <span class="keywordflow">return</span> strm;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;}</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="preprocessor">#endif //OBOE_RESULT_WITH_VALUE_H</span></div><div class="ttc" id="a00060_html_aae75caa0d16a9e23a012f77fb50c5927"><div class="ttname"><a href="a00060.html#aae75caa0d16a9e23a012f77fb50c5927">oboe::ResultWithValue::ResultWithValue</a></div><div class="ttdeci">ResultWithValue(oboe::Result error)</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:55</div></div>
+<div class="ttc" id="a00032_html_af65aaea3c5d82eee6906664d61c094b3"><div class="ttname"><a href="a00032.html#af65aaea3c5d82eee6906664d61c094b3">oboe::convertToText</a></div><div class="ttdeci">const char * convertToText(FromType input)</div></div>
+<div class="ttc" id="a00060_html_a600309367db58d71f0ec16e90f7ebea5"><div class="ttname"><a href="a00060.html#a600309367db58d71f0ec16e90f7ebea5">oboe::ResultWithValue::ResultWithValue</a></div><div class="ttdeci">ResultWithValue(T value)</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:64</div></div>
+<div class="ttc" id="a00060_html_adfc76ae6db81535c2e82b856975eed41"><div class="ttname"><a href="a00060.html#adfc76ae6db81535c2e82b856975eed41">oboe::ResultWithValue::error</a></div><div class="ttdeci">oboe::Result error() const</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:73</div></div>
+<div class="ttc" id="a00060_html_a45f5c99a2c9f8fbaca502276f7ebb434"><div class="ttname"><a href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">oboe::ResultWithValue::value</a></div><div class="ttdeci">T value() const</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:81</div></div>
+<div class="ttc" id="a00060_html_a2304c6120e2aad8f2189383a98c7b0a7"><div class="ttname"><a href="a00060.html#a2304c6120e2aad8f2189383a98c7b0a7">oboe::ResultWithValue::createBasedOnSign</a></div><div class="ttdeci">static ResultWithValue&lt; T &gt; createBasedOnSign(T numericResult)</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:121</div></div>
+<div class="ttc" id="a00060_html_a2dbc8b09ead8b073a78af95b4b0186e3"><div class="ttname"><a href="a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3">oboe::ResultWithValue::operator!</a></div><div class="ttdeci">bool operator!() const</div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:100</div></div>
 <div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="a00060_html"><div class="ttname"><a href="a00060.html">oboe::ResultWithValue</a></div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:27</div></div>
+<div class="ttc" id="a00032_html_a5e32586b07bf64da91f99fc33c043cb1"><div class="ttname"><a href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:140</div></div>
+<div class="ttc" id="a00060_html"><div class="ttname"><a href="a00060.html">oboe::ResultWithValue</a></div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:47</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00026_source.html b/docs/reference/a00026_source.html
index 2200dd4..fac5d50 100644
--- a/docs/reference/a00026_source.html
+++ b/docs/reference/a00026_source.html
@@ -71,10 +71,13 @@
 <div class="title">Utilities.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_UTILITIES_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_UTILITIES_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keywordtype">void</span> convertFloatToPcm16(<span class="keyword">const</span> <span class="keywordtype">float</span> *source, int16_t *destination, int32_t numSamples);</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keywordtype">void</span> convertPcm16ToFloat(<span class="keyword">const</span> int16_t *source, <span class="keywordtype">float</span> *destination, int32_t numSamples);</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;int32_t <a class="code" href="a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca">convertFormatToSizeInBytes</a>(AudioFormat format);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> FromType&gt;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="a00032.html#a8d1ae211254cc239019f165b607f4365">convertToText</a>(FromType);</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keywordtype">int</span> <a class="code" href="a00032.html#a54528938e9fccab7ad8947ccf0e409db">getSdkVersion</a>();</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#endif //OBOE_UTILITIES_H</span></div><div class="ttc" id="a00032_html_a8d1ae211254cc239019f165b607f4365"><div class="ttname"><a href="a00032.html#a8d1ae211254cc239019f165b607f4365">oboe::convertToText</a></div><div class="ttdeci">const char * convertToText(FromType)</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_UTILITIES_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_UTILITIES_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;oboe/Definitions.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keywordtype">void</span> <a class="code" href="a00032.html#adbda063116feb9fa98a31ee820170060">convertFloatToPcm16</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *source, int16_t *destination, int32_t numSamples);</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keywordtype">void</span> <a class="code" href="a00032.html#ad17bee42828d13f2ef62a889e175c643">convertPcm16ToFloat</a>(<span class="keyword">const</span> int16_t *source, <span class="keywordtype">float</span> *destination, int32_t numSamples);</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;int32_t <a class="code" href="a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca">convertFormatToSizeInBytes</a>(<a class="code" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> format);</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> FromType&gt;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="a00032.html#af65aaea3c5d82eee6906664d61c094b3">convertToText</a>(FromType input);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="keywordtype">int</span> <a class="code" href="a00032.html#a54528938e9fccab7ad8947ccf0e409db">getSdkVersion</a>();</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="preprocessor">#endif //OBOE_UTILITIES_H</span></div><div class="ttc" id="a00032_html_af65aaea3c5d82eee6906664d61c094b3"><div class="ttname"><a href="a00032.html#af65aaea3c5d82eee6906664d61c094b3">oboe::convertToText</a></div><div class="ttdeci">const char * convertToText(FromType input)</div></div>
 <div class="ttc" id="a00032_html_ac67383a3df0f6e7a51f8415ffd9fdaca"><div class="ttname"><a href="a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca">oboe::convertFormatToSizeInBytes</a></div><div class="ttdeci">int32_t convertFormatToSizeInBytes(AudioFormat format)</div></div>
 <div class="ttc" id="a00032_html_a54528938e9fccab7ad8947ccf0e409db"><div class="ttname"><a href="a00032.html#a54528938e9fccab7ad8947ccf0e409db">oboe::getSdkVersion</a></div><div class="ttdeci">int getSdkVersion()</div></div>
+<div class="ttc" id="a00032_html_adbda063116feb9fa98a31ee820170060"><div class="ttname"><a href="a00032.html#adbda063116feb9fa98a31ee820170060">oboe::convertFloatToPcm16</a></div><div class="ttdeci">void convertFloatToPcm16(const float *source, int16_t *destination, int32_t numSamples)</div></div>
 <div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
+<div class="ttc" id="a00032_html_ad17bee42828d13f2ef62a889e175c643"><div class="ttname"><a href="a00032.html#ad17bee42828d13f2ef62a889e175c643">oboe::convertPcm16ToFloat</a></div><div class="ttdeci">void convertPcm16ToFloat(const int16_t *source, float *destination, int32_t numSamples)</div></div>
+<div class="ttc" id="a00032_html_a58191d1a396041246bd4e0a87dbfdec9"><div class="ttname"><a href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">oboe::AudioFormat</a></div><div class="ttdeci">AudioFormat</div><div class="ttdef"><b>Definition:</b> Definitions.h:103</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00029_source.html b/docs/reference/a00029_source.html
index 005f00d..9341f75 100644
--- a/docs/reference/a00029_source.html
+++ b/docs/reference/a00029_source.html
@@ -71,13 +71,13 @@
 <div class="title">Version.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#define OBOE_VERSION_MAJOR 0</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#define OBOE_VERSION_MINOR 12</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">// Type: 16-bit unsigned int. Min value: 0 Max value: 65535. See below for description.</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#define OBOE_VERSION_PATCH 0</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#define OBOE_STRINGIFY(x) #x</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#define OBOE_TOSTRING(x) OBOE_STRINGIFY(x)</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">// Type: String literal. See below for description.</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#define OBOE_VERSION_TEXT \</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">        OBOE_TOSTRING(OBOE_VERSION_MAJOR) &quot;.&quot; \</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">        OBOE_TOSTRING(OBOE_VERSION_MINOR) &quot;.&quot; \</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">        OBOE_TOSTRING(OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">// Type: 32-bit unsigned int. See below for description.</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#define OBOE_VERSION_NUMBER ((OBOE_VERSION_MAJOR &lt;&lt; 24) | (OBOE_VERSION_MINOR &lt;&lt; 16) | OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00064.html">   54</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00064.html">Version</a> {</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="a00064.html#a270f2e92582d5187be339eeda8e2b276">   58</a></span>&#160;    <span class="keyword">static</span> constexpr uint8_t <a class="code" href="a00064.html#a270f2e92582d5187be339eeda8e2b276">Major</a> = OBOE_VERSION_MAJOR;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="a00064.html#ae460bb95e3a9099696205a35fffb5469">   64</a></span>&#160;    <span class="keyword">static</span> constexpr uint8_t <a class="code" href="a00064.html#ae460bb95e3a9099696205a35fffb5469">Minor</a> = OBOE_VERSION_MINOR;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00064.html#a690110f2b3e887892da8f29ab5c057b2">   70</a></span>&#160;    <span class="keyword">static</span> constexpr uint16_t <a class="code" href="a00064.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a> = OBOE_VERSION_PATCH;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="a00064.html#a2c86e578b827fbca5f40c460a7754503">   75</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="a00064.html#a2c86e578b827fbca5f40c460a7754503">Text</a> = OBOE_VERSION_TEXT;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="a00064.html#ac579661e79bcee45dc676d4647891de0">   81</a></span>&#160;    <span class="keyword">static</span> constexpr uint32_t <a class="code" href="a00064.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;};</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="preprocessor">#endif //OBOE_VERSIONINFO_H</span></div><div class="ttc" id="a00064_html_ae460bb95e3a9099696205a35fffb5469"><div class="ttname"><a href="a00064.html#ae460bb95e3a9099696205a35fffb5469">oboe::Version::Minor</a></div><div class="ttdeci">static constexpr uint8_t Minor</div><div class="ttdef"><b>Definition:</b> Version.h:64</div></div>
-<div class="ttc" id="a00064_html"><div class="ttname"><a href="a00064.html">oboe::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:54</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#define OBOE_VERSION_MAJOR 0</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#define OBOE_VERSION_MINOR 12</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">// Type: 16-bit unsigned int. Min value: 0 Max value: 65535. See below for description.</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#define OBOE_VERSION_PATCH 0</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#define OBOE_STRINGIFY(x) #x</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#define OBOE_TOSTRING(x) OBOE_STRINGIFY(x)</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">// Type: String literal. See below for description.</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#define OBOE_VERSION_TEXT \</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">        OBOE_TOSTRING(OBOE_VERSION_MAJOR) &quot;.&quot; \</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">        OBOE_TOSTRING(OBOE_VERSION_MINOR) &quot;.&quot; \</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">        OBOE_TOSTRING(OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">// Type: 32-bit unsigned int. See below for description.</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#define OBOE_VERSION_NUMBER ((OBOE_VERSION_MAJOR &lt;&lt; 24) | (OBOE_VERSION_MINOR &lt;&lt; 16) | OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="keyword">namespace </span><a class="code" href="a00032.html">oboe</a> {</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="a00064.html">   57</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00064.html">Version</a> {</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="a00064.html#a270f2e92582d5187be339eeda8e2b276">   61</a></span>&#160;    <span class="keyword">static</span> constexpr uint8_t <a class="code" href="a00064.html#a270f2e92582d5187be339eeda8e2b276">Major</a> = OBOE_VERSION_MAJOR;</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00064.html#ae460bb95e3a9099696205a35fffb5469">   67</a></span>&#160;    <span class="keyword">static</span> constexpr uint8_t <a class="code" href="a00064.html#ae460bb95e3a9099696205a35fffb5469">Minor</a> = OBOE_VERSION_MINOR;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="a00064.html#a690110f2b3e887892da8f29ab5c057b2">   73</a></span>&#160;    <span class="keyword">static</span> constexpr uint16_t <a class="code" href="a00064.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a> = OBOE_VERSION_PATCH;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="a00064.html#a2c86e578b827fbca5f40c460a7754503">   78</a></span>&#160;    <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="a00064.html#a2c86e578b827fbca5f40c460a7754503">Text</a> = OBOE_VERSION_TEXT;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00064.html#ac579661e79bcee45dc676d4647891de0">   84</a></span>&#160;    <span class="keyword">static</span> constexpr uint32_t <a class="code" href="a00064.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;};</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;} <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="preprocessor">#endif //OBOE_VERSIONINFO_H</span></div><div class="ttc" id="a00064_html_ae460bb95e3a9099696205a35fffb5469"><div class="ttname"><a href="a00064.html#ae460bb95e3a9099696205a35fffb5469">oboe::Version::Minor</a></div><div class="ttdeci">static constexpr uint8_t Minor</div><div class="ttdef"><b>Definition:</b> Version.h:67</div></div>
+<div class="ttc" id="a00064_html"><div class="ttname"><a href="a00064.html">oboe::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:57</div></div>
 <div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:29</div></div>
-<div class="ttc" id="a00064_html_a690110f2b3e887892da8f29ab5c057b2"><div class="ttname"><a href="a00064.html#a690110f2b3e887892da8f29ab5c057b2">oboe::Version::Patch</a></div><div class="ttdeci">static constexpr uint16_t Patch</div><div class="ttdef"><b>Definition:</b> Version.h:70</div></div>
-<div class="ttc" id="a00064_html_a2c86e578b827fbca5f40c460a7754503"><div class="ttname"><a href="a00064.html#a2c86e578b827fbca5f40c460a7754503">oboe::Version::Text</a></div><div class="ttdeci">static constexpr const char * Text</div><div class="ttdef"><b>Definition:</b> Version.h:75</div></div>
-<div class="ttc" id="a00064_html_a270f2e92582d5187be339eeda8e2b276"><div class="ttname"><a href="a00064.html#a270f2e92582d5187be339eeda8e2b276">oboe::Version::Major</a></div><div class="ttdeci">static constexpr uint8_t Major</div><div class="ttdef"><b>Definition:</b> Version.h:58</div></div>
-<div class="ttc" id="a00064_html_ac579661e79bcee45dc676d4647891de0"><div class="ttname"><a href="a00064.html#ac579661e79bcee45dc676d4647891de0">oboe::Version::Number</a></div><div class="ttdeci">static constexpr uint32_t Number</div><div class="ttdef"><b>Definition:</b> Version.h:81</div></div>
+<div class="ttc" id="a00064_html_a690110f2b3e887892da8f29ab5c057b2"><div class="ttname"><a href="a00064.html#a690110f2b3e887892da8f29ab5c057b2">oboe::Version::Patch</a></div><div class="ttdeci">static constexpr uint16_t Patch</div><div class="ttdef"><b>Definition:</b> Version.h:73</div></div>
+<div class="ttc" id="a00064_html_a2c86e578b827fbca5f40c460a7754503"><div class="ttname"><a href="a00064.html#a2c86e578b827fbca5f40c460a7754503">oboe::Version::Text</a></div><div class="ttdeci">static constexpr const char * Text</div><div class="ttdef"><b>Definition:</b> Version.h:78</div></div>
+<div class="ttc" id="a00064_html_a270f2e92582d5187be339eeda8e2b276"><div class="ttname"><a href="a00064.html#a270f2e92582d5187be339eeda8e2b276">oboe::Version::Major</a></div><div class="ttdeci">static constexpr uint8_t Major</div><div class="ttdef"><b>Definition:</b> Version.h:61</div></div>
+<div class="ttc" id="a00064_html_ac579661e79bcee45dc676d4647891de0"><div class="ttname"><a href="a00064.html#ac579661e79bcee45dc676d4647891de0">oboe::Version::Number</a></div><div class="ttdeci">static constexpr uint32_t Number</div><div class="ttdef"><b>Definition:</b> Version.h:84</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00032.html b/docs/reference/a00032.html
index 339fc68..bdf507f 100644
--- a/docs/reference/a00032.html
+++ b/docs/reference/a00032.html
@@ -94,7 +94,7 @@
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
 Enumerations</h2></td></tr>
-<tr class="memitem:a7fd7bd0828b61e3b3097e33dc90ac123"><td class="memItemLeft" align="right" valign="top"><a id="a7fd7bd0828b61e3b3097e33dc90ac123"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>StreamState</b> : aaudio_stream_state_t { <br />
+<tr class="memitem:a7fd7bd0828b61e3b3097e33dc90ac123"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> : aaudio_stream_state_t { <br />
 &#160;&#160;<b>Uninitialized</b> = AAUDIO_STREAM_STATE_UNINITIALIZED, 
 <b>Unknown</b> = AAUDIO_STREAM_STATE_UNKNOWN, 
 <b>Open</b> = AAUDIO_STREAM_STATE_OPEN, 
@@ -115,21 +115,21 @@
 <br />
  }</td></tr>
 <tr class="separator:a7fd7bd0828b61e3b3097e33dc90ac123"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aea1c5f88e3dd4144f51ed5a434fb387b"><td class="memItemLeft" align="right" valign="top"><a id="aea1c5f88e3dd4144f51ed5a434fb387b"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>Direction</b> : aaudio_direction_t { <b>Output</b> = AAUDIO_DIRECTION_OUTPUT, 
-<b>Input</b> = AAUDIO_DIRECTION_INPUT
+<tr class="memitem:aea1c5f88e3dd4144f51ed5a434fb387b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a> : aaudio_direction_t { <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a> = AAUDIO_DIRECTION_OUTPUT, 
+<a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba324118a6721dd6b8a9b9f4e327df2bf5">Direction::Input</a> = AAUDIO_DIRECTION_INPUT
  }</td></tr>
 <tr class="separator:aea1c5f88e3dd4144f51ed5a434fb387b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a58191d1a396041246bd4e0a87dbfdec9"><td class="memItemLeft" align="right" valign="top"><a id="a58191d1a396041246bd4e0a87dbfdec9"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>AudioFormat</b> : aaudio_format_t { <b>Invalid</b> = AAUDIO_FORMAT_INVALID, 
-<b>Unspecified</b> = AAUDIO_FORMAT_UNSPECIFIED, 
-<b>I16</b> = AAUDIO_FORMAT_PCM_I16, 
-<b>Float</b> = AAUDIO_FORMAT_PCM_FLOAT
+<tr class="memitem:a58191d1a396041246bd4e0a87dbfdec9"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> : aaudio_format_t { <a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b">AudioFormat::Invalid</a> = AAUDIO_FORMAT_INVALID, 
+<a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5">Unspecified</a> = AAUDIO_FORMAT_UNSPECIFIED, 
+<a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9abcd774f891b5f9df7099f3ea75dadf8d">AudioFormat::I16</a> = AAUDIO_FORMAT_PCM_I16, 
+<a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a22ae0e2b89e5e3d477f988cc36d3272b">AudioFormat::Float</a> = AAUDIO_FORMAT_PCM_FLOAT
  }</td></tr>
 <tr class="separator:a58191d1a396041246bd4e0a87dbfdec9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9cb0d39766aa6d50132a2daa6e826457"><td class="memItemLeft" align="right" valign="top"><a id="a9cb0d39766aa6d50132a2daa6e826457"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>DataCallbackResult</b> : aaudio_data_callback_result_t { <b>Continue</b> = AAUDIO_CALLBACK_RESULT_CONTINUE, 
+<tr class="memitem:a9cb0d39766aa6d50132a2daa6e826457"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a> : aaudio_data_callback_result_t { <b>Continue</b> = AAUDIO_CALLBACK_RESULT_CONTINUE, 
 <b>Stop</b> = AAUDIO_CALLBACK_RESULT_STOP
  }</td></tr>
 <tr class="separator:a9cb0d39766aa6d50132a2daa6e826457"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5e32586b07bf64da91f99fc33c043cb1"><td class="memItemLeft" align="right" valign="top"><a id="a5e32586b07bf64da91f99fc33c043cb1"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>Result</b> : aaudio_result_t { <br />
+<tr class="memitem:a5e32586b07bf64da91f99fc33c043cb1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> : aaudio_result_t { <br />
 &#160;&#160;<b>OK</b>, 
 <b>ErrorBase</b> = AAUDIO_ERROR_BASE, 
 <b>ErrorDisconnected</b> = AAUDIO_ERROR_DISCONNECTED, 
@@ -173,9 +173,9 @@
 <a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a> = AAUDIO_SHARING_MODE_SHARED
  }</td></tr>
 <tr class="separator:ae3a52556c58387e0cecba01f9abffdff"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acd0e87a1512eca01c60eb3b7a6676fde"><td class="memItemLeft" align="right" valign="top"><a id="acd0e87a1512eca01c60eb3b7a6676fde"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>PerformanceMode</b> : aaudio_performance_mode_t { <b>None</b> = AAUDIO_PERFORMANCE_MODE_NONE, 
-<b>PowerSaving</b> = AAUDIO_PERFORMANCE_MODE_POWER_SAVING, 
-<b>LowLatency</b> = AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
+<tr class="memitem:acd0e87a1512eca01c60eb3b7a6676fde"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a> : aaudio_performance_mode_t { <a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eafa6adf97f83acf6453d4a6a4b1070f3754">None</a> = AAUDIO_PERFORMANCE_MODE_NONE, 
+<a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fdeabbad080463ed11f9d77797c04aa1e5b1">PerformanceMode::PowerSaving</a> = AAUDIO_PERFORMANCE_MODE_POWER_SAVING, 
+<a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fdea611907b5ab1865515c35357efa41a9b9">PerformanceMode::LowLatency</a> = AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
  }</td></tr>
 <tr class="separator:acd0e87a1512eca01c60eb3b7a6676fde"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a92972414867c81d5974cb2ed7abefbf6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> : int32_t { <a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5">Unspecified</a> = kUnspecified, 
@@ -219,13 +219,13 @@
  }</td></tr>
 <tr class="separator:a17f63a064de966efddd5d0335992bc04"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a5752250c10e96179e3618d7f72937eaf"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> { <a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = CONSTANT_API_P(-1, AAUDIO_SESSION_ID_NONE), 
-<b>None</b> = AAUDIO_PERFORMANCE_MODE_NONE, 
+<a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eafa6adf97f83acf6453d4a6a4b1070f3754">None</a> = AAUDIO_PERFORMANCE_MODE_NONE, 
 <a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">Allocate</a> = CONSTANT_API_P(0, AAUDIO_SESSION_ID_ALLOCATE)
  }</td></tr>
 <tr class="separator:a5752250c10e96179e3618d7f72937eaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a522e6806948369987639a0d1df03c029"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029">ChannelCount</a> : int32_t { <br />
 &#160;&#160;<a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = kUnspecified, 
-<b>Unspecified</b> = AAUDIO_FORMAT_UNSPECIFIED, 
+<a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5">Unspecified</a> = AAUDIO_FORMAT_UNSPECIFIED, 
 <a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5">Unspecified</a> = kUnspecified, 
 <a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">Mono</a> = 1, 
 <br />
@@ -236,43 +236,34 @@
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
 Functions</h2></td></tr>
-<tr class="memitem:aa403103686222502d1cfc47bafc10aeb"><td class="memTemplParams" colspan="2"><a id="aa403103686222502d1cfc47bafc10aeb"></a>
-template&lt;typename T &gt; </td></tr>
-<tr class="memitem:aa403103686222502d1cfc47bafc10aeb"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>operator&lt;&lt;</b> (std::ostream &amp;strm, const <a class="el" href="a00060.html">ResultWithValue</a>&lt; T &gt; &amp;result)</td></tr>
+<tr class="memitem:aa403103686222502d1cfc47bafc10aeb"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:aa403103686222502d1cfc47bafc10aeb"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00032.html#aa403103686222502d1cfc47bafc10aeb">operator&lt;&lt;</a> (std::ostream &amp;strm, const <a class="el" href="a00060.html">ResultWithValue</a>&lt; T &gt; &amp;result)</td></tr>
 <tr class="separator:aa403103686222502d1cfc47bafc10aeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adbda063116feb9fa98a31ee820170060"><td class="memItemLeft" align="right" valign="top"><a id="adbda063116feb9fa98a31ee820170060"></a>
-void&#160;</td><td class="memItemRight" valign="bottom"><b>convertFloatToPcm16</b> (const float *source, int16_t *destination, int32_t numSamples)</td></tr>
+<tr class="memitem:adbda063116feb9fa98a31ee820170060"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#adbda063116feb9fa98a31ee820170060">convertFloatToPcm16</a> (const float *source, int16_t *destination, int32_t numSamples)</td></tr>
 <tr class="separator:adbda063116feb9fa98a31ee820170060"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad17bee42828d13f2ef62a889e175c643"><td class="memItemLeft" align="right" valign="top"><a id="ad17bee42828d13f2ef62a889e175c643"></a>
-void&#160;</td><td class="memItemRight" valign="bottom"><b>convertPcm16ToFloat</b> (const int16_t *source, float *destination, int32_t numSamples)</td></tr>
+<tr class="memitem:ad17bee42828d13f2ef62a889e175c643"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#ad17bee42828d13f2ef62a889e175c643">convertPcm16ToFloat</a> (const int16_t *source, float *destination, int32_t numSamples)</td></tr>
 <tr class="separator:ad17bee42828d13f2ef62a889e175c643"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac67383a3df0f6e7a51f8415ffd9fdaca"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca">convertFormatToSizeInBytes</a> (AudioFormat format)</td></tr>
+<tr class="memitem:ac67383a3df0f6e7a51f8415ffd9fdaca"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca">convertFormatToSizeInBytes</a> (<a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> format)</td></tr>
 <tr class="separator:ac67383a3df0f6e7a51f8415ffd9fdaca"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8d1ae211254cc239019f165b607f4365"><td class="memTemplParams" colspan="2">template&lt;typename FromType &gt; </td></tr>
-<tr class="memitem:a8d1ae211254cc239019f165b607f4365"><td class="memTemplItemLeft" align="right" valign="top">const char *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00032.html#a8d1ae211254cc239019f165b607f4365">convertToText</a> (FromType)</td></tr>
-<tr class="separator:a8d1ae211254cc239019f165b607f4365"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af65aaea3c5d82eee6906664d61c094b3"><td class="memTemplParams" colspan="2">template&lt;typename FromType &gt; </td></tr>
+<tr class="memitem:af65aaea3c5d82eee6906664d61c094b3"><td class="memTemplItemLeft" align="right" valign="top">const char *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00032.html#af65aaea3c5d82eee6906664d61c094b3">convertToText</a> (FromType input)</td></tr>
+<tr class="separator:af65aaea3c5d82eee6906664d61c094b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a54528938e9fccab7ad8947ccf0e409db"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a54528938e9fccab7ad8947ccf0e409db">getSdkVersion</a> ()</td></tr>
 <tr class="separator:a54528938e9fccab7ad8947ccf0e409db"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
 Variables</h2></td></tr>
-<tr class="memitem:aab8f5f081a8b2147e16ec920347c1b5c"><td class="memItemLeft" align="right" valign="top"><a id="aab8f5f081a8b2147e16ec920347c1b5c"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kDefaultTimeoutNanos</b> = (2000 * kNanosPerMillisecond)</td></tr>
+<tr class="memitem:aab8f5f081a8b2147e16ec920347c1b5c"><td class="memItemLeft" align="right" valign="top">constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a> = (2000 * <a class="el" href="a00032.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a>)</td></tr>
 <tr class="separator:aab8f5f081a8b2147e16ec920347c1b5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab0772052200184e514082eaa89be7905"><td class="memItemLeft" align="right" valign="top"><a id="ab0772052200184e514082eaa89be7905"></a>
-constexpr int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>kUnspecified</b> = 0</td></tr>
+<tr class="memitem:ab0772052200184e514082eaa89be7905"><td class="memItemLeft" align="right" valign="top">constexpr int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a> = 0</td></tr>
 <tr class="separator:ab0772052200184e514082eaa89be7905"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aedef0759ae3622b6f0324799bcbdebf0"><td class="memItemLeft" align="right" valign="top"><a id="aedef0759ae3622b6f0324799bcbdebf0"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kNanosPerMicrosecond</b> = 1000</td></tr>
+<tr class="memitem:aedef0759ae3622b6f0324799bcbdebf0"><td class="memItemLeft" align="right" valign="top">constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#aedef0759ae3622b6f0324799bcbdebf0">kNanosPerMicrosecond</a> = 1000</td></tr>
 <tr class="separator:aedef0759ae3622b6f0324799bcbdebf0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a831e887150474c087170679eaca8672b"><td class="memItemLeft" align="right" valign="top"><a id="a831e887150474c087170679eaca8672b"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kNanosPerMillisecond</b> = kNanosPerMicrosecond * 1000</td></tr>
+<tr class="memitem:a831e887150474c087170679eaca8672b"><td class="memItemLeft" align="right" valign="top">constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a> = <a class="el" href="a00032.html#aedef0759ae3622b6f0324799bcbdebf0">kNanosPerMicrosecond</a> * 1000</td></tr>
 <tr class="separator:a831e887150474c087170679eaca8672b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad1bb9f5626cec20d3a052a8721959873"><td class="memItemLeft" align="right" valign="top"><a id="ad1bb9f5626cec20d3a052a8721959873"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kMillisPerSecond</b> = 1000</td></tr>
+<tr class="memitem:ad1bb9f5626cec20d3a052a8721959873"><td class="memItemLeft" align="right" valign="top">constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#ad1bb9f5626cec20d3a052a8721959873">kMillisPerSecond</a> = 1000</td></tr>
 <tr class="separator:ad1bb9f5626cec20d3a052a8721959873"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5948466b593c4eab65f7025846a39f51"><td class="memItemLeft" align="right" valign="top"><a id="a5948466b593c4eab65f7025846a39f51"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kNanosPerSecond</b> = kNanosPerMillisecond * kMillisPerSecond</td></tr>
+<tr class="memitem:a5948466b593c4eab65f7025846a39f51"><td class="memItemLeft" align="right" valign="top">constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a5948466b593c4eab65f7025846a39f51">kNanosPerSecond</a> = <a class="el" href="a00032.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a> * <a class="el" href="a00032.html#ad1bb9f5626cec20d3a052a8721959873">kMillisPerSecond</a></td></tr>
 <tr class="separator:a5948466b593c4eab65f7025846a39f51"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
@@ -297,6 +288,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
+<p>The underlying audio API used by the audio stream. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5"></a>Unspecified&#160;</td><td class="fielddoc"><p>Try to use AAudio. If not available then use OpenSL ES. </p>
 </td></tr>
@@ -308,6 +300,39 @@
 
 </div>
 </div>
+<a id="a58191d1a396041246bd4e0a87dbfdec9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58191d1a396041246bd4e0a87dbfdec9">&#9670;&nbsp;</a></span>AudioFormat</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">oboe::AudioFormat</a> : aaudio_format_t</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The format of audio samples. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b"></a>Invalid&#160;</td><td class="fielddoc"><p>Invalid format. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5"></a>Unspecified&#160;</td><td class="fielddoc"><p>Unspecified format. Format will be decided by Oboe. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="a58191d1a396041246bd4e0a87dbfdec9abcd774f891b5f9df7099f3ea75dadf8d"></a>I16&#160;</td><td class="fielddoc"><p>Signed 16-bit integers. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="a58191d1a396041246bd4e0a87dbfdec9a22ae0e2b89e5e3d477f988cc36d3272b"></a>Float&#160;</td><td class="fielddoc"><p>Single precision floating points. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
 <a id="a522e6806948369987639a0d1df03c029"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a522e6806948369987639a0d1df03c029">&#9670;&nbsp;</a></span>ChannelCount</h2>
 
@@ -319,9 +344,13 @@
         </tr>
       </table>
 </div><div class="memdoc">
+<p>The channel count of the audio stream. The underlying type is <code>int32_t</code>. Use of this enum is convenient to avoid "magic" numbers when specifying the channel count.</p>
+<p>For example, you can write <code>builder.setChannelCount(ChannelCount::Stereo)</code> rather than <code>builder.setChannelCount(2)</code> </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76"></a>Unspecified&#160;</td><td class="fielddoc"><p>Audio channel count definition, use Mono or Stereo </p>
 </td></tr>
+<tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5"></a>Unspecified&#160;</td><td class="fielddoc"><p>Unspecified format. Format will be decided by Oboe. </p>
+</td></tr>
 <tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5"></a>Unspecified&#160;</td><td class="fielddoc"><p>Try to use AAudio. If not available then use OpenSL ES. </p>
 </td></tr>
 <tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79"></a>Mono&#160;</td><td class="fielddoc"><p>Use this for mono audio </p>
@@ -343,9 +372,9 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>The CONTENT_TYPE attribute describes "what" you are playing. It expresses the general category of the content. This information is optional. But in case it is known (for instance <a class="el" href="">AAUDIO_CONTENT_TYPE_MOVIE</a> for a movie streaming service or <a class="el" href="">AAUDIO_CONTENT_TYPE_SPEECH</a> for an audio book application) this information might be used by the audio framework to enforce audio focus.</p>
+<p>The ContentType attribute describes <em>what</em> you are playing. It expresses the general category of the content. This information is optional. But in case it is known (for instance <a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">Movie</a> for a movie streaming service or <a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">Speech</a> for an audio book application) this information might be used by the audio framework to enforce audio focus.</p>
 <p>Note that these match the equivalent values in AudioAttributes in the Android Java API.</p>
-<p>Added in API level 28. </p>
+<p>This attribute only has an effect on Android API 28+. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1"></a>Speech&#160;</td><td class="fielddoc"><p>Use this for spoken voice, audio books, etcetera. </p>
 </td></tr>
@@ -359,6 +388,58 @@
 
 </div>
 </div>
+<a id="a9cb0d39766aa6d50132a2daa6e826457"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cb0d39766aa6d50132a2daa6e826457">&#9670;&nbsp;</a></span>DataCallbackResult</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">oboe::DataCallbackResult</a> : aaudio_data_callback_result_t</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The result of an audio callback. </p>
+
+</div>
+</div>
+<a id="aea1c5f88e3dd4144f51ed5a434fb387b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea1c5f88e3dd4144f51ed5a434fb387b">&#9670;&nbsp;</a></span>Direction</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">oboe::Direction</a> : aaudio_direction_t</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The direction of the stream. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54"></a>Output&#160;</td><td class="fielddoc"><p>Used for playback. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="aea1c5f88e3dd4144f51ed5a434fb387ba324118a6721dd6b8a9b9f4e327df2bf5"></a>Input&#160;</td><td class="fielddoc"><p>Used for recording. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
 <a id="a17f63a064de966efddd5d0335992bc04"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a17f63a064de966efddd5d0335992bc04">&#9670;&nbsp;</a></span>InputPreset</h2>
 
@@ -372,7 +453,7 @@
 </div><div class="memdoc">
 <p>Defines the audio source. An audio source defines both a default physical source of audio signal, and a recording configuration.</p>
 <p>Note that these match the equivalent values in MediaRecorder.AudioSource in the Android Java API.</p>
-<p>Added in API level 28. </p>
+<p>This attribute only has an effect on Android API 28+. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544"></a>Generic&#160;</td><td class="fielddoc"><p>Use this preset when other presets do not apply. </p>
 </td></tr>
@@ -390,6 +471,60 @@
 
 </div>
 </div>
+<a id="acd0e87a1512eca01c60eb3b7a6676fde"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd0e87a1512eca01c60eb3b7a6676fde">&#9670;&nbsp;</a></span>PerformanceMode</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">oboe::PerformanceMode</a> : aaudio_performance_mode_t</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The performance mode of the audio stream. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a5752250c10e96179e3618d7f72937eafa6adf97f83acf6453d4a6a4b1070f3754"></a>None&#160;</td><td class="fielddoc"><p>No particular performance needs. Default. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="acd0e87a1512eca01c60eb3b7a6676fdeabbad080463ed11f9d77797c04aa1e5b1"></a>PowerSaving&#160;</td><td class="fielddoc"><p>Extending battery life is most important. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="acd0e87a1512eca01c60eb3b7a6676fdea611907b5ab1865515c35357efa41a9b9"></a>LowLatency&#160;</td><td class="fielddoc"><p>Reducing latency is most important. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="a5e32586b07bf64da91f99fc33c043cb1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e32586b07bf64da91f99fc33c043cb1">&#9670;&nbsp;</a></span>Result</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a> : aaudio_result_t</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The result of an operation. All except the <code>OK</code> result indicates that an error occurred. The <code>Result</code> can be converted into a human readable string using <code>convertToText</code>. </p>
+
+</div>
+</div>
 <a id="a5752250c10e96179e3618d7f72937eaf"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a5752250c10e96179e3618d7f72937eaf">&#9670;&nbsp;</a></span>SessionId</h2>
 
@@ -401,13 +536,15 @@
         </tr>
       </table>
 </div><div class="memdoc">
+<p>This attribute can be used to allocate a session ID to the audio stream.</p>
+<p>This attribute only has an effect on Android API 28+. </p>
 <table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f"></a>None&#160;</td><td class="fielddoc"><p>Do not allocate a session ID. Effects cannot be used with this stream. Default.</p>
-<p>Added in API level 28. </p>
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f"></a>None&#160;</td><td class="fielddoc"><p>Do not allocate a session ID. Effects cannot be used with this stream. Default. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="a5752250c10e96179e3618d7f72937eafa6adf97f83acf6453d4a6a4b1070f3754"></a>None&#160;</td><td class="fielddoc"><p>No particular performance needs. Default. </p>
 </td></tr>
 <tr><td class="fieldname"><a id="a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123"></a>Allocate&#160;</td><td class="fielddoc"><p>Allocate a session ID that can be used to attach and control effects using the Java AudioEffects API. Note that the use of this flag may result in higher latency.</p>
-<p>Note that this matches the value of AudioManager.AUDIO_SESSION_ID_GENERATE.</p>
-<p>Added in API level 28. </p>
+<p>Note that this matches the value of AudioManager.AUDIO_SESSION_ID_GENERATE. </p>
 </td></tr>
 </table>
 
@@ -432,6 +569,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
+<p>The sharing mode of the audio stream. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971"></a>Exclusive&#160;</td><td class="fielddoc"><p>This will be the only stream using a particular source or sink. This mode will provide the lowest possible latency. You should close EXCLUSIVE streams immediately when you are not using them. </p>
 </td></tr>
@@ -441,6 +579,29 @@
 
 </div>
 </div>
+<a id="a7fd7bd0828b61e3b3097e33dc90ac123"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7fd7bd0828b61e3b3097e33dc90ac123">&#9670;&nbsp;</a></span>StreamState</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">oboe::StreamState</a> : aaudio_stream_state_t</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The state of the audio stream. </p>
+
+</div>
+</div>
 <a id="a1b2a1bdc891d640eb82724dcd9b7afbb"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a1b2a1bdc891d640eb82724dcd9b7afbb">&#9670;&nbsp;</a></span>Usage</h2>
 
@@ -460,9 +621,9 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>The Usage attribute expresses "why" you are playing a sound, what is this sound used for. This information is used by certain platforms or routing policies to make more refined volume or routing decisions.</p>
+<p>The Usage attribute expresses <em>why</em> you are playing a sound, what is this sound used for. This information is used by certain platforms or routing policies to make more refined volume or routing decisions.</p>
 <p>Note that these match the equivalent values in AudioAttributes in the Android Java API.</p>
-<p>Added in API level 28. </p>
+<p>This attribute only has an effect on Android API 28+. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74"></a>Media&#160;</td><td class="fielddoc"><p>Use this for streaming media, music performance, video, podcasts, etcetera. </p>
 </td></tr>
@@ -493,6 +654,49 @@
 </div>
 </div>
 <h2 class="groupheader">Function Documentation</h2>
+<a id="adbda063116feb9fa98a31ee820170060"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adbda063116feb9fa98a31ee820170060">&#9670;&nbsp;</a></span>convertFloatToPcm16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void oboe::convertFloatToPcm16 </td>
+          <td>(</td>
+          <td class="paramtype">const float *&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int16_t *&#160;</td>
+          <td class="paramname"><em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>numSamples</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Convert an array of floats to an array of 16-bit integers.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source</td><td>the input array. </td></tr>
+    <tr><td class="paramname">destination</td><td>the output array. </td></tr>
+    <tr><td class="paramname">numSamples</td><td>the number of values to convert. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
 <a id="ac67383a3df0f6e7a51f8415ffd9fdaca"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#ac67383a3df0f6e7a51f8415ffd9fdaca">&#9670;&nbsp;</a></span>convertFormatToSizeInBytes()</h2>
 
@@ -502,7 +706,7 @@
         <tr>
           <td class="memname">int32_t oboe::convertFormatToSizeInBytes </td>
           <td>(</td>
-          <td class="paramtype">AudioFormat&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td>
           <td class="paramname"><em>format</em></td><td>)</td>
           <td></td>
         </tr>
@@ -512,8 +716,51 @@
 
 </div>
 </div>
-<a id="a8d1ae211254cc239019f165b607f4365"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8d1ae211254cc239019f165b607f4365">&#9670;&nbsp;</a></span>convertToText()</h2>
+<a id="ad17bee42828d13f2ef62a889e175c643"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad17bee42828d13f2ef62a889e175c643">&#9670;&nbsp;</a></span>convertPcm16ToFloat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void oboe::convertPcm16ToFloat </td>
+          <td>(</td>
+          <td class="paramtype">const int16_t *&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float *&#160;</td>
+          <td class="paramname"><em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>numSamples</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Convert an array of 16-bit integers to an array of floats.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source</td><td>the input array. </td></tr>
+    <tr><td class="paramname">destination</td><td>the output array. </td></tr>
+    <tr><td class="paramname">numSamples</td><td>the number of values to convert. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="af65aaea3c5d82eee6906664d61c094b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af65aaea3c5d82eee6906664d61c094b3">&#9670;&nbsp;</a></span>convertToText()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -524,7 +771,7 @@
           <td class="memname">const char* oboe::convertToText </td>
           <td>(</td>
           <td class="paramtype">FromType&#160;</td>
-          <td class="paramname"></td><td>)</td>
+          <td class="paramname"><em>input</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
@@ -532,7 +779,7 @@
 <p>The text is the ASCII symbol corresponding to the supplied Oboe enum value, or an English message saying the value is unrecognized. This is intended for developers to use when debugging. It is not for displaying to users.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">enum</td><td>value </td></tr>
+    <tr><td class="paramname">input</td><td>object to convert from. </td></tr>
   </table>
   </dd>
 </dl>
@@ -561,6 +808,129 @@
 
 </div>
 </div>
+<a id="aa403103686222502d1cfc47bafc10aeb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa403103686222502d1cfc47bafc10aeb">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">std::ostream&amp; oboe::operator&lt;&lt; </td>
+          <td>(</td>
+          <td class="paramtype">std::ostream &amp;&#160;</td>
+          <td class="paramname"><em>strm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="a00060.html">ResultWithValue</a>&lt; T &gt; &amp;&#160;</td>
+          <td class="paramname"><em>result</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>If the result is <code>OK</code> then return the value, otherwise return a human-readable error message. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="aab8f5f081a8b2147e16ec920347c1b5c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab8f5f081a8b2147e16ec920347c1b5c">&#9670;&nbsp;</a></span>kDefaultTimeoutNanos</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">constexpr int64_t oboe::kDefaultTimeoutNanos = (2000 * <a class="el" href="a00032.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The default number of nanoseconds to wait for when performing state change operations on the stream, such as <code>start</code> and <code>stop</code>.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00036.html#af04f03eb6b64b564f1c4401688987d21">oboe::AudioStream::start</a> </dd></dl>
+
+</div>
+</div>
+<a id="ad1bb9f5626cec20d3a052a8721959873"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1bb9f5626cec20d3a052a8721959873">&#9670;&nbsp;</a></span>kMillisPerSecond</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">constexpr int64_t oboe::kMillisPerSecond = 1000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The number of milliseconds in a second. 1,000. </p>
+
+</div>
+</div>
+<a id="aedef0759ae3622b6f0324799bcbdebf0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aedef0759ae3622b6f0324799bcbdebf0">&#9670;&nbsp;</a></span>kNanosPerMicrosecond</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">constexpr int64_t oboe::kNanosPerMicrosecond = 1000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The number of nanoseconds in a microsecond. 1,000. </p>
+
+</div>
+</div>
+<a id="a831e887150474c087170679eaca8672b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a831e887150474c087170679eaca8672b">&#9670;&nbsp;</a></span>kNanosPerMillisecond</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">constexpr int64_t oboe::kNanosPerMillisecond = <a class="el" href="a00032.html#aedef0759ae3622b6f0324799bcbdebf0">kNanosPerMicrosecond</a> * 1000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The number of nanoseconds in a millisecond. 1,000,000. </p>
+
+</div>
+</div>
+<a id="a5948466b593c4eab65f7025846a39f51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5948466b593c4eab65f7025846a39f51">&#9670;&nbsp;</a></span>kNanosPerSecond</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">constexpr int64_t oboe::kNanosPerSecond = <a class="el" href="a00032.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a> * <a class="el" href="a00032.html#ad1bb9f5626cec20d3a052a8721959873">kMillisPerSecond</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The number of nanoseconds in a second. 1,000,000,000. </p>
+
+</div>
+</div>
+<a id="ab0772052200184e514082eaa89be7905"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0772052200184e514082eaa89be7905">&#9670;&nbsp;</a></span>kUnspecified</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">constexpr int32_t oboe::kUnspecified = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Represents any attribute, property or value which hasn't been specified. </p>
+
+</div>
+</div>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00033.html b/docs/reference/a00033.html
index ed9e94e..281e3ac 100644
--- a/docs/reference/a00033.html
+++ b/docs/reference/a00033.html
@@ -75,74 +75,74 @@
 <p>This is the complete list of members for <a class="el" href="a00036.html">oboe::AudioStream</a>, including all inherited members.</p>
 <table class="directory">
   <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStream</b>() (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStream</b>(const AudioStreamBuilder &amp;builder) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a8ebb587a07bf62c864fd62c63b241fd4">AudioStream</a>(const AudioStreamBuilder &amp;builder)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
   <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#aa6b103e1b0f808bbc4949d56f0829f98">AudioStreamBase</a>(const AudioStreamBase &amp;)=default</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00036.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>()</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a>()=0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fireCallback</b>(void *audioData, int numFrames) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>flush</b>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a0c4fd19b01a4ef750dd9d6ae3a512eda">fireCallback</a>(void *audioData, int numFrames)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a32c25c0333eab3d65ce02275ad4acb3d">flush</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() const =0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getBytesPerFrame</b>() const (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getBytesPerSample</b>() const (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a5c01907a59d5f89a5e4b819fe66b08bc">getBytesPerFrame</a>() const</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a>() const</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a093057d625bc896864b959974c265f21">getDeviceId</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00036.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>()=0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getFramesRead</b>() (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#aeebfc59abd978cd6dff07c16cfe266df">getFramesRead</a>()</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>()</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">getSessionId</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00036.html#a47bb5798275f14d76444283a6b6f35eb">getState</a>()=0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getTimestamp</b>(clockid_t clockId, int64_t *framePosition, int64_t *timeNanoseconds) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d">getTimestamp</a>(clockid_t clockId, int64_t *framePosition, int64_t *timeNanoseconds)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a>() const</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>() const</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>incrementFramesRead</b>(int32_t frames) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>incrementFramesWritten</b>(int32_t frames) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>isPlaying</b>() (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a81568482a217b314498e2501210758d7">incrementFramesRead</a>(int32_t frames)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#ad6b4c63f6ed1ecb509f7b80352a9c0bd">incrementFramesWritten</a>(int32_t frames)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#ad5260e2cc71108b1b2e694bf6162279f">isPlaying</a>()</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00036.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() const =0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesRead</b> (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesWritten</b> (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mNativeFormat</b> (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a2b9124ba3b0f564fa58b0651438250e7">mFramesRead</a></td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#aa88d2a712b91a8b763f2721d78480ba8">mFramesWritten</a></td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60">mNativeFormat</a></td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#ae9187492b679c97a0963e264954be473">mSharingMode</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00036.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a>(void *audioData, int numFrames)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00036.html#a686c6ce8a29051c858fd1de386805dc6">open</a>()</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pause</b>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>read</b>(void *buffer, int32_t numFrames, int64_t timeoutNanoseconds) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>requestFlush</b>()=0 (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>requestPause</b>()=0 (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>requestStart</b>()=0 (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>requestStop</b>()=0 (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(const AudioStreamBase &amp;)=default</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a04f29836748a8e5842aef2be200022ad">pause</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#acbf3933af829313d281b5455053338da">read</a>(void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a6bd5d633ff999e4da1faf3cd949aa602">requestFlush</a>()=0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">requestPause</a>()=0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a3c484e314dee8dfed1d419f487b5d601">requestStart</a>()=0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a820e634f741e6b5efdcef8104cecb919">requestStop</a>()=0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00036.html#ac93b18e18487e809151f63ec3c6228bb">setBufferSizeInFrames</a>(int32_t requestedFrames)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNativeFormat</b>(AudioFormat format) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>start</b>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>stop</b>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos) (defined in <a class="el" href="a00036.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#ab01c37fca9110e916a482a909f5cc82d">setNativeFormat</a>(AudioFormat format)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#af04f03eb6b64b564f1c4401688987d21">start</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#aec093859d42f0470c884edd1e976d9f3">stop</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00036.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>() const</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00036.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00036.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="a00036.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
diff --git a/docs/reference/a00034.html b/docs/reference/a00034.html
new file mode 100644
index 0000000..46afc36
--- /dev/null
+++ b/docs/reference/a00034.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Oboe
+   &#160;<span id="projectnumber">1.0</span>
+   </div>
+   <div id="projectbrief">Audio library for Android</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.14 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00033.html">oboe</a></li><li class="navelem"><a class="el" href="a00037.html">AudioStream</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">oboe::AudioStream Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00037.html">oboe::AudioStream</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStream</b>() (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#a8ebb587a07bf62c864fd62c63b241fd4">AudioStream</a>(const AudioStreamBuilder &amp;builder)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>()</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a>()=0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fireCallback</b>(void *audioData, int numFrames) (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#a32c25c0333eab3d65ce02275ad4acb3d">flush</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() const =0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getBytesPerFrame</b>() const (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getBytesPerSample</b>() const (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>()=0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getFramesRead</b>() (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>()</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#a47bb5798275f14d76444283a6b6f35eb">getState</a>()=0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getTimestamp</b>(clockid_t clockId, int64_t *framePosition, int64_t *timeNanoseconds) (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a>() const</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>() const</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>incrementFramesRead</b>(int32_t frames) (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>incrementFramesWritten</b>(int32_t frames) (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#ad5260e2cc71108b1b2e694bf6162279f">isPlaying</a>()</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() const =0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesRead</b> (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesWritten</b> (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mNativeFormat</b> (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a>(void *audioData, int numFrames)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#a686c6ce8a29051c858fd1de386805dc6">open</a>()</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#a04f29836748a8e5842aef2be200022ad">pause</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>read</b>(void *buffer, int32_t numFrames, int64_t timeoutNanoseconds) (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#a6bd5d633ff999e4da1faf3cd949aa602">requestFlush</a>()=0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">requestPause</a>()=0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#a3c484e314dee8dfed1d419f487b5d601">requestStart</a>()=0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#a820e634f741e6b5efdcef8104cecb919">requestStop</a>()=0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#ac93b18e18487e809151f63ec3c6228bb">setBufferSizeInFrames</a>(int32_t requestedFrames)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNativeFormat</b>(AudioFormat format) (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#af04f03eb6b64b564f1c4401688987d21">start</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#aec093859d42f0470c884edd1e976d9f3">stop</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>() const</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00037.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00037.html#ab3f6bf8abed87f3804ac4df3472c3670">write</a>(const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStream</b>()=default (defined in <a class="el" href="a00037.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00037.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.14
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/a00035.html b/docs/reference/a00035.html
new file mode 100644
index 0000000..6bdd547
--- /dev/null
+++ b/docs/reference/a00035.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Oboe
+   &#160;<span id="projectnumber">1.0</span>
+   </div>
+   <div id="projectbrief">Audio library for Android</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.14 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00034.html">oboe</a></li><li class="navelem"><a class="el" href="a00038.html">AudioStream</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">oboe::AudioStream Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00038.html">oboe::AudioStream</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStream</b>() (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a8ebb587a07bf62c864fd62c63b241fd4">AudioStream</a>(const AudioStreamBuilder &amp;builder)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>()</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a>()=0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fireCallback</b>(void *audioData, int numFrames) (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a32c25c0333eab3d65ce02275ad4acb3d">flush</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() const =0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getBytesPerFrame</b>() const (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getBytesPerSample</b>() const (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>()=0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getFramesRead</b>() (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>()</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a47bb5798275f14d76444283a6b6f35eb">getState</a>()=0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getTimestamp</b>(clockid_t clockId, int64_t *framePosition, int64_t *timeNanoseconds) (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a>() const</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>() const</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>incrementFramesRead</b>(int32_t frames) (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>incrementFramesWritten</b>(int32_t frames) (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#ad5260e2cc71108b1b2e694bf6162279f">isPlaying</a>()</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() const =0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesRead</b> (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesWritten</b> (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mNativeFormat</b> (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a>(void *audioData, int numFrames)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a686c6ce8a29051c858fd1de386805dc6">open</a>()</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a04f29836748a8e5842aef2be200022ad">pause</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>read</b>(void *buffer, int32_t numFrames, int64_t timeoutNanoseconds) (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a6bd5d633ff999e4da1faf3cd949aa602">requestFlush</a>()=0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">requestPause</a>()=0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a3c484e314dee8dfed1d419f487b5d601">requestStart</a>()=0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a820e634f741e6b5efdcef8104cecb919">requestStop</a>()=0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#ac93b18e18487e809151f63ec3c6228bb">setBufferSizeInFrames</a>(int32_t requestedFrames)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNativeFormat</b>(AudioFormat format) (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#af04f03eb6b64b564f1c4401688987d21">start</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#aec093859d42f0470c884edd1e976d9f3">stop</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>() const</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#ab3f6bf8abed87f3804ac4df3472c3670">write</a>(const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStream</b>()=default (defined in <a class="el" href="a00038.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="a00038.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.14
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/a00036.html b/docs/reference/a00036.html
index f11a47e..f132bf6 100644
--- a/docs/reference/a00036.html
+++ b/docs/reference/a00036.html
@@ -90,40 +90,31 @@
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a8ebb587a07bf62c864fd62c63b241fd4"><td class="memItemLeft" align="right" valign="top"><a id="a8ebb587a07bf62c864fd62c63b241fd4"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>AudioStream</b> (const <a class="el" href="a00044.html">AudioStreamBuilder</a> &amp;builder)</td></tr>
+<tr class="memitem:a8ebb587a07bf62c864fd62c63b241fd4"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a8ebb587a07bf62c864fd62c63b241fd4">AudioStream</a> (const <a class="el" href="a00044.html">AudioStreamBuilder</a> &amp;builder)</td></tr>
 <tr class="separator:a8ebb587a07bf62c864fd62c63b241fd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a686c6ce8a29051c858fd1de386805dc6"><td class="memItemLeft" align="right" valign="top">virtual Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a686c6ce8a29051c858fd1de386805dc6">open</a> ()</td></tr>
+<tr class="memitem:a686c6ce8a29051c858fd1de386805dc6"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a686c6ce8a29051c858fd1de386805dc6">open</a> ()</td></tr>
 <tr class="separator:a686c6ce8a29051c858fd1de386805dc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad33a20f0d6792e322b9d8a2bcf14fcf8"><td class="memItemLeft" align="right" valign="top">virtual Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a> ()=0</td></tr>
+<tr class="memitem:ad33a20f0d6792e322b9d8a2bcf14fcf8"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a> ()=0</td></tr>
 <tr class="separator:ad33a20f0d6792e322b9d8a2bcf14fcf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af04f03eb6b64b564f1c4401688987d21"><td class="memItemLeft" align="right" valign="top"><a id="af04f03eb6b64b564f1c4401688987d21"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>start</b> (int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td></tr>
+<tr class="memitem:af04f03eb6b64b564f1c4401688987d21"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#af04f03eb6b64b564f1c4401688987d21">start</a> (int64_t timeoutNanoseconds=<a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>)</td></tr>
 <tr class="separator:af04f03eb6b64b564f1c4401688987d21"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a04f29836748a8e5842aef2be200022ad"><td class="memItemLeft" align="right" valign="top"><a id="a04f29836748a8e5842aef2be200022ad"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>pause</b> (int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td></tr>
+<tr class="memitem:a04f29836748a8e5842aef2be200022ad"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a04f29836748a8e5842aef2be200022ad">pause</a> (int64_t timeoutNanoseconds=<a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>)</td></tr>
 <tr class="separator:a04f29836748a8e5842aef2be200022ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a32c25c0333eab3d65ce02275ad4acb3d"><td class="memItemLeft" align="right" valign="top"><a id="a32c25c0333eab3d65ce02275ad4acb3d"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>flush</b> (int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td></tr>
+<tr class="memitem:a32c25c0333eab3d65ce02275ad4acb3d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a32c25c0333eab3d65ce02275ad4acb3d">flush</a> (int64_t timeoutNanoseconds=<a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>)</td></tr>
 <tr class="separator:a32c25c0333eab3d65ce02275ad4acb3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aec093859d42f0470c884edd1e976d9f3"><td class="memItemLeft" align="right" valign="top"><a id="aec093859d42f0470c884edd1e976d9f3"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>stop</b> (int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td></tr>
+<tr class="memitem:aec093859d42f0470c884edd1e976d9f3"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#aec093859d42f0470c884edd1e976d9f3">stop</a> (int64_t timeoutNanoseconds=<a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>)</td></tr>
 <tr class="separator:aec093859d42f0470c884edd1e976d9f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3c484e314dee8dfed1d419f487b5d601"><td class="memItemLeft" align="right" valign="top"><a id="a3c484e314dee8dfed1d419f487b5d601"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>requestStart</b> ()=0</td></tr>
+<tr class="memitem:a3c484e314dee8dfed1d419f487b5d601"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a3c484e314dee8dfed1d419f487b5d601">requestStart</a> ()=0</td></tr>
 <tr class="separator:a3c484e314dee8dfed1d419f487b5d601"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7f18bb3cc5490fd7fbc1f6da63c730f6"><td class="memItemLeft" align="right" valign="top"><a id="a7f18bb3cc5490fd7fbc1f6da63c730f6"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>requestPause</b> ()=0</td></tr>
+<tr class="memitem:a7f18bb3cc5490fd7fbc1f6da63c730f6"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">requestPause</a> ()=0</td></tr>
 <tr class="separator:a7f18bb3cc5490fd7fbc1f6da63c730f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6bd5d633ff999e4da1faf3cd949aa602"><td class="memItemLeft" align="right" valign="top"><a id="a6bd5d633ff999e4da1faf3cd949aa602"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>requestFlush</b> ()=0</td></tr>
+<tr class="memitem:a6bd5d633ff999e4da1faf3cd949aa602"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a6bd5d633ff999e4da1faf3cd949aa602">requestFlush</a> ()=0</td></tr>
 <tr class="separator:a6bd5d633ff999e4da1faf3cd949aa602"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a820e634f741e6b5efdcef8104cecb919"><td class="memItemLeft" align="right" valign="top"><a id="a820e634f741e6b5efdcef8104cecb919"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>requestStop</b> ()=0</td></tr>
+<tr class="memitem:a820e634f741e6b5efdcef8104cecb919"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a820e634f741e6b5efdcef8104cecb919">requestStop</a> ()=0</td></tr>
 <tr class="separator:a820e634f741e6b5efdcef8104cecb919"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a47bb5798275f14d76444283a6b6f35eb"><td class="memItemLeft" align="right" valign="top">virtual StreamState&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a47bb5798275f14d76444283a6b6f35eb">getState</a> ()=0</td></tr>
+<tr class="memitem:a47bb5798275f14d76444283a6b6f35eb"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a47bb5798275f14d76444283a6b6f35eb">getState</a> ()=0</td></tr>
 <tr class="separator:a47bb5798275f14d76444283a6b6f35eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0c865a5501f369d959c39d8ab8b46a07"><td class="memItemLeft" align="right" valign="top">virtual Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a> (StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</td></tr>
+<tr class="memitem:a0c865a5501f369d959c39d8ab8b46a07"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a> (<a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> inputState, <a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> *nextState, int64_t timeoutNanoseconds)=0</td></tr>
 <tr class="separator:a0c865a5501f369d959c39d8ab8b46a07"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ac93b18e18487e809151f63ec3c6228bb"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00060.html">ResultWithValue</a>&lt; int32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ac93b18e18487e809151f63ec3c6228bb">setBufferSizeInFrames</a> (int32_t requestedFrames)</td></tr>
 <tr class="separator:ac93b18e18487e809151f63ec3c6228bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -133,29 +124,23 @@
 <tr class="separator:a43d8a098440cde28f4ee8bedd6d107c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ac160acb656515814fa6fdd157c131a0a"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a> ()=0</td></tr>
 <tr class="separator:ac160acb656515814fa6fdd157c131a0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad5260e2cc71108b1b2e694bf6162279f"><td class="memItemLeft" align="right" valign="top"><a id="ad5260e2cc71108b1b2e694bf6162279f"></a>
-bool&#160;</td><td class="memItemRight" valign="bottom"><b>isPlaying</b> ()</td></tr>
+<tr class="memitem:ad5260e2cc71108b1b2e694bf6162279f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ad5260e2cc71108b1b2e694bf6162279f">isPlaying</a> ()</td></tr>
 <tr class="separator:ad5260e2cc71108b1b2e694bf6162279f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5c01907a59d5f89a5e4b819fe66b08bc"><td class="memItemLeft" align="right" valign="top"><a id="a5c01907a59d5f89a5e4b819fe66b08bc"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getBytesPerFrame</b> () const</td></tr>
+<tr class="memitem:a5c01907a59d5f89a5e4b819fe66b08bc"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a5c01907a59d5f89a5e4b819fe66b08bc">getBytesPerFrame</a> () const</td></tr>
 <tr class="separator:a5c01907a59d5f89a5e4b819fe66b08bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a44dda61e6e948e49b68f87172f084d62"><td class="memItemLeft" align="right" valign="top"><a id="a44dda61e6e948e49b68f87172f084d62"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getBytesPerSample</b> () const</td></tr>
+<tr class="memitem:a44dda61e6e948e49b68f87172f084d62"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a> () const</td></tr>
 <tr class="separator:a44dda61e6e948e49b68f87172f084d62"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ab43dd4074e1de57bac1c3fd111430341"><td class="memItemLeft" align="right" valign="top">virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a> ()</td></tr>
 <tr class="separator:ab43dd4074e1de57bac1c3fd111430341"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aeebfc59abd978cd6dff07c16cfe266df"><td class="memItemLeft" align="right" valign="top"><a id="aeebfc59abd978cd6dff07c16cfe266df"></a>
-virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>getFramesRead</b> ()</td></tr>
+<tr class="memitem:aeebfc59abd978cd6dff07c16cfe266df"><td class="memItemLeft" align="right" valign="top">virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#aeebfc59abd978cd6dff07c16cfe266df">getFramesRead</a> ()</td></tr>
 <tr class="separator:aeebfc59abd978cd6dff07c16cfe266df"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ae023cb001f3261d064f423101798d6be"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00060.html">ResultWithValue</a>&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a> ()</td></tr>
 <tr class="separator:ae023cb001f3261d064f423101798d6be"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d7cf4e43fb9d7b31857a90d9eceee6d"><td class="memItemLeft" align="right" valign="top"><a id="a1d7cf4e43fb9d7b31857a90d9eceee6d"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>getTimestamp</b> (clockid_t clockId, int64_t *framePosition, int64_t *timeNanoseconds)</td></tr>
+<tr class="memitem:a1d7cf4e43fb9d7b31857a90d9eceee6d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d">getTimestamp</a> (clockid_t clockId, int64_t *framePosition, int64_t *timeNanoseconds)</td></tr>
 <tr class="separator:a1d7cf4e43fb9d7b31857a90d9eceee6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ab3f6bf8abed87f3804ac4df3472c3670"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00060.html">ResultWithValue</a>&lt; int32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ab3f6bf8abed87f3804ac4df3472c3670">write</a> (const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</td></tr>
 <tr class="separator:ab3f6bf8abed87f3804ac4df3472c3670"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acbf3933af829313d281b5455053338da"><td class="memItemLeft" align="right" valign="top"><a id="acbf3933af829313d281b5455053338da"></a>
-virtual <a class="el" href="a00060.html">ResultWithValue</a>&lt; int32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>read</b> (void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</td></tr>
+<tr class="memitem:acbf3933af829313d281b5455053338da"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00060.html">ResultWithValue</a>&lt; int32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#acbf3933af829313d281b5455053338da">read</a> (void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</td></tr>
 <tr class="separator:acbf3933af829313d281b5455053338da"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a2b7a3cee7444114843dbdd1fc705f6bb"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a> () const =0</td></tr>
 <tr class="separator:a2b7a3cee7444114843dbdd1fc705f6bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -164,134 +149,135 @@
 <tr class="memitem:a5458d7130415eb4defe3dbc11d479e2f"><td class="memItemLeft" align="right" valign="top">virtual void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a> () const</td></tr>
 <tr class="separator:a5458d7130415eb4defe3dbc11d479e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pub_methods_a00040"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00040')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="a00040.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="aa6b103e1b0f808bbc4949d56f0829f98"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>AudioStreamBase</b> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
+<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa6b103e1b0f808bbc4949d56f0829f98">AudioStreamBase</a> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
 <tr class="separator:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="aa9c987a59555d7a60b9f7a63f4afc7fc"></a>
-<a class="el" href="a00040.html">AudioStreamBase</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
+<tr class="memitem:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00040.html">AudioStreamBase</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
 <tr class="separator:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:aa0b0a068097efaf967fb235c55383dd8 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a> () const</td></tr>
 <tr class="separator:aa0b0a068097efaf967fb235c55383dd8 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">Direction&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a> () const</td></tr>
+<tr class="memitem:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a> () const</td></tr>
 <tr class="separator:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a> () const</td></tr>
 <tr class="separator:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1c133e1949f0814f60bd8bb61346756b inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a> () const</td></tr>
 <tr class="separator:a1c133e1949f0814f60bd8bb61346756b inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
+<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
 <tr class="separator:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a> ()</td></tr>
 <tr class="separator:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ab1531253e64aaebe9e9eddbafb9098fc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a> () const</td></tr>
 <tr class="separator:ab1531253e64aaebe9e9eddbafb9098fc inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a1fb033fc963f971bd1aa8f6707e49b41"></a>
-<a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSharingMode</b> () const</td></tr>
+<tr class="memitem:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a> () const</td></tr>
 <tr class="separator:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a2ddb935de0e24dd7ae8e2cfbecac9fdc"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>getPerformanceMode</b> () const</td></tr>
+<tr class="memitem:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a> () const</td></tr>
 <tr class="separator:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a093057d625bc896864b959974c265f21 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a093057d625bc896864b959974c265f21"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDeviceId</b> () const</td></tr>
+<tr class="memitem:a093057d625bc896864b959974c265f21 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a093057d625bc896864b959974c265f21">getDeviceId</a> () const</td></tr>
 <tr class="separator:a093057d625bc896864b959974c265f21 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a1b4a2a191546708da657510c3cd6b797"></a>
-<a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>getCallback</b> () const</td></tr>
+<tr class="memitem:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a> () const</td></tr>
 <tr class="separator:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a0bcfb2f8bd11c92b541fd910da9af397"></a>
-<a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getUsage</b> () const</td></tr>
+<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a> () const</td></tr>
 <tr class="separator:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ab12e2d068fa87e0553b01a400d96eb82"></a>
-<a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getContentType</b> () const</td></tr>
+<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a> () const</td></tr>
 <tr class="separator:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a5c773b93b8aa38191c7199cab023428a"></a>
-<a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getInputPreset</b> () const</td></tr>
+<tr class="memitem:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a> () const</td></tr>
 <tr class="separator:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="aa3c502ce09bbad7690a2dd6acaf8892e"></a>
-<a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSessionId</b> () const</td></tr>
+<tr class="memitem:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">getSessionId</a> () const</td></tr>
 <tr class="separator:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
 Protected Member Functions</h2></td></tr>
-<tr class="memitem:ad6b4c63f6ed1ecb509f7b80352a9c0bd"><td class="memItemLeft" align="right" valign="top"><a id="ad6b4c63f6ed1ecb509f7b80352a9c0bd"></a>
-virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>incrementFramesWritten</b> (int32_t frames)</td></tr>
+<tr class="memitem:ad6b4c63f6ed1ecb509f7b80352a9c0bd"><td class="memItemLeft" align="right" valign="top">virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ad6b4c63f6ed1ecb509f7b80352a9c0bd">incrementFramesWritten</a> (int32_t frames)</td></tr>
 <tr class="separator:ad6b4c63f6ed1ecb509f7b80352a9c0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a81568482a217b314498e2501210758d7"><td class="memItemLeft" align="right" valign="top"><a id="a81568482a217b314498e2501210758d7"></a>
-virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>incrementFramesRead</b> (int32_t frames)</td></tr>
+<tr class="memitem:a81568482a217b314498e2501210758d7"><td class="memItemLeft" align="right" valign="top">virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a81568482a217b314498e2501210758d7">incrementFramesRead</a> (int32_t frames)</td></tr>
 <tr class="separator:a81568482a217b314498e2501210758d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8adbacd6a55a94a532916ab037fba1d6"><td class="memItemLeft" align="right" valign="top">virtual Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a> (StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</td></tr>
+<tr class="memitem:a8adbacd6a55a94a532916ab037fba1d6"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a> (<a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> startingState, <a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> endingState, int64_t timeoutNanoseconds)</td></tr>
 <tr class="separator:a8adbacd6a55a94a532916ab037fba1d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abda7ae8e6832030572785de3964ed848"><td class="memItemLeft" align="right" valign="top">virtual DataCallbackResult&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a> (void *audioData, int numFrames)</td></tr>
+<tr class="memitem:abda7ae8e6832030572785de3964ed848"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a> (void *audioData, int numFrames)</td></tr>
 <tr class="separator:abda7ae8e6832030572785de3964ed848"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0c4fd19b01a4ef750dd9d6ae3a512eda"><td class="memItemLeft" align="right" valign="top"><a id="a0c4fd19b01a4ef750dd9d6ae3a512eda"></a>
-DataCallbackResult&#160;</td><td class="memItemRight" valign="bottom"><b>fireCallback</b> (void *audioData, int numFrames)</td></tr>
+<tr class="memitem:a0c4fd19b01a4ef750dd9d6ae3a512eda"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a0c4fd19b01a4ef750dd9d6ae3a512eda">fireCallback</a> (void *audioData, int numFrames)</td></tr>
 <tr class="separator:a0c4fd19b01a4ef750dd9d6ae3a512eda"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab01c37fca9110e916a482a909f5cc82d"><td class="memItemLeft" align="right" valign="top"><a id="ab01c37fca9110e916a482a909f5cc82d"></a>
-virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>setNativeFormat</b> (AudioFormat format)</td></tr>
+<tr class="memitem:ab01c37fca9110e916a482a909f5cc82d"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ab01c37fca9110e916a482a909f5cc82d">setNativeFormat</a> (<a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> format)</td></tr>
 <tr class="separator:ab01c37fca9110e916a482a909f5cc82d"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
 Protected Attributes</h2></td></tr>
-<tr class="memitem:a07ed6b5e5bd4bc276bc1e1fc08e51d60"><td class="memItemLeft" align="right" valign="top"><a id="a07ed6b5e5bd4bc276bc1e1fc08e51d60"></a>
-AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><b>mNativeFormat</b> = AudioFormat::Invalid</td></tr>
+<tr class="memitem:a07ed6b5e5bd4bc276bc1e1fc08e51d60"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60">mNativeFormat</a> = <a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b">AudioFormat::Invalid</a></td></tr>
 <tr class="separator:a07ed6b5e5bd4bc276bc1e1fc08e51d60"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa88d2a712b91a8b763f2721d78480ba8"><td class="memItemLeft" align="right" valign="top"><a id="aa88d2a712b91a8b763f2721d78480ba8"></a>
-int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesWritten</b> = 0</td></tr>
+<tr class="memitem:aa88d2a712b91a8b763f2721d78480ba8"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#aa88d2a712b91a8b763f2721d78480ba8">mFramesWritten</a> = 0</td></tr>
 <tr class="separator:aa88d2a712b91a8b763f2721d78480ba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2b9124ba3b0f564fa58b0651438250e7"><td class="memItemLeft" align="right" valign="top"><a id="a2b9124ba3b0f564fa58b0651438250e7"></a>
-int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesRead</b> = 0</td></tr>
+<tr class="memitem:a2b9124ba3b0f564fa58b0651438250e7"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a2b9124ba3b0f564fa58b0651438250e7">mFramesRead</a> = 0</td></tr>
 <tr class="separator:a2b9124ba3b0f564fa58b0651438250e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pro_attribs_a00040"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00040')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="a00040.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ae3f72318212dd9977d7fa0ced92c91f4"></a>
-<a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>mStreamCallback</b> = nullptr</td></tr>
+<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = nullptr</td></tr>
 <tr class="separator:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a3962eb94420ad0ecea70029236001899"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerCallback</b> = kUnspecified</td></tr>
+<tr class="memitem:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a5ff460bac9d14dfeac4eeddfcbb6e206"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mChannelCount</b> = kUnspecified</td></tr>
+<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a998885bb6c4f37e145f4626ad4177dea"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mSampleRate</b> = kUnspecified</td></tr>
+<tr class="memitem:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a23dafa12fb1a6242b088ebd5a52798c8"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mDeviceId</b> = kUnspecified</td></tr>
+<tr class="memitem:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ac81d4719b350f8138aad1af38f0873b6"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferCapacityInFrames</b> = kUnspecified</td></tr>
+<tr class="memitem:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a3b65595d26d1eae1b8ce9925a5b98f6a"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferSizeInFrames</b> = kUnspecified</td></tr>
+<tr class="memitem:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54061319ed348329a29d883a5de2482e inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a54061319ed348329a29d883a5de2482e"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerBurst</b> = kUnspecified</td></tr>
+<tr class="memitem:a54061319ed348329a29d883a5de2482e inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a54061319ed348329a29d883a5de2482e inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9187492b679c97a0963e264954be473 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ae9187492b679c97a0963e264954be473"></a>
-<a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSharingMode</b> = <a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td></tr>
+<tr class="memitem:ae9187492b679c97a0963e264954be473 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ae9187492b679c97a0963e264954be473">mSharingMode</a> = <a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td></tr>
 <tr class="separator:ae9187492b679c97a0963e264954be473 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a7869f04836c2c2bdc10c7309ad4b8e09"></a>
-AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><b>mFormat</b> = AudioFormat::Unspecified</td></tr>
+<tr class="memitem:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a> = AudioFormat::Unspecified</td></tr>
 <tr class="separator:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a26e9294721561d3b16bcaeec5faf4880"></a>
-Direction&#160;</td><td class="memItemRight" valign="bottom"><b>mDirection</b> = Direction::Output</td></tr>
+<tr class="memitem:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a> = <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a></td></tr>
 <tr class="separator:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ab99671c2d0552557e75dc7b4afe91765"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>mPerformanceMode</b> = PerformanceMode::None</td></tr>
+<tr class="memitem:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a> = PerformanceMode::None</td></tr>
 <tr class="separator:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a5b518e82f39c9fcbd7050fd66adb253c"></a>
-<a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mUsage</b> = <a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td></tr>
+<tr class="memitem:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a> = <a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td></tr>
 <tr class="separator:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a5f8f0e5add381b841856de80ea4cdb2b"></a>
-<a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mContentType</b> = ContentType::Music</td></tr>
+<tr class="memitem:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a> = ContentType::Music</td></tr>
 <tr class="separator:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a1e5d4f5b30c4cc36f81ffd858cc00589"></a>
-<a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mInputPreset</b> = InputPreset::VoiceRecognition</td></tr>
+<tr class="memitem:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a> = InputPreset::VoiceRecognition</td></tr>
 <tr class="separator:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="abe1c1e9cada1ced9b5c1504ac9b07737"></a>
-<a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSessionId</b> = SessionId::None</td></tr>
+<tr class="memitem:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a> = SessionId::None</td></tr>
 <tr class="separator:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Base class for Oboe C++ audio stream. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a8ebb587a07bf62c864fd62c63b241fd4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ebb587a07bf62c864fd62c63b241fd4">&#9670;&nbsp;</a></span>AudioStream()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">oboe::AudioStream::AudioStream </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00044.html">AudioStreamBuilder</a> &amp;&#160;</td>
+          <td class="paramname"><em>builder</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Construct an <code><a class="el" href="a00036.html">AudioStream</a></code> using the given <code><a class="el" href="a00044.html">AudioStreamBuilder</a></code></p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">builder</td><td>containing all the stream's attributes </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
 <a id="ae023cb001f3261d064f423101798d6be"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#ae023cb001f3261d064f423101798d6be">&#9670;&nbsp;</a></span>calculateLatencyMillis()</h2>
 
@@ -314,7 +300,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Calculate the latency of a stream based on getTimestamp().</p>
+<p>Calculate the latency of a stream based on <a class="el" href="a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d">getTimestamp()</a>.</p>
 <p>Output latency is the time it takes for a given frame to travel from the app to some type of digital-to-analog converter. If the DAC is external, for example in a USB interface or a TV connected by HDMI, then there may be additional latency that the Android device is unaware of.</p>
 <p>Input latency is the time it takes to a given frame to travel from an analog-to-digital converter (ADC) to the app.</p>
 <p>Note that the latency of an OUTPUT stream will increase abruptly when you write data to it and then decrease slowly over time as the data is consumed.</p>
@@ -334,7 +320,7 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual Result oboe::AudioStream::close </td>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::close </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td></td>
@@ -350,6 +336,78 @@
 
 </div>
 </div>
+<a id="a0c4fd19b01a4ef750dd9d6ae3a512eda"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c4fd19b01a4ef750dd9d6ae3a512eda">&#9670;&nbsp;</a></span>fireCallback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a> oboe::AudioStream::fireCallback </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>audioData</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>numFrames</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Override this to provide your own behaviour for the audio callback</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">audioData</td><td>container array which audio frames will be written into or read from </td></tr>
+    <tr><td class="paramname">numFrames</td><td>number of frames which were read/written </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the result of the callback: stop or continue </dd></dl>
+
+</div>
+</div>
+<a id="a32c25c0333eab3d65ce02275ad4acb3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a32c25c0333eab3d65ce02275ad4acb3d">&#9670;&nbsp;</a></span>flush()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::flush </td>
+          <td>(</td>
+          <td class="paramtype">int64_t&#160;</td>
+          <td class="paramname"><em>timeoutNanoseconds</em> = <code><a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a></code></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Flush the stream. This will block until the stream has been flushed, an error occurs or <code>timeoutNanoseconds</code> has been reached. </p>
+
+</div>
+</div>
 <a id="a2b7a3cee7444114843dbdd1fc705f6bb"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a2b7a3cee7444114843dbdd1fc705f6bb">&#9670;&nbsp;</a></span>getAudioApi()</h2>
 
@@ -372,7 +430,54 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>the API that this stream uses </dd></dl>
+<p>Get the underlying audio API which the stream uses.</p>
+<dl class="section return"><dt>Returns</dt><dd>the API that this stream uses. </dd></dl>
+
+</div>
+</div>
+<a id="a5c01907a59d5f89a5e4b819fe66b08bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c01907a59d5f89a5e4b819fe66b08bc">&#9670;&nbsp;</a></span>getBytesPerFrame()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStream::getBytesPerFrame </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Get the number of bytes in each audio frame. This is calculated using the channel count and the sample format. For example, a 2 channel floating point stream will have 2 * 4 = 8 bytes per frame.</p>
+<dl class="section return"><dt>Returns</dt><dd>number of bytes in each audio frame. </dd></dl>
+
+</div>
+</div>
+<a id="a44dda61e6e948e49b68f87172f084d62"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44dda61e6e948e49b68f87172f084d62">&#9670;&nbsp;</a></span>getBytesPerSample()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStream::getBytesPerSample </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the number of bytes per sample. This is calculated using the sample format. For example, stream using 16-bit integer samples will have 2 bytes per sample.</p>
+<dl class="section return"><dt>Returns</dt><dd>the number of bytes per sample. </dd></dl>
 
 </div>
 </div>
@@ -403,6 +508,33 @@
 
 </div>
 </div>
+<a id="aeebfc59abd978cd6dff07c16cfe266df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeebfc59abd978cd6dff07c16cfe266df">&#9670;&nbsp;</a></span>getFramesRead()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual int64_t oboe::AudioStream::getFramesRead </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The number of audio frames read from the stream. This monotonic counter will never get reset.</p>
+<dl class="section return"><dt>Returns</dt><dd>the number of frames read so far </dd></dl>
+
+</div>
+</div>
 <a id="ab43dd4074e1de57bac1c3fd111430341"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#ab43dd4074e1de57bac1c3fd111430341">&#9670;&nbsp;</a></span>getFramesWritten()</h2>
 
@@ -425,7 +557,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>This monotonic counter will never get reset. </p><dl class="section return"><dt>Returns</dt><dd>the number of frames written so far </dd></dl>
+<p>The number of audio frames written into the stream. This monotonic counter will never get reset.</p>
+<dl class="section return"><dt>Returns</dt><dd>the number of frames written so far </dd></dl>
 
 </div>
 </div>
@@ -439,7 +572,7 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual StreamState oboe::AudioStream::getState </td>
+          <td class="memname">virtual <a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> oboe::AudioStream::getState </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td></td>
@@ -456,6 +589,57 @@
 
 </div>
 </div>
+<a id="a1d7cf4e43fb9d7b31857a90d9eceee6d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d7cf4e43fb9d7b31857a90d9eceee6d">&#9670;&nbsp;</a></span>getTimestamp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::getTimestamp </td>
+          <td>(</td>
+          <td class="paramtype">clockid_t&#160;</td>
+          <td class="paramname"><em>clockId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int64_t *&#160;</td>
+          <td class="paramname"><em>framePosition</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int64_t *&#160;</td>
+          <td class="paramname"><em>timeNanoseconds</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Get the timestamp that the frame at <code>framePosition</code> was presented to the audio hardware.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">clockId</td><td>the type of clock to use e.g. CLOCK_MONOTONIC </td></tr>
+    <tr><td class="paramname">framePosition</td><td>the frame number to query </td></tr>
+    <tr><td class="paramname">timeNanoseconds</td><td>an output parameter which will contain the presentation timestamp (if the operation is successful) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
 <a id="a5458d7130415eb4defe3dbc11d479e2f"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a5458d7130415eb4defe3dbc11d479e2f">&#9670;&nbsp;</a></span>getUnderlyingStream()</h2>
 
@@ -478,7 +662,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Do not use this for production. This is only for debugging. If you need to call this method then something is wrong. If you think you need it for production then please let us know so we can modify Oboe so that you don't need this.</p>
+<p>Only for debugging. Do use in production. If you need to call this method something is wrong. If you think you need it for production then please let us know so we can modify Oboe so that you don't need this.</p>
 <dl class="section return"><dt>Returns</dt><dd>nullptr or a pointer to a stream from the system API </dd></dl>
 
 </div>
@@ -511,6 +695,93 @@
 
 </div>
 </div>
+<a id="a81568482a217b314498e2501210758d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81568482a217b314498e2501210758d7">&#9670;&nbsp;</a></span>incrementFramesRead()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual int64_t oboe::AudioStream::incrementFramesRead </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>frames</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Increment the frames which have been read from this stream</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">frames</td><td>number of frames to increment by </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>total frames which have been read </dd></dl>
+
+</div>
+</div>
+<a id="ad6b4c63f6ed1ecb509f7b80352a9c0bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad6b4c63f6ed1ecb509f7b80352a9c0bd">&#9670;&nbsp;</a></span>incrementFramesWritten()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual int64_t oboe::AudioStream::incrementFramesWritten </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>frames</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Increment the frames written to this stream</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">frames</td><td>number of frames to increment by </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>total frames which have been written </dd></dl>
+
+</div>
+</div>
+<a id="ad5260e2cc71108b1b2e694bf6162279f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5260e2cc71108b1b2e694bf6162279f">&#9670;&nbsp;</a></span>isPlaying()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool oboe::AudioStream::isPlaying </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Indicates whether the audio stream is playing.</p>
+<p>THIS MAY BE REMOVED IN FUTURE. <a href="https://github.com/google/oboe/issues/208">https://github.com/google/oboe/issues/208</a> </p>
+
+</div>
+</div>
 <a id="a43d8a098440cde28f4ee8bedd6d107c4"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a43d8a098440cde28f4ee8bedd6d107c4">&#9670;&nbsp;</a></span>isXRunCountSupported()</h2>
 
@@ -547,7 +818,7 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual DataCallbackResult oboe::AudioStream::onDefaultCallback </td>
+          <td class="memname">virtual <a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a> oboe::AudioStream::onDefaultCallback </td>
           <td>(</td>
           <td class="paramtype">void *&#160;</td>
           <td class="paramname"><em>audioData</em>, </td>
@@ -592,7 +863,7 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual Result oboe::AudioStream::open </td>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::open </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td></td>
@@ -610,6 +881,190 @@
 
 </div>
 </div>
+<a id="a04f29836748a8e5842aef2be200022ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a04f29836748a8e5842aef2be200022ad">&#9670;&nbsp;</a></span>pause()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::pause </td>
+          <td>(</td>
+          <td class="paramtype">int64_t&#160;</td>
+          <td class="paramname"><em>timeoutNanoseconds</em> = <code><a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a></code></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Pause the stream. This will block until the stream has been paused, an error occurs or <code>timeoutNanoseconds</code> has been reached. </p>
+
+</div>
+</div>
+<a id="acbf3933af829313d281b5455053338da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbf3933af829313d281b5455053338da">&#9670;&nbsp;</a></span>read()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00060.html">ResultWithValue</a>&lt;int32_t&gt; oboe::AudioStream::read </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>numFrames</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int64_t&#160;</td>
+          <td class="paramname"><em>timeoutNanoseconds</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Read data into the supplied buffer from the stream. This method will block until the read is complete or it runs out of time.</p>
+<p>If <code>timeoutNanoseconds</code> is zero then this call will not wait.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">buffer</td><td>The address of the first sample. </td></tr>
+    <tr><td class="paramname">numFrames</td><td>Number of frames to read. Only complete frames will be read. </td></tr>
+    <tr><td class="paramname">timeoutNanoseconds</td><td>Maximum number of nanoseconds to wait for completion. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="a00060.html">ResultWithValue</a> which has a result of Result::OK and a value containing the number of frames actually read, or result of Result::Error*. </dd></dl>
+
+</div>
+</div>
+<a id="a6bd5d633ff999e4da1faf3cd949aa602"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6bd5d633ff999e4da1faf3cd949aa602">&#9670;&nbsp;</a></span>requestFlush()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::requestFlush </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Flush the stream asynchronously. Returns immediately (does not block). Equivalent to calling <code>flush(0)</code>. </p>
+
+</div>
+</div>
+<a id="a7f18bb3cc5490fd7fbc1f6da63c730f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f18bb3cc5490fd7fbc1f6da63c730f6">&#9670;&nbsp;</a></span>requestPause()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::requestPause </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Pause the stream asynchronously. Returns immediately (does not block). Equivalent to calling <code>pause(0)</code>. </p>
+
+</div>
+</div>
+<a id="a3c484e314dee8dfed1d419f487b5d601"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c484e314dee8dfed1d419f487b5d601">&#9670;&nbsp;</a></span>requestStart()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::requestStart </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Start the stream asynchronously. Returns immediately (does not block). Equivalent to calling <code>start(0)</code>. </p>
+
+</div>
+</div>
+<a id="a820e634f741e6b5efdcef8104cecb919"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a820e634f741e6b5efdcef8104cecb919">&#9670;&nbsp;</a></span>requestStop()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::requestStop </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stop the stream asynchronously. Returns immediately (does not block). Equivalent to calling <code>stop(0)</code>. </p>
+
+</div>
+</div>
 <a id="ac93b18e18487e809151f63ec3c6228bb"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#ac93b18e18487e809151f63ec3c6228bb">&#9670;&nbsp;</a></span>setBufferSizeInFrames()</h2>
 
@@ -645,6 +1100,87 @@
 
 </div>
 </div>
+<a id="ab01c37fca9110e916a482a909f5cc82d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab01c37fca9110e916a482a909f5cc82d">&#9670;&nbsp;</a></span>setNativeFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void oboe::AudioStream::setNativeFormat </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td>
+          <td class="paramname"><em>format</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Used to set the format of the underlying stream </p>
+
+</div>
+</div>
+<a id="af04f03eb6b64b564f1c4401688987d21"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af04f03eb6b64b564f1c4401688987d21">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::start </td>
+          <td>(</td>
+          <td class="paramtype">int64_t&#160;</td>
+          <td class="paramname"><em>timeoutNanoseconds</em> = <code><a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a></code></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Start the stream. This will block until the stream has been started, an error occurs or <code>timeoutNanoseconds</code> has been reached. </p>
+
+</div>
+</div>
+<a id="aec093859d42f0470c884edd1e976d9f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec093859d42f0470c884edd1e976d9f3">&#9670;&nbsp;</a></span>stop()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::stop </td>
+          <td>(</td>
+          <td class="paramtype">int64_t&#160;</td>
+          <td class="paramname"><em>timeoutNanoseconds</em> = <code><a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a></code></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stop the stream. This will block until the stream has been stopped, an error occurs or <code>timeoutNanoseconds</code> has been reached. </p>
+
+</div>
+</div>
 <a id="a15cdaaaa4c1e8da322d6da33334c8147"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a15cdaaaa4c1e8da322d6da33334c8147">&#9670;&nbsp;</a></span>usesAAudio()</h2>
 
@@ -667,7 +1203,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>true if this stream is implemented using the AAudio API </dd></dl>
+<p>Returns true if the underlying audio API is AAudio.</p>
+<dl class="section return"><dt>Returns</dt><dd>true if this stream is implemented using the AAudio API. </dd></dl>
 
 </div>
 </div>
@@ -681,15 +1218,15 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual Result oboe::AudioStream::waitForStateChange </td>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::waitForStateChange </td>
           <td>(</td>
-          <td class="paramtype">StreamState&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a>&#160;</td>
           <td class="paramname"><em>inputState</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">StreamState *&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a> *&#160;</td>
           <td class="paramname"><em>nextState</em>, </td>
         </tr>
         <tr>
@@ -743,15 +1280,15 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual Result oboe::AudioStream::waitForStateTransition </td>
+          <td class="memname">virtual <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStream::waitForStateTransition </td>
           <td>(</td>
-          <td class="paramtype">StreamState&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a>&#160;</td>
           <td class="paramname"><em>startingState</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">StreamState&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">StreamState</a>&#160;</td>
           <td class="paramname"><em>endingState</em>, </td>
         </tr>
         <tr>
@@ -815,10 +1352,10 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>A high level write that will wait until the write is complete or it runs out of time. If timeoutNanoseconds is zero then this call will not wait.</p>
+<p>Write data from the supplied buffer into the stream. This method will block until the write is complete or it runs out of time.</p>
+<p>If <code>timeoutNanoseconds</code> is zero then this call will not wait.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">stream</td><td>A stream created using OboeStream_Open(). </td></tr>
     <tr><td class="paramname">buffer</td><td>The address of the first sample. </td></tr>
     <tr><td class="paramname">numFrames</td><td>Number of frames to write. Only complete frames will be written. </td></tr>
     <tr><td class="paramname">timeoutNanoseconds</td><td>Maximum number of nanoseconds to wait for completion. </td></tr>
@@ -829,6 +1366,79 @@
 
 </div>
 </div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a id="a2b9124ba3b0f564fa58b0651438250e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b9124ba3b0f564fa58b0651438250e7">&#9670;&nbsp;</a></span>mFramesRead</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int64_t oboe::AudioStream::mFramesRead = 0</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Number of frames which have been read from the stream</p>
+<p>TODO these should be atomic like in AAudio </p>
+
+</div>
+</div>
+<a id="aa88d2a712b91a8b763f2721d78480ba8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa88d2a712b91a8b763f2721d78480ba8">&#9670;&nbsp;</a></span>mFramesWritten</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int64_t oboe::AudioStream::mFramesWritten = 0</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Number of frames which have been written into the stream</p>
+<p>TODO these should be atomic like in AAudio </p>
+
+</div>
+</div>
+<a id="a07ed6b5e5bd4bc276bc1e1fc08e51d60"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a07ed6b5e5bd4bc276bc1e1fc08e51d60">&#9670;&nbsp;</a></span>mNativeFormat</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> oboe::AudioStream::mNativeFormat = <a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b">AudioFormat::Invalid</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Do not set directly, use <code>setNativeFormat</code></p>
+<p>TODO: make private These do not change after open. </p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
 <li>include/oboe/<a class="el" href="a00002_source.html">AudioStream.h</a></li>
 </ul>
diff --git a/docs/reference/a00037.html b/docs/reference/a00037.html
index 462cb3c..8d347ca 100644
--- a/docs/reference/a00037.html
+++ b/docs/reference/a00037.html
@@ -75,39 +75,39 @@
 <p>This is the complete list of members for <a class="el" href="a00040.html">oboe::AudioStreamBase</a>, including all inherited members.</p>
 <table class="directory">
   <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#aa6b103e1b0f808bbc4949d56f0829f98">AudioStreamBase</a>(const AudioStreamBase &amp;)=default</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a093057d625bc896864b959974c265f21">getDeviceId</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">getSessionId</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#ae9187492b679c97a0963e264954be473">mSharingMode</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(const AudioStreamBase &amp;)=default</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
   <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
diff --git a/docs/reference/classoboe_1_1_audio_stream.png b/docs/reference/a00037.png
similarity index 100%
rename from docs/reference/classoboe_1_1_audio_stream.png
rename to docs/reference/a00037.png
Binary files differ
diff --git a/docs/reference/a00038.html b/docs/reference/a00038.html
new file mode 100644
index 0000000..7f6ccc5
--- /dev/null
+++ b/docs/reference/a00038.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Oboe
+   &#160;<span id="projectnumber">1.0</span>
+   </div>
+   <div id="projectbrief">Audio library for Android</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.14 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00033.html">oboe</a></li><li class="navelem"><a class="el" href="a00041.html">AudioStreamBase</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">oboe::AudioStreamBase Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00041.html">oboe::AudioStreamBase</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.14
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream.png b/docs/reference/a00038.png
similarity index 100%
copy from docs/reference/classoboe_1_1_audio_stream.png
copy to docs/reference/a00038.png
Binary files differ
diff --git a/docs/reference/a00039.html b/docs/reference/a00039.html
new file mode 100644
index 0000000..e2716a4
--- /dev/null
+++ b/docs/reference/a00039.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Oboe
+   &#160;<span id="projectnumber">1.0</span>
+   </div>
+   <div id="projectbrief">Audio library for Android</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.14 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00034.html">oboe</a></li><li class="navelem"><a class="el" href="a00042.html">AudioStreamBase</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">oboe::AudioStreamBase Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00042.html">oboe::AudioStreamBase</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.14
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/a00040.html b/docs/reference/a00040.html
index 9019feb..a9d1706 100644
--- a/docs/reference/a00040.html
+++ b/docs/reference/a00040.html
@@ -90,107 +90,107 @@
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98"><td class="memItemLeft" align="right" valign="top"><a id="aa6b103e1b0f808bbc4949d56f0829f98"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>AudioStreamBase</b> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
+<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa6b103e1b0f808bbc4949d56f0829f98">AudioStreamBase</a> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
 <tr class="separator:aa6b103e1b0f808bbc4949d56f0829f98"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa9c987a59555d7a60b9f7a63f4afc7fc"><td class="memItemLeft" align="right" valign="top"><a id="aa9c987a59555d7a60b9f7a63f4afc7fc"></a>
-<a class="el" href="a00040.html">AudioStreamBase</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
+<tr class="memitem:aa9c987a59555d7a60b9f7a63f4afc7fc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00040.html">AudioStreamBase</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
 <tr class="separator:aa9c987a59555d7a60b9f7a63f4afc7fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:aa0b0a068097efaf967fb235c55383dd8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a> () const</td></tr>
 <tr class="separator:aa0b0a068097efaf967fb235c55383dd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f86f2233a04c5a0b056f0c1c261f1b1"><td class="memItemLeft" align="right" valign="top">Direction&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a> () const</td></tr>
+<tr class="memitem:a6f86f2233a04c5a0b056f0c1c261f1b1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a> () const</td></tr>
 <tr class="separator:a6f86f2233a04c5a0b056f0c1c261f1b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ae9d32f3e09174bad69e74f147ee33087"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a> () const</td></tr>
 <tr class="separator:ae9d32f3e09174bad69e74f147ee33087"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1c133e1949f0814f60bd8bb61346756b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a> () const</td></tr>
 <tr class="separator:a1c133e1949f0814f60bd8bb61346756b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86"><td class="memItemLeft" align="right" valign="top">AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
+<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
 <tr class="separator:ab1e640461d7bf9d596decb913da7ac86"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:af5217ab05bfde0d7637024b599302d0b"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a> ()</td></tr>
 <tr class="separator:af5217ab05bfde0d7637024b599302d0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ab1531253e64aaebe9e9eddbafb9098fc"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a> () const</td></tr>
 <tr class="separator:ab1531253e64aaebe9e9eddbafb9098fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fb033fc963f971bd1aa8f6707e49b41"><td class="memItemLeft" align="right" valign="top"><a id="a1fb033fc963f971bd1aa8f6707e49b41"></a>
-<a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSharingMode</b> () const</td></tr>
+<tr class="memitem:a1fb033fc963f971bd1aa8f6707e49b41"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a> () const</td></tr>
 <tr class="separator:a1fb033fc963f971bd1aa8f6707e49b41"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2ddb935de0e24dd7ae8e2cfbecac9fdc"><td class="memItemLeft" align="right" valign="top"><a id="a2ddb935de0e24dd7ae8e2cfbecac9fdc"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>getPerformanceMode</b> () const</td></tr>
+<tr class="memitem:a2ddb935de0e24dd7ae8e2cfbecac9fdc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a> () const</td></tr>
 <tr class="separator:a2ddb935de0e24dd7ae8e2cfbecac9fdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a093057d625bc896864b959974c265f21"><td class="memItemLeft" align="right" valign="top"><a id="a093057d625bc896864b959974c265f21"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDeviceId</b> () const</td></tr>
+<tr class="memitem:a093057d625bc896864b959974c265f21"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a093057d625bc896864b959974c265f21">getDeviceId</a> () const</td></tr>
 <tr class="separator:a093057d625bc896864b959974c265f21"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b4a2a191546708da657510c3cd6b797"><td class="memItemLeft" align="right" valign="top"><a id="a1b4a2a191546708da657510c3cd6b797"></a>
-<a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>getCallback</b> () const</td></tr>
+<tr class="memitem:a1b4a2a191546708da657510c3cd6b797"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a> () const</td></tr>
 <tr class="separator:a1b4a2a191546708da657510c3cd6b797"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397"><td class="memItemLeft" align="right" valign="top"><a id="a0bcfb2f8bd11c92b541fd910da9af397"></a>
-<a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getUsage</b> () const</td></tr>
+<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a> () const</td></tr>
 <tr class="separator:a0bcfb2f8bd11c92b541fd910da9af397"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82"><td class="memItemLeft" align="right" valign="top"><a id="ab12e2d068fa87e0553b01a400d96eb82"></a>
-<a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getContentType</b> () const</td></tr>
+<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a> () const</td></tr>
 <tr class="separator:ab12e2d068fa87e0553b01a400d96eb82"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5c773b93b8aa38191c7199cab023428a"><td class="memItemLeft" align="right" valign="top"><a id="a5c773b93b8aa38191c7199cab023428a"></a>
-<a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getInputPreset</b> () const</td></tr>
+<tr class="memitem:a5c773b93b8aa38191c7199cab023428a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a> () const</td></tr>
 <tr class="separator:a5c773b93b8aa38191c7199cab023428a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3c502ce09bbad7690a2dd6acaf8892e"><td class="memItemLeft" align="right" valign="top"><a id="aa3c502ce09bbad7690a2dd6acaf8892e"></a>
-<a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSessionId</b> () const</td></tr>
+<tr class="memitem:aa3c502ce09bbad7690a2dd6acaf8892e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">getSessionId</a> () const</td></tr>
 <tr class="separator:aa3c502ce09bbad7690a2dd6acaf8892e"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
 Protected Attributes</h2></td></tr>
-<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4"><td class="memItemLeft" align="right" valign="top"><a id="ae3f72318212dd9977d7fa0ced92c91f4"></a>
-<a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>mStreamCallback</b> = nullptr</td></tr>
+<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = nullptr</td></tr>
 <tr class="separator:ae3f72318212dd9977d7fa0ced92c91f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3962eb94420ad0ecea70029236001899"><td class="memItemLeft" align="right" valign="top"><a id="a3962eb94420ad0ecea70029236001899"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerCallback</b> = kUnspecified</td></tr>
+<tr class="memitem:a3962eb94420ad0ecea70029236001899"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a3962eb94420ad0ecea70029236001899"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206"><td class="memItemLeft" align="right" valign="top"><a id="a5ff460bac9d14dfeac4eeddfcbb6e206"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mChannelCount</b> = kUnspecified</td></tr>
+<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a5ff460bac9d14dfeac4eeddfcbb6e206"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a998885bb6c4f37e145f4626ad4177dea"><td class="memItemLeft" align="right" valign="top"><a id="a998885bb6c4f37e145f4626ad4177dea"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mSampleRate</b> = kUnspecified</td></tr>
+<tr class="memitem:a998885bb6c4f37e145f4626ad4177dea"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a998885bb6c4f37e145f4626ad4177dea"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a23dafa12fb1a6242b088ebd5a52798c8"><td class="memItemLeft" align="right" valign="top"><a id="a23dafa12fb1a6242b088ebd5a52798c8"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mDeviceId</b> = kUnspecified</td></tr>
+<tr class="memitem:a23dafa12fb1a6242b088ebd5a52798c8"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a23dafa12fb1a6242b088ebd5a52798c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac81d4719b350f8138aad1af38f0873b6"><td class="memItemLeft" align="right" valign="top"><a id="ac81d4719b350f8138aad1af38f0873b6"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferCapacityInFrames</b> = kUnspecified</td></tr>
+<tr class="memitem:ac81d4719b350f8138aad1af38f0873b6"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:ac81d4719b350f8138aad1af38f0873b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3b65595d26d1eae1b8ce9925a5b98f6a"><td class="memItemLeft" align="right" valign="top"><a id="a3b65595d26d1eae1b8ce9925a5b98f6a"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferSizeInFrames</b> = kUnspecified</td></tr>
+<tr class="memitem:a3b65595d26d1eae1b8ce9925a5b98f6a"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a3b65595d26d1eae1b8ce9925a5b98f6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54061319ed348329a29d883a5de2482e"><td class="memItemLeft" align="right" valign="top"><a id="a54061319ed348329a29d883a5de2482e"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerBurst</b> = kUnspecified</td></tr>
+<tr class="memitem:a54061319ed348329a29d883a5de2482e"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a54061319ed348329a29d883a5de2482e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9187492b679c97a0963e264954be473"><td class="memItemLeft" align="right" valign="top"><a id="ae9187492b679c97a0963e264954be473"></a>
-<a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSharingMode</b> = <a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td></tr>
+<tr class="memitem:ae9187492b679c97a0963e264954be473"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ae9187492b679c97a0963e264954be473">mSharingMode</a> = <a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td></tr>
 <tr class="separator:ae9187492b679c97a0963e264954be473"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7869f04836c2c2bdc10c7309ad4b8e09"><td class="memItemLeft" align="right" valign="top"><a id="a7869f04836c2c2bdc10c7309ad4b8e09"></a>
-AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><b>mFormat</b> = AudioFormat::Unspecified</td></tr>
+<tr class="memitem:a7869f04836c2c2bdc10c7309ad4b8e09"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a> = AudioFormat::Unspecified</td></tr>
 <tr class="separator:a7869f04836c2c2bdc10c7309ad4b8e09"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26e9294721561d3b16bcaeec5faf4880"><td class="memItemLeft" align="right" valign="top"><a id="a26e9294721561d3b16bcaeec5faf4880"></a>
-Direction&#160;</td><td class="memItemRight" valign="bottom"><b>mDirection</b> = Direction::Output</td></tr>
+<tr class="memitem:a26e9294721561d3b16bcaeec5faf4880"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a> = <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a></td></tr>
 <tr class="separator:a26e9294721561d3b16bcaeec5faf4880"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab99671c2d0552557e75dc7b4afe91765"><td class="memItemLeft" align="right" valign="top"><a id="ab99671c2d0552557e75dc7b4afe91765"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>mPerformanceMode</b> = PerformanceMode::None</td></tr>
+<tr class="memitem:ab99671c2d0552557e75dc7b4afe91765"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a> = PerformanceMode::None</td></tr>
 <tr class="separator:ab99671c2d0552557e75dc7b4afe91765"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5b518e82f39c9fcbd7050fd66adb253c"><td class="memItemLeft" align="right" valign="top"><a id="a5b518e82f39c9fcbd7050fd66adb253c"></a>
-<a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mUsage</b> = <a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td></tr>
+<tr class="memitem:a5b518e82f39c9fcbd7050fd66adb253c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a> = <a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td></tr>
 <tr class="separator:a5b518e82f39c9fcbd7050fd66adb253c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f8f0e5add381b841856de80ea4cdb2b"><td class="memItemLeft" align="right" valign="top"><a id="a5f8f0e5add381b841856de80ea4cdb2b"></a>
-<a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mContentType</b> = ContentType::Music</td></tr>
+<tr class="memitem:a5f8f0e5add381b841856de80ea4cdb2b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a> = ContentType::Music</td></tr>
 <tr class="separator:a5f8f0e5add381b841856de80ea4cdb2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1e5d4f5b30c4cc36f81ffd858cc00589"><td class="memItemLeft" align="right" valign="top"><a id="a1e5d4f5b30c4cc36f81ffd858cc00589"></a>
-<a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mInputPreset</b> = InputPreset::VoiceRecognition</td></tr>
+<tr class="memitem:a1e5d4f5b30c4cc36f81ffd858cc00589"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a> = InputPreset::VoiceRecognition</td></tr>
 <tr class="separator:a1e5d4f5b30c4cc36f81ffd858cc00589"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abe1c1e9cada1ced9b5c1504ac9b07737"><td class="memItemLeft" align="right" valign="top"><a id="abe1c1e9cada1ced9b5c1504ac9b07737"></a>
-<a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSessionId</b> = SessionId::None</td></tr>
+<tr class="memitem:abe1c1e9cada1ced9b5c1504ac9b07737"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a> = SessionId::None</td></tr>
 <tr class="separator:abe1c1e9cada1ced9b5c1504ac9b07737"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Base class containing parameters for Oboe streams and builders.</p>
-<p>OboeStreamBuilder can return OBOE_UNSPECIFIED or the requested value.</p>
-<p>OboeStream will generally return the actual final value, but <a class="el" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback()</a> can be unspecified even for a stream. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
+<div class="textblock"><p>Base class containing parameters for audio streams and builders. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="aa6b103e1b0f808bbc4949d56f0829f98"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa6b103e1b0f808bbc4949d56f0829f98">&#9670;&nbsp;</a></span>AudioStreamBase()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">oboe::AudioStreamBase::AudioStreamBase </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">default</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Default copy constructor </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
 <a id="ab1531253e64aaebe9e9eddbafb9098fc"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#ab1531253e64aaebe9e9eddbafb9098fc">&#9670;&nbsp;</a></span>getBufferCapacityInFrames()</h2>
 
@@ -213,7 +213,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>capacityInFrames or OBOE_UNSPECIFIED </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>capacityInFrames or kUnspecified </dd></dl>
 
 </div>
 </div>
@@ -244,6 +244,32 @@
 
 </div>
 </div>
+<a id="a1b4a2a191546708da657510c3cd6b797"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b4a2a191546708da657510c3cd6b797">&#9670;&nbsp;</a></span>getCallback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00048.html">AudioStreamCallback</a>* oboe::AudioStreamBase::getCallback </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>the callback object for this stream, if set. </dd></dl>
+
+</div>
+</div>
 <a id="aa0b0a068097efaf967fb235c55383dd8"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#aa0b0a068097efaf967fb235c55383dd8">&#9670;&nbsp;</a></span>getChannelCount()</h2>
 
@@ -266,7 +292,59 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>number of channels, for example 2 for stereo </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>number of channels, for example 2 for stereo, or kUnspecified </dd></dl>
+
+</div>
+</div>
+<a id="ab12e2d068fa87e0553b01a400d96eb82"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab12e2d068fa87e0553b01a400d96eb82">&#9670;&nbsp;</a></span>getContentType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a> oboe::AudioStreamBase::getContentType </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>the stream's content type. </dd></dl>
+
+</div>
+</div>
+<a id="a093057d625bc896864b959974c265f21"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a093057d625bc896864b959974c265f21">&#9670;&nbsp;</a></span>getDeviceId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStreamBase::getDeviceId </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>the device ID of the stream. </dd></dl>
 
 </div>
 </div>
@@ -280,7 +358,7 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">Direction oboe::AudioStreamBase::getDirection </td>
+          <td class="memname"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a> oboe::AudioStreamBase::getDirection </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
@@ -292,7 +370,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>Direction::Input or Direction::Output </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba324118a6721dd6b8a9b9f4e327df2bf5">Direction::Input</a> or <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a> </dd></dl>
 
 </div>
 </div>
@@ -306,7 +384,7 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">AudioFormat oboe::AudioStreamBase::getFormat </td>
+          <td class="memname"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> oboe::AudioStreamBase::getFormat </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
@@ -318,7 +396,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>OBOE_AUDIO_FORMAT_PCM_FLOAT, OBOE_AUDIO_FORMAT_PCM_I16 or OBOE_AUDIO_FORMAT_UNSPECIFIED </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>the audio sample format (e.g. Float or I16) </dd></dl>
 
 </div>
 </div>
@@ -344,7 +422,59 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>framesPerCallback or OBOE_UNSPECIFIED </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>the number of frames in each callback or kUnspecified. </dd></dl>
+
+</div>
+</div>
+<a id="a5c773b93b8aa38191c7199cab023428a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c773b93b8aa38191c7199cab023428a">&#9670;&nbsp;</a></span>getInputPreset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> oboe::AudioStreamBase::getInputPreset </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>the stream's input preset. </dd></dl>
+
+</div>
+</div>
+<a id="a2ddb935de0e24dd7ae8e2cfbecac9fdc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ddb935de0e24dd7ae8e2cfbecac9fdc">&#9670;&nbsp;</a></span>getPerformanceMode()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a> oboe::AudioStreamBase::getPerformanceMode </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>the performance mode of the stream. </dd></dl>
 
 </div>
 </div>
@@ -370,7 +500,481 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>sample rate for the stream </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>sample rate for the stream or kUnspecified </dd></dl>
+
+</div>
+</div>
+<a id="aa3c502ce09bbad7690a2dd6acaf8892e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa3c502ce09bbad7690a2dd6acaf8892e">&#9670;&nbsp;</a></span>getSessionId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> oboe::AudioStreamBase::getSessionId </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>the stream's session ID allocation strategy (None or Allocate). </dd></dl>
+
+</div>
+</div>
+<a id="a1fb033fc963f971bd1aa8f6707e49b41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fb033fc963f971bd1aa8f6707e49b41">&#9670;&nbsp;</a></span>getSharingMode()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> oboe::AudioStreamBase::getSharingMode </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>the sharing mode of the stream. </dd></dl>
+
+</div>
+</div>
+<a id="a0bcfb2f8bd11c92b541fd910da9af397"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0bcfb2f8bd11c92b541fd910da9af397">&#9670;&nbsp;</a></span>getUsage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> oboe::AudioStreamBase::getUsage </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>the usage for this stream. </dd></dl>
+
+</div>
+</div>
+<a id="aa9c987a59555d7a60b9f7a63f4afc7fc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa9c987a59555d7a60b9f7a63f4afc7fc">&#9670;&nbsp;</a></span>operator=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00040.html">AudioStreamBase</a>&amp; oboe::AudioStreamBase::operator= </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">default</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Default assignment operator </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a id="ac81d4719b350f8138aad1af38f0873b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac81d4719b350f8138aad1af38f0873b6">&#9670;&nbsp;</a></span>mBufferCapacityInFrames</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStreamBase::mBufferCapacityInFrames = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream buffer capacity specified as a number of audio frames </p>
+
+</div>
+</div>
+<a id="a3b65595d26d1eae1b8ce9925a5b98f6a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3b65595d26d1eae1b8ce9925a5b98f6a">&#9670;&nbsp;</a></span>mBufferSizeInFrames</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStreamBase::mBufferSizeInFrames = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream buffer size specified as a number of audio frames </p>
+
+</div>
+</div>
+<a id="a5ff460bac9d14dfeac4eeddfcbb6e206"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ff460bac9d14dfeac4eeddfcbb6e206">&#9670;&nbsp;</a></span>mChannelCount</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStreamBase::mChannelCount = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream channel count </p>
+
+</div>
+</div>
+<a id="a5f8f0e5add381b841856de80ea4cdb2b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f8f0e5add381b841856de80ea4cdb2b">&#9670;&nbsp;</a></span>mContentType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a> oboe::AudioStreamBase::mContentType = ContentType::Music</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream content type. Only active on Android 28+ </p>
+
+</div>
+</div>
+<a id="a23dafa12fb1a6242b088ebd5a52798c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a23dafa12fb1a6242b088ebd5a52798c8">&#9670;&nbsp;</a></span>mDeviceId</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStreamBase::mDeviceId = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream audio device ID </p>
+
+</div>
+</div>
+<a id="a26e9294721561d3b16bcaeec5faf4880"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26e9294721561d3b16bcaeec5faf4880">&#9670;&nbsp;</a></span>mDirection</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a> oboe::AudioStreamBase::mDirection = <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream direction </p>
+
+</div>
+</div>
+<a id="a7869f04836c2c2bdc10c7309ad4b8e09"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7869f04836c2c2bdc10c7309ad4b8e09">&#9670;&nbsp;</a></span>mFormat</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> oboe::AudioStreamBase::mFormat = AudioFormat::Unspecified</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Format of audio frames </p>
+
+</div>
+</div>
+<a id="a54061319ed348329a29d883a5de2482e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a54061319ed348329a29d883a5de2482e">&#9670;&nbsp;</a></span>mFramesPerBurst</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStreamBase::mFramesPerBurst = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Number of frames which will be copied to/from the audio device in a single read/write operation </p>
+
+</div>
+</div>
+<a id="a3962eb94420ad0ecea70029236001899"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3962eb94420ad0ecea70029236001899">&#9670;&nbsp;</a></span>mFramesPerCallback</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStreamBase::mFramesPerCallback = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Number of audio frames which will be requested in each callback </p>
+
+</div>
+</div>
+<a id="a1e5d4f5b30c4cc36f81ffd858cc00589"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1e5d4f5b30c4cc36f81ffd858cc00589">&#9670;&nbsp;</a></span>mInputPreset</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> oboe::AudioStreamBase::mInputPreset = InputPreset::VoiceRecognition</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream input preset. Only active on Android 28+ </p>
+
+</div>
+</div>
+<a id="ab99671c2d0552557e75dc7b4afe91765"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab99671c2d0552557e75dc7b4afe91765">&#9670;&nbsp;</a></span>mPerformanceMode</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a> oboe::AudioStreamBase::mPerformanceMode = PerformanceMode::None</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream performance mode </p>
+
+</div>
+</div>
+<a id="a998885bb6c4f37e145f4626ad4177dea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a998885bb6c4f37e145f4626ad4177dea">&#9670;&nbsp;</a></span>mSampleRate</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::AudioStreamBase::mSampleRate = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream sample rate </p>
+
+</div>
+</div>
+<a id="abe1c1e9cada1ced9b5c1504ac9b07737"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe1c1e9cada1ced9b5c1504ac9b07737">&#9670;&nbsp;</a></span>mSessionId</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> oboe::AudioStreamBase::mSessionId = SessionId::None</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream session ID allocation strategy. Only active on Android 28+ </p>
+
+</div>
+</div>
+<a id="ae9187492b679c97a0963e264954be473"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae9187492b679c97a0963e264954be473">&#9670;&nbsp;</a></span>mSharingMode</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> oboe::AudioStreamBase::mSharingMode = <a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream sharing mode </p>
+
+</div>
+</div>
+<a id="ae3f72318212dd9977d7fa0ced92c91f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3f72318212dd9977d7fa0ced92c91f4">&#9670;&nbsp;</a></span>mStreamCallback</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00048.html">AudioStreamCallback</a>* oboe::AudioStreamBase::mStreamCallback = nullptr</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The callback which will be fired when new data is ready to be read/written </p>
+
+</div>
+</div>
+<a id="a5b518e82f39c9fcbd7050fd66adb253c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b518e82f39c9fcbd7050fd66adb253c">&#9670;&nbsp;</a></span>mUsage</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> oboe::AudioStreamBase::mUsage = <a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Stream usage. Only active on Android 28+ </p>
 
 </div>
 </div>
diff --git a/docs/reference/a00041.html b/docs/reference/a00041.html
index eadf139..3561e93 100644
--- a/docs/reference/a00041.html
+++ b/docs/reference/a00041.html
@@ -75,44 +75,44 @@
 <p>This is the complete list of members for <a class="el" href="a00044.html">oboe::AudioStreamBuilder</a>, including all inherited members.</p>
 <table class="directory">
   <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#aa6b103e1b0f808bbc4949d56f0829f98">AudioStreamBase</a>(const AudioStreamBase &amp;)=default</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
   <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBuilder</b>() (defined in <a class="el" href="a00044.html">oboe::AudioStreamBuilder</a>)</td><td class="entry"><a class="el" href="a00044.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getAudioApi</b>() const (defined in <a class="el" href="a00044.html">oboe::AudioStreamBuilder</a>)</td><td class="entry"><a class="el" href="a00044.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00044.html#ac9d41811c297fd28bc61833f640bb8d0">getAudioApi</a>() const</td><td class="entry"><a class="el" href="a00044.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a093057d625bc896864b959974c265f21">getDeviceId</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">getSessionId</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a>() const</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00044.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>()</td><td class="entry"><a class="el" href="a00044.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00044.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>()</td><td class="entry"><a class="el" href="a00044.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#ae9187492b679c97a0963e264954be473">mSharingMode</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a></td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00044.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(AudioStream **stream)</td><td class="entry"><a class="el" href="a00044.html">oboe::AudioStreamBuilder</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00040.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(const AudioStreamBase &amp;)=default</td><td class="entry"><a class="el" href="a00040.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="a00044.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(AudioApi audioApi)</td><td class="entry"><a class="el" href="a00044.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00044.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames)</td><td class="entry"><a class="el" href="a00044.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00044.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(AudioStreamCallback *streamCallback)</td><td class="entry"><a class="el" href="a00044.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
diff --git a/docs/reference/classoboe_1_1_audio_stream_base.png b/docs/reference/a00041.png
similarity index 100%
rename from docs/reference/classoboe_1_1_audio_stream_base.png
rename to docs/reference/a00041.png
Binary files differ
diff --git a/docs/reference/a00042.html b/docs/reference/a00042.html
new file mode 100644
index 0000000..9f336d9
--- /dev/null
+++ b/docs/reference/a00042.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Oboe
+   &#160;<span id="projectnumber">1.0</span>
+   </div>
+   <div id="projectbrief">Audio library for Android</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.14 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00033.html">oboe</a></li><li class="navelem"><a class="el" href="a00045.html">AudioStreamBuilder</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">oboe::AudioStreamBuilder Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00045.html">oboe::AudioStreamBuilder</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBuilder</b>() (defined in <a class="el" href="a00045.html">oboe::AudioStreamBuilder</a>)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getAudioApi</b>() const (defined in <a class="el" href="a00045.html">oboe::AudioStreamBuilder</a>)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00041.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00041.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>()</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>()</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(AudioStream **stream)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(AudioApi audioApi)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00045.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(AudioStreamCallback *streamCallback)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(int channelCount)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(ContentType contentType)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00045.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a>(int32_t deviceId)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#ab3fbd47b06197619c26393637e26354c">setDirection</a>(Direction direction)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00045.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(AudioFormat format)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(int framesPerCallback)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a>(InputPreset inputPreset)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a>(PerformanceMode performanceMode)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a>(int32_t sampleRate)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#a54c1651bdbe089d0d714af499e8a5f1d">setSessionId</a>(SessionId sessionId)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a>(SharingMode sharingMode)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00045.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a>(Usage usage)</td><td class="entry"><a class="el" href="a00045.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="a00041.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00041.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.14
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_base.png b/docs/reference/a00042.png
similarity index 100%
copy from docs/reference/classoboe_1_1_audio_stream_base.png
copy to docs/reference/a00042.png
Binary files differ
diff --git a/docs/reference/a00043.html b/docs/reference/a00043.html
new file mode 100644
index 0000000..e5fdacf
--- /dev/null
+++ b/docs/reference/a00043.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Oboe
+   &#160;<span id="projectnumber">1.0</span>
+   </div>
+   <div id="projectbrief">Audio library for Android</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.14 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00034.html">oboe</a></li><li class="navelem"><a class="el" href="a00046.html">AudioStreamBuilder</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">oboe::AudioStreamBuilder Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00046.html">oboe::AudioStreamBuilder</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBuilder</b>() (defined in <a class="el" href="a00046.html">oboe::AudioStreamBuilder</a>)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getAudioApi</b>() const (defined in <a class="el" href="a00046.html">oboe::AudioStreamBuilder</a>)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00042.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>()</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>()</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(AudioStream **stream)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(AudioApi audioApi)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(AudioStreamCallback *streamCallback)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(int channelCount)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(ContentType contentType)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a>(int32_t deviceId)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#ab3fbd47b06197619c26393637e26354c">setDirection</a>(Direction direction)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(AudioFormat format)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(int framesPerCallback)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a>(InputPreset inputPreset)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a>(PerformanceMode performanceMode)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a>(int32_t sampleRate)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a54c1651bdbe089d0d714af499e8a5f1d">setSessionId</a>(SessionId sessionId)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a>(SharingMode sharingMode)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a>(Usage usage)</td><td class="entry"><a class="el" href="a00046.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="a00042.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="a00042.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.14
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/a00044.html b/docs/reference/a00044.html
index b99f99b..b2147b3 100644
--- a/docs/reference/a00044.html
+++ b/docs/reference/a00044.html
@@ -91,24 +91,23 @@
 Public Member Functions</h2></td></tr>
 <tr class="memitem:a075d10291e1f998d90c2f73ef767b5a7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a> (int channelCount)</td></tr>
 <tr class="separator:a075d10291e1f998d90c2f73ef767b5a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab3fbd47b06197619c26393637e26354c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#ab3fbd47b06197619c26393637e26354c">setDirection</a> (Direction direction)</td></tr>
+<tr class="memitem:ab3fbd47b06197619c26393637e26354c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#ab3fbd47b06197619c26393637e26354c">setDirection</a> (<a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a> direction)</td></tr>
 <tr class="separator:ab3fbd47b06197619c26393637e26354c"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a30ef3d5f51d56a9f980dc09600ed139d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a> (int32_t sampleRate)</td></tr>
 <tr class="separator:a30ef3d5f51d56a9f980dc09600ed139d"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a3f397821f61eabaeedaf31064c859a54"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a> (int framesPerCallback)</td></tr>
 <tr class="separator:a3f397821f61eabaeedaf31064c859a54"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a> (AudioFormat format)</td></tr>
+<tr class="memitem:aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a> (<a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a> format)</td></tr>
 <tr class="separator:aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:abaff480867af51ca0899bfa6fd7cc3ef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a> (int32_t bufferCapacityInFrames)</td></tr>
 <tr class="separator:abaff480867af51ca0899bfa6fd7cc3ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac9d41811c297fd28bc61833f640bb8d0"><td class="memItemLeft" align="right" valign="top"><a id="ac9d41811c297fd28bc61833f640bb8d0"></a>
-<a class="el" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAudioApi</b> () const</td></tr>
+<tr class="memitem:ac9d41811c297fd28bc61833f640bb8d0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#ac9d41811c297fd28bc61833f640bb8d0">getAudioApi</a> () const</td></tr>
 <tr class="separator:ac9d41811c297fd28bc61833f640bb8d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a38c6d6c5e718df1e3ac69daaac47c391"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a> (<a class="el" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> audioApi)</td></tr>
 <tr class="separator:a38c6d6c5e718df1e3ac69daaac47c391"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a3e991742acbbfb6fe5ebcf592c478654"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a> (<a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> sharingMode)</td></tr>
 <tr class="separator:a3e991742acbbfb6fe5ebcf592c478654"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6cd1d65612e844e59da71a68ea0ab3ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a> (PerformanceMode performanceMode)</td></tr>
+<tr class="memitem:a6cd1d65612e844e59da71a68ea0ab3ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a> (<a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a> performanceMode)</td></tr>
 <tr class="separator:a6cd1d65612e844e59da71a68ea0ab3ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a593255a2f5eb972665775cfc5bc58f6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a> (<a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> usage)</td></tr>
 <tr class="separator:a593255a2f5eb972665775cfc5bc58f6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -122,52 +121,42 @@
 <tr class="separator:af36ddcd00686a9e1de661bdac0685a8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a698cefa9af73bc97c020c004821fccbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00044.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a> (<a class="el" href="a00048.html">AudioStreamCallback</a> *streamCallback)</td></tr>
 <tr class="separator:a698cefa9af73bc97c020c004821fccbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a86b94cfa47729bef2e04dce1a9086074"><td class="memItemLeft" align="right" valign="top">Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a> (<a class="el" href="a00036.html">AudioStream</a> **stream)</td></tr>
+<tr class="memitem:a86b94cfa47729bef2e04dce1a9086074"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a> (<a class="el" href="a00036.html">AudioStream</a> **stream)</td></tr>
 <tr class="separator:a86b94cfa47729bef2e04dce1a9086074"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pub_methods_a00040"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00040')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="a00040.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="aa6b103e1b0f808bbc4949d56f0829f98"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>AudioStreamBase</b> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
+<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa6b103e1b0f808bbc4949d56f0829f98">AudioStreamBase</a> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
 <tr class="separator:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="aa9c987a59555d7a60b9f7a63f4afc7fc"></a>
-<a class="el" href="a00040.html">AudioStreamBase</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
+<tr class="memitem:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00040.html">AudioStreamBase</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a> (const <a class="el" href="a00040.html">AudioStreamBase</a> &amp;)=default</td></tr>
 <tr class="separator:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:aa0b0a068097efaf967fb235c55383dd8 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a> () const</td></tr>
 <tr class="separator:aa0b0a068097efaf967fb235c55383dd8 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">Direction&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a> () const</td></tr>
+<tr class="memitem:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a> () const</td></tr>
 <tr class="separator:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a> () const</td></tr>
 <tr class="separator:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1c133e1949f0814f60bd8bb61346756b inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a> () const</td></tr>
 <tr class="separator:a1c133e1949f0814f60bd8bb61346756b inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
+<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
 <tr class="separator:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a> ()</td></tr>
 <tr class="separator:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ab1531253e64aaebe9e9eddbafb9098fc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a> () const</td></tr>
 <tr class="separator:ab1531253e64aaebe9e9eddbafb9098fc inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a1fb033fc963f971bd1aa8f6707e49b41"></a>
-<a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSharingMode</b> () const</td></tr>
+<tr class="memitem:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a> () const</td></tr>
 <tr class="separator:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a2ddb935de0e24dd7ae8e2cfbecac9fdc"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>getPerformanceMode</b> () const</td></tr>
+<tr class="memitem:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a> () const</td></tr>
 <tr class="separator:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a093057d625bc896864b959974c265f21 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a093057d625bc896864b959974c265f21"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDeviceId</b> () const</td></tr>
+<tr class="memitem:a093057d625bc896864b959974c265f21 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a093057d625bc896864b959974c265f21">getDeviceId</a> () const</td></tr>
 <tr class="separator:a093057d625bc896864b959974c265f21 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a1b4a2a191546708da657510c3cd6b797"></a>
-<a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>getCallback</b> () const</td></tr>
+<tr class="memitem:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a> () const</td></tr>
 <tr class="separator:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a0bcfb2f8bd11c92b541fd910da9af397"></a>
-<a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getUsage</b> () const</td></tr>
+<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a> () const</td></tr>
 <tr class="separator:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ab12e2d068fa87e0553b01a400d96eb82"></a>
-<a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getContentType</b> () const</td></tr>
+<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a> () const</td></tr>
 <tr class="separator:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a5c773b93b8aa38191c7199cab023428a"></a>
-<a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getInputPreset</b> () const</td></tr>
+<tr class="memitem:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a> () const</td></tr>
 <tr class="separator:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a id="aa3c502ce09bbad7690a2dd6acaf8892e"></a>
-<a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSessionId</b> () const</td></tr>
+<tr class="memitem:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">getSessionId</a> () const</td></tr>
 <tr class="separator:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
@@ -180,58 +169,69 @@
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
 Additional Inherited Members</h2></td></tr>
 <tr class="inherit_header pro_attribs_a00040"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00040')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="a00040.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ae3f72318212dd9977d7fa0ced92c91f4"></a>
-<a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>mStreamCallback</b> = nullptr</td></tr>
+<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00048.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = nullptr</td></tr>
 <tr class="separator:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a3962eb94420ad0ecea70029236001899"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerCallback</b> = kUnspecified</td></tr>
+<tr class="memitem:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a5ff460bac9d14dfeac4eeddfcbb6e206"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mChannelCount</b> = kUnspecified</td></tr>
+<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a998885bb6c4f37e145f4626ad4177dea"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mSampleRate</b> = kUnspecified</td></tr>
+<tr class="memitem:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a23dafa12fb1a6242b088ebd5a52798c8"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mDeviceId</b> = kUnspecified</td></tr>
+<tr class="memitem:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ac81d4719b350f8138aad1af38f0873b6"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferCapacityInFrames</b> = kUnspecified</td></tr>
+<tr class="memitem:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a3b65595d26d1eae1b8ce9925a5b98f6a"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferSizeInFrames</b> = kUnspecified</td></tr>
+<tr class="memitem:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54061319ed348329a29d883a5de2482e inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a54061319ed348329a29d883a5de2482e"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerBurst</b> = kUnspecified</td></tr>
+<tr class="memitem:a54061319ed348329a29d883a5de2482e inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a> = <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
 <tr class="separator:a54061319ed348329a29d883a5de2482e inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9187492b679c97a0963e264954be473 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ae9187492b679c97a0963e264954be473"></a>
-<a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSharingMode</b> = <a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td></tr>
+<tr class="memitem:ae9187492b679c97a0963e264954be473 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ae9187492b679c97a0963e264954be473">mSharingMode</a> = <a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td></tr>
 <tr class="separator:ae9187492b679c97a0963e264954be473 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a7869f04836c2c2bdc10c7309ad4b8e09"></a>
-AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><b>mFormat</b> = AudioFormat::Unspecified</td></tr>
+<tr class="memitem:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a> = AudioFormat::Unspecified</td></tr>
 <tr class="separator:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a26e9294721561d3b16bcaeec5faf4880"></a>
-Direction&#160;</td><td class="memItemRight" valign="bottom"><b>mDirection</b> = Direction::Output</td></tr>
+<tr class="memitem:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a> = <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a></td></tr>
 <tr class="separator:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="ab99671c2d0552557e75dc7b4afe91765"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>mPerformanceMode</b> = PerformanceMode::None</td></tr>
+<tr class="memitem:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a> = PerformanceMode::None</td></tr>
 <tr class="separator:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a5b518e82f39c9fcbd7050fd66adb253c"></a>
-<a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mUsage</b> = <a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td></tr>
+<tr class="memitem:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a> = <a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td></tr>
 <tr class="separator:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a5f8f0e5add381b841856de80ea4cdb2b"></a>
-<a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mContentType</b> = ContentType::Music</td></tr>
+<tr class="memitem:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a> = ContentType::Music</td></tr>
 <tr class="separator:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="a1e5d4f5b30c4cc36f81ffd858cc00589"></a>
-<a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mInputPreset</b> = InputPreset::VoiceRecognition</td></tr>
+<tr class="memitem:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a> = InputPreset::VoiceRecognition</td></tr>
 <tr class="separator:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a id="abe1c1e9cada1ced9b5c1504ac9b07737"></a>
-<a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSessionId</b> = SessionId::None</td></tr>
+<tr class="memitem:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_a00040"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a> = SessionId::None</td></tr>
 <tr class="separator:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_a00040"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Factory class for an audio Stream. </p>
 </div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="ac9d41811c297fd28bc61833f640bb8d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac9d41811c297fd28bc61833f640bb8d0">&#9670;&nbsp;</a></span>getAudioApi()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> oboe::AudioStreamBuilder::getAudioApi </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Get the audio API which will be requested when opening the stream. No guarantees that this is the API which will actually be used. Query the stream itself to find out the API which is being used.</p>
+<dl class="section return"><dt>Returns</dt><dd>the requested audio API </dd></dl>
+
+</div>
+</div>
 <a id="a622732bbe5c6577356d749f7dc2108df"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a622732bbe5c6577356d749f7dc2108df">&#9670;&nbsp;</a></span>isAAudioRecommended()</h2>
 
@@ -295,7 +295,7 @@
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">Result oboe::AudioStreamBuilder::openStream </td>
+          <td class="memname"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::AudioStreamBuilder::openStream </td>
           <td>(</td>
           <td class="paramtype"><a class="el" href="a00036.html">AudioStream</a> **&#160;</td>
           <td class="paramname"><em>stream</em></td><td>)</td>
@@ -534,7 +534,7 @@
         <tr>
           <td class="memname"><a class="el" href="a00044.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setDirection </td>
           <td>(</td>
-          <td class="paramtype">Direction&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">Direction</a>&#160;</td>
           <td class="paramname"><em>direction</em></td><td>)</td>
           <td></td>
         </tr>
@@ -545,10 +545,10 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Request the direction for a stream. The default is Direction::Output.</p>
+<p>Request the direction for a stream. The default is <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">direction</td><td>Direction::Output or Direction::Input </td></tr>
+    <tr><td class="paramname">direction</td><td><a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a> or <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba324118a6721dd6b8a9b9f4e327df2bf5">Direction::Input</a> </td></tr>
   </table>
   </dd>
 </dl>
@@ -567,7 +567,7 @@
         <tr>
           <td class="memname"><a class="el" href="a00044.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setFormat </td>
           <td>(</td>
-          <td class="paramtype">AudioFormat&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">AudioFormat</a>&#160;</td>
           <td class="paramname"><em>format</em></td><td>)</td>
           <td></td>
         </tr>
@@ -578,7 +578,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Request a sample data format, for example Format::Float.</p>
+<p>Request a sample data format, for example <a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9a22ae0e2b89e5e3d477f988cc36d3272b">Format::Float</a>.</p>
 <p>Default is Format::Unspecified. If the value is unspecified then the application should query for the actual value after the stream is opened. </p>
 
 </div>
@@ -667,7 +667,7 @@
         <tr>
           <td class="memname"><a class="el" href="a00044.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setPerformanceMode </td>
           <td>(</td>
-          <td class="paramtype">PerformanceMode&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">PerformanceMode</a>&#160;</td>
           <td class="paramname"><em>performanceMode</em></td><td>)</td>
           <td></td>
         </tr>
@@ -681,7 +681,7 @@
 <p>Request a performance level for the stream. This will determine the latency, the power consumption, and the level of protection from glitches.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">performanceMode</td><td>for example, PerformanceMode::LowLatency </td></tr>
+    <tr><td class="paramname">performanceMode</td><td>for example, <a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fdea611907b5ab1865515c35357efa41a9b9">PerformanceMode::LowLatency</a> </td></tr>
   </table>
   </dd>
 </dl>
@@ -745,7 +745,7 @@
 <p>The session ID can be used to associate a stream with effects processors. The effects are controlled using the Android AudioEffect Java API.</p>
 <p>The default, if you do not call this function, is SessionId::None.</p>
 <p>If set to SessionId::Allocate then a session ID will be allocated when the stream is opened.</p>
-<p>The allocated session ID can be obtained by calling AudioStream::getSessionId() and then used with this function when opening another stream. This allows effects to be shared between streams.</p>
+<p>The allocated session ID can be obtained by calling <a class="el" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">AudioStream::getSessionId()</a> and then used with this function when opening another stream. This allows effects to be shared between streams.</p>
 <p>Session IDs from Oboe can be used the Android Java APIs and vice versa. So a session ID from an Oboe stream can be passed to Java and effects applied using the Java AudioEffect API.</p>
 <p>Allocated session IDs will always be positive and nonzero.</p>
 <p>Added in API level 28.</p>
diff --git a/docs/reference/classoboe_1_1_audio_stream_builder.png b/docs/reference/a00045.png
similarity index 100%
rename from docs/reference/classoboe_1_1_audio_stream_builder.png
rename to docs/reference/a00045.png
Binary files differ
diff --git a/docs/reference/classoboe_1_1_default_stream_values-members.html b/docs/reference/a00046.html
similarity index 64%
copy from docs/reference/classoboe_1_1_default_stream_values-members.html
copy to docs/reference/a00046.html
index 5666176..de00829 100644
--- a/docs/reference/classoboe_1_1_default_stream_values-members.html
+++ b/docs/reference/a00046.html
@@ -63,20 +63,21 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00033.html">oboe</a></li><li class="navelem"><a class="el" href="a00049.html">AudioStreamCallback</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">oboe::DefaultStreamValues Member List</div>  </div>
+<div class="title">oboe::AudioStreamCallback Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00049.html">oboe::AudioStreamCallback</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ChannelCount</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FramesPerBurst</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00049.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a>(AudioStream *oboeStream, void *audioData, int32_t numFrames)=0</td><td class="entry"><a class="el" href="a00049.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00049.html#a7089c5e18a80cba89eb3f4fe2341aeba">onErrorAfterClose</a>(AudioStream *oboeStream, Result error)</td><td class="entry"><a class="el" href="a00049.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00049.html#a2407ff537a60301fd161bd2c36913bfd">onErrorBeforeClose</a>(AudioStream *oboeStream, Result error)</td><td class="entry"><a class="el" href="a00049.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamCallback</b>()=default (defined in <a class="el" href="a00049.html">oboe::AudioStreamCallback</a>)</td><td class="entry"><a class="el" href="a00049.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/classoboe_1_1_audio_stream_builder.png b/docs/reference/a00046.png
similarity index 100%
copy from docs/reference/classoboe_1_1_audio_stream_builder.png
copy to docs/reference/a00046.png
Binary files differ
diff --git a/docs/reference/classoboe_1_1_default_stream_values-members.html b/docs/reference/a00047.html
similarity index 64%
copy from docs/reference/classoboe_1_1_default_stream_values-members.html
copy to docs/reference/a00047.html
index 5666176..d45f700 100644
--- a/docs/reference/classoboe_1_1_default_stream_values-members.html
+++ b/docs/reference/a00047.html
@@ -63,20 +63,21 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00034.html">oboe</a></li><li class="navelem"><a class="el" href="a00050.html">AudioStreamCallback</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">oboe::DefaultStreamValues Member List</div>  </div>
+<div class="title">oboe::AudioStreamCallback Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00050.html">oboe::AudioStreamCallback</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ChannelCount</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FramesPerBurst</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00050.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a>(AudioStream *oboeStream, void *audioData, int32_t numFrames)=0</td><td class="entry"><a class="el" href="a00050.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00050.html#a7089c5e18a80cba89eb3f4fe2341aeba">onErrorAfterClose</a>(AudioStream *oboeStream, Result error)</td><td class="entry"><a class="el" href="a00050.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00050.html#a2407ff537a60301fd161bd2c36913bfd">onErrorBeforeClose</a>(AudioStream *oboeStream, Result error)</td><td class="entry"><a class="el" href="a00050.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamCallback</b>()=default (defined in <a class="el" href="a00050.html">oboe::AudioStreamCallback</a>)</td><td class="entry"><a class="el" href="a00050.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00048.html b/docs/reference/a00048.html
index d98317b..aafc612 100644
--- a/docs/reference/a00048.html
+++ b/docs/reference/a00048.html
@@ -74,17 +74,22 @@
 <div class="title">oboe::AudioStreamCallback Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00011_source.html">AudioStreamCallback.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:af3a7c44f0254abe6e5e5bb566e2317df"><td class="memItemLeft" align="right" valign="top">virtual DataCallbackResult&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00048.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a> (<a class="el" href="a00036.html">AudioStream</a> *oboeStream, void *audioData, int32_t numFrames)=0</td></tr>
+<tr class="memitem:af3a7c44f0254abe6e5e5bb566e2317df"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00048.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a> (<a class="el" href="a00036.html">AudioStream</a> *oboeStream, void *audioData, int32_t numFrames)=0</td></tr>
 <tr class="separator:af3a7c44f0254abe6e5e5bb566e2317df"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2407ff537a60301fd161bd2c36913bfd"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00048.html#a2407ff537a60301fd161bd2c36913bfd">onErrorBeforeClose</a> (<a class="el" href="a00036.html">AudioStream</a> *oboeStream, Result error)</td></tr>
+<tr class="memitem:a2407ff537a60301fd161bd2c36913bfd"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00048.html#a2407ff537a60301fd161bd2c36913bfd">onErrorBeforeClose</a> (<a class="el" href="a00036.html">AudioStream</a> *oboeStream, <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> error)</td></tr>
 <tr class="separator:a2407ff537a60301fd161bd2c36913bfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7089c5e18a80cba89eb3f4fe2341aeba"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba">onErrorAfterClose</a> (<a class="el" href="a00036.html">AudioStream</a> *oboeStream, Result error)</td></tr>
+<tr class="memitem:a7089c5e18a80cba89eb3f4fe2341aeba"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba">onErrorAfterClose</a> (<a class="el" href="a00036.html">AudioStream</a> *oboeStream, <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> error)</td></tr>
 <tr class="separator:a7089c5e18a80cba89eb3f4fe2341aeba"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
-<h2 class="groupheader">Member Function Documentation</h2>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00048.html">AudioStreamCallback</a> defines a callback interface for:</p>
+<p>1) moving data to/from an audio stream using <code>onAudioReady</code> 2) being alerted when a stream has an error using <code>onError*</code> methods </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
 <a id="af3a7c44f0254abe6e5e5bb566e2317df"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#af3a7c44f0254abe6e5e5bb566e2317df">&#9670;&nbsp;</a></span>onAudioReady()</h2>
 
@@ -95,7 +100,7 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual DataCallbackResult oboe::AudioStreamCallback::onAudioReady </td>
+          <td class="memname">virtual <a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">DataCallbackResult</a> oboe::AudioStreamCallback::onAudioReady </td>
           <td>(</td>
           <td class="paramtype"><a class="el" href="a00036.html">AudioStream</a> *&#160;</td>
           <td class="paramname"><em>oboeStream</em>, </td>
@@ -155,7 +160,7 @@
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">Result&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td>
           <td class="paramname"><em>error</em>&#160;</td>
         </tr>
         <tr>
@@ -200,7 +205,7 @@
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">Result&#160;</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td>
           <td class="paramname"><em>error</em>&#160;</td>
         </tr>
         <tr>
diff --git a/docs/reference/a00049.html b/docs/reference/a00049.html
index e2a175c..f949d0d 100644
--- a/docs/reference/a00049.html
+++ b/docs/reference/a00049.html
@@ -74,8 +74,8 @@
 
 <p>This is the complete list of members for <a class="el" href="a00052.html">oboe::DefaultStreamValues</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ChannelCount</b> (defined in <a class="el" href="a00052.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="a00052.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FramesPerBurst</b> (defined in <a class="el" href="a00052.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="a00052.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00052.html#ad5dce538d5963c81bf58350ab730962d">ChannelCount</a></td><td class="entry"><a class="el" href="a00052.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00052.html#ab5ea5576699cebc56193f5c297d3e300">FramesPerBurst</a></td><td class="entry"><a class="el" href="a00052.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00052.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a></td><td class="entry"><a class="el" href="a00052.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
diff --git a/docs/reference/classoboe_1_1_default_stream_values-members.html b/docs/reference/a00050.html
similarity index 72%
copy from docs/reference/classoboe_1_1_default_stream_values-members.html
copy to docs/reference/a00050.html
index 5666176..61bda1f 100644
--- a/docs/reference/classoboe_1_1_default_stream_values-members.html
+++ b/docs/reference/a00050.html
@@ -63,7 +63,7 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00033.html">oboe</a></li><li class="navelem"><a class="el" href="a00053.html">DefaultStreamValues</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
@@ -72,11 +72,11 @@
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00053.html">oboe::DefaultStreamValues</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ChannelCount</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FramesPerBurst</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ChannelCount</b> (defined in <a class="el" href="a00053.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="a00053.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>FramesPerBurst</b> (defined in <a class="el" href="a00053.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="a00053.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SampleRate</b> (defined in <a class="el" href="a00053.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="a00053.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/classoboe_1_1_default_stream_values-members.html b/docs/reference/a00051.html
similarity index 72%
rename from docs/reference/classoboe_1_1_default_stream_values-members.html
rename to docs/reference/a00051.html
index 5666176..72ac570 100644
--- a/docs/reference/classoboe_1_1_default_stream_values-members.html
+++ b/docs/reference/a00051.html
@@ -63,7 +63,7 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00034.html">oboe</a></li><li class="navelem"><a class="el" href="a00054.html">DefaultStreamValues</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
@@ -72,11 +72,11 @@
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00054.html">oboe::DefaultStreamValues</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ChannelCount</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FramesPerBurst</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ChannelCount</b> (defined in <a class="el" href="a00054.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="a00054.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>FramesPerBurst</b> (defined in <a class="el" href="a00054.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="a00054.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SampleRate</b> (defined in <a class="el" href="a00054.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="a00054.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00052.html b/docs/reference/a00052.html
index 50dd516..ce4b43e 100644
--- a/docs/reference/a00052.html
+++ b/docs/reference/a00052.html
@@ -74,19 +74,76 @@
 <div class="title">oboe::DefaultStreamValues Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00014_source.html">Definitions.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
 Static Public Attributes</h2></td></tr>
 <tr class="memitem:a46a5d9a653f2153f618cadcab764e1b1"><td class="memItemLeft" align="right" valign="top">static int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00052.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a></td></tr>
 <tr class="separator:a46a5d9a653f2153f618cadcab764e1b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab5ea5576699cebc56193f5c297d3e300"><td class="memItemLeft" align="right" valign="top"><a id="ab5ea5576699cebc56193f5c297d3e300"></a>
-static int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>FramesPerBurst</b></td></tr>
+<tr class="memitem:ab5ea5576699cebc56193f5c297d3e300"><td class="memItemLeft" align="right" valign="top">static int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00052.html#ab5ea5576699cebc56193f5c297d3e300">FramesPerBurst</a></td></tr>
 <tr class="separator:ab5ea5576699cebc56193f5c297d3e300"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad5dce538d5963c81bf58350ab730962d"><td class="memItemLeft" align="right" valign="top"><a id="ad5dce538d5963c81bf58350ab730962d"></a>
-static int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>ChannelCount</b></td></tr>
+<tr class="memitem:ad5dce538d5963c81bf58350ab730962d"><td class="memItemLeft" align="right" valign="top">static int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00052.html#ad5dce538d5963c81bf58350ab730962d">ChannelCount</a></td></tr>
 <tr class="separator:ad5dce538d5963c81bf58350ab730962d"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
-<h2 class="groupheader">Member Data Documentation</h2>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>On API 16 to 25 OpenSL ES will be used. When using OpenSL ES the optimal values for sampleRate and framesPerBurst are not known by the native code. On API 17+ these values should be obtained from the AudioManager using this code:</p>
+<pre><code>
+Note that this technique only works for built-in speakers and headphones.
+        AudioManager myAudioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+        String sampleRateStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
+        int defaultSampleRate = Integer.parseInt(sampleRateStr);
+        String framesPerBurstStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
+        int defaultFramesPerBurst = Integer.parseInt(framesPerBurstStr);
+        </code></pre><p>It can then be passed down to Oboe through JNI.</p>
+<p>AAudio will get the optimal framesPerBurst from the HAL and will ignore this value. </p>
+</div><h2 class="groupheader">Member Data Documentation</h2>
+<a id="ad5dce538d5963c81bf58350ab730962d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5dce538d5963c81bf58350ab730962d">&#9670;&nbsp;</a></span>ChannelCount</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::DefaultStreamValues::ChannelCount</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The default channel count to use when opening new audio streams </p>
+
+</div>
+</div>
+<a id="ab5ea5576699cebc56193f5c297d3e300"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5ea5576699cebc56193f5c297d3e300">&#9670;&nbsp;</a></span>FramesPerBurst</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t oboe::DefaultStreamValues::FramesPerBurst</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>The default frames per burst to use when opening new audio streams </p>
+
+</div>
+</div>
 <a id="a46a5d9a653f2153f618cadcab764e1b1"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a46a5d9a653f2153f618cadcab764e1b1">&#9670;&nbsp;</a></span>SampleRate</h2>
 
@@ -106,16 +163,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>On API 16 to 25 OpenSL ES will be used. When using OpenSL ES the optimal values for sampleRate and framesPerBurst are not known by the native code. On API 17+ these values should be obtained from the AudioManager using this code:</p>
-<pre><code>
-Note that this technique only works for built-in speakers and headphones.
-            AudioManager myAudioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
-            String sampleRateStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
-            int defaultSampleRate = Integer.parseInt(sampleRateStr);
-            String framesPerBurstStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
-            int defaultFramesPerBurst = Integer.parseInt(framesPerBurstStr);
-            </code></pre><p>It can then be passed down to Oboe through JNI.</p>
-<p>AAudio will get the optimal framesPerBurst from the HAL and will ignore this value. </p>
+<p>The default sample rate to use when opening new audio streams </p>
 
 </div>
 </div>
diff --git a/docs/reference/a00053.html b/docs/reference/a00053.html
index 335341c..d5dfe32 100644
--- a/docs/reference/a00053.html
+++ b/docs/reference/a00053.html
@@ -74,7 +74,7 @@
 
 <p>This is the complete list of members for <a class="el" href="a00056.html">oboe::LatencyTuner</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LatencyTuner</b>(AudioStream &amp;stream) (defined in <a class="el" href="a00056.html">oboe::LatencyTuner</a>)</td><td class="entry"><a class="el" href="a00056.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00056.html#a0263b9a55825c0a403653b2b508073ea">LatencyTuner</a>(AudioStream &amp;stream)</td><td class="entry"><a class="el" href="a00056.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00056.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>()</td><td class="entry"><a class="el" href="a00056.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00056.html#ad2be756965e6a9af3114008eda892174">tune</a>()</td><td class="entry"><a class="el" href="a00056.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
diff --git a/docs/reference/classoboe_1_1_latency_tuner-members.html b/docs/reference/a00054.html
similarity index 75%
copy from docs/reference/classoboe_1_1_latency_tuner-members.html
copy to docs/reference/a00054.html
index e15fe3a..010d28d 100644
--- a/docs/reference/classoboe_1_1_latency_tuner-members.html
+++ b/docs/reference/a00054.html
@@ -63,7 +63,7 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00033.html">oboe</a></li><li class="navelem"><a class="el" href="a00057.html">LatencyTuner</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
@@ -72,11 +72,11 @@
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00057.html">oboe::LatencyTuner</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LatencyTuner</b>(AudioStream &amp;stream) (defined in <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LatencyTuner</b>(AudioStream &amp;stream) (defined in <a class="el" href="a00057.html">oboe::LatencyTuner</a>)</td><td class="entry"><a class="el" href="a00057.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00057.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>()</td><td class="entry"><a class="el" href="a00057.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00057.html#ad2be756965e6a9af3114008eda892174">tune</a>()</td><td class="entry"><a class="el" href="a00057.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/classoboe_1_1_latency_tuner-members.html b/docs/reference/a00055.html
similarity index 75%
rename from docs/reference/classoboe_1_1_latency_tuner-members.html
rename to docs/reference/a00055.html
index e15fe3a..7c9735b 100644
--- a/docs/reference/classoboe_1_1_latency_tuner-members.html
+++ b/docs/reference/a00055.html
@@ -63,7 +63,7 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00034.html">oboe</a></li><li class="navelem"><a class="el" href="a00058.html">LatencyTuner</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
@@ -72,11 +72,11 @@
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00058.html">oboe::LatencyTuner</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LatencyTuner</b>(AudioStream &amp;stream) (defined in <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LatencyTuner</b>(AudioStream &amp;stream) (defined in <a class="el" href="a00058.html">oboe::LatencyTuner</a>)</td><td class="entry"><a class="el" href="a00058.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>()</td><td class="entry"><a class="el" href="a00058.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00058.html#ad2be756965e6a9af3114008eda892174">tune</a>()</td><td class="entry"><a class="el" href="a00058.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00056.html b/docs/reference/a00056.html
index 8494066..11a5b19 100644
--- a/docs/reference/a00056.html
+++ b/docs/reference/a00056.html
@@ -79,20 +79,53 @@
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a0263b9a55825c0a403653b2b508073ea"><td class="memItemLeft" align="right" valign="top"><a id="a0263b9a55825c0a403653b2b508073ea"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>LatencyTuner</b> (<a class="el" href="a00036.html">AudioStream</a> &amp;stream)</td></tr>
+<tr class="memitem:a0263b9a55825c0a403653b2b508073ea"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00056.html#a0263b9a55825c0a403653b2b508073ea">LatencyTuner</a> (<a class="el" href="a00036.html">AudioStream</a> &amp;stream)</td></tr>
 <tr class="separator:a0263b9a55825c0a403653b2b508073ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad2be756965e6a9af3114008eda892174"><td class="memItemLeft" align="right" valign="top">Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00056.html#ad2be756965e6a9af3114008eda892174">tune</a> ()</td></tr>
+<tr class="memitem:ad2be756965e6a9af3114008eda892174"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00056.html#ad2be756965e6a9af3114008eda892174">tune</a> ()</td></tr>
 <tr class="separator:ad2be756965e6a9af3114008eda892174"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6c0142e08dc65eda8f758b4794450867"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00056.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a> ()</td></tr>
 <tr class="separator:a6c0142e08dc65eda8f758b4794450867"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>This can be used to dynamically tune the latency of an output stream. It adjusts the bufferSize based on the number of underruns. The bufferSize is the portion of the total bufferCapacity that is used to store data.</p>
+<div class="textblock"><p><a class="el" href="a00056.html">LatencyTuner</a> can be used to dynamically tune the latency of an output stream. It adjusts the stream's bufferSize by monitoring the number of underruns.</p>
 <p>This only affects the latency associated with the first level of buffering that is closest to the application. It does not affect low latency in the HAL, or touch latency in the UI.</p>
 <p>Call <a class="el" href="a00056.html#ad2be756965e6a9af3114008eda892174">tune()</a> right before returning from your data callback function if using callbacks. Call <a class="el" href="a00056.html#ad2be756965e6a9af3114008eda892174">tune()</a> right before calling write() if using blocking writes.</p>
 <p>If you want to see the ongoing results of this tuning process then call stream-&gt;getBufferSize() periodically. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a0263b9a55825c0a403653b2b508073ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0263b9a55825c0a403653b2b508073ea">&#9670;&nbsp;</a></span>LatencyTuner()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">oboe::LatencyTuner::LatencyTuner </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00036.html">AudioStream</a> &amp;&#160;</td>
+          <td class="paramname"><em>stream</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Construct a new <a class="el" href="a00056.html">LatencyTuner</a> object which will act on the given audio stream</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">stream</td><td>the stream who's latency will be tuned </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
 <a id="a6c0142e08dc65eda8f758b4794450867"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a6c0142e08dc65eda8f758b4794450867">&#9670;&nbsp;</a></span>requestReset()</h2>
 
@@ -119,7 +152,7 @@
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">Result oboe::LatencyTuner::tune </td>
+          <td class="memname"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> oboe::LatencyTuner::tune </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td></td>
diff --git a/docs/reference/a00057.html b/docs/reference/a00057.html
index bbbaa51..2ae89a7 100644
--- a/docs/reference/a00057.html
+++ b/docs/reference/a00057.html
@@ -75,13 +75,13 @@
 <p>This is the complete list of members for <a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a>, including all inherited members.</p>
 <table class="directory">
   <tr class="even"><td class="entry"><a class="el" href="a00060.html#a2304c6120e2aad8f2189383a98c7b0a7">createBasedOnSign</a>(T numericResult)</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>error</b>() const (defined in <a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00060.html#adfc76ae6db81535c2e82b856975eed41">error</a>() const</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00060.html#ae32b1953b777af7d1d0c94862ca39986">operator bool</a>() const</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
   <tr><td class="entry"><a class="el" href="a00060.html#af62107817c0bc76047e6b655a78504ba">operator Result</a>() const</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3">operator!</a>() const</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>ResultWithValue</b>(oboe::Result error) (defined in <a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ResultWithValue</b>(T value) (defined in <a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>value</b>() const (defined in <a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00060.html#aae75caa0d16a9e23a012f77fb50c5927">ResultWithValue</a>(oboe::Result error)</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00060.html#a600309367db58d71f0ec16e90f7ebea5">ResultWithValue</a>(T value)</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">value</a>() const</td><td class="entry"><a class="el" href="a00060.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00058.html b/docs/reference/a00058.html
new file mode 100644
index 0000000..57f1bae
--- /dev/null
+++ b/docs/reference/a00058.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Oboe
+   &#160;<span id="projectnumber">1.0</span>
+   </div>
+   <div id="projectbrief">Audio library for Android</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.14 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00033.html">oboe</a></li><li class="navelem"><a class="el" href="a00061.html">ResultWithValue</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">oboe::ResultWithValue&lt; T &gt; Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="a00061.html#a2304c6120e2aad8f2189383a98c7b0a7">createBasedOnSign</a>(T numericResult)</td><td class="entry"><a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>error</b>() const (defined in <a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00061.html#ae32b1953b777af7d1d0c94862ca39986">operator bool</a>() const</td><td class="entry"><a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00061.html#af62107817c0bc76047e6b655a78504ba">operator Result</a>() const</td><td class="entry"><a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00061.html#a2dbc8b09ead8b073a78af95b4b0186e3">operator!</a>() const</td><td class="entry"><a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>ResultWithValue</b>(oboe::Result error) (defined in <a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ResultWithValue</b>(T value) (defined in <a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>value</b>() const (defined in <a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00061.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.14
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/a00059.html b/docs/reference/a00059.html
new file mode 100644
index 0000000..9e8ead8
--- /dev/null
+++ b/docs/reference/a00059.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Oboe
+   &#160;<span id="projectnumber">1.0</span>
+   </div>
+   <div id="projectbrief">Audio library for Android</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.14 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00034.html">oboe</a></li><li class="navelem"><a class="el" href="a00062.html">ResultWithValue</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">oboe::ResultWithValue&lt; T &gt; Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="a00062.html#a2304c6120e2aad8f2189383a98c7b0a7">createBasedOnSign</a>(T numericResult)</td><td class="entry"><a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>error</b>() const (defined in <a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00062.html#ae32b1953b777af7d1d0c94862ca39986">operator bool</a>() const</td><td class="entry"><a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00062.html#af62107817c0bc76047e6b655a78504ba">operator Result</a>() const</td><td class="entry"><a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00062.html#a2dbc8b09ead8b073a78af95b4b0186e3">operator!</a>() const</td><td class="entry"><a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>ResultWithValue</b>(oboe::Result error) (defined in <a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ResultWithValue</b>(T value) (defined in <a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>value</b>() const (defined in <a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="a00062.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.14
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/a00060.html b/docs/reference/a00060.html
index 1f0b688..7cada3c 100644
--- a/docs/reference/a00060.html
+++ b/docs/reference/a00060.html
@@ -75,20 +75,18 @@
 <div class="title">oboe::ResultWithValue&lt; T &gt; Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00023_source.html">ResultWithValue.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aae75caa0d16a9e23a012f77fb50c5927"><td class="memItemLeft" align="right" valign="top"><a id="aae75caa0d16a9e23a012f77fb50c5927"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>ResultWithValue</b> (oboe::Result error)</td></tr>
+<tr class="memitem:aae75caa0d16a9e23a012f77fb50c5927"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00060.html#aae75caa0d16a9e23a012f77fb50c5927">ResultWithValue</a> (<a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a> <a class="el" href="a00060.html#adfc76ae6db81535c2e82b856975eed41">error</a>)</td></tr>
 <tr class="separator:aae75caa0d16a9e23a012f77fb50c5927"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a600309367db58d71f0ec16e90f7ebea5"><td class="memItemLeft" align="right" valign="top"><a id="a600309367db58d71f0ec16e90f7ebea5"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>ResultWithValue</b> (T value)</td></tr>
+<tr class="memitem:a600309367db58d71f0ec16e90f7ebea5"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00060.html#a600309367db58d71f0ec16e90f7ebea5">ResultWithValue</a> (T <a class="el" href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">value</a>)</td></tr>
 <tr class="separator:a600309367db58d71f0ec16e90f7ebea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adfc76ae6db81535c2e82b856975eed41"><td class="memItemLeft" align="right" valign="top"><a id="adfc76ae6db81535c2e82b856975eed41"></a>
-oboe::Result&#160;</td><td class="memItemRight" valign="bottom"><b>error</b> () const</td></tr>
+<tr class="memitem:adfc76ae6db81535c2e82b856975eed41"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00060.html#adfc76ae6db81535c2e82b856975eed41">error</a> () const</td></tr>
 <tr class="separator:adfc76ae6db81535c2e82b856975eed41"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a45f5c99a2c9f8fbaca502276f7ebb434"><td class="memItemLeft" align="right" valign="top"><a id="a45f5c99a2c9f8fbaca502276f7ebb434"></a>
-T&#160;</td><td class="memItemRight" valign="bottom"><b>value</b> () const</td></tr>
+<tr class="memitem:a45f5c99a2c9f8fbaca502276f7ebb434"><td class="memItemLeft" align="right" valign="top">T&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">value</a> () const</td></tr>
 <tr class="separator:a45f5c99a2c9f8fbaca502276f7ebb434"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ae32b1953b777af7d1d0c94862ca39986"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00060.html#ae32b1953b777af7d1d0c94862ca39986">operator bool</a> () const</td></tr>
 <tr class="separator:ae32b1953b777af7d1d0c94862ca39986"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -102,6 +100,86 @@
 <tr class="memitem:a2304c6120e2aad8f2189383a98c7b0a7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00060.html">ResultWithValue</a>&lt; T &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00060.html#a2304c6120e2aad8f2189383a98c7b0a7">createBasedOnSign</a> (T numericResult)</td></tr>
 <tr class="separator:a2304c6120e2aad8f2189383a98c7b0a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template&lt;typename T&gt;<br />
+class oboe::ResultWithValue&lt; T &gt;</h3>
+
+<p>A <a class="el" href="a00060.html">ResultWithValue</a> can store both the result of an operation (either OK or an error) and a value.</p>
+<p>It has been designed for cases where the caller needs to know whether an operation succeeded and, if it did, a value which was obtained during the operation.</p>
+<p>For example, when reading from a stream the caller needs to know the result of the read operation and, if it was successful, how many frames were read. Note that <a class="el" href="a00060.html">ResultWithValue</a> can be evaluated as a boolean so it's simple to check whether the result is OK.</p>
+<p><code> ResultWithValue&lt;int32_t&gt; resultOfRead = myStream.read(&amp;buffer, numFrames, timeoutNanoseconds);</code></p>
+<p><code>if (resultOfRead){ LOGD("Frames read: %d", resultOfRead.value()); } else { LOGD("Error reading from stream: %s", resultOfRead.error()); } </code> </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="aae75caa0d16a9e23a012f77fb50c5927"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae75caa0d16a9e23a012f77fb50c5927">&#9670;&nbsp;</a></span>ResultWithValue() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00060.html">oboe::ResultWithValue</a>&lt; T &gt;::<a class="el" href="a00060.html">ResultWithValue</a> </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a>&#160;</td>
+          <td class="paramname"><em>error</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Construct a <a class="el" href="a00060.html">ResultWithValue</a> containing an error result.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">error</td><td>The error </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a600309367db58d71f0ec16e90f7ebea5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a600309367db58d71f0ec16e90f7ebea5">&#9670;&nbsp;</a></span>ResultWithValue() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00060.html">oboe::ResultWithValue</a>&lt; T &gt;::<a class="el" href="a00060.html">ResultWithValue</a> </td>
+          <td>(</td>
+          <td class="paramtype">T&#160;</td>
+          <td class="paramname"><em>value</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Construct a <a class="el" href="a00060.html">ResultWithValue</a> containing an OK result and a value.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">value</td><td>the value to store </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
 <h2 class="groupheader">Member Function Documentation</h2>
 <a id="a2304c6120e2aad8f2189383a98c7b0a7"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a2304c6120e2aad8f2189383a98c7b0a7">&#9670;&nbsp;</a></span>createBasedOnSign()</h2>
@@ -132,6 +210,35 @@
 
 </div>
 </div>
+<a id="adfc76ae6db81535c2e82b856975eed41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adfc76ae6db81535c2e82b856975eed41">&#9670;&nbsp;</a></span>error()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe::Result</a> <a class="el" href="a00060.html">oboe::ResultWithValue</a>&lt; T &gt;::error </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Get the result.</p>
+<dl class="section return"><dt>Returns</dt><dd>the result </dd></dl>
+
+</div>
+</div>
 <a id="ae32b1953b777af7d1d0c94862ca39986"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#ae32b1953b777af7d1d0c94862ca39986">&#9670;&nbsp;</a></span>operator bool()</h2>
 
@@ -172,7 +279,7 @@
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname"><a class="el" href="a00060.html">oboe::ResultWithValue</a>&lt; T &gt;::operator Result </td>
+          <td class="memname"><a class="el" href="a00060.html">oboe::ResultWithValue</a>&lt; T &gt;::operator <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">Result</a> </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
@@ -219,6 +326,34 @@
 
 </div>
 </div>
+<a id="a45f5c99a2c9f8fbaca502276f7ebb434"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a45f5c99a2c9f8fbaca502276f7ebb434">&#9670;&nbsp;</a></span>value()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">T <a class="el" href="a00060.html">oboe::ResultWithValue</a>&lt; T &gt;::value </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Get the value </p><dl class="section return"><dt>Returns</dt><dd></dd></dl>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
 <li>include/oboe/<a class="el" href="a00023_source.html">ResultWithValue.h</a></li>
 </ul>
diff --git a/docs/reference/classoboe_1_1_default_stream_values-members.html b/docs/reference/a00062.html
similarity index 66%
copy from docs/reference/classoboe_1_1_default_stream_values-members.html
copy to docs/reference/a00062.html
index 5666176..e2baf05 100644
--- a/docs/reference/classoboe_1_1_default_stream_values-members.html
+++ b/docs/reference/a00062.html
@@ -63,20 +63,22 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00033.html">oboe</a></li><li class="navelem"><a class="el" href="a00065.html">Version</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">oboe::DefaultStreamValues Member List</div>  </div>
+<div class="title">oboe::Version Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00065.html">oboe::Version</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ChannelCount</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FramesPerBurst</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00065.html#a270f2e92582d5187be339eeda8e2b276">Major</a></td><td class="entry"><a class="el" href="a00065.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00065.html#ae460bb95e3a9099696205a35fffb5469">Minor</a></td><td class="entry"><a class="el" href="a00065.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00065.html#ac579661e79bcee45dc676d4647891de0">Number</a></td><td class="entry"><a class="el" href="a00065.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00065.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a></td><td class="entry"><a class="el" href="a00065.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00065.html#a2c86e578b827fbca5f40c460a7754503">Text</a></td><td class="entry"><a class="el" href="a00065.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/classoboe_1_1_default_stream_values-members.html b/docs/reference/a00063.html
similarity index 66%
copy from docs/reference/classoboe_1_1_default_stream_values-members.html
copy to docs/reference/a00063.html
index 5666176..c34b939 100644
--- a/docs/reference/classoboe_1_1_default_stream_values-members.html
+++ b/docs/reference/a00063.html
@@ -63,20 +63,22 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00034.html">oboe</a></li><li class="navelem"><a class="el" href="a00066.html">Version</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">oboe::DefaultStreamValues Member List</div>  </div>
+<div class="title">oboe::Version Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00066.html">oboe::Version</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ChannelCount</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FramesPerBurst</b> (defined in <a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00066.html#a270f2e92582d5187be339eeda8e2b276">Major</a></td><td class="entry"><a class="el" href="a00066.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00066.html#ae460bb95e3a9099696205a35fffb5469">Minor</a></td><td class="entry"><a class="el" href="a00066.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00066.html#ac579661e79bcee45dc676d4647891de0">Number</a></td><td class="entry"><a class="el" href="a00066.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00066.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a></td><td class="entry"><a class="el" href="a00066.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00066.html#a2c86e578b827fbca5f40c460a7754503">Text</a></td><td class="entry"><a class="el" href="a00066.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/a00064.html b/docs/reference/a00064.html
index 324b678..dc8f3b7 100644
--- a/docs/reference/a00064.html
+++ b/docs/reference/a00064.html
@@ -74,6 +74,8 @@
 <div class="title">oboe::Version Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00029_source.html">Version.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
 Static Public Attributes</h2></td></tr>
@@ -88,7 +90,9 @@
 <tr class="memitem:ac579661e79bcee45dc676d4647891de0"><td class="memItemLeft" align="right" valign="top">static constexpr uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00064.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER</td></tr>
 <tr class="separator:ac579661e79bcee45dc676d4647891de0"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
-<h2 class="groupheader">Member Data Documentation</h2>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Oboe versioning object </p>
+</div><h2 class="groupheader">Member Data Documentation</h2>
 <a id="a270f2e92582d5187be339eeda8e2b276"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a270f2e92582d5187be339eeda8e2b276">&#9670;&nbsp;</a></span>Major</h2>
 
diff --git a/docs/reference/structoboe_1_1_version.html b/docs/reference/a00065.html
similarity index 89%
copy from docs/reference/structoboe_1_1_version.html
copy to docs/reference/a00065.html
index a4dc7f5..b4b90d6 100644
--- a/docs/reference/structoboe_1_1_version.html
+++ b/docs/reference/a00065.html
@@ -63,13 +63,13 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="structoboe_1_1_version.html">Version</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00033.html">oboe</a></li><li class="navelem"><a class="el" href="a00065.html">Version</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="structoboe_1_1_version-members.html">List of all members</a>  </div>
+<a href="a00062.html">List of all members</a>  </div>
   <div class="headertitle">
 <div class="title">oboe::Version Struct Reference</div>  </div>
 </div><!--header-->
@@ -77,15 +77,15 @@
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
 Static Public Attributes</h2></td></tr>
-<tr class="memitem:a270f2e92582d5187be339eeda8e2b276"><td class="memItemLeft" align="right" valign="top">static constexpr uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276">Major</a> = OBOE_VERSION_MAJOR</td></tr>
+<tr class="memitem:a270f2e92582d5187be339eeda8e2b276"><td class="memItemLeft" align="right" valign="top">static constexpr uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00065.html#a270f2e92582d5187be339eeda8e2b276">Major</a> = OBOE_VERSION_MAJOR</td></tr>
 <tr class="separator:a270f2e92582d5187be339eeda8e2b276"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae460bb95e3a9099696205a35fffb5469"><td class="memItemLeft" align="right" valign="top">static constexpr uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469">Minor</a> = OBOE_VERSION_MINOR</td></tr>
+<tr class="memitem:ae460bb95e3a9099696205a35fffb5469"><td class="memItemLeft" align="right" valign="top">static constexpr uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00065.html#ae460bb95e3a9099696205a35fffb5469">Minor</a> = OBOE_VERSION_MINOR</td></tr>
 <tr class="separator:ae460bb95e3a9099696205a35fffb5469"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a690110f2b3e887892da8f29ab5c057b2"><td class="memItemLeft" align="right" valign="top">static constexpr uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a> = OBOE_VERSION_PATCH</td></tr>
+<tr class="memitem:a690110f2b3e887892da8f29ab5c057b2"><td class="memItemLeft" align="right" valign="top">static constexpr uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00065.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a> = OBOE_VERSION_PATCH</td></tr>
 <tr class="separator:a690110f2b3e887892da8f29ab5c057b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2c86e578b827fbca5f40c460a7754503"><td class="memItemLeft" align="right" valign="top">static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503">Text</a> = OBOE_VERSION_TEXT</td></tr>
+<tr class="memitem:a2c86e578b827fbca5f40c460a7754503"><td class="memItemLeft" align="right" valign="top">static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00065.html#a2c86e578b827fbca5f40c460a7754503">Text</a> = OBOE_VERSION_TEXT</td></tr>
 <tr class="separator:a2c86e578b827fbca5f40c460a7754503"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac579661e79bcee45dc676d4647891de0"><td class="memItemLeft" align="right" valign="top">static constexpr uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER</td></tr>
+<tr class="memitem:ac579661e79bcee45dc676d4647891de0"><td class="memItemLeft" align="right" valign="top">static constexpr uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00065.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER</td></tr>
 <tr class="separator:ac579661e79bcee45dc676d4647891de0"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <h2 class="groupheader">Member Data Documentation</h2>
@@ -200,12 +200,12 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="structoboe_1_1_version.html">Version</a> string in the form MAJOR.MINOR.PATCH. </p>
+<p><a class="el" href="a00065.html">Version</a> string in the form MAJOR.MINOR.PATCH. </p>
 
 </div>
 </div>
 <hr/>The documentation for this struct was generated from the following file:<ul>
-<li>include/oboe/<a class="el" href="_version_8h_source.html">Version.h</a></li>
+<li>include/oboe/<a class="el" href="a00029_source.html">Version.h</a></li>
 </ul>
 </div><!-- contents -->
 <!-- start footer part -->
diff --git a/docs/reference/structoboe_1_1_version.html b/docs/reference/a00066.html
similarity index 89%
rename from docs/reference/structoboe_1_1_version.html
rename to docs/reference/a00066.html
index a4dc7f5..d96a5f6 100644
--- a/docs/reference/structoboe_1_1_version.html
+++ b/docs/reference/a00066.html
@@ -63,13 +63,13 @@
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="structoboe_1_1_version.html">Version</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00034.html">oboe</a></li><li class="navelem"><a class="el" href="a00066.html">Version</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="structoboe_1_1_version-members.html">List of all members</a>  </div>
+<a href="a00063.html">List of all members</a>  </div>
   <div class="headertitle">
 <div class="title">oboe::Version Struct Reference</div>  </div>
 </div><!--header-->
@@ -77,15 +77,15 @@
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
 Static Public Attributes</h2></td></tr>
-<tr class="memitem:a270f2e92582d5187be339eeda8e2b276"><td class="memItemLeft" align="right" valign="top">static constexpr uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276">Major</a> = OBOE_VERSION_MAJOR</td></tr>
+<tr class="memitem:a270f2e92582d5187be339eeda8e2b276"><td class="memItemLeft" align="right" valign="top">static constexpr uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00066.html#a270f2e92582d5187be339eeda8e2b276">Major</a> = OBOE_VERSION_MAJOR</td></tr>
 <tr class="separator:a270f2e92582d5187be339eeda8e2b276"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae460bb95e3a9099696205a35fffb5469"><td class="memItemLeft" align="right" valign="top">static constexpr uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469">Minor</a> = OBOE_VERSION_MINOR</td></tr>
+<tr class="memitem:ae460bb95e3a9099696205a35fffb5469"><td class="memItemLeft" align="right" valign="top">static constexpr uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00066.html#ae460bb95e3a9099696205a35fffb5469">Minor</a> = OBOE_VERSION_MINOR</td></tr>
 <tr class="separator:ae460bb95e3a9099696205a35fffb5469"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a690110f2b3e887892da8f29ab5c057b2"><td class="memItemLeft" align="right" valign="top">static constexpr uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a> = OBOE_VERSION_PATCH</td></tr>
+<tr class="memitem:a690110f2b3e887892da8f29ab5c057b2"><td class="memItemLeft" align="right" valign="top">static constexpr uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00066.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a> = OBOE_VERSION_PATCH</td></tr>
 <tr class="separator:a690110f2b3e887892da8f29ab5c057b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2c86e578b827fbca5f40c460a7754503"><td class="memItemLeft" align="right" valign="top">static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503">Text</a> = OBOE_VERSION_TEXT</td></tr>
+<tr class="memitem:a2c86e578b827fbca5f40c460a7754503"><td class="memItemLeft" align="right" valign="top">static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00066.html#a2c86e578b827fbca5f40c460a7754503">Text</a> = OBOE_VERSION_TEXT</td></tr>
 <tr class="separator:a2c86e578b827fbca5f40c460a7754503"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac579661e79bcee45dc676d4647891de0"><td class="memItemLeft" align="right" valign="top">static constexpr uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER</td></tr>
+<tr class="memitem:ac579661e79bcee45dc676d4647891de0"><td class="memItemLeft" align="right" valign="top">static constexpr uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00066.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER</td></tr>
 <tr class="separator:ac579661e79bcee45dc676d4647891de0"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <h2 class="groupheader">Member Data Documentation</h2>
@@ -200,12 +200,12 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="structoboe_1_1_version.html">Version</a> string in the form MAJOR.MINOR.PATCH. </p>
+<p><a class="el" href="a00066.html">Version</a> string in the form MAJOR.MINOR.PATCH. </p>
 
 </div>
 </div>
 <hr/>The documentation for this struct was generated from the following file:<ul>
-<li>include/oboe/<a class="el" href="_version_8h_source.html">Version.h</a></li>
+<li>include/oboe/<a class="el" href="a00029_source.html">Version.h</a></li>
 </ul>
 </div><!-- contents -->
 <!-- start footer part -->
diff --git a/docs/reference/classoboe_1_1_audio_stream-members.html b/docs/reference/classoboe_1_1_audio_stream-members.html
deleted file mode 100644
index 4d73bb2..0000000
--- a/docs/reference/classoboe_1_1_audio_stream-members.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">oboe::AudioStream Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStream</b>() (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStream</b>(const AudioStreamBuilder &amp;builder) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fireCallback</b>(void *audioData, int numFrames) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>flush</b>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() const =0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getBytesPerFrame</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getBytesPerSample</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getFramesRead</b>() (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a47bb5798275f14d76444283a6b6f35eb">getState</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getTimestamp</b>(clockid_t clockId, int64_t *framePosition, int64_t *timeNanoseconds) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>incrementFramesRead</b>(int32_t frames) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>incrementFramesWritten</b>(int32_t frames) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>isPlaying</b>() (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() const =0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesRead</b> (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesWritten</b> (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mNativeFormat</b> (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a>(void *audioData, int numFrames)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">open</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pause</b>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>read</b>(void *buffer, int32_t numFrames, int64_t timeoutNanoseconds) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>requestFlush</b>()=0 (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>requestPause</b>()=0 (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>requestStart</b>()=0 (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>requestStop</b>()=0 (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ac93b18e18487e809151f63ec3c6228bb">setBufferSizeInFrames</a>(int32_t requestedFrames)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNativeFormat</b>(AudioFormat format) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>start</b>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>stop</b>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ab3f6bf8abed87f3804ac4df3472c3670">write</a>(const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStream</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream.html b/docs/reference/classoboe_1_1_audio_stream.html
deleted file mode 100644
index 4769497..0000000
--- a/docs/reference/classoboe_1_1_audio_stream.html
+++ /dev/null
@@ -1,843 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: oboe::AudioStream Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
-<a href="#pro-attribs">Protected Attributes</a> &#124;
-<a href="classoboe_1_1_audio_stream-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">oboe::AudioStream Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p><code>#include &lt;<a class="el" href="_audio_stream_8h_source.html">AudioStream.h</a>&gt;</code></p>
-<div class="dynheader">
-Inheritance diagram for oboe::AudioStream:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="classoboe_1_1_audio_stream.png" usemap="#oboe::AudioStream_map" alt=""/>
-  <map id="oboe::AudioStream_map" name="oboe::AudioStream_map">
-<area href="classoboe_1_1_audio_stream_base.html" alt="oboe::AudioStreamBase" shape="rect" coords="0,0,146,24"/>
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a8ebb587a07bf62c864fd62c63b241fd4"><td class="memItemLeft" align="right" valign="top"><a id="a8ebb587a07bf62c864fd62c63b241fd4"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>AudioStream</b> (const <a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> &amp;builder)</td></tr>
-<tr class="separator:a8ebb587a07bf62c864fd62c63b241fd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a686c6ce8a29051c858fd1de386805dc6"><td class="memItemLeft" align="right" valign="top">virtual Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">open</a> ()</td></tr>
-<tr class="separator:a686c6ce8a29051c858fd1de386805dc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad33a20f0d6792e322b9d8a2bcf14fcf8"><td class="memItemLeft" align="right" valign="top">virtual Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">close</a> ()=0</td></tr>
-<tr class="separator:ad33a20f0d6792e322b9d8a2bcf14fcf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af04f03eb6b64b564f1c4401688987d21"><td class="memItemLeft" align="right" valign="top"><a id="af04f03eb6b64b564f1c4401688987d21"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>start</b> (int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td></tr>
-<tr class="separator:af04f03eb6b64b564f1c4401688987d21"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a04f29836748a8e5842aef2be200022ad"><td class="memItemLeft" align="right" valign="top"><a id="a04f29836748a8e5842aef2be200022ad"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>pause</b> (int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td></tr>
-<tr class="separator:a04f29836748a8e5842aef2be200022ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a32c25c0333eab3d65ce02275ad4acb3d"><td class="memItemLeft" align="right" valign="top"><a id="a32c25c0333eab3d65ce02275ad4acb3d"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>flush</b> (int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td></tr>
-<tr class="separator:a32c25c0333eab3d65ce02275ad4acb3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aec093859d42f0470c884edd1e976d9f3"><td class="memItemLeft" align="right" valign="top"><a id="aec093859d42f0470c884edd1e976d9f3"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>stop</b> (int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td></tr>
-<tr class="separator:aec093859d42f0470c884edd1e976d9f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3c484e314dee8dfed1d419f487b5d601"><td class="memItemLeft" align="right" valign="top"><a id="a3c484e314dee8dfed1d419f487b5d601"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>requestStart</b> ()=0</td></tr>
-<tr class="separator:a3c484e314dee8dfed1d419f487b5d601"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7f18bb3cc5490fd7fbc1f6da63c730f6"><td class="memItemLeft" align="right" valign="top"><a id="a7f18bb3cc5490fd7fbc1f6da63c730f6"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>requestPause</b> ()=0</td></tr>
-<tr class="separator:a7f18bb3cc5490fd7fbc1f6da63c730f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6bd5d633ff999e4da1faf3cd949aa602"><td class="memItemLeft" align="right" valign="top"><a id="a6bd5d633ff999e4da1faf3cd949aa602"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>requestFlush</b> ()=0</td></tr>
-<tr class="separator:a6bd5d633ff999e4da1faf3cd949aa602"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a820e634f741e6b5efdcef8104cecb919"><td class="memItemLeft" align="right" valign="top"><a id="a820e634f741e6b5efdcef8104cecb919"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>requestStop</b> ()=0</td></tr>
-<tr class="separator:a820e634f741e6b5efdcef8104cecb919"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a47bb5798275f14d76444283a6b6f35eb"><td class="memItemLeft" align="right" valign="top">virtual StreamState&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a47bb5798275f14d76444283a6b6f35eb">getState</a> ()=0</td></tr>
-<tr class="separator:a47bb5798275f14d76444283a6b6f35eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0c865a5501f369d959c39d8ab8b46a07"><td class="memItemLeft" align="right" valign="top">virtual Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a> (StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</td></tr>
-<tr class="separator:a0c865a5501f369d959c39d8ab8b46a07"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac93b18e18487e809151f63ec3c6228bb"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt; int32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#ac93b18e18487e809151f63ec3c6228bb">setBufferSizeInFrames</a> (int32_t requestedFrames)</td></tr>
-<tr class="separator:ac93b18e18487e809151f63ec3c6228bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad1a1d3bbf3b348ed92b7ed18ce9cc261"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt; int32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a> () const</td></tr>
-<tr class="separator:ad1a1d3bbf3b348ed92b7ed18ce9cc261"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a43d8a098440cde28f4ee8bedd6d107c4"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a> () const =0</td></tr>
-<tr class="separator:a43d8a098440cde28f4ee8bedd6d107c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac160acb656515814fa6fdd157c131a0a"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a> ()=0</td></tr>
-<tr class="separator:ac160acb656515814fa6fdd157c131a0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad5260e2cc71108b1b2e694bf6162279f"><td class="memItemLeft" align="right" valign="top"><a id="ad5260e2cc71108b1b2e694bf6162279f"></a>
-bool&#160;</td><td class="memItemRight" valign="bottom"><b>isPlaying</b> ()</td></tr>
-<tr class="separator:ad5260e2cc71108b1b2e694bf6162279f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5c01907a59d5f89a5e4b819fe66b08bc"><td class="memItemLeft" align="right" valign="top"><a id="a5c01907a59d5f89a5e4b819fe66b08bc"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getBytesPerFrame</b> () const</td></tr>
-<tr class="separator:a5c01907a59d5f89a5e4b819fe66b08bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a44dda61e6e948e49b68f87172f084d62"><td class="memItemLeft" align="right" valign="top"><a id="a44dda61e6e948e49b68f87172f084d62"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getBytesPerSample</b> () const</td></tr>
-<tr class="separator:a44dda61e6e948e49b68f87172f084d62"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab43dd4074e1de57bac1c3fd111430341"><td class="memItemLeft" align="right" valign="top">virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a> ()</td></tr>
-<tr class="separator:ab43dd4074e1de57bac1c3fd111430341"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aeebfc59abd978cd6dff07c16cfe266df"><td class="memItemLeft" align="right" valign="top"><a id="aeebfc59abd978cd6dff07c16cfe266df"></a>
-virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>getFramesRead</b> ()</td></tr>
-<tr class="separator:aeebfc59abd978cd6dff07c16cfe266df"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae023cb001f3261d064f423101798d6be"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a> ()</td></tr>
-<tr class="separator:ae023cb001f3261d064f423101798d6be"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d7cf4e43fb9d7b31857a90d9eceee6d"><td class="memItemLeft" align="right" valign="top"><a id="a1d7cf4e43fb9d7b31857a90d9eceee6d"></a>
-virtual Result&#160;</td><td class="memItemRight" valign="bottom"><b>getTimestamp</b> (clockid_t clockId, int64_t *framePosition, int64_t *timeNanoseconds)</td></tr>
-<tr class="separator:a1d7cf4e43fb9d7b31857a90d9eceee6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab3f6bf8abed87f3804ac4df3472c3670"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt; int32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#ab3f6bf8abed87f3804ac4df3472c3670">write</a> (const void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</td></tr>
-<tr class="separator:ab3f6bf8abed87f3804ac4df3472c3670"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acbf3933af829313d281b5455053338da"><td class="memItemLeft" align="right" valign="top"><a id="acbf3933af829313d281b5455053338da"></a>
-virtual <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt; int32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>read</b> (void *buffer, int32_t numFrames, int64_t timeoutNanoseconds)</td></tr>
-<tr class="separator:acbf3933af829313d281b5455053338da"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2b7a3cee7444114843dbdd1fc705f6bb"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a> () const =0</td></tr>
-<tr class="separator:a2b7a3cee7444114843dbdd1fc705f6bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a15cdaaaa4c1e8da322d6da33334c8147"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a> () const</td></tr>
-<tr class="separator:a15cdaaaa4c1e8da322d6da33334c8147"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5458d7130415eb4defe3dbc11d479e2f"><td class="memItemLeft" align="right" valign="top">virtual void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a> () const</td></tr>
-<tr class="separator:a5458d7130415eb4defe3dbc11d479e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="inherit_header pub_methods_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="aa6b103e1b0f808bbc4949d56f0829f98"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>AudioStreamBase</b> (const <a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &amp;)=default</td></tr>
-<tr class="separator:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="aa9c987a59555d7a60b9f7a63f4afc7fc"></a>
-<a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &amp;)=default</td></tr>
-<tr class="separator:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa0b0a068097efaf967fb235c55383dd8 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a> () const</td></tr>
-<tr class="separator:aa0b0a068097efaf967fb235c55383dd8 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">Direction&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a> () const</td></tr>
-<tr class="separator:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a> () const</td></tr>
-<tr class="separator:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1c133e1949f0814f60bd8bb61346756b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a> () const</td></tr>
-<tr class="separator:a1c133e1949f0814f60bd8bb61346756b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
-<tr class="separator:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a> ()</td></tr>
-<tr class="separator:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1531253e64aaebe9e9eddbafb9098fc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a> () const</td></tr>
-<tr class="separator:ab1531253e64aaebe9e9eddbafb9098fc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a1fb033fc963f971bd1aa8f6707e49b41"></a>
-<a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSharingMode</b> () const</td></tr>
-<tr class="separator:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a2ddb935de0e24dd7ae8e2cfbecac9fdc"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>getPerformanceMode</b> () const</td></tr>
-<tr class="separator:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a093057d625bc896864b959974c265f21 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a093057d625bc896864b959974c265f21"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDeviceId</b> () const</td></tr>
-<tr class="separator:a093057d625bc896864b959974c265f21 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a1b4a2a191546708da657510c3cd6b797"></a>
-<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>getCallback</b> () const</td></tr>
-<tr class="separator:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a0bcfb2f8bd11c92b541fd910da9af397"></a>
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getUsage</b> () const</td></tr>
-<tr class="separator:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ab12e2d068fa87e0553b01a400d96eb82"></a>
-<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getContentType</b> () const</td></tr>
-<tr class="separator:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a5c773b93b8aa38191c7199cab023428a"></a>
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getInputPreset</b> () const</td></tr>
-<tr class="separator:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="aa3c502ce09bbad7690a2dd6acaf8892e"></a>
-<a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSessionId</b> () const</td></tr>
-<tr class="separator:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:ad6b4c63f6ed1ecb509f7b80352a9c0bd"><td class="memItemLeft" align="right" valign="top"><a id="ad6b4c63f6ed1ecb509f7b80352a9c0bd"></a>
-virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>incrementFramesWritten</b> (int32_t frames)</td></tr>
-<tr class="separator:ad6b4c63f6ed1ecb509f7b80352a9c0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a81568482a217b314498e2501210758d7"><td class="memItemLeft" align="right" valign="top"><a id="a81568482a217b314498e2501210758d7"></a>
-virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>incrementFramesRead</b> (int32_t frames)</td></tr>
-<tr class="separator:a81568482a217b314498e2501210758d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8adbacd6a55a94a532916ab037fba1d6"><td class="memItemLeft" align="right" valign="top">virtual Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a> (StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</td></tr>
-<tr class="separator:a8adbacd6a55a94a532916ab037fba1d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abda7ae8e6832030572785de3964ed848"><td class="memItemLeft" align="right" valign="top">virtual DataCallbackResult&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#abda7ae8e6832030572785de3964ed848">onDefaultCallback</a> (void *audioData, int numFrames)</td></tr>
-<tr class="separator:abda7ae8e6832030572785de3964ed848"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0c4fd19b01a4ef750dd9d6ae3a512eda"><td class="memItemLeft" align="right" valign="top"><a id="a0c4fd19b01a4ef750dd9d6ae3a512eda"></a>
-DataCallbackResult&#160;</td><td class="memItemRight" valign="bottom"><b>fireCallback</b> (void *audioData, int numFrames)</td></tr>
-<tr class="separator:a0c4fd19b01a4ef750dd9d6ae3a512eda"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab01c37fca9110e916a482a909f5cc82d"><td class="memItemLeft" align="right" valign="top"><a id="ab01c37fca9110e916a482a909f5cc82d"></a>
-virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>setNativeFormat</b> (AudioFormat format)</td></tr>
-<tr class="separator:ab01c37fca9110e916a482a909f5cc82d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:a07ed6b5e5bd4bc276bc1e1fc08e51d60"><td class="memItemLeft" align="right" valign="top"><a id="a07ed6b5e5bd4bc276bc1e1fc08e51d60"></a>
-AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><b>mNativeFormat</b> = AudioFormat::Invalid</td></tr>
-<tr class="separator:a07ed6b5e5bd4bc276bc1e1fc08e51d60"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa88d2a712b91a8b763f2721d78480ba8"><td class="memItemLeft" align="right" valign="top"><a id="aa88d2a712b91a8b763f2721d78480ba8"></a>
-int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesWritten</b> = 0</td></tr>
-<tr class="separator:aa88d2a712b91a8b763f2721d78480ba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2b9124ba3b0f564fa58b0651438250e7"><td class="memItemLeft" align="right" valign="top"><a id="a2b9124ba3b0f564fa58b0651438250e7"></a>
-int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesRead</b> = 0</td></tr>
-<tr class="separator:a2b9124ba3b0f564fa58b0651438250e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="inherit_header pro_attribs_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ae3f72318212dd9977d7fa0ced92c91f4"></a>
-<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>mStreamCallback</b> = nullptr</td></tr>
-<tr class="separator:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a3962eb94420ad0ecea70029236001899"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerCallback</b> = kUnspecified</td></tr>
-<tr class="separator:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a5ff460bac9d14dfeac4eeddfcbb6e206"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mChannelCount</b> = kUnspecified</td></tr>
-<tr class="separator:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a998885bb6c4f37e145f4626ad4177dea"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mSampleRate</b> = kUnspecified</td></tr>
-<tr class="separator:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a23dafa12fb1a6242b088ebd5a52798c8"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mDeviceId</b> = kUnspecified</td></tr>
-<tr class="separator:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ac81d4719b350f8138aad1af38f0873b6"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferCapacityInFrames</b> = kUnspecified</td></tr>
-<tr class="separator:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a3b65595d26d1eae1b8ce9925a5b98f6a"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferSizeInFrames</b> = kUnspecified</td></tr>
-<tr class="separator:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54061319ed348329a29d883a5de2482e inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a54061319ed348329a29d883a5de2482e"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerBurst</b> = kUnspecified</td></tr>
-<tr class="separator:a54061319ed348329a29d883a5de2482e inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9187492b679c97a0963e264954be473 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ae9187492b679c97a0963e264954be473"></a>
-<a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSharingMode</b> = <a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td></tr>
-<tr class="separator:ae9187492b679c97a0963e264954be473 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a7869f04836c2c2bdc10c7309ad4b8e09"></a>
-AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><b>mFormat</b> = AudioFormat::Unspecified</td></tr>
-<tr class="separator:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a26e9294721561d3b16bcaeec5faf4880"></a>
-Direction&#160;</td><td class="memItemRight" valign="bottom"><b>mDirection</b> = Direction::Output</td></tr>
-<tr class="separator:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ab99671c2d0552557e75dc7b4afe91765"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>mPerformanceMode</b> = PerformanceMode::None</td></tr>
-<tr class="separator:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a5b518e82f39c9fcbd7050fd66adb253c"></a>
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mUsage</b> = <a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td></tr>
-<tr class="separator:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a5f8f0e5add381b841856de80ea4cdb2b"></a>
-<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mContentType</b> = ContentType::Music</td></tr>
-<tr class="separator:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a1e5d4f5b30c4cc36f81ffd858cc00589"></a>
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mInputPreset</b> = InputPreset::VoiceRecognition</td></tr>
-<tr class="separator:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="abe1c1e9cada1ced9b5c1504ac9b07737"></a>
-<a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSessionId</b> = SessionId::None</td></tr>
-<tr class="separator:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Base class for Oboe C++ audio stream. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a id="ae023cb001f3261d064f423101798d6be"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae023cb001f3261d064f423101798d6be">&#9670;&nbsp;</a></span>calculateLatencyMillis()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt;double&gt; oboe::AudioStream::calculateLatencyMillis </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Calculate the latency of a stream based on getTimestamp().</p>
-<p>Output latency is the time it takes for a given frame to travel from the app to some type of digital-to-analog converter. If the DAC is external, for example in a USB interface or a TV connected by HDMI, then there may be additional latency that the Android device is unaware of.</p>
-<p>Input latency is the time it takes to a given frame to travel from an analog-to-digital converter (ADC) to the app.</p>
-<p>Note that the latency of an OUTPUT stream will increase abruptly when you write data to it and then decrease slowly over time as the data is consumed.</p>
-<p>The latency of an INPUT stream will decrease abruptly when you read data from it and then increase slowly over time as more data arrives.</p>
-<p>The latency of an OUTPUT stream is generally higher than the INPUT latency because an app generally tries to keep the OUTPUT buffer full and the INPUT buffer empty.</p>
-<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> which has a result of Result::OK and a value containing the latency in milliseconds, or a result of Result::Error*. </dd></dl>
-
-</div>
-</div>
-<a id="ad33a20f0d6792e322b9d8a2bcf14fcf8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad33a20f0d6792e322b9d8a2bcf14fcf8">&#9670;&nbsp;</a></span>close()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual Result oboe::AudioStream::close </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Close the stream and deallocate any resources from the <a class="el" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">open()</a> call. </p>
-
-</div>
-</div>
-<a id="a2b7a3cee7444114843dbdd1fc705f6bb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2b7a3cee7444114843dbdd1fc705f6bb">&#9670;&nbsp;</a></span>getAudioApi()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual <a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> oboe::AudioStream::getAudioApi </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>the API that this stream uses </dd></dl>
-
-</div>
-</div>
-<a id="ac160acb656515814fa6fdd157c131a0a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac160acb656515814fa6fdd157c131a0a">&#9670;&nbsp;</a></span>getFramesPerBurst()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual int32_t oboe::AudioStream::getFramesPerBurst </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Query the number of frames that are read or written by the endpoint at one time.</p>
-<dl class="section return"><dt>Returns</dt><dd>burst size </dd></dl>
-
-</div>
-</div>
-<a id="ab43dd4074e1de57bac1c3fd111430341"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab43dd4074e1de57bac1c3fd111430341">&#9670;&nbsp;</a></span>getFramesWritten()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual int64_t oboe::AudioStream::getFramesWritten </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>This monotonic counter will never get reset. </p><dl class="section return"><dt>Returns</dt><dd>the number of frames written so far </dd></dl>
-
-</div>
-</div>
-<a id="a47bb5798275f14d76444283a6b6f35eb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a47bb5798275f14d76444283a6b6f35eb">&#9670;&nbsp;</a></span>getState()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual StreamState oboe::AudioStream::getState </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Query the current state, eg. StreamState::Pausing</p>
-<dl class="section return"><dt>Returns</dt><dd>state or a negative error. </dd></dl>
-
-</div>
-</div>
-<a id="a5458d7130415eb4defe3dbc11d479e2f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5458d7130415eb4defe3dbc11d479e2f">&#9670;&nbsp;</a></span>getUnderlyingStream()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual void* oboe::AudioStream::getUnderlyingStream </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Do not use this for production. This is only for debugging. If you need to call this method then something is wrong. If you think you need it for production then please let us know so we can modify Oboe so that you don't need this.</p>
-<dl class="section return"><dt>Returns</dt><dd>nullptr or a pointer to a stream from the system API </dd></dl>
-
-</div>
-</div>
-<a id="ad1a1d3bbf3b348ed92b7ed18ce9cc261"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad1a1d3bbf3b348ed92b7ed18ce9cc261">&#9670;&nbsp;</a></span>getXRunCount()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt;int32_t&gt; oboe::AudioStream::getXRunCount </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>An XRun is an Underrun or an Overrun. During playing, an underrun will occur if the stream is not written in time and the system runs out of valid data. During recording, an overrun will occur if the stream is not read in time and there is no place to put the incoming data so it is discarded.</p>
-<p>An underrun or overrun can cause an audible "pop" or "glitch".</p>
-<dl class="section return"><dt>Returns</dt><dd>a result which is either Result::OK with the xRun count as the value, or a Result::Error* code </dd></dl>
-
-</div>
-</div>
-<a id="a43d8a098440cde28f4ee8bedd6d107c4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a43d8a098440cde28f4ee8bedd6d107c4">&#9670;&nbsp;</a></span>isXRunCountSupported()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual bool oboe::AudioStream::isXRunCountSupported </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>true if XRun counts are supported on the stream </dd></dl>
-
-</div>
-</div>
-<a id="abda7ae8e6832030572785de3964ed848"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abda7ae8e6832030572785de3964ed848">&#9670;&nbsp;</a></span>onDefaultCallback()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual DataCallbackResult oboe::AudioStream::onDefaultCallback </td>
-          <td>(</td>
-          <td class="paramtype">void *&#160;</td>
-          <td class="paramname"><em>audioData</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>numFrames</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Override this to provide a default for when the application did not specify a callback.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">audioData</td><td></td></tr>
-    <tr><td class="paramname">numFrames</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>result </dd></dl>
-
-</div>
-</div>
-<a id="a686c6ce8a29051c858fd1de386805dc6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a686c6ce8a29051c858fd1de386805dc6">&#9670;&nbsp;</a></span>open()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual Result oboe::AudioStream::open </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Open a stream based on the current settings.</p>
-<p>Note that we do not recommend re-opening a stream that has been closed. TODO Should we prevent re-opening?</p>
-<dl class="section return"><dt>Returns</dt><dd></dd></dl>
-
-</div>
-</div>
-<a id="ac93b18e18487e809151f63ec3c6228bb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac93b18e18487e809151f63ec3c6228bb">&#9670;&nbsp;</a></span>setBufferSizeInFrames()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt;int32_t&gt; oboe::AudioStream::setBufferSizeInFrames </td>
-          <td>(</td>
-          <td class="paramtype">int32_t&#160;</td>
-          <td class="paramname"><em>requestedFrames</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>This can be used to adjust the latency of the buffer by changing the threshold where blocking will occur. By combining this with <a class="el" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount()</a>, the latency can be tuned at run-time for each device.</p>
-<p>This cannot be set higher than getBufferCapacity().</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">requestedFrames</td><td>requested number of frames that can be filled without blocking </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the resulting buffer size in frames (obtained using value()) or an error (obtained using error()) </dd></dl>
-
-</div>
-</div>
-<a id="a15cdaaaa4c1e8da322d6da33334c8147"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a15cdaaaa4c1e8da322d6da33334c8147">&#9670;&nbsp;</a></span>usesAAudio()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool oboe::AudioStream::usesAAudio </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>true if this stream is implemented using the AAudio API </dd></dl>
-
-</div>
-</div>
-<a id="a0c865a5501f369d959c39d8ab8b46a07"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0c865a5501f369d959c39d8ab8b46a07">&#9670;&nbsp;</a></span>waitForStateChange()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual Result oboe::AudioStream::waitForStateChange </td>
-          <td>(</td>
-          <td class="paramtype">StreamState&#160;</td>
-          <td class="paramname"><em>inputState</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">StreamState *&#160;</td>
-          <td class="paramname"><em>nextState</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int64_t&#160;</td>
-          <td class="paramname"><em>timeoutNanoseconds</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Wait until the stream's current state no longer matches the input state. The input state is passed to avoid race conditions caused by the state changing between calls.</p>
-<p>Note that generally applications do not need to call this. It is considered an advanced technique.</p>
-<pre><code>
-int64_t timeoutNanos = 500 * kNanosPerMillisecond; // arbitrary 1/2 second
-StreamState currentState = stream-&gt;<a class="el" href="classoboe_1_1_audio_stream.html#a47bb5798275f14d76444283a6b6f35eb">getState()</a>;
-StreamState nextState = StreamState::Unknown;
-while (result == Result::OK &amp;&amp; currentState != StreamState::Paused) {
-    result = stream-&gt;waitForStateChange(
-                                  currentState, &amp;nextState, timeoutNanos);
-    currentState = nextState;
-}
-</code></pre><dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">inputState</td><td>The state we want to avoid. </td></tr>
-    <tr><td class="paramname">nextState</td><td>Pointer to a variable that will be set to the new state. </td></tr>
-    <tr><td class="paramname">timeoutNanoseconds</td><td>The maximum time to wait in nanoseconds. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Result::OK or a Result::Error. </dd></dl>
-
-</div>
-</div>
-<a id="a8adbacd6a55a94a532916ab037fba1d6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8adbacd6a55a94a532916ab037fba1d6">&#9670;&nbsp;</a></span>waitForStateTransition()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual Result oboe::AudioStream::waitForStateTransition </td>
-          <td>(</td>
-          <td class="paramtype">StreamState&#160;</td>
-          <td class="paramname"><em>startingState</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">StreamState&#160;</td>
-          <td class="paramname"><em>endingState</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int64_t&#160;</td>
-          <td class="paramname"><em>timeoutNanoseconds</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Wait for a transition from one state to another. </p><dl class="section return"><dt>Returns</dt><dd>OK if the endingState was observed, or ErrorUnexpectedState if any state that was not the startingState or endingState was observed or ErrorTimeout. </dd></dl>
-
-</div>
-</div>
-<a id="ab3f6bf8abed87f3804ac4df3472c3670"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab3f6bf8abed87f3804ac4df3472c3670">&#9670;&nbsp;</a></span>write()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt;int32_t&gt; oboe::AudioStream::write </td>
-          <td>(</td>
-          <td class="paramtype">const void *&#160;</td>
-          <td class="paramname"><em>buffer</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int32_t&#160;</td>
-          <td class="paramname"><em>numFrames</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int64_t&#160;</td>
-          <td class="paramname"><em>timeoutNanoseconds</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>A high level write that will wait until the write is complete or it runs out of time. If timeoutNanoseconds is zero then this call will not wait.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">stream</td><td>A stream created using OboeStream_Open(). </td></tr>
-    <tr><td class="paramname">buffer</td><td>The address of the first sample. </td></tr>
-    <tr><td class="paramname">numFrames</td><td>Number of frames to write. Only complete frames will be written. </td></tr>
-    <tr><td class="paramname">timeoutNanoseconds</td><td>Maximum number of nanoseconds to wait for completion. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> which has a result of Result::OK and a value containing the number of frames actually written, or result of Result::Error*. </dd></dl>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>include/oboe/<a class="el" href="_audio_stream_8h_source.html">AudioStream.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_base-members.html b/docs/reference/classoboe_1_1_audio_stream_base-members.html
deleted file mode 100644
index 6a05845..0000000
--- a/docs/reference/classoboe_1_1_audio_stream_base-members.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">oboe::AudioStreamBase Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_base.html b/docs/reference/classoboe_1_1_audio_stream_base.html
deleted file mode 100644
index 31d7a97..0000000
--- a/docs/reference/classoboe_1_1_audio_stream_base.html
+++ /dev/null
@@ -1,388 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: oboe::AudioStreamBase Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pro-attribs">Protected Attributes</a> &#124;
-<a href="classoboe_1_1_audio_stream_base-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">oboe::AudioStreamBase Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p><code>#include &lt;<a class="el" href="_audio_stream_base_8h_source.html">AudioStreamBase.h</a>&gt;</code></p>
-<div class="dynheader">
-Inheritance diagram for oboe::AudioStreamBase:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="classoboe_1_1_audio_stream_base.png" usemap="#oboe::AudioStreamBase_map" alt=""/>
-  <map id="oboe::AudioStreamBase_map" name="oboe::AudioStreamBase_map">
-<area href="classoboe_1_1_audio_stream.html" alt="oboe::AudioStream" shape="rect" coords="0,56,158,80"/>
-<area href="classoboe_1_1_audio_stream_builder.html" alt="oboe::AudioStreamBuilder" shape="rect" coords="168,56,326,80"/>
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98"><td class="memItemLeft" align="right" valign="top"><a id="aa6b103e1b0f808bbc4949d56f0829f98"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>AudioStreamBase</b> (const <a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &amp;)=default</td></tr>
-<tr class="separator:aa6b103e1b0f808bbc4949d56f0829f98"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa9c987a59555d7a60b9f7a63f4afc7fc"><td class="memItemLeft" align="right" valign="top"><a id="aa9c987a59555d7a60b9f7a63f4afc7fc"></a>
-<a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &amp;)=default</td></tr>
-<tr class="separator:aa9c987a59555d7a60b9f7a63f4afc7fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa0b0a068097efaf967fb235c55383dd8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a> () const</td></tr>
-<tr class="separator:aa0b0a068097efaf967fb235c55383dd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f86f2233a04c5a0b056f0c1c261f1b1"><td class="memItemLeft" align="right" valign="top">Direction&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a> () const</td></tr>
-<tr class="separator:a6f86f2233a04c5a0b056f0c1c261f1b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9d32f3e09174bad69e74f147ee33087"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a> () const</td></tr>
-<tr class="separator:ae9d32f3e09174bad69e74f147ee33087"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1c133e1949f0814f60bd8bb61346756b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a> () const</td></tr>
-<tr class="separator:a1c133e1949f0814f60bd8bb61346756b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86"><td class="memItemLeft" align="right" valign="top">AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
-<tr class="separator:ab1e640461d7bf9d596decb913da7ac86"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af5217ab05bfde0d7637024b599302d0b"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a> ()</td></tr>
-<tr class="separator:af5217ab05bfde0d7637024b599302d0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1531253e64aaebe9e9eddbafb9098fc"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a> () const</td></tr>
-<tr class="separator:ab1531253e64aaebe9e9eddbafb9098fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fb033fc963f971bd1aa8f6707e49b41"><td class="memItemLeft" align="right" valign="top"><a id="a1fb033fc963f971bd1aa8f6707e49b41"></a>
-<a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSharingMode</b> () const</td></tr>
-<tr class="separator:a1fb033fc963f971bd1aa8f6707e49b41"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2ddb935de0e24dd7ae8e2cfbecac9fdc"><td class="memItemLeft" align="right" valign="top"><a id="a2ddb935de0e24dd7ae8e2cfbecac9fdc"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>getPerformanceMode</b> () const</td></tr>
-<tr class="separator:a2ddb935de0e24dd7ae8e2cfbecac9fdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a093057d625bc896864b959974c265f21"><td class="memItemLeft" align="right" valign="top"><a id="a093057d625bc896864b959974c265f21"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDeviceId</b> () const</td></tr>
-<tr class="separator:a093057d625bc896864b959974c265f21"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b4a2a191546708da657510c3cd6b797"><td class="memItemLeft" align="right" valign="top"><a id="a1b4a2a191546708da657510c3cd6b797"></a>
-<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>getCallback</b> () const</td></tr>
-<tr class="separator:a1b4a2a191546708da657510c3cd6b797"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397"><td class="memItemLeft" align="right" valign="top"><a id="a0bcfb2f8bd11c92b541fd910da9af397"></a>
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getUsage</b> () const</td></tr>
-<tr class="separator:a0bcfb2f8bd11c92b541fd910da9af397"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82"><td class="memItemLeft" align="right" valign="top"><a id="ab12e2d068fa87e0553b01a400d96eb82"></a>
-<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getContentType</b> () const</td></tr>
-<tr class="separator:ab12e2d068fa87e0553b01a400d96eb82"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5c773b93b8aa38191c7199cab023428a"><td class="memItemLeft" align="right" valign="top"><a id="a5c773b93b8aa38191c7199cab023428a"></a>
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getInputPreset</b> () const</td></tr>
-<tr class="separator:a5c773b93b8aa38191c7199cab023428a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3c502ce09bbad7690a2dd6acaf8892e"><td class="memItemLeft" align="right" valign="top"><a id="aa3c502ce09bbad7690a2dd6acaf8892e"></a>
-<a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSessionId</b> () const</td></tr>
-<tr class="separator:aa3c502ce09bbad7690a2dd6acaf8892e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4"><td class="memItemLeft" align="right" valign="top"><a id="ae3f72318212dd9977d7fa0ced92c91f4"></a>
-<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>mStreamCallback</b> = nullptr</td></tr>
-<tr class="separator:ae3f72318212dd9977d7fa0ced92c91f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3962eb94420ad0ecea70029236001899"><td class="memItemLeft" align="right" valign="top"><a id="a3962eb94420ad0ecea70029236001899"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerCallback</b> = kUnspecified</td></tr>
-<tr class="separator:a3962eb94420ad0ecea70029236001899"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206"><td class="memItemLeft" align="right" valign="top"><a id="a5ff460bac9d14dfeac4eeddfcbb6e206"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mChannelCount</b> = kUnspecified</td></tr>
-<tr class="separator:a5ff460bac9d14dfeac4eeddfcbb6e206"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a998885bb6c4f37e145f4626ad4177dea"><td class="memItemLeft" align="right" valign="top"><a id="a998885bb6c4f37e145f4626ad4177dea"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mSampleRate</b> = kUnspecified</td></tr>
-<tr class="separator:a998885bb6c4f37e145f4626ad4177dea"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a23dafa12fb1a6242b088ebd5a52798c8"><td class="memItemLeft" align="right" valign="top"><a id="a23dafa12fb1a6242b088ebd5a52798c8"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mDeviceId</b> = kUnspecified</td></tr>
-<tr class="separator:a23dafa12fb1a6242b088ebd5a52798c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac81d4719b350f8138aad1af38f0873b6"><td class="memItemLeft" align="right" valign="top"><a id="ac81d4719b350f8138aad1af38f0873b6"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferCapacityInFrames</b> = kUnspecified</td></tr>
-<tr class="separator:ac81d4719b350f8138aad1af38f0873b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3b65595d26d1eae1b8ce9925a5b98f6a"><td class="memItemLeft" align="right" valign="top"><a id="a3b65595d26d1eae1b8ce9925a5b98f6a"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferSizeInFrames</b> = kUnspecified</td></tr>
-<tr class="separator:a3b65595d26d1eae1b8ce9925a5b98f6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54061319ed348329a29d883a5de2482e"><td class="memItemLeft" align="right" valign="top"><a id="a54061319ed348329a29d883a5de2482e"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerBurst</b> = kUnspecified</td></tr>
-<tr class="separator:a54061319ed348329a29d883a5de2482e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9187492b679c97a0963e264954be473"><td class="memItemLeft" align="right" valign="top"><a id="ae9187492b679c97a0963e264954be473"></a>
-<a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSharingMode</b> = <a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td></tr>
-<tr class="separator:ae9187492b679c97a0963e264954be473"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7869f04836c2c2bdc10c7309ad4b8e09"><td class="memItemLeft" align="right" valign="top"><a id="a7869f04836c2c2bdc10c7309ad4b8e09"></a>
-AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><b>mFormat</b> = AudioFormat::Unspecified</td></tr>
-<tr class="separator:a7869f04836c2c2bdc10c7309ad4b8e09"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26e9294721561d3b16bcaeec5faf4880"><td class="memItemLeft" align="right" valign="top"><a id="a26e9294721561d3b16bcaeec5faf4880"></a>
-Direction&#160;</td><td class="memItemRight" valign="bottom"><b>mDirection</b> = Direction::Output</td></tr>
-<tr class="separator:a26e9294721561d3b16bcaeec5faf4880"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab99671c2d0552557e75dc7b4afe91765"><td class="memItemLeft" align="right" valign="top"><a id="ab99671c2d0552557e75dc7b4afe91765"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>mPerformanceMode</b> = PerformanceMode::None</td></tr>
-<tr class="separator:ab99671c2d0552557e75dc7b4afe91765"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5b518e82f39c9fcbd7050fd66adb253c"><td class="memItemLeft" align="right" valign="top"><a id="a5b518e82f39c9fcbd7050fd66adb253c"></a>
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mUsage</b> = <a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td></tr>
-<tr class="separator:a5b518e82f39c9fcbd7050fd66adb253c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f8f0e5add381b841856de80ea4cdb2b"><td class="memItemLeft" align="right" valign="top"><a id="a5f8f0e5add381b841856de80ea4cdb2b"></a>
-<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mContentType</b> = ContentType::Music</td></tr>
-<tr class="separator:a5f8f0e5add381b841856de80ea4cdb2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1e5d4f5b30c4cc36f81ffd858cc00589"><td class="memItemLeft" align="right" valign="top"><a id="a1e5d4f5b30c4cc36f81ffd858cc00589"></a>
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mInputPreset</b> = InputPreset::VoiceRecognition</td></tr>
-<tr class="separator:a1e5d4f5b30c4cc36f81ffd858cc00589"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abe1c1e9cada1ced9b5c1504ac9b07737"><td class="memItemLeft" align="right" valign="top"><a id="abe1c1e9cada1ced9b5c1504ac9b07737"></a>
-<a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSessionId</b> = SessionId::None</td></tr>
-<tr class="separator:abe1c1e9cada1ced9b5c1504ac9b07737"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Base class containing parameters for Oboe streams and builders.</p>
-<p>OboeStreamBuilder can return OBOE_UNSPECIFIED or the requested value.</p>
-<p>OboeStream will generally return the actual final value, but <a class="el" href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback()</a> can be unspecified even for a stream. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a id="ab1531253e64aaebe9e9eddbafb9098fc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab1531253e64aaebe9e9eddbafb9098fc">&#9670;&nbsp;</a></span>getBufferCapacityInFrames()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual int32_t oboe::AudioStreamBase::getBufferCapacityInFrames </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>capacityInFrames or OBOE_UNSPECIFIED </dd></dl>
-
-</div>
-</div>
-<a id="af5217ab05bfde0d7637024b599302d0b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af5217ab05bfde0d7637024b599302d0b">&#9670;&nbsp;</a></span>getBufferSizeInFrames()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual int32_t oboe::AudioStreamBase::getBufferSizeInFrames </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Query the maximum number of frames that can be filled without blocking. If the stream has been closed the last known value will be returned.</p>
-<dl class="section return"><dt>Returns</dt><dd>buffer size </dd></dl>
-
-</div>
-</div>
-<a id="aa0b0a068097efaf967fb235c55383dd8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa0b0a068097efaf967fb235c55383dd8">&#9670;&nbsp;</a></span>getChannelCount()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">int oboe::AudioStreamBase::getChannelCount </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>number of channels, for example 2 for stereo </dd></dl>
-
-</div>
-</div>
-<a id="a6f86f2233a04c5a0b056f0c1c261f1b1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6f86f2233a04c5a0b056f0c1c261f1b1">&#9670;&nbsp;</a></span>getDirection()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">Direction oboe::AudioStreamBase::getDirection </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>Direction::Input or Direction::Output </dd></dl>
-
-</div>
-</div>
-<a id="ab1e640461d7bf9d596decb913da7ac86"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab1e640461d7bf9d596decb913da7ac86">&#9670;&nbsp;</a></span>getFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">AudioFormat oboe::AudioStreamBase::getFormat </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>OBOE_AUDIO_FORMAT_PCM_FLOAT, OBOE_AUDIO_FORMAT_PCM_I16 or OBOE_AUDIO_FORMAT_UNSPECIFIED </dd></dl>
-
-</div>
-</div>
-<a id="a1c133e1949f0814f60bd8bb61346756b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1c133e1949f0814f60bd8bb61346756b">&#9670;&nbsp;</a></span>getFramesPerCallback()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">int oboe::AudioStreamBase::getFramesPerCallback </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>framesPerCallback or OBOE_UNSPECIFIED </dd></dl>
-
-</div>
-</div>
-<a id="ae9d32f3e09174bad69e74f147ee33087"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae9d32f3e09174bad69e74f147ee33087">&#9670;&nbsp;</a></span>getSampleRate()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">int32_t oboe::AudioStreamBase::getSampleRate </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>sample rate for the stream </dd></dl>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>include/oboe/<a class="el" href="_audio_stream_base_8h_source.html">AudioStreamBase.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_builder-members.html b/docs/reference/classoboe_1_1_audio_stream_builder-members.html
deleted file mode 100644
index 72e7f06..0000000
--- a/docs/reference/classoboe_1_1_audio_stream_builder-members.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">oboe::AudioStreamBuilder Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>AudioStreamBase</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBuilder</b>() (defined in <a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getAudioApi</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCallback</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getContentType</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeviceId</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getInputPreset</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPerformanceMode</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSessionId</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>getSharingMode</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getUsage</b>() const (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mBufferCapacityInFrames</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mBufferSizeInFrames</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelCount</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mContentType</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mDeviceId</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mDirection</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormat</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFramesPerBurst</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mFramesPerCallback</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mInputPreset</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mPerformanceMode</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRate</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mSessionId</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSharingMode</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mStreamCallback</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mUsage</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(AudioStream **stream)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const AudioStreamBase &amp;)=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(AudioApi audioApi)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(AudioStreamCallback *streamCallback)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(int channelCount)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(ContentType contentType)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a>(int32_t deviceId)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">setDirection</a>(Direction direction)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(AudioFormat format)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(int framesPerCallback)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a>(InputPreset inputPreset)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a>(PerformanceMode performanceMode)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a>(int32_t sampleRate)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d">setSessionId</a>(SessionId sessionId)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a>(SharingMode sharingMode)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a>(Usage usage)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_builder.html b/docs/reference/classoboe_1_1_audio_stream_builder.html
deleted file mode 100644
index aaa772f..0000000
--- a/docs/reference/classoboe_1_1_audio_stream_builder.html
+++ /dev/null
@@ -1,842 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: oboe::AudioStreamBuilder Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
-<a href="classoboe_1_1_audio_stream_builder-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">oboe::AudioStreamBuilder Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p><code>#include &lt;<a class="el" href="_audio_stream_builder_8h_source.html">AudioStreamBuilder.h</a>&gt;</code></p>
-<div class="dynheader">
-Inheritance diagram for oboe::AudioStreamBuilder:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="classoboe_1_1_audio_stream_builder.png" usemap="#oboe::AudioStreamBuilder_map" alt=""/>
-  <map id="oboe::AudioStreamBuilder_map" name="oboe::AudioStreamBuilder_map">
-<area href="classoboe_1_1_audio_stream_base.html" alt="oboe::AudioStreamBase" shape="rect" coords="0,0,158,24"/>
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a075d10291e1f998d90c2f73ef767b5a7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a> (int channelCount)</td></tr>
-<tr class="separator:a075d10291e1f998d90c2f73ef767b5a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab3fbd47b06197619c26393637e26354c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">setDirection</a> (Direction direction)</td></tr>
-<tr class="separator:ab3fbd47b06197619c26393637e26354c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a30ef3d5f51d56a9f980dc09600ed139d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a> (int32_t sampleRate)</td></tr>
-<tr class="separator:a30ef3d5f51d56a9f980dc09600ed139d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3f397821f61eabaeedaf31064c859a54"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a> (int framesPerCallback)</td></tr>
-<tr class="separator:a3f397821f61eabaeedaf31064c859a54"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a> (AudioFormat format)</td></tr>
-<tr class="separator:aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abaff480867af51ca0899bfa6fd7cc3ef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a> (int32_t bufferCapacityInFrames)</td></tr>
-<tr class="separator:abaff480867af51ca0899bfa6fd7cc3ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac9d41811c297fd28bc61833f640bb8d0"><td class="memItemLeft" align="right" valign="top"><a id="ac9d41811c297fd28bc61833f640bb8d0"></a>
-<a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAudioApi</b> () const</td></tr>
-<tr class="separator:ac9d41811c297fd28bc61833f640bb8d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a38c6d6c5e718df1e3ac69daaac47c391"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a> (<a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> audioApi)</td></tr>
-<tr class="separator:a38c6d6c5e718df1e3ac69daaac47c391"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3e991742acbbfb6fe5ebcf592c478654"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a> (<a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> sharingMode)</td></tr>
-<tr class="separator:a3e991742acbbfb6fe5ebcf592c478654"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6cd1d65612e844e59da71a68ea0ab3ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a> (PerformanceMode performanceMode)</td></tr>
-<tr class="separator:a6cd1d65612e844e59da71a68ea0ab3ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a593255a2f5eb972665775cfc5bc58f6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a> (<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> usage)</td></tr>
-<tr class="separator:a593255a2f5eb972665775cfc5bc58f6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6a17bafc217c2b624179fbbf77fe4468"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a> (<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a> contentType)</td></tr>
-<tr class="separator:a6a17bafc217c2b624179fbbf77fe4468"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a144a3d095fd668210282f1a91f23e1f0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a> (<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> inputPreset)</td></tr>
-<tr class="separator:a144a3d095fd668210282f1a91f23e1f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54c1651bdbe089d0d714af499e8a5f1d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d">setSessionId</a> (<a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> sessionId)</td></tr>
-<tr class="separator:a54c1651bdbe089d0d714af499e8a5f1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af36ddcd00686a9e1de661bdac0685a8e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a> (int32_t deviceId)</td></tr>
-<tr class="separator:af36ddcd00686a9e1de661bdac0685a8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a698cefa9af73bc97c020c004821fccbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a> (<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *streamCallback)</td></tr>
-<tr class="separator:a698cefa9af73bc97c020c004821fccbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a86b94cfa47729bef2e04dce1a9086074"><td class="memItemLeft" align="right" valign="top">Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> **stream)</td></tr>
-<tr class="separator:a86b94cfa47729bef2e04dce1a9086074"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="inherit_header pub_methods_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="aa6b103e1b0f808bbc4949d56f0829f98"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>AudioStreamBase</b> (const <a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &amp;)=default</td></tr>
-<tr class="separator:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="aa9c987a59555d7a60b9f7a63f4afc7fc"></a>
-<a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &amp;)=default</td></tr>
-<tr class="separator:aa9c987a59555d7a60b9f7a63f4afc7fc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa0b0a068097efaf967fb235c55383dd8 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa0b0a068097efaf967fb235c55383dd8">getChannelCount</a> () const</td></tr>
-<tr class="separator:aa0b0a068097efaf967fb235c55383dd8 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">Direction&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a> () const</td></tr>
-<tr class="separator:a6f86f2233a04c5a0b056f0c1c261f1b1 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a> () const</td></tr>
-<tr class="separator:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1c133e1949f0814f60bd8bb61346756b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1c133e1949f0814f60bd8bb61346756b">getFramesPerCallback</a> () const</td></tr>
-<tr class="separator:a1c133e1949f0814f60bd8bb61346756b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
-<tr class="separator:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a> ()</td></tr>
-<tr class="separator:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1531253e64aaebe9e9eddbafb9098fc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a> () const</td></tr>
-<tr class="separator:ab1531253e64aaebe9e9eddbafb9098fc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a1fb033fc963f971bd1aa8f6707e49b41"></a>
-<a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSharingMode</b> () const</td></tr>
-<tr class="separator:a1fb033fc963f971bd1aa8f6707e49b41 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a2ddb935de0e24dd7ae8e2cfbecac9fdc"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>getPerformanceMode</b> () const</td></tr>
-<tr class="separator:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a093057d625bc896864b959974c265f21 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a093057d625bc896864b959974c265f21"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDeviceId</b> () const</td></tr>
-<tr class="separator:a093057d625bc896864b959974c265f21 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a1b4a2a191546708da657510c3cd6b797"></a>
-<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>getCallback</b> () const</td></tr>
-<tr class="separator:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a0bcfb2f8bd11c92b541fd910da9af397"></a>
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getUsage</b> () const</td></tr>
-<tr class="separator:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ab12e2d068fa87e0553b01a400d96eb82"></a>
-<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getContentType</b> () const</td></tr>
-<tr class="separator:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a5c773b93b8aa38191c7199cab023428a"></a>
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getInputPreset</b> () const</td></tr>
-<tr class="separator:a5c773b93b8aa38191c7199cab023428a inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="aa3c502ce09bbad7690a2dd6acaf8892e"></a>
-<a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getSessionId</b> () const</td></tr>
-<tr class="separator:aa3c502ce09bbad7690a2dd6acaf8892e inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a18e7b5f7554a4c2ca763e35e8117d699"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a> ()</td></tr>
-<tr class="separator:a18e7b5f7554a4c2ca763e35e8117d699"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a622732bbe5c6577356d749f7dc2108df"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a> ()</td></tr>
-<tr class="separator:a622732bbe5c6577356d749f7dc2108df"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ae3f72318212dd9977d7fa0ced92c91f4"></a>
-<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>mStreamCallback</b> = nullptr</td></tr>
-<tr class="separator:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a3962eb94420ad0ecea70029236001899"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerCallback</b> = kUnspecified</td></tr>
-<tr class="separator:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a5ff460bac9d14dfeac4eeddfcbb6e206"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mChannelCount</b> = kUnspecified</td></tr>
-<tr class="separator:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a998885bb6c4f37e145f4626ad4177dea"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mSampleRate</b> = kUnspecified</td></tr>
-<tr class="separator:a998885bb6c4f37e145f4626ad4177dea inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a23dafa12fb1a6242b088ebd5a52798c8"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mDeviceId</b> = kUnspecified</td></tr>
-<tr class="separator:a23dafa12fb1a6242b088ebd5a52798c8 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ac81d4719b350f8138aad1af38f0873b6"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferCapacityInFrames</b> = kUnspecified</td></tr>
-<tr class="separator:ac81d4719b350f8138aad1af38f0873b6 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a3b65595d26d1eae1b8ce9925a5b98f6a"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mBufferSizeInFrames</b> = kUnspecified</td></tr>
-<tr class="separator:a3b65595d26d1eae1b8ce9925a5b98f6a inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54061319ed348329a29d883a5de2482e inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a54061319ed348329a29d883a5de2482e"></a>
-int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mFramesPerBurst</b> = kUnspecified</td></tr>
-<tr class="separator:a54061319ed348329a29d883a5de2482e inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9187492b679c97a0963e264954be473 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ae9187492b679c97a0963e264954be473"></a>
-<a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSharingMode</b> = <a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a></td></tr>
-<tr class="separator:ae9187492b679c97a0963e264954be473 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a7869f04836c2c2bdc10c7309ad4b8e09"></a>
-AudioFormat&#160;</td><td class="memItemRight" valign="bottom"><b>mFormat</b> = AudioFormat::Unspecified</td></tr>
-<tr class="separator:a7869f04836c2c2bdc10c7309ad4b8e09 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a26e9294721561d3b16bcaeec5faf4880"></a>
-Direction&#160;</td><td class="memItemRight" valign="bottom"><b>mDirection</b> = Direction::Output</td></tr>
-<tr class="separator:a26e9294721561d3b16bcaeec5faf4880 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="ab99671c2d0552557e75dc7b4afe91765"></a>
-PerformanceMode&#160;</td><td class="memItemRight" valign="bottom"><b>mPerformanceMode</b> = PerformanceMode::None</td></tr>
-<tr class="separator:ab99671c2d0552557e75dc7b4afe91765 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a5b518e82f39c9fcbd7050fd66adb253c"></a>
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mUsage</b> = <a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a></td></tr>
-<tr class="separator:a5b518e82f39c9fcbd7050fd66adb253c inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a5f8f0e5add381b841856de80ea4cdb2b"></a>
-<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mContentType</b> = ContentType::Music</td></tr>
-<tr class="separator:a5f8f0e5add381b841856de80ea4cdb2b inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a1e5d4f5b30c4cc36f81ffd858cc00589"></a>
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mInputPreset</b> = InputPreset::VoiceRecognition</td></tr>
-<tr class="separator:a1e5d4f5b30c4cc36f81ffd858cc00589 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="abe1c1e9cada1ced9b5c1504ac9b07737"></a>
-<a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mSessionId</b> = SessionId::None</td></tr>
-<tr class="separator:abe1c1e9cada1ced9b5c1504ac9b07737 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Factory class for an audio Stream. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a id="a622732bbe5c6577356d749f7dc2108df"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a622732bbe5c6577356d749f7dc2108df">&#9670;&nbsp;</a></span>isAAudioRecommended()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">static bool oboe::AudioStreamBuilder::isAAudioRecommended </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Is the AAudio API recommended this device?</p>
-<p>AAudio may be supported but not recommended because of version specific issues.</p>
-<dl class="section return"><dt>Returns</dt><dd>true if recommended </dd></dl>
-
-</div>
-</div>
-<a id="a18e7b5f7554a4c2ca763e35e8117d699"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a18e7b5f7554a4c2ca763e35e8117d699">&#9670;&nbsp;</a></span>isAAudioSupported()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">static bool oboe::AudioStreamBuilder::isAAudioSupported </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Is the AAudio API supported on this device?</p>
-<p>AAudio was introduced in the Oreo release.</p>
-<dl class="section return"><dt>Returns</dt><dd>true if supported </dd></dl>
-
-</div>
-</div>
-<a id="a86b94cfa47729bef2e04dce1a9086074"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a86b94cfa47729bef2e04dce1a9086074">&#9670;&nbsp;</a></span>openStream()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">Result oboe::AudioStreamBuilder::openStream </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> **&#160;</td>
-          <td class="paramname"><em>stream</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>Create and open a stream object based on the current settings.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">stream</td><td>pointer to a variable to receive the stream address </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>OBOE_OK if successful or a negative error code </dd></dl>
-
-</div>
-</div>
-<a id="a38c6d6c5e718df1e3ac69daaac47c391"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a38c6d6c5e718df1e3ac69daaac47c391">&#9670;&nbsp;</a></span>setAudioApi()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setAudioApi </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a>&#160;</td>
-          <td class="paramname"><em>audioApi</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>If you leave this unspecified then Oboe will choose the best API for the device and SDK version at runtime.</p>
-<p>If the caller requests AAudio and it is supported then AAudio will be used.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">audioApi</td><td>Must be AudioApi::Unspecified, <a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b">AudioApi::OpenSLES</a> or <a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AudioApi::AAudio</a>. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>pointer to the builder so calls can be chained </dd></dl>
-
-</div>
-</div>
-<a id="abaff480867af51ca0899bfa6fd7cc3ef"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abaff480867af51ca0899bfa6fd7cc3ef">&#9670;&nbsp;</a></span>setBufferCapacityInFrames()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setBufferCapacityInFrames </td>
-          <td>(</td>
-          <td class="paramtype">int32_t&#160;</td>
-          <td class="paramname"><em>bufferCapacityInFrames</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Set the requested maximum buffer capacity in frames. The final stream capacity may differ, but will probably be at least this big.</p>
-<p>Default is kUnspecified.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">bufferCapacityInFrames</td><td>the desired buffer capacity in frames or kUnspecified </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>pointer to the builder so calls can be chained </dd></dl>
-
-</div>
-</div>
-<a id="a698cefa9af73bc97c020c004821fccbd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a698cefa9af73bc97c020c004821fccbd">&#9670;&nbsp;</a></span>setCallback()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setCallback </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *&#160;</td>
-          <td class="paramname"><em>streamCallback</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Specifies an object to handle data or error related callbacks from the underlying API.</p>
-<p>When an error callback occurs, the associated stream will be stopped and closed in a separate thread.</p>
-<p>A note on why the streamCallback parameter is a raw pointer rather than a smart pointer:</p>
-<p>The caller should retain ownership of the object streamCallback points to. At first glance weak_ptr may seem like a good candidate for streamCallback as this implies temporary ownership. However, a weak_ptr can only be created from a shared_ptr. A shared_ptr incurs some performance overhead. The callback object is likely to be accessed every few milliseconds when the stream requires new data so this overhead is something we want to avoid.</p>
-<p>This leaves a raw pointer as the logical type choice. The only caveat being that the caller must not destroy the callback before the stream has been closed.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">streamCallback</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>pointer to the builder so calls can be chained </dd></dl>
-
-</div>
-</div>
-<a id="a075d10291e1f998d90c2f73ef767b5a7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a075d10291e1f998d90c2f73ef767b5a7">&#9670;&nbsp;</a></span>setChannelCount()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setChannelCount </td>
-          <td>(</td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>channelCount</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Request a specific number of channels.</p>
-<p>Default is kUnspecified. If the value is unspecified then the application should query for the actual value after the stream is opened. </p>
-
-</div>
-</div>
-<a id="a6a17bafc217c2b624179fbbf77fe4468"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6a17bafc217c2b624179fbbf77fe4468">&#9670;&nbsp;</a></span>setContentType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setContentType </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a>&#160;</td>
-          <td class="paramname"><em>contentType</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Set the type of audio data that the stream will carry.</p>
-<p>The system will use this information to optimize the behavior of the stream. This could, for example, affect whether a stream is paused when a notification occurs.</p>
-<p>The default, if you do not call this function, is ContentType::Music.</p>
-<p>Added in API level 28.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">contentType</td><td>the type of audio data, eg. ContentType::Speech </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a id="af36ddcd00686a9e1de661bdac0685a8e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af36ddcd00686a9e1de661bdac0685a8e">&#9670;&nbsp;</a></span>setDeviceId()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setDeviceId </td>
-          <td>(</td>
-          <td class="paramtype">int32_t&#160;</td>
-          <td class="paramname"><em>deviceId</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Request an audio device identified device using an ID. On Android, for example, the ID could be obtained from the Java AudioManager.</p>
-<p>By default, the primary device will be used.</p>
-<p>Note that when using OpenSL ES, this will be ignored and the created stream will have deviceId kUnspecified.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">deviceId</td><td>device identifier or kUnspecified </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>pointer to the builder so calls can be chained </dd></dl>
-
-</div>
-</div>
-<a id="ab3fbd47b06197619c26393637e26354c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab3fbd47b06197619c26393637e26354c">&#9670;&nbsp;</a></span>setDirection()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setDirection </td>
-          <td>(</td>
-          <td class="paramtype">Direction&#160;</td>
-          <td class="paramname"><em>direction</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Request the direction for a stream. The default is Direction::Output.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">direction</td><td>Direction::Output or Direction::Input </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a id="aa2e1d2d73cd6c2eb9f349bf2fe5f6515"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">&#9670;&nbsp;</a></span>setFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setFormat </td>
-          <td>(</td>
-          <td class="paramtype">AudioFormat&#160;</td>
-          <td class="paramname"><em>format</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Request a sample data format, for example Format::Float.</p>
-<p>Default is Format::Unspecified. If the value is unspecified then the application should query for the actual value after the stream is opened. </p>
-
-</div>
-</div>
-<a id="a3f397821f61eabaeedaf31064c859a54"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3f397821f61eabaeedaf31064c859a54">&#9670;&nbsp;</a></span>setFramesPerCallback()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setFramesPerCallback </td>
-          <td>(</td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>framesPerCallback</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Request a specific number of frames for the data callback.</p>
-<p>Default is kUnspecified. If the value is unspecified then the actual number may vary from callback to callback.</p>
-<p>If an application can handle a varying number of frames then we recommend leaving this unspecified. This allow the underlying API to optimize the callbacks. But if your application is, for example, doing FFTs or other block oriented operations, then call this function to get the sizes you need.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">framesPerCallback</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>pointer to the builder so calls can be chained </dd></dl>
-
-</div>
-</div>
-<a id="a144a3d095fd668210282f1a91f23e1f0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a144a3d095fd668210282f1a91f23e1f0">&#9670;&nbsp;</a></span>setInputPreset()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setInputPreset </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a>&#160;</td>
-          <td class="paramname"><em>inputPreset</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Set the input (capture) preset for the stream.</p>
-<p>The system will use this information to optimize the behavior of the stream. This could, for example, affect which microphones are used and how the recorded data is processed.</p>
-<p>The default, if you do not call this function, is InputPreset::VoiceRecognition. That is because VoiceRecognition is the preset with the lowest latency on many platforms.</p>
-<p>Added in API level 28.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">inputPreset</td><td>the desired configuration for recording </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a id="a6cd1d65612e844e59da71a68ea0ab3ee"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6cd1d65612e844e59da71a68ea0ab3ee">&#9670;&nbsp;</a></span>setPerformanceMode()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setPerformanceMode </td>
-          <td>(</td>
-          <td class="paramtype">PerformanceMode&#160;</td>
-          <td class="paramname"><em>performanceMode</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Request a performance level for the stream. This will determine the latency, the power consumption, and the level of protection from glitches.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">performanceMode</td><td>for example, PerformanceMode::LowLatency </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>pointer to the builder so calls can be chained </dd></dl>
-
-</div>
-</div>
-<a id="a30ef3d5f51d56a9f980dc09600ed139d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a30ef3d5f51d56a9f980dc09600ed139d">&#9670;&nbsp;</a></span>setSampleRate()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setSampleRate </td>
-          <td>(</td>
-          <td class="paramtype">int32_t&#160;</td>
-          <td class="paramname"><em>sampleRate</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Request a specific sample rate in Hz.</p>
-<p>Default is kUnspecified. If the value is unspecified then the application should query for the actual value after the stream is opened.</p>
-<p>Technically, this should be called the "frame rate" or "frames per second", because it refers to the number of complete frames transferred per second. But it is traditionally called "sample rate". Se we use that term. </p>
-
-</div>
-</div>
-<a id="a54c1651bdbe089d0d714af499e8a5f1d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a54c1651bdbe089d0d714af499e8a5f1d">&#9670;&nbsp;</a></span>setSessionId()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setSessionId </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a>&#160;</td>
-          <td class="paramname"><em>sessionId</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Set the requested session ID.</p>
-<p>The session ID can be used to associate a stream with effects processors. The effects are controlled using the Android AudioEffect Java API.</p>
-<p>The default, if you do not call this function, is SessionId::None.</p>
-<p>If set to SessionId::Allocate then a session ID will be allocated when the stream is opened.</p>
-<p>The allocated session ID can be obtained by calling AudioStream::getSessionId() and then used with this function when opening another stream. This allows effects to be shared between streams.</p>
-<p>Session IDs from Oboe can be used the Android Java APIs and vice versa. So a session ID from an Oboe stream can be passed to Java and effects applied using the Java AudioEffect API.</p>
-<p>Allocated session IDs will always be positive and nonzero.</p>
-<p>Added in API level 28.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">sessionId</td><td>an allocated sessionID or SessionId::Allocate </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a id="a3e991742acbbfb6fe5ebcf592c478654"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3e991742acbbfb6fe5ebcf592c478654">&#9670;&nbsp;</a></span>setSharingMode()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setSharingMode </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a>&#160;</td>
-          <td class="paramname"><em>sharingMode</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Request a mode for sharing the device. The requested sharing mode may not be available. So the application should query for the actual mode after the stream is opened.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">sharingMode</td><td><a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a> or <a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971">SharingMode::Exclusive</a> </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>pointer to the builder so calls can be chained </dd></dl>
-
-</div>
-</div>
-<a id="a593255a2f5eb972665775cfc5bc58f6a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a593255a2f5eb972665775cfc5bc58f6a">&#9670;&nbsp;</a></span>setUsage()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setUsage </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a>&#160;</td>
-          <td class="paramname"><em>usage</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Set the intended use case for the stream.</p>
-<p>The system will use this information to optimize the behavior of the stream. This could, for example, affect how volume and focus is handled for the stream.</p>
-<p>The default, if you do not call this function, is <a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a>.</p>
-<p>Added in API level 28.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">usage</td><td>the desired usage, eg. <a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb">Usage::Game</a> </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>include/oboe/<a class="el" href="_audio_stream_builder_8h_source.html">AudioStreamBuilder.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_callback-members.html b/docs/reference/classoboe_1_1_audio_stream_callback-members.html
deleted file mode 100644
index cead2c5..0000000
--- a/docs/reference/classoboe_1_1_audio_stream_callback-members.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">oboe::AudioStreamCallback Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a>(AudioStream *oboeStream, void *audioData, int32_t numFrames)=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html#a7089c5e18a80cba89eb3f4fe2341aeba">onErrorAfterClose</a>(AudioStream *oboeStream, Result error)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html#a2407ff537a60301fd161bd2c36913bfd">onErrorBeforeClose</a>(AudioStream *oboeStream, Result error)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_callback.html b/docs/reference/classoboe_1_1_audio_stream_callback.html
deleted file mode 100644
index 20a548a..0000000
--- a/docs/reference/classoboe_1_1_audio_stream_callback.html
+++ /dev/null
@@ -1,240 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: oboe::AudioStreamCallback Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="classoboe_1_1_audio_stream_callback-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">oboe::AudioStreamCallback Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:af3a7c44f0254abe6e5e5bb566e2317df"><td class="memItemLeft" align="right" valign="top">virtual DataCallbackResult&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, void *audioData, int32_t numFrames)=0</td></tr>
-<tr class="separator:af3a7c44f0254abe6e5e5bb566e2317df"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2407ff537a60301fd161bd2c36913bfd"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_callback.html#a2407ff537a60301fd161bd2c36913bfd">onErrorBeforeClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, Result error)</td></tr>
-<tr class="separator:a2407ff537a60301fd161bd2c36913bfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7089c5e18a80cba89eb3f4fe2341aeba"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_callback.html#a7089c5e18a80cba89eb3f4fe2341aeba">onErrorAfterClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, Result error)</td></tr>
-<tr class="separator:a7089c5e18a80cba89eb3f4fe2341aeba"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="af3a7c44f0254abe6e5e5bb566e2317df"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af3a7c44f0254abe6e5e5bb566e2317df">&#9670;&nbsp;</a></span>onAudioReady()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual DataCallbackResult oboe::AudioStreamCallback::onAudioReady </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *&#160;</td>
-          <td class="paramname"><em>oboeStream</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">void *&#160;</td>
-          <td class="paramname"><em>audioData</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int32_t&#160;</td>
-          <td class="paramname"><em>numFrames</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>A buffer is ready for processing.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
-    <tr><td class="paramname">audioData</td><td>buffer containing input data or a place to put output data </td></tr>
-    <tr><td class="paramname">numFrames</td><td>number of frames to be processed </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>DataCallbackResult::Continue or DataCallbackResult::Stop </dd></dl>
-
-</div>
-</div>
-<a id="a7089c5e18a80cba89eb3f4fe2341aeba"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7089c5e18a80cba89eb3f4fe2341aeba">&#9670;&nbsp;</a></span>onErrorAfterClose()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual void oboe::AudioStreamCallback::onErrorAfterClose </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *&#160;</td>
-          <td class="paramname"><em>oboeStream</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Result&#160;</td>
-          <td class="paramname"><em>error</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>This will be called when an error occurs on a stream or when the stream is disconnected. The underlying stream will already be stopped AND closed by Oboe. So the underlyng stream cannot be referenced.</p>
-<p>This callback could be used to reopen a new stream on another device.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
-    <tr><td class="paramname">error</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a id="a2407ff537a60301fd161bd2c36913bfd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2407ff537a60301fd161bd2c36913bfd">&#9670;&nbsp;</a></span>onErrorBeforeClose()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual void oboe::AudioStreamCallback::onErrorBeforeClose </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *&#160;</td>
-          <td class="paramname"><em>oboeStream</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Result&#160;</td>
-          <td class="paramname"><em>error</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>This will be called when an error occurs on a stream or when the stream is discomnnected. The underlying stream will already be stopped by Oboe but not yet closed. So the stream can be queried.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
-    <tr><td class="paramname">error</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>include/oboe/<a class="el" href="_audio_stream_callback_8h_source.html">AudioStreamCallback.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_default_stream_values.html b/docs/reference/classoboe_1_1_default_stream_values.html
deleted file mode 100644
index a4dc305..0000000
--- a/docs/reference/classoboe_1_1_default_stream_values.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: oboe::DefaultStreamValues Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="classoboe_1_1_default_stream_values-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">oboe::DefaultStreamValues Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a46a5d9a653f2153f618cadcab764e1b1"><td class="memItemLeft" align="right" valign="top">static int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a></td></tr>
-<tr class="separator:a46a5d9a653f2153f618cadcab764e1b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab5ea5576699cebc56193f5c297d3e300"><td class="memItemLeft" align="right" valign="top"><a id="ab5ea5576699cebc56193f5c297d3e300"></a>
-static int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>FramesPerBurst</b></td></tr>
-<tr class="separator:ab5ea5576699cebc56193f5c297d3e300"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad5dce538d5963c81bf58350ab730962d"><td class="memItemLeft" align="right" valign="top"><a id="ad5dce538d5963c81bf58350ab730962d"></a>
-static int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>ChannelCount</b></td></tr>
-<tr class="separator:ad5dce538d5963c81bf58350ab730962d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Member Data Documentation</h2>
-<a id="a46a5d9a653f2153f618cadcab764e1b1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a46a5d9a653f2153f618cadcab764e1b1">&#9670;&nbsp;</a></span>SampleRate</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">int32_t oboe::DefaultStreamValues::SampleRate</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>On API 16 to 25 OpenSL ES will be used. When using OpenSL ES the optimal values for sampleRate and framesPerBurst are not known by the native code. On API 17+ these values should be obtained from the AudioManager using this code:</p>
-<pre><code>
-Note that this technique only works for built-in speakers and headphones.
-            AudioManager myAudioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
-            String sampleRateStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
-            int defaultSampleRate = Integer.parseInt(sampleRateStr);
-            String framesPerBurstStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
-            int defaultFramesPerBurst = Integer.parseInt(framesPerBurstStr);
-            </code></pre><p>It can then be passed down to Oboe through JNI.</p>
-<p>AAudio will get the optimal framesPerBurst from the HAL and will ignore this value. </p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>include/oboe/<a class="el" href="_definitions_8h_source.html">Definitions.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_latency_tuner.html b/docs/reference/classoboe_1_1_latency_tuner.html
deleted file mode 100644
index 236f5e1..0000000
--- a/docs/reference/classoboe_1_1_latency_tuner.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: oboe::LatencyTuner Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="classoboe_1_1_latency_tuner-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">oboe::LatencyTuner Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p><code>#include &lt;<a class="el" href="_latency_tuner_8h_source.html">LatencyTuner.h</a>&gt;</code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a0263b9a55825c0a403653b2b508073ea"><td class="memItemLeft" align="right" valign="top"><a id="a0263b9a55825c0a403653b2b508073ea"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>LatencyTuner</b> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> &amp;stream)</td></tr>
-<tr class="separator:a0263b9a55825c0a403653b2b508073ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad2be756965e6a9af3114008eda892174"><td class="memItemLeft" align="right" valign="top">Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune</a> ()</td></tr>
-<tr class="separator:ad2be756965e6a9af3114008eda892174"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6c0142e08dc65eda8f758b4794450867"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a> ()</td></tr>
-<tr class="separator:a6c0142e08dc65eda8f758b4794450867"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>This can be used to dynamically tune the latency of an output stream. It adjusts the bufferSize based on the number of underruns. The bufferSize is the portion of the total bufferCapacity that is used to store data.</p>
-<p>This only affects the latency associated with the first level of buffering that is closest to the application. It does not affect low latency in the HAL, or touch latency in the UI.</p>
-<p>Call <a class="el" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune()</a> right before returning from your data callback function if using callbacks. Call <a class="el" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune()</a> right before calling write() if using blocking writes.</p>
-<p>If you want to see the ongoing results of this tuning process then call stream-&gt;getBufferSize() periodically. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a id="a6c0142e08dc65eda8f758b4794450867"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6c0142e08dc65eda8f758b4794450867">&#9670;&nbsp;</a></span>requestReset()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void oboe::LatencyTuner::requestReset </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>This may be called from another thread. Then <a class="el" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune()</a> will call reset(), which will lower the latency to the minimum and then allow it to rise back up if there are glitches.</p>
-<p>This is typically called in response to a user decision to minimize latency. In other words, call this from a button handler. </p>
-
-</div>
-</div>
-<a id="ad2be756965e6a9af3114008eda892174"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad2be756965e6a9af3114008eda892174">&#9670;&nbsp;</a></span>tune()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">Result oboe::LatencyTuner::tune </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>Adjust the bufferSizeInFrames to optimize latency. It will start with a low latency and then raise it if an underrun occurs.</p>
-<p>Latency tuning is only supported for AAudio.</p>
-<dl class="section return"><dt>Returns</dt><dd>OK or negative error, ErrorUnimplemented for OpenSL ES </dd></dl>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>include/oboe/<a class="el" href="_latency_tuner_8h_source.html">LatencyTuner.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_result_with_value-members.html b/docs/reference/classoboe_1_1_result_with_value-members.html
deleted file mode 100644
index 51e41e1..0000000
--- a/docs/reference/classoboe_1_1_result_with_value-members.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">oboe::ResultWithValue&lt; T &gt; Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html#a2304c6120e2aad8f2189383a98c7b0a7">createBasedOnSign</a>(T numericResult)</td><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>error</b>() const (defined in <a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html#ae32b1953b777af7d1d0c94862ca39986">operator bool</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html#af62107817c0bc76047e6b655a78504ba">operator Result</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html#a2dbc8b09ead8b073a78af95b4b0186e3">operator!</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>ResultWithValue</b>(oboe::Result error) (defined in <a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ResultWithValue</b>(T value) (defined in <a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>value</b>() const (defined in <a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_result_with_value.html b/docs/reference/classoboe_1_1_result_with_value.html
deleted file mode 100644
index 5745969..0000000
--- a/docs/reference/classoboe_1_1_result_with_value.html
+++ /dev/null
@@ -1,233 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: oboe::ResultWithValue&lt; T &gt; Class Template Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
-<a href="classoboe_1_1_result_with_value-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">oboe::ResultWithValue&lt; T &gt; Class Template Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:aae75caa0d16a9e23a012f77fb50c5927"><td class="memItemLeft" align="right" valign="top"><a id="aae75caa0d16a9e23a012f77fb50c5927"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>ResultWithValue</b> (oboe::Result error)</td></tr>
-<tr class="separator:aae75caa0d16a9e23a012f77fb50c5927"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a600309367db58d71f0ec16e90f7ebea5"><td class="memItemLeft" align="right" valign="top"><a id="a600309367db58d71f0ec16e90f7ebea5"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>ResultWithValue</b> (T value)</td></tr>
-<tr class="separator:a600309367db58d71f0ec16e90f7ebea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adfc76ae6db81535c2e82b856975eed41"><td class="memItemLeft" align="right" valign="top"><a id="adfc76ae6db81535c2e82b856975eed41"></a>
-oboe::Result&#160;</td><td class="memItemRight" valign="bottom"><b>error</b> () const</td></tr>
-<tr class="separator:adfc76ae6db81535c2e82b856975eed41"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a45f5c99a2c9f8fbaca502276f7ebb434"><td class="memItemLeft" align="right" valign="top"><a id="a45f5c99a2c9f8fbaca502276f7ebb434"></a>
-T&#160;</td><td class="memItemRight" valign="bottom"><b>value</b> () const</td></tr>
-<tr class="separator:a45f5c99a2c9f8fbaca502276f7ebb434"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae32b1953b777af7d1d0c94862ca39986"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_result_with_value.html#ae32b1953b777af7d1d0c94862ca39986">operator bool</a> () const</td></tr>
-<tr class="separator:ae32b1953b777af7d1d0c94862ca39986"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2dbc8b09ead8b073a78af95b4b0186e3"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_result_with_value.html#a2dbc8b09ead8b073a78af95b4b0186e3">operator!</a> () const</td></tr>
-<tr class="separator:a2dbc8b09ead8b073a78af95b4b0186e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af62107817c0bc76047e6b655a78504ba"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_result_with_value.html#af62107817c0bc76047e6b655a78504ba">operator Result</a> () const</td></tr>
-<tr class="separator:af62107817c0bc76047e6b655a78504ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a2304c6120e2aad8f2189383a98c7b0a7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt; T &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_result_with_value.html#a2304c6120e2aad8f2189383a98c7b0a7">createBasedOnSign</a> (T numericResult)</td></tr>
-<tr class="separator:a2304c6120e2aad8f2189383a98c7b0a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="a2304c6120e2aad8f2189383a98c7b0a7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2304c6120e2aad8f2189383a98c7b0a7">&#9670;&nbsp;</a></span>createBasedOnSign()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template&lt;typename T &gt; </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt;T&gt; <a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue</a>&lt; T &gt;::createBasedOnSign </td>
-          <td>(</td>
-          <td class="paramtype">T&#160;</td>
-          <td class="paramname"><em>numericResult</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Create a <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> from a number. If the number is positive the <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> will have a result of Result::OK and the value will contain the number. If the number is negative the result will be obtained from the negative number (numeric error codes can be found in AAudio.h) and the value will be null. </p>
-
-</div>
-</div>
-<a id="ae32b1953b777af7d1d0c94862ca39986"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae32b1953b777af7d1d0c94862ca39986">&#9670;&nbsp;</a></span>operator bool()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template&lt;typename T &gt; </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue</a>&lt; T &gt;::operator bool </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>true if OK </dd></dl>
-
-</div>
-</div>
-<a id="af62107817c0bc76047e6b655a78504ba"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af62107817c0bc76047e6b655a78504ba">&#9670;&nbsp;</a></span>operator Result()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template&lt;typename T &gt; </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue</a>&lt; T &gt;::operator Result </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Implicitly convert to a Result. This enables easy comparison with Result values. Example:</p>
-<p><code> <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> result = openStream(); if (result == Result::ErrorNoMemory){ // tell user they're out of memory } </code> </p>
-
-</div>
-</div>
-<a id="a2dbc8b09ead8b073a78af95b4b0186e3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2dbc8b09ead8b073a78af95b4b0186e3">&#9670;&nbsp;</a></span>operator!()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template&lt;typename T &gt; </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue</a>&lt; T &gt;::operator! </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Quick way to check for an error.</p>
-<p>The caller could write something like this: <code> if (!result) { printf("Got error %s\n", convertToText(result.error())); } </code></p>
-<dl class="section return"><dt>Returns</dt><dd>true if an error occurred </dd></dl>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>include/oboe/<a class="el" href="_result_with_value_8h_source.html">ResultWithValue.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/functions.html b/docs/reference/functions.html
index b0b6618..78bbe93 100644
--- a/docs/reference/functions.html
+++ b/docs/reference/functions.html
@@ -65,10 +65,23 @@
 <div class="contents">
 <div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
 
+<h3><a id="index_a"></a>- a -</h3><ul>
+<li>AudioStream()
+: <a class="el" href="a00036.html#a8ebb587a07bf62c864fd62c63b241fd4">oboe::AudioStream</a>
+</li>
+<li>AudioStreamBase()
+: <a class="el" href="a00040.html#aa6b103e1b0f808bbc4949d56f0829f98">oboe::AudioStreamBase</a>
+</li>
+</ul>
+
+
 <h3><a id="index_c"></a>- c -</h3><ul>
 <li>calculateLatencyMillis()
 : <a class="el" href="a00036.html#ae023cb001f3261d064f423101798d6be">oboe::AudioStream</a>
 </li>
+<li>ChannelCount
+: <a class="el" href="a00052.html#ad5dce538d5963c81bf58350ab730962d">oboe::DefaultStreamValues</a>
+</li>
 <li>close()
 : <a class="el" href="a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8">oboe::AudioStream</a>
 </li>
@@ -78,9 +91,30 @@
 </ul>
 
 
+<h3><a id="index_e"></a>- e -</h3><ul>
+<li>error()
+: <a class="el" href="a00060.html#adfc76ae6db81535c2e82b856975eed41">oboe::ResultWithValue&lt; T &gt;</a>
+</li>
+</ul>
+
+
+<h3><a id="index_f"></a>- f -</h3><ul>
+<li>fireCallback()
+: <a class="el" href="a00036.html#a0c4fd19b01a4ef750dd9d6ae3a512eda">oboe::AudioStream</a>
+</li>
+<li>flush()
+: <a class="el" href="a00036.html#a32c25c0333eab3d65ce02275ad4acb3d">oboe::AudioStream</a>
+</li>
+<li>FramesPerBurst
+: <a class="el" href="a00052.html#ab5ea5576699cebc56193f5c297d3e300">oboe::DefaultStreamValues</a>
+</li>
+</ul>
+
+
 <h3><a id="index_g"></a>- g -</h3><ul>
 <li>getAudioApi()
 : <a class="el" href="a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb">oboe::AudioStream</a>
+, <a class="el" href="a00044.html#ac9d41811c297fd28bc61833f640bb8d0">oboe::AudioStreamBuilder</a>
 </li>
 <li>getBufferCapacityInFrames()
 : <a class="el" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">oboe::AudioStreamBase</a>
@@ -88,9 +122,24 @@
 <li>getBufferSizeInFrames()
 : <a class="el" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">oboe::AudioStreamBase</a>
 </li>
+<li>getBytesPerFrame()
+: <a class="el" href="a00036.html#a5c01907a59d5f89a5e4b819fe66b08bc">oboe::AudioStream</a>
+</li>
+<li>getBytesPerSample()
+: <a class="el" href="a00036.html#a44dda61e6e948e49b68f87172f084d62">oboe::AudioStream</a>
+</li>
+<li>getCallback()
+: <a class="el" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">oboe::AudioStreamBase</a>
+</li>
 <li>getChannelCount()
 : <a class="el" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">oboe::AudioStreamBase</a>
 </li>
+<li>getContentType()
+: <a class="el" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">oboe::AudioStreamBase</a>
+</li>
+<li>getDeviceId()
+: <a class="el" href="a00040.html#a093057d625bc896864b959974c265f21">oboe::AudioStreamBase</a>
+</li>
 <li>getDirection()
 : <a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">oboe::AudioStreamBase</a>
 </li>
@@ -103,18 +152,39 @@
 <li>getFramesPerCallback()
 : <a class="el" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">oboe::AudioStreamBase</a>
 </li>
+<li>getFramesRead()
+: <a class="el" href="a00036.html#aeebfc59abd978cd6dff07c16cfe266df">oboe::AudioStream</a>
+</li>
 <li>getFramesWritten()
 : <a class="el" href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">oboe::AudioStream</a>
 </li>
+<li>getInputPreset()
+: <a class="el" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">oboe::AudioStreamBase</a>
+</li>
+<li>getPerformanceMode()
+: <a class="el" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">oboe::AudioStreamBase</a>
+</li>
 <li>getSampleRate()
 : <a class="el" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">oboe::AudioStreamBase</a>
 </li>
+<li>getSessionId()
+: <a class="el" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">oboe::AudioStreamBase</a>
+</li>
+<li>getSharingMode()
+: <a class="el" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">oboe::AudioStreamBase</a>
+</li>
 <li>getState()
 : <a class="el" href="a00036.html#a47bb5798275f14d76444283a6b6f35eb">oboe::AudioStream</a>
 </li>
+<li>getTimestamp()
+: <a class="el" href="a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d">oboe::AudioStream</a>
+</li>
 <li>getUnderlyingStream()
 : <a class="el" href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">oboe::AudioStream</a>
 </li>
+<li>getUsage()
+: <a class="el" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">oboe::AudioStreamBase</a>
+</li>
 <li>getXRunCount()
 : <a class="el" href="a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">oboe::AudioStream</a>
 </li>
@@ -122,25 +192,98 @@
 
 
 <h3><a id="index_i"></a>- i -</h3><ul>
+<li>incrementFramesRead()
+: <a class="el" href="a00036.html#a81568482a217b314498e2501210758d7">oboe::AudioStream</a>
+</li>
+<li>incrementFramesWritten()
+: <a class="el" href="a00036.html#ad6b4c63f6ed1ecb509f7b80352a9c0bd">oboe::AudioStream</a>
+</li>
 <li>isAAudioRecommended()
 : <a class="el" href="a00044.html#a622732bbe5c6577356d749f7dc2108df">oboe::AudioStreamBuilder</a>
 </li>
 <li>isAAudioSupported()
 : <a class="el" href="a00044.html#a18e7b5f7554a4c2ca763e35e8117d699">oboe::AudioStreamBuilder</a>
 </li>
+<li>isPlaying()
+: <a class="el" href="a00036.html#ad5260e2cc71108b1b2e694bf6162279f">oboe::AudioStream</a>
+</li>
 <li>isXRunCountSupported()
 : <a class="el" href="a00036.html#a43d8a098440cde28f4ee8bedd6d107c4">oboe::AudioStream</a>
 </li>
 </ul>
 
 
+<h3><a id="index_l"></a>- l -</h3><ul>
+<li>LatencyTuner()
+: <a class="el" href="a00056.html#a0263b9a55825c0a403653b2b508073ea">oboe::LatencyTuner</a>
+</li>
+</ul>
+
+
 <h3><a id="index_m"></a>- m -</h3><ul>
 <li>Major
 : <a class="el" href="a00064.html#a270f2e92582d5187be339eeda8e2b276">oboe::Version</a>
 </li>
+<li>mBufferCapacityInFrames
+: <a class="el" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">oboe::AudioStreamBase</a>
+</li>
+<li>mBufferSizeInFrames
+: <a class="el" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">oboe::AudioStreamBase</a>
+</li>
+<li>mChannelCount
+: <a class="el" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase</a>
+</li>
+<li>mContentType
+: <a class="el" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase</a>
+</li>
+<li>mDeviceId
+: <a class="el" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase</a>
+</li>
+<li>mDirection
+: <a class="el" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase</a>
+</li>
+<li>mFormat
+: <a class="el" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase</a>
+</li>
+<li>mFramesPerBurst
+: <a class="el" href="a00040.html#a54061319ed348329a29d883a5de2482e">oboe::AudioStreamBase</a>
+</li>
+<li>mFramesPerCallback
+: <a class="el" href="a00040.html#a3962eb94420ad0ecea70029236001899">oboe::AudioStreamBase</a>
+</li>
+<li>mFramesRead
+: <a class="el" href="a00036.html#a2b9124ba3b0f564fa58b0651438250e7">oboe::AudioStream</a>
+</li>
+<li>mFramesWritten
+: <a class="el" href="a00036.html#aa88d2a712b91a8b763f2721d78480ba8">oboe::AudioStream</a>
+</li>
 <li>Minor
 : <a class="el" href="a00064.html#ae460bb95e3a9099696205a35fffb5469">oboe::Version</a>
 </li>
+<li>mInputPreset
+: <a class="el" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">oboe::AudioStreamBase</a>
+</li>
+<li>mNativeFormat
+: <a class="el" href="a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60">oboe::AudioStream</a>
+</li>
+<li>mPerformanceMode
+: <a class="el" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">oboe::AudioStreamBase</a>
+</li>
+<li>mSampleRate
+: <a class="el" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">oboe::AudioStreamBase</a>
+</li>
+<li>mSessionId
+: <a class="el" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">oboe::AudioStreamBase</a>
+</li>
+<li>mSharingMode
+: <a class="el" href="a00040.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase</a>
+</li>
+<li>mStreamCallback
+: <a class="el" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">oboe::AudioStreamBase</a>
+</li>
+<li>mUsage
+: <a class="el" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase</a>
+</li>
 </ul>
 
 
@@ -179,6 +322,9 @@
 <li>operator!()
 : <a class="el" href="a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3">oboe::ResultWithValue&lt; T &gt;</a>
 </li>
+<li>operator=()
+: <a class="el" href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">oboe::AudioStreamBase</a>
+</li>
 </ul>
 
 
@@ -186,13 +332,34 @@
 <li>Patch
 : <a class="el" href="a00064.html#a690110f2b3e887892da8f29ab5c057b2">oboe::Version</a>
 </li>
+<li>pause()
+: <a class="el" href="a00036.html#a04f29836748a8e5842aef2be200022ad">oboe::AudioStream</a>
+</li>
 </ul>
 
 
 <h3><a id="index_r"></a>- r -</h3><ul>
+<li>read()
+: <a class="el" href="a00036.html#acbf3933af829313d281b5455053338da">oboe::AudioStream</a>
+</li>
+<li>requestFlush()
+: <a class="el" href="a00036.html#a6bd5d633ff999e4da1faf3cd949aa602">oboe::AudioStream</a>
+</li>
+<li>requestPause()
+: <a class="el" href="a00036.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">oboe::AudioStream</a>
+</li>
 <li>requestReset()
 : <a class="el" href="a00056.html#a6c0142e08dc65eda8f758b4794450867">oboe::LatencyTuner</a>
 </li>
+<li>requestStart()
+: <a class="el" href="a00036.html#a3c484e314dee8dfed1d419f487b5d601">oboe::AudioStream</a>
+</li>
+<li>requestStop()
+: <a class="el" href="a00036.html#a820e634f741e6b5efdcef8104cecb919">oboe::AudioStream</a>
+</li>
+<li>ResultWithValue()
+: <a class="el" href="a00060.html#a600309367db58d71f0ec16e90f7ebea5">oboe::ResultWithValue&lt; T &gt;</a>
+</li>
 </ul>
 
 
@@ -233,6 +400,9 @@
 <li>setInputPreset()
 : <a class="el" href="a00044.html#a144a3d095fd668210282f1a91f23e1f0">oboe::AudioStreamBuilder</a>
 </li>
+<li>setNativeFormat()
+: <a class="el" href="a00036.html#ab01c37fca9110e916a482a909f5cc82d">oboe::AudioStream</a>
+</li>
 <li>setPerformanceMode()
 : <a class="el" href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">oboe::AudioStreamBuilder</a>
 </li>
@@ -248,6 +418,12 @@
 <li>setUsage()
 : <a class="el" href="a00044.html#a593255a2f5eb972665775cfc5bc58f6a">oboe::AudioStreamBuilder</a>
 </li>
+<li>start()
+: <a class="el" href="a00036.html#af04f03eb6b64b564f1c4401688987d21">oboe::AudioStream</a>
+</li>
+<li>stop()
+: <a class="el" href="a00036.html#aec093859d42f0470c884edd1e976d9f3">oboe::AudioStream</a>
+</li>
 </ul>
 
 
@@ -268,6 +444,13 @@
 </ul>
 
 
+<h3><a id="index_v"></a>- v -</h3><ul>
+<li>value()
+: <a class="el" href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">oboe::ResultWithValue&lt; T &gt;</a>
+</li>
+</ul>
+
+
 <h3><a id="index_w"></a>- w -</h3><ul>
 <li>waitForStateChange()
 : <a class="el" href="a00036.html#a0c865a5501f369d959c39d8ab8b46a07">oboe::AudioStream</a>
diff --git a/docs/reference/functions_func.html b/docs/reference/functions_func.html
index 7c04dab..0932c55 100644
--- a/docs/reference/functions_func.html
+++ b/docs/reference/functions_func.html
@@ -65,6 +65,16 @@
 <div class="contents">
 &#160;
 
+<h3><a id="index_a"></a>- a -</h3><ul>
+<li>AudioStream()
+: <a class="el" href="a00036.html#a8ebb587a07bf62c864fd62c63b241fd4">oboe::AudioStream</a>
+</li>
+<li>AudioStreamBase()
+: <a class="el" href="a00040.html#aa6b103e1b0f808bbc4949d56f0829f98">oboe::AudioStreamBase</a>
+</li>
+</ul>
+
+
 <h3><a id="index_c"></a>- c -</h3><ul>
 <li>calculateLatencyMillis()
 : <a class="el" href="a00036.html#ae023cb001f3261d064f423101798d6be">oboe::AudioStream</a>
@@ -78,9 +88,27 @@
 </ul>
 
 
+<h3><a id="index_e"></a>- e -</h3><ul>
+<li>error()
+: <a class="el" href="a00060.html#adfc76ae6db81535c2e82b856975eed41">oboe::ResultWithValue&lt; T &gt;</a>
+</li>
+</ul>
+
+
+<h3><a id="index_f"></a>- f -</h3><ul>
+<li>fireCallback()
+: <a class="el" href="a00036.html#a0c4fd19b01a4ef750dd9d6ae3a512eda">oboe::AudioStream</a>
+</li>
+<li>flush()
+: <a class="el" href="a00036.html#a32c25c0333eab3d65ce02275ad4acb3d">oboe::AudioStream</a>
+</li>
+</ul>
+
+
 <h3><a id="index_g"></a>- g -</h3><ul>
 <li>getAudioApi()
 : <a class="el" href="a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb">oboe::AudioStream</a>
+, <a class="el" href="a00044.html#ac9d41811c297fd28bc61833f640bb8d0">oboe::AudioStreamBuilder</a>
 </li>
 <li>getBufferCapacityInFrames()
 : <a class="el" href="a00040.html#ab1531253e64aaebe9e9eddbafb9098fc">oboe::AudioStreamBase</a>
@@ -88,9 +116,24 @@
 <li>getBufferSizeInFrames()
 : <a class="el" href="a00040.html#af5217ab05bfde0d7637024b599302d0b">oboe::AudioStreamBase</a>
 </li>
+<li>getBytesPerFrame()
+: <a class="el" href="a00036.html#a5c01907a59d5f89a5e4b819fe66b08bc">oboe::AudioStream</a>
+</li>
+<li>getBytesPerSample()
+: <a class="el" href="a00036.html#a44dda61e6e948e49b68f87172f084d62">oboe::AudioStream</a>
+</li>
+<li>getCallback()
+: <a class="el" href="a00040.html#a1b4a2a191546708da657510c3cd6b797">oboe::AudioStreamBase</a>
+</li>
 <li>getChannelCount()
 : <a class="el" href="a00040.html#aa0b0a068097efaf967fb235c55383dd8">oboe::AudioStreamBase</a>
 </li>
+<li>getContentType()
+: <a class="el" href="a00040.html#ab12e2d068fa87e0553b01a400d96eb82">oboe::AudioStreamBase</a>
+</li>
+<li>getDeviceId()
+: <a class="el" href="a00040.html#a093057d625bc896864b959974c265f21">oboe::AudioStreamBase</a>
+</li>
 <li>getDirection()
 : <a class="el" href="a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1">oboe::AudioStreamBase</a>
 </li>
@@ -103,18 +146,39 @@
 <li>getFramesPerCallback()
 : <a class="el" href="a00040.html#a1c133e1949f0814f60bd8bb61346756b">oboe::AudioStreamBase</a>
 </li>
+<li>getFramesRead()
+: <a class="el" href="a00036.html#aeebfc59abd978cd6dff07c16cfe266df">oboe::AudioStream</a>
+</li>
 <li>getFramesWritten()
 : <a class="el" href="a00036.html#ab43dd4074e1de57bac1c3fd111430341">oboe::AudioStream</a>
 </li>
+<li>getInputPreset()
+: <a class="el" href="a00040.html#a5c773b93b8aa38191c7199cab023428a">oboe::AudioStreamBase</a>
+</li>
+<li>getPerformanceMode()
+: <a class="el" href="a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">oboe::AudioStreamBase</a>
+</li>
 <li>getSampleRate()
 : <a class="el" href="a00040.html#ae9d32f3e09174bad69e74f147ee33087">oboe::AudioStreamBase</a>
 </li>
+<li>getSessionId()
+: <a class="el" href="a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e">oboe::AudioStreamBase</a>
+</li>
+<li>getSharingMode()
+: <a class="el" href="a00040.html#a1fb033fc963f971bd1aa8f6707e49b41">oboe::AudioStreamBase</a>
+</li>
 <li>getState()
 : <a class="el" href="a00036.html#a47bb5798275f14d76444283a6b6f35eb">oboe::AudioStream</a>
 </li>
+<li>getTimestamp()
+: <a class="el" href="a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d">oboe::AudioStream</a>
+</li>
 <li>getUnderlyingStream()
 : <a class="el" href="a00036.html#a5458d7130415eb4defe3dbc11d479e2f">oboe::AudioStream</a>
 </li>
+<li>getUsage()
+: <a class="el" href="a00040.html#a0bcfb2f8bd11c92b541fd910da9af397">oboe::AudioStreamBase</a>
+</li>
 <li>getXRunCount()
 : <a class="el" href="a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">oboe::AudioStream</a>
 </li>
@@ -122,18 +186,34 @@
 
 
 <h3><a id="index_i"></a>- i -</h3><ul>
+<li>incrementFramesRead()
+: <a class="el" href="a00036.html#a81568482a217b314498e2501210758d7">oboe::AudioStream</a>
+</li>
+<li>incrementFramesWritten()
+: <a class="el" href="a00036.html#ad6b4c63f6ed1ecb509f7b80352a9c0bd">oboe::AudioStream</a>
+</li>
 <li>isAAudioRecommended()
 : <a class="el" href="a00044.html#a622732bbe5c6577356d749f7dc2108df">oboe::AudioStreamBuilder</a>
 </li>
 <li>isAAudioSupported()
 : <a class="el" href="a00044.html#a18e7b5f7554a4c2ca763e35e8117d699">oboe::AudioStreamBuilder</a>
 </li>
+<li>isPlaying()
+: <a class="el" href="a00036.html#ad5260e2cc71108b1b2e694bf6162279f">oboe::AudioStream</a>
+</li>
 <li>isXRunCountSupported()
 : <a class="el" href="a00036.html#a43d8a098440cde28f4ee8bedd6d107c4">oboe::AudioStream</a>
 </li>
 </ul>
 
 
+<h3><a id="index_l"></a>- l -</h3><ul>
+<li>LatencyTuner()
+: <a class="el" href="a00056.html#a0263b9a55825c0a403653b2b508073ea">oboe::LatencyTuner</a>
+</li>
+</ul>
+
+
 <h3><a id="index_o"></a>- o -</h3><ul>
 <li>onAudioReady()
 : <a class="el" href="a00048.html#af3a7c44f0254abe6e5e5bb566e2317df">oboe::AudioStreamCallback</a>
@@ -162,13 +242,41 @@
 <li>operator!()
 : <a class="el" href="a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3">oboe::ResultWithValue&lt; T &gt;</a>
 </li>
+<li>operator=()
+: <a class="el" href="a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc">oboe::AudioStreamBase</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>pause()
+: <a class="el" href="a00036.html#a04f29836748a8e5842aef2be200022ad">oboe::AudioStream</a>
+</li>
 </ul>
 
 
 <h3><a id="index_r"></a>- r -</h3><ul>
+<li>read()
+: <a class="el" href="a00036.html#acbf3933af829313d281b5455053338da">oboe::AudioStream</a>
+</li>
+<li>requestFlush()
+: <a class="el" href="a00036.html#a6bd5d633ff999e4da1faf3cd949aa602">oboe::AudioStream</a>
+</li>
+<li>requestPause()
+: <a class="el" href="a00036.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">oboe::AudioStream</a>
+</li>
 <li>requestReset()
 : <a class="el" href="a00056.html#a6c0142e08dc65eda8f758b4794450867">oboe::LatencyTuner</a>
 </li>
+<li>requestStart()
+: <a class="el" href="a00036.html#a3c484e314dee8dfed1d419f487b5d601">oboe::AudioStream</a>
+</li>
+<li>requestStop()
+: <a class="el" href="a00036.html#a820e634f741e6b5efdcef8104cecb919">oboe::AudioStream</a>
+</li>
+<li>ResultWithValue()
+: <a class="el" href="a00060.html#a600309367db58d71f0ec16e90f7ebea5">oboe::ResultWithValue&lt; T &gt;</a>
+</li>
 </ul>
 
 
@@ -206,6 +314,9 @@
 <li>setInputPreset()
 : <a class="el" href="a00044.html#a144a3d095fd668210282f1a91f23e1f0">oboe::AudioStreamBuilder</a>
 </li>
+<li>setNativeFormat()
+: <a class="el" href="a00036.html#ab01c37fca9110e916a482a909f5cc82d">oboe::AudioStream</a>
+</li>
 <li>setPerformanceMode()
 : <a class="el" href="a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee">oboe::AudioStreamBuilder</a>
 </li>
@@ -221,6 +332,12 @@
 <li>setUsage()
 : <a class="el" href="a00044.html#a593255a2f5eb972665775cfc5bc58f6a">oboe::AudioStreamBuilder</a>
 </li>
+<li>start()
+: <a class="el" href="a00036.html#af04f03eb6b64b564f1c4401688987d21">oboe::AudioStream</a>
+</li>
+<li>stop()
+: <a class="el" href="a00036.html#aec093859d42f0470c884edd1e976d9f3">oboe::AudioStream</a>
+</li>
 </ul>
 
 
@@ -238,6 +355,13 @@
 </ul>
 
 
+<h3><a id="index_v"></a>- v -</h3><ul>
+<li>value()
+: <a class="el" href="a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434">oboe::ResultWithValue&lt; T &gt;</a>
+</li>
+</ul>
+
+
 <h3><a id="index_w"></a>- w -</h3><ul>
 <li>waitForStateChange()
 : <a class="el" href="a00036.html#a0c865a5501f369d959c39d8ab8b46a07">oboe::AudioStream</a>
diff --git a/docs/reference/functions_vars.html b/docs/reference/functions_vars.html
index b9b4d4c..b645d73 100644
--- a/docs/reference/functions_vars.html
+++ b/docs/reference/functions_vars.html
@@ -64,12 +64,75 @@
 
 <div class="contents">
 &#160;<ul>
+<li>ChannelCount
+: <a class="el" href="a00052.html#ad5dce538d5963c81bf58350ab730962d">oboe::DefaultStreamValues</a>
+</li>
+<li>FramesPerBurst
+: <a class="el" href="a00052.html#ab5ea5576699cebc56193f5c297d3e300">oboe::DefaultStreamValues</a>
+</li>
 <li>Major
 : <a class="el" href="a00064.html#a270f2e92582d5187be339eeda8e2b276">oboe::Version</a>
 </li>
+<li>mBufferCapacityInFrames
+: <a class="el" href="a00040.html#ac81d4719b350f8138aad1af38f0873b6">oboe::AudioStreamBase</a>
+</li>
+<li>mBufferSizeInFrames
+: <a class="el" href="a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a">oboe::AudioStreamBase</a>
+</li>
+<li>mChannelCount
+: <a class="el" href="a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase</a>
+</li>
+<li>mContentType
+: <a class="el" href="a00040.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase</a>
+</li>
+<li>mDeviceId
+: <a class="el" href="a00040.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase</a>
+</li>
+<li>mDirection
+: <a class="el" href="a00040.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase</a>
+</li>
+<li>mFormat
+: <a class="el" href="a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase</a>
+</li>
+<li>mFramesPerBurst
+: <a class="el" href="a00040.html#a54061319ed348329a29d883a5de2482e">oboe::AudioStreamBase</a>
+</li>
+<li>mFramesPerCallback
+: <a class="el" href="a00040.html#a3962eb94420ad0ecea70029236001899">oboe::AudioStreamBase</a>
+</li>
+<li>mFramesRead
+: <a class="el" href="a00036.html#a2b9124ba3b0f564fa58b0651438250e7">oboe::AudioStream</a>
+</li>
+<li>mFramesWritten
+: <a class="el" href="a00036.html#aa88d2a712b91a8b763f2721d78480ba8">oboe::AudioStream</a>
+</li>
 <li>Minor
 : <a class="el" href="a00064.html#ae460bb95e3a9099696205a35fffb5469">oboe::Version</a>
 </li>
+<li>mInputPreset
+: <a class="el" href="a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589">oboe::AudioStreamBase</a>
+</li>
+<li>mNativeFormat
+: <a class="el" href="a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60">oboe::AudioStream</a>
+</li>
+<li>mPerformanceMode
+: <a class="el" href="a00040.html#ab99671c2d0552557e75dc7b4afe91765">oboe::AudioStreamBase</a>
+</li>
+<li>mSampleRate
+: <a class="el" href="a00040.html#a998885bb6c4f37e145f4626ad4177dea">oboe::AudioStreamBase</a>
+</li>
+<li>mSessionId
+: <a class="el" href="a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737">oboe::AudioStreamBase</a>
+</li>
+<li>mSharingMode
+: <a class="el" href="a00040.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase</a>
+</li>
+<li>mStreamCallback
+: <a class="el" href="a00040.html#ae3f72318212dd9977d7fa0ced92c91f4">oboe::AudioStreamBase</a>
+</li>
+<li>mUsage
+: <a class="el" href="a00040.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase</a>
+</li>
 <li>Number
 : <a class="el" href="a00064.html#ac579661e79bcee45dc676d4647891de0">oboe::Version</a>
 </li>
diff --git a/docs/reference/menudata.js b/docs/reference/menudata.js
index 34bf64d..b48842d 100644
--- a/docs/reference/menudata.js
+++ b/docs/reference/menudata.js
@@ -26,8 +26,23 @@
 {text:"Namespaces",url:"namespaces.html",children:[
 {text:"Namespace List",url:"namespaces.html"},
 {text:"Namespace Members",url:"namespacemembers.html",children:[
-{text:"All",url:"namespacemembers.html"},
+{text:"All",url:"namespacemembers.html",children:[
+{text:"a",url:"namespacemembers.html#index_a"},
+{text:"c",url:"namespacemembers.html#index_c"},
+{text:"d",url:"namespacemembers.html#index_d"},
+{text:"g",url:"namespacemembers.html#index_g"},
+{text:"i",url:"namespacemembers.html#index_i"},
+{text:"k",url:"namespacemembers.html#index_k"},
+{text:"m",url:"namespacemembers.html#index_m"},
+{text:"n",url:"namespacemembers.html#index_n"},
+{text:"o",url:"namespacemembers.html#index_o"},
+{text:"p",url:"namespacemembers.html#index_p"},
+{text:"r",url:"namespacemembers.html#index_r"},
+{text:"s",url:"namespacemembers.html#index_s"},
+{text:"u",url:"namespacemembers.html#index_u"},
+{text:"v",url:"namespacemembers.html#index_v"}]},
 {text:"Functions",url:"namespacemembers_func.html"},
+{text:"Variables",url:"namespacemembers_vars.html"},
 {text:"Enumerations",url:"namespacemembers_enum.html"},
 {text:"Enumerator",url:"namespacemembers_eval.html"}]}]},
 {text:"Classes",url:"annotated.html",children:[
@@ -36,9 +51,13 @@
 {text:"Class Hierarchy",url:"hierarchy.html"},
 {text:"Class Members",url:"functions.html",children:[
 {text:"All",url:"functions.html",children:[
+{text:"a",url:"functions.html#index_a"},
 {text:"c",url:"functions.html#index_c"},
+{text:"e",url:"functions.html#index_e"},
+{text:"f",url:"functions.html#index_f"},
 {text:"g",url:"functions.html#index_g"},
 {text:"i",url:"functions.html#index_i"},
+{text:"l",url:"functions.html#index_l"},
 {text:"m",url:"functions.html#index_m"},
 {text:"n",url:"functions.html#index_n"},
 {text:"o",url:"functions.html#index_o"},
@@ -47,16 +66,23 @@
 {text:"s",url:"functions.html#index_s"},
 {text:"t",url:"functions.html#index_t"},
 {text:"u",url:"functions.html#index_u"},
+{text:"v",url:"functions.html#index_v"},
 {text:"w",url:"functions.html#index_w"}]},
 {text:"Functions",url:"functions_func.html",children:[
+{text:"a",url:"functions_func.html#index_a"},
 {text:"c",url:"functions_func.html#index_c"},
+{text:"e",url:"functions_func.html#index_e"},
+{text:"f",url:"functions_func.html#index_f"},
 {text:"g",url:"functions_func.html#index_g"},
 {text:"i",url:"functions_func.html#index_i"},
+{text:"l",url:"functions_func.html#index_l"},
 {text:"o",url:"functions_func.html#index_o"},
+{text:"p",url:"functions_func.html#index_p"},
 {text:"r",url:"functions_func.html#index_r"},
 {text:"s",url:"functions_func.html#index_s"},
 {text:"t",url:"functions_func.html#index_t"},
 {text:"u",url:"functions_func.html#index_u"},
+{text:"v",url:"functions_func.html#index_v"},
 {text:"w",url:"functions_func.html#index_w"}]},
 {text:"Variables",url:"functions_vars.html"}]}]},
 {text:"Files",url:"files.html",children:[
diff --git a/docs/reference/namespacemembers.html b/docs/reference/namespacemembers.html
index 353f4f7..1ae075f 100644
--- a/docs/reference/namespacemembers.html
+++ b/docs/reference/namespacemembers.html
@@ -63,13 +63,22 @@
 </div>
 
 <div class="contents">
-<div class="textblock">Here is a list of all documented namespace members with links to the namespaces they belong to:</div><ul>
+<div class="textblock">Here is a list of all documented namespace members with links to the namespaces they belong to:</div>
+
+<h3><a id="index_a"></a>- a -</h3><ul>
 <li>Allocate
 : <a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">oboe</a>
 </li>
 <li>AudioApi
 : <a class="el" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">oboe</a>
 </li>
+<li>AudioFormat
+: <a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">oboe</a>
+</li>
+</ul>
+
+
+<h3><a id="index_c"></a>- c -</h3><ul>
 <li>Camcorder
 : <a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">oboe</a>
 </li>
@@ -79,21 +88,71 @@
 <li>ContentType
 : <a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">oboe</a>
 </li>
+<li>convertFloatToPcm16()
+: <a class="el" href="a00032.html#adbda063116feb9fa98a31ee820170060">oboe</a>
+</li>
 <li>convertFormatToSizeInBytes()
 : <a class="el" href="a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca">oboe</a>
 </li>
-<li>convertToText()
-: <a class="el" href="a00032.html#a8d1ae211254cc239019f165b607f4365">oboe</a>
+<li>convertPcm16ToFloat()
+: <a class="el" href="a00032.html#ad17bee42828d13f2ef62a889e175c643">oboe</a>
 </li>
+<li>convertToText()
+: <a class="el" href="a00032.html#af65aaea3c5d82eee6906664d61c094b3">oboe</a>
+</li>
+</ul>
+
+
+<h3><a id="index_d"></a>- d -</h3><ul>
+<li>DataCallbackResult
+: <a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">oboe</a>
+</li>
+<li>Direction
+: <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">oboe</a>
+</li>
+</ul>
+
+
+<h3><a id="index_g"></a>- g -</h3><ul>
 <li>Generic
 : <a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">oboe</a>
 </li>
 <li>getSdkVersion()
 : <a class="el" href="a00032.html#a54528938e9fccab7ad8947ccf0e409db">oboe</a>
 </li>
+</ul>
+
+
+<h3><a id="index_i"></a>- i -</h3><ul>
 <li>InputPreset
 : <a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">oboe</a>
 </li>
+</ul>
+
+
+<h3><a id="index_k"></a>- k -</h3><ul>
+<li>kDefaultTimeoutNanos
+: <a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">oboe</a>
+</li>
+<li>kMillisPerSecond
+: <a class="el" href="a00032.html#ad1bb9f5626cec20d3a052a8721959873">oboe</a>
+</li>
+<li>kNanosPerMicrosecond
+: <a class="el" href="a00032.html#aedef0759ae3622b6f0324799bcbdebf0">oboe</a>
+</li>
+<li>kNanosPerMillisecond
+: <a class="el" href="a00032.html#a831e887150474c087170679eaca8672b">oboe</a>
+</li>
+<li>kNanosPerSecond
+: <a class="el" href="a00032.html#a5948466b593c4eab65f7025846a39f51">oboe</a>
+</li>
+<li>kUnspecified
+: <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">oboe</a>
+</li>
+</ul>
+
+
+<h3><a id="index_m"></a>- m -</h3><ul>
 <li>Mono
 : <a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">oboe</a>
 </li>
@@ -103,9 +162,38 @@
 <li>Music
 : <a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">oboe</a>
 </li>
+</ul>
+
+
+<h3><a id="index_n"></a>- n -</h3><ul>
 <li>None
 : <a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">oboe</a>
 </li>
+</ul>
+
+
+<h3><a id="index_o"></a>- o -</h3><ul>
+<li>operator&lt;&lt;()
+: <a class="el" href="a00032.html#aa403103686222502d1cfc47bafc10aeb">oboe</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>PerformanceMode
+: <a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">oboe</a>
+</li>
+</ul>
+
+
+<h3><a id="index_r"></a>- r -</h3><ul>
+<li>Result
+: <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
 <li>SessionId
 : <a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">oboe</a>
 </li>
@@ -121,6 +209,13 @@
 <li>Stereo
 : <a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">oboe</a>
 </li>
+<li>StreamState
+: <a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">oboe</a>
+</li>
+</ul>
+
+
+<h3><a id="index_u"></a>- u -</h3><ul>
 <li>Unprocessed
 : <a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">oboe</a>
 </li>
@@ -130,6 +225,10 @@
 <li>Usage
 : <a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe</a>
 </li>
+</ul>
+
+
+<h3><a id="index_v"></a>- v -</h3><ul>
 <li>VoiceCommunication
 : <a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">oboe</a>
 </li>
diff --git a/docs/reference/namespacemembers_enum.html b/docs/reference/namespacemembers_enum.html
index dd36c33..5619d13 100644
--- a/docs/reference/namespacemembers_enum.html
+++ b/docs/reference/namespacemembers_enum.html
@@ -67,21 +67,39 @@
 <li>AudioApi
 : <a class="el" href="a00032.html#a92972414867c81d5974cb2ed7abefbf6">oboe</a>
 </li>
+<li>AudioFormat
+: <a class="el" href="a00032.html#a58191d1a396041246bd4e0a87dbfdec9">oboe</a>
+</li>
 <li>ChannelCount
 : <a class="el" href="a00032.html#a522e6806948369987639a0d1df03c029">oboe</a>
 </li>
 <li>ContentType
 : <a class="el" href="a00032.html#a07eed38097ed944422063801f8f83406">oboe</a>
 </li>
+<li>DataCallbackResult
+: <a class="el" href="a00032.html#a9cb0d39766aa6d50132a2daa6e826457">oboe</a>
+</li>
+<li>Direction
+: <a class="el" href="a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b">oboe</a>
+</li>
 <li>InputPreset
 : <a class="el" href="a00032.html#a17f63a064de966efddd5d0335992bc04">oboe</a>
 </li>
+<li>PerformanceMode
+: <a class="el" href="a00032.html#acd0e87a1512eca01c60eb3b7a6676fde">oboe</a>
+</li>
+<li>Result
+: <a class="el" href="a00032.html#a5e32586b07bf64da91f99fc33c043cb1">oboe</a>
+</li>
 <li>SessionId
 : <a class="el" href="a00032.html#a5752250c10e96179e3618d7f72937eaf">oboe</a>
 </li>
 <li>SharingMode
 : <a class="el" href="a00032.html#ae3a52556c58387e0cecba01f9abffdff">oboe</a>
 </li>
+<li>StreamState
+: <a class="el" href="a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123">oboe</a>
+</li>
 <li>Usage
 : <a class="el" href="a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe</a>
 </li>
diff --git a/docs/reference/namespacemembers_func.html b/docs/reference/namespacemembers_func.html
index aeae4ef..5d51ba8 100644
--- a/docs/reference/namespacemembers_func.html
+++ b/docs/reference/namespacemembers_func.html
@@ -64,15 +64,24 @@
 
 <div class="contents">
 &#160;<ul>
+<li>convertFloatToPcm16()
+: <a class="el" href="a00032.html#adbda063116feb9fa98a31ee820170060">oboe</a>
+</li>
 <li>convertFormatToSizeInBytes()
 : <a class="el" href="a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca">oboe</a>
 </li>
+<li>convertPcm16ToFloat()
+: <a class="el" href="a00032.html#ad17bee42828d13f2ef62a889e175c643">oboe</a>
+</li>
 <li>convertToText()
-: <a class="el" href="a00032.html#a8d1ae211254cc239019f165b607f4365">oboe</a>
+: <a class="el" href="a00032.html#af65aaea3c5d82eee6906664d61c094b3">oboe</a>
 </li>
 <li>getSdkVersion()
 : <a class="el" href="a00032.html#a54528938e9fccab7ad8947ccf0e409db">oboe</a>
 </li>
+<li>operator&lt;&lt;()
+: <a class="el" href="a00032.html#aa403103686222502d1cfc47bafc10aeb">oboe</a>
+</li>
 </ul>
 </div><!-- contents -->
 <!-- start footer part -->
diff --git a/docs/reference/classoboe_1_1_latency_tuner-members.html b/docs/reference/namespacemembers_vars.html
similarity index 64%
copy from docs/reference/classoboe_1_1_latency_tuner-members.html
copy to docs/reference/namespacemembers_vars.html
index e15fe3a..0c00477 100644
--- a/docs/reference/classoboe_1_1_latency_tuner-members.html
+++ b/docs/reference/namespacemembers_vars.html
@@ -5,7 +5,7 @@
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: Member List</title>
+<title>Oboe: Namespace Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -47,6 +47,7 @@
 });
 /* @license-end */</script>
 <div id="main-nav"></div>
+</div><!-- top -->
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -61,23 +62,28 @@
 </iframe>
 </div>
 
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">oboe::LatencyTuner Member List</div>  </div>
-</div><!--header-->
 <div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LatencyTuner</b>(AudioStream &amp;stream) (defined in <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
+&#160;<ul>
+<li>kDefaultTimeoutNanos
+: <a class="el" href="a00032.html#aab8f5f081a8b2147e16ec920347c1b5c">oboe</a>
+</li>
+<li>kMillisPerSecond
+: <a class="el" href="a00032.html#ad1bb9f5626cec20d3a052a8721959873">oboe</a>
+</li>
+<li>kNanosPerMicrosecond
+: <a class="el" href="a00032.html#aedef0759ae3622b6f0324799bcbdebf0">oboe</a>
+</li>
+<li>kNanosPerMillisecond
+: <a class="el" href="a00032.html#a831e887150474c087170679eaca8672b">oboe</a>
+</li>
+<li>kNanosPerSecond
+: <a class="el" href="a00032.html#a5948466b593c4eab65f7025846a39f51">oboe</a>
+</li>
+<li>kUnspecified
+: <a class="el" href="a00032.html#ab0772052200184e514082eaa89be7905">oboe</a>
+</li>
+</ul>
+</div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
diff --git a/docs/reference/namespaceoboe.html b/docs/reference/namespaceoboe.html
deleted file mode 100644
index 6ea1eed..0000000
--- a/docs/reference/namespaceoboe.html
+++ /dev/null
@@ -1,572 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: oboe Namespace Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> &#124;
-<a href="#enum-members">Enumerations</a> &#124;
-<a href="#func-members">Functions</a> &#124;
-<a href="#var-members">Variables</a>  </div>
-  <div class="headertitle">
-<div class="title">oboe Namespace Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_version.html">Version</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
-Enumerations</h2></td></tr>
-<tr class="memitem:a7fd7bd0828b61e3b3097e33dc90ac123"><td class="memItemLeft" align="right" valign="top"><a id="a7fd7bd0828b61e3b3097e33dc90ac123"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>StreamState</b> : aaudio_stream_state_t { <br />
-&#160;&#160;<b>Uninitialized</b> = AAUDIO_STREAM_STATE_UNINITIALIZED, 
-<b>Unknown</b> = AAUDIO_STREAM_STATE_UNKNOWN, 
-<b>Open</b> = AAUDIO_STREAM_STATE_OPEN, 
-<b>Starting</b> = AAUDIO_STREAM_STATE_STARTING, 
-<br />
-&#160;&#160;<b>Started</b> = AAUDIO_STREAM_STATE_STARTED, 
-<b>Pausing</b> = AAUDIO_STREAM_STATE_PAUSING, 
-<b>Paused</b> = AAUDIO_STREAM_STATE_PAUSED, 
-<b>Flushing</b> = AAUDIO_STREAM_STATE_FLUSHING, 
-<br />
-&#160;&#160;<b>Flushed</b> = AAUDIO_STREAM_STATE_FLUSHED, 
-<b>Stopping</b> = AAUDIO_STREAM_STATE_STOPPING, 
-<b>Stopped</b> = AAUDIO_STREAM_STATE_STOPPED, 
-<b>Closing</b> = AAUDIO_STREAM_STATE_CLOSING, 
-<br />
-&#160;&#160;<b>Closed</b> = AAUDIO_STREAM_STATE_CLOSED, 
-<b>Disconnected</b> = AAUDIO_STREAM_STATE_DISCONNECTED
-<br />
- }</td></tr>
-<tr class="separator:a7fd7bd0828b61e3b3097e33dc90ac123"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aea1c5f88e3dd4144f51ed5a434fb387b"><td class="memItemLeft" align="right" valign="top"><a id="aea1c5f88e3dd4144f51ed5a434fb387b"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>Direction</b> : aaudio_direction_t { <b>Output</b> = AAUDIO_DIRECTION_OUTPUT, 
-<b>Input</b> = AAUDIO_DIRECTION_INPUT
- }</td></tr>
-<tr class="separator:aea1c5f88e3dd4144f51ed5a434fb387b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a58191d1a396041246bd4e0a87dbfdec9"><td class="memItemLeft" align="right" valign="top"><a id="a58191d1a396041246bd4e0a87dbfdec9"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>AudioFormat</b> : aaudio_format_t { <b>Invalid</b> = AAUDIO_FORMAT_INVALID, 
-<b>Unspecified</b> = AAUDIO_FORMAT_UNSPECIFIED, 
-<b>I16</b> = AAUDIO_FORMAT_PCM_I16, 
-<b>Float</b> = AAUDIO_FORMAT_PCM_FLOAT
- }</td></tr>
-<tr class="separator:a58191d1a396041246bd4e0a87dbfdec9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9cb0d39766aa6d50132a2daa6e826457"><td class="memItemLeft" align="right" valign="top"><a id="a9cb0d39766aa6d50132a2daa6e826457"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>DataCallbackResult</b> : aaudio_data_callback_result_t { <b>Continue</b> = AAUDIO_CALLBACK_RESULT_CONTINUE, 
-<b>Stop</b> = AAUDIO_CALLBACK_RESULT_STOP
- }</td></tr>
-<tr class="separator:a9cb0d39766aa6d50132a2daa6e826457"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5e32586b07bf64da91f99fc33c043cb1"><td class="memItemLeft" align="right" valign="top"><a id="a5e32586b07bf64da91f99fc33c043cb1"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>Result</b> : aaudio_result_t { <br />
-&#160;&#160;<b>OK</b>, 
-<b>ErrorBase</b> = AAUDIO_ERROR_BASE, 
-<b>ErrorDisconnected</b> = AAUDIO_ERROR_DISCONNECTED, 
-<b>ErrorIllegalArgument</b> = AAUDIO_ERROR_ILLEGAL_ARGUMENT, 
-<br />
-&#160;&#160;<b>ErrorInternal</b> = AAUDIO_ERROR_INTERNAL, 
-<b>ErrorInvalidState</b> = AAUDIO_ERROR_INVALID_STATE, 
-<b>ErrorInvalidHandle</b> = AAUDIO_ERROR_INVALID_HANDLE, 
-<b>ErrorUnimplemented</b> = AAUDIO_ERROR_UNIMPLEMENTED, 
-<br />
-&#160;&#160;<b>ErrorUnavailable</b> = AAUDIO_ERROR_UNAVAILABLE, 
-<b>ErrorNoFreeHandles</b> = AAUDIO_ERROR_NO_FREE_HANDLES, 
-<b>ErrorNoMemory</b> = AAUDIO_ERROR_NO_MEMORY, 
-<b>ErrorNull</b> = AAUDIO_ERROR_NULL, 
-<br />
-&#160;&#160;<b>ErrorTimeout</b> = AAUDIO_ERROR_TIMEOUT, 
-<b>ErrorWouldBlock</b> = AAUDIO_ERROR_WOULD_BLOCK, 
-<b>ErrorInvalidFormat</b> = AAUDIO_ERROR_INVALID_FORMAT, 
-<b>ErrorOutOfRange</b> = AAUDIO_ERROR_OUT_OF_RANGE, 
-<br />
-&#160;&#160;<b>ErrorNoService</b> = AAUDIO_ERROR_NO_SERVICE, 
-<b>ErrorInvalidRate</b> = AAUDIO_ERROR_INVALID_RATE, 
-<b>Reserved1</b>, 
-<b>Reserved2</b>, 
-<br />
-&#160;&#160;<b>Reserved3</b>, 
-<b>Reserved4</b>, 
-<b>Reserved5</b>, 
-<b>Reserved6</b>, 
-<br />
-&#160;&#160;<b>Reserved7</b>, 
-<b>Reserved8</b>, 
-<b>Reserved9</b>, 
-<b>Reserved10</b>, 
-<br />
-&#160;&#160;<b>ErrorClosed</b>
-<br />
- }</td></tr>
-<tr class="separator:a5e32586b07bf64da91f99fc33c043cb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae3a52556c58387e0cecba01f9abffdff"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">SharingMode</a> : aaudio_sharing_mode_t { <a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971">SharingMode::Exclusive</a> = AAUDIO_SHARING_MODE_EXCLUSIVE, 
-<a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a> = AAUDIO_SHARING_MODE_SHARED
- }</td></tr>
-<tr class="separator:ae3a52556c58387e0cecba01f9abffdff"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acd0e87a1512eca01c60eb3b7a6676fde"><td class="memItemLeft" align="right" valign="top"><a id="acd0e87a1512eca01c60eb3b7a6676fde"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>PerformanceMode</b> : aaudio_performance_mode_t { <b>None</b> = AAUDIO_PERFORMANCE_MODE_NONE, 
-<b>PowerSaving</b> = AAUDIO_PERFORMANCE_MODE_POWER_SAVING, 
-<b>LowLatency</b> = AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
- }</td></tr>
-<tr class="separator:acd0e87a1512eca01c60eb3b7a6676fde"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a92972414867c81d5974cb2ed7abefbf6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> : int32_t { <a class="el" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5">Unspecified</a> = kUnspecified, 
-<a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b">AudioApi::OpenSLES</a>, 
-<a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AudioApi::AAudio</a>
- }</td></tr>
-<tr class="separator:a92972414867c81d5974cb2ed7abefbf6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b2a1bdc891d640eb82724dcd9b7afbb"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">Usage</a> : aaudio_usage_t { <br />
-&#160;&#160;<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74">Usage::Media</a> = CONSTANT_API_P(1, AAUDIO_USAGE_MEDIA), 
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a5bad8854288c956062ec1d4d7c14fed6">VoiceCommunication</a> = CONSTANT_API_P(2, AAUDIO_USAGE_VOICE_COMMUNICATION), 
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74">Usage::VoiceCommunicationSignalling</a>, 
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba46c4c4d980dfe025ae5b35aa0011dde4">Usage::Alarm</a> = CONSTANT_API_P(4, AAUDIO_USAGE_ALARM), 
-<br />
-&#160;&#160;<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71">Usage::Notification</a> = CONSTANT_API_P(5, AAUDIO_USAGE_NOTIFICATION), 
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf">Usage::NotificationRingtone</a> = CONSTANT_API_P(6, AAUDIO_USAGE_NOTIFICATION_RINGTONE), 
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f">Usage::NotificationEvent</a> = CONSTANT_API_P(10, AAUDIO_USAGE_NOTIFICATION_EVENT), 
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba639ffd54516c1a84a288a363c9469df8">Usage::AssistanceAccessibility</a> = CONSTANT_API_P(11, AAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY), 
-<br />
-&#160;&#160;<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbbade058a1314f9a8504593259ff4f21a1e">Usage::AssistanceNavigationGuidance</a>, 
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7">Usage::AssistanceSonification</a> = CONSTANT_API_P(13, AAUDIO_USAGE_ASSISTANCE_SONIFICATION), 
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb">Usage::Game</a> = CONSTANT_API_P(14, AAUDIO_USAGE_GAME), 
-<a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b">Usage::Assistant</a> = CONSTANT_API_P(16, AAUDIO_USAGE_ASSISTANT)
-<br />
- }</td></tr>
-<tr class="separator:a1b2a1bdc891d640eb82724dcd9b7afbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a07eed38097ed944422063801f8f83406"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">ContentType</a> : aaudio_content_type_t { <a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1">Speech</a> = CONSTANT_API_P(1, AAUDIO_CONTENT_TYPE_SPEECH), 
-<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517">Music</a> = CONSTANT_API_P(2, AAUDIO_CONTENT_TYPE_MUSIC), 
-<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1">Movie</a> = CONSTANT_API_P(3, AAUDIO_CONTENT_TYPE_MOVIE), 
-<a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799">Sonification</a> = CONSTANT_API_P(4, AAUDIO_CONTENT_TYPE_SONIFICATION)
- }</td></tr>
-<tr class="separator:a07eed38097ed944422063801f8f83406"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a17f63a064de966efddd5d0335992bc04"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">InputPreset</a> : aaudio_input_preset_t { <br />
-&#160;&#160;<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544">Generic</a> = CONSTANT_API_P(1, AAUDIO_INPUT_PRESET_GENERIC), 
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe">Camcorder</a> = CONSTANT_API_P(5, AAUDIO_INPUT_PRESET_CAMCORDER), 
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc">VoiceRecognition</a> = CONSTANT_API_P(6, AAUDIO_INPUT_PRESET_VOICE_RECOGNITION), 
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = CONSTANT_API_P(7, AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION), 
-<br />
-&#160;&#160;<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04a5bad8854288c956062ec1d4d7c14fed6">VoiceCommunication</a> = CONSTANT_API_P(2, AAUDIO_USAGE_VOICE_COMMUNICATION), 
-<a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f">Unprocessed</a> = CONSTANT_API_P(9, AAUDIO_INPUT_PRESET_UNPROCESSED)
-<br />
- }</td></tr>
-<tr class="separator:a17f63a064de966efddd5d0335992bc04"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5752250c10e96179e3618d7f72937eaf"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> { <a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = CONSTANT_API_P(-1, AAUDIO_SESSION_ID_NONE), 
-<b>None</b> = AAUDIO_PERFORMANCE_MODE_NONE, 
-<a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">Allocate</a> = CONSTANT_API_P(0, AAUDIO_SESSION_ID_ALLOCATE)
- }</td></tr>
-<tr class="separator:a5752250c10e96179e3618d7f72937eaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a522e6806948369987639a0d1df03c029"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029">ChannelCount</a> : int32_t { <br />
-&#160;&#160;<a class="el" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = kUnspecified, 
-<b>Unspecified</b> = AAUDIO_FORMAT_UNSPECIFIED, 
-<a class="el" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5">Unspecified</a> = kUnspecified, 
-<a class="el" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">Mono</a> = 1, 
-<br />
-&#160;&#160;<a class="el" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">Stereo</a> = 2
-<br />
- }</td></tr>
-<tr class="separator:a522e6806948369987639a0d1df03c029"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:aa403103686222502d1cfc47bafc10aeb"><td class="memTemplParams" colspan="2"><a id="aa403103686222502d1cfc47bafc10aeb"></a>
-template&lt;typename T &gt; </td></tr>
-<tr class="memitem:aa403103686222502d1cfc47bafc10aeb"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>operator&lt;&lt;</b> (std::ostream &amp;strm, const <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>&lt; T &gt; &amp;result)</td></tr>
-<tr class="separator:aa403103686222502d1cfc47bafc10aeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adbda063116feb9fa98a31ee820170060"><td class="memItemLeft" align="right" valign="top"><a id="adbda063116feb9fa98a31ee820170060"></a>
-void&#160;</td><td class="memItemRight" valign="bottom"><b>convertFloatToPcm16</b> (const float *source, int16_t *destination, int32_t numSamples)</td></tr>
-<tr class="separator:adbda063116feb9fa98a31ee820170060"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad17bee42828d13f2ef62a889e175c643"><td class="memItemLeft" align="right" valign="top"><a id="ad17bee42828d13f2ef62a889e175c643"></a>
-void&#160;</td><td class="memItemRight" valign="bottom"><b>convertPcm16ToFloat</b> (const int16_t *source, float *destination, int32_t numSamples)</td></tr>
-<tr class="separator:ad17bee42828d13f2ef62a889e175c643"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac67383a3df0f6e7a51f8415ffd9fdaca"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#ac67383a3df0f6e7a51f8415ffd9fdaca">convertFormatToSizeInBytes</a> (AudioFormat format)</td></tr>
-<tr class="separator:ac67383a3df0f6e7a51f8415ffd9fdaca"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8d1ae211254cc239019f165b607f4365"><td class="memTemplParams" colspan="2">template&lt;typename FromType &gt; </td></tr>
-<tr class="memitem:a8d1ae211254cc239019f165b607f4365"><td class="memTemplItemLeft" align="right" valign="top">const char *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a8d1ae211254cc239019f165b607f4365">convertToText</a> (FromType)</td></tr>
-<tr class="separator:a8d1ae211254cc239019f165b607f4365"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54528938e9fccab7ad8947ccf0e409db"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db">getSdkVersion</a> ()</td></tr>
-<tr class="separator:a54528938e9fccab7ad8947ccf0e409db"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:aab8f5f081a8b2147e16ec920347c1b5c"><td class="memItemLeft" align="right" valign="top"><a id="aab8f5f081a8b2147e16ec920347c1b5c"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kDefaultTimeoutNanos</b> = (2000 * kNanosPerMillisecond)</td></tr>
-<tr class="separator:aab8f5f081a8b2147e16ec920347c1b5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab0772052200184e514082eaa89be7905"><td class="memItemLeft" align="right" valign="top"><a id="ab0772052200184e514082eaa89be7905"></a>
-constexpr int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>kUnspecified</b> = 0</td></tr>
-<tr class="separator:ab0772052200184e514082eaa89be7905"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aedef0759ae3622b6f0324799bcbdebf0"><td class="memItemLeft" align="right" valign="top"><a id="aedef0759ae3622b6f0324799bcbdebf0"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kNanosPerMicrosecond</b> = 1000</td></tr>
-<tr class="separator:aedef0759ae3622b6f0324799bcbdebf0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a831e887150474c087170679eaca8672b"><td class="memItemLeft" align="right" valign="top"><a id="a831e887150474c087170679eaca8672b"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kNanosPerMillisecond</b> = kNanosPerMicrosecond * 1000</td></tr>
-<tr class="separator:a831e887150474c087170679eaca8672b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad1bb9f5626cec20d3a052a8721959873"><td class="memItemLeft" align="right" valign="top"><a id="ad1bb9f5626cec20d3a052a8721959873"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kMillisPerSecond</b> = 1000</td></tr>
-<tr class="separator:ad1bb9f5626cec20d3a052a8721959873"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5948466b593c4eab65f7025846a39f51"><td class="memItemLeft" align="right" valign="top"><a id="a5948466b593c4eab65f7025846a39f51"></a>
-constexpr int64_t&#160;</td><td class="memItemRight" valign="bottom"><b>kNanosPerSecond</b> = kNanosPerMillisecond * kMillisPerSecond</td></tr>
-<tr class="separator:a5948466b593c4eab65f7025846a39f51"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>WARNING - UNDER CONSTRUCTION - THIS API WILL CHANGE. </p>
-</div><h2 class="groupheader">Enumeration Type Documentation</h2>
-<a id="a92972414867c81d5974cb2ed7abefbf6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a92972414867c81d5974cb2ed7abefbf6">&#9670;&nbsp;</a></span>AudioApi</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a> : int32_t</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5"></a>Unspecified&#160;</td><td class="fielddoc"><p>Try to use AAudio. If not available then use OpenSL ES. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b"></a>OpenSLES&#160;</td><td class="fielddoc"><p>Use OpenSL ES. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b"></a>AAudio&#160;</td><td class="fielddoc"><p>Try to use AAudio. Fail if unavailable. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<a id="a522e6806948369987639a0d1df03c029"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a522e6806948369987639a0d1df03c029">&#9670;&nbsp;</a></span>ChannelCount</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029">oboe::ChannelCount</a> : int32_t</td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76"></a>Unspecified&#160;</td><td class="fielddoc"><p>Audio channel count definition, use Mono or Stereo </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5"></a>Unspecified&#160;</td><td class="fielddoc"><p>Try to use AAudio. If not available then use OpenSL ES. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79"></a>Mono&#160;</td><td class="fielddoc"><p>Use this for mono audio </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba"></a>Stereo&#160;</td><td class="fielddoc"><p>Use this for stereo audio. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<a id="a07eed38097ed944422063801f8f83406"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a07eed38097ed944422063801f8f83406">&#9670;&nbsp;</a></span>ContentType</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="namespaceoboe.html#a07eed38097ed944422063801f8f83406">oboe::ContentType</a> : aaudio_content_type_t</td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The CONTENT_TYPE attribute describes "what" you are playing. It expresses the general category of the content. This information is optional. But in case it is known (for instance <a class="el" href="">AAUDIO_CONTENT_TYPE_MOVIE</a> for a movie streaming service or <a class="el" href="">AAUDIO_CONTENT_TYPE_SPEECH</a> for an audio book application) this information might be used by the audio framework to enforce audio focus.</p>
-<p>Note that these match the equivalent values in AudioAttributes in the Android Java API.</p>
-<p>Added in API level 28. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1"></a>Speech&#160;</td><td class="fielddoc"><p>Use this for spoken voice, audio books, etcetera. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517"></a>Music&#160;</td><td class="fielddoc"><p>Use this for pre-recorded or live music. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1"></a>Movie&#160;</td><td class="fielddoc"><p>Use this for a movie or video soundtrack. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799"></a>Sonification&#160;</td><td class="fielddoc"><p>Use this for sound is designed to accompany a user action, such as a click or beep sound made when the user presses a button. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<a id="a17f63a064de966efddd5d0335992bc04"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a17f63a064de966efddd5d0335992bc04">&#9670;&nbsp;</a></span>InputPreset</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="namespaceoboe.html#a17f63a064de966efddd5d0335992bc04">oboe::InputPreset</a> : aaudio_input_preset_t</td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>Defines the audio source. An audio source defines both a default physical source of audio signal, and a recording configuration.</p>
-<p>Note that these match the equivalent values in MediaRecorder.AudioSource in the Android Java API.</p>
-<p>Added in API level 28. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544"></a>Generic&#160;</td><td class="fielddoc"><p>Use this preset when other presets do not apply. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe"></a>Camcorder&#160;</td><td class="fielddoc"><p>Use this preset when recording video. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc"></a>VoiceRecognition&#160;</td><td class="fielddoc"><p>Use this preset when doing speech recognition. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d"></a>VoiceCommunication&#160;</td><td class="fielddoc"><p>Use this preset when doing telephony or voice messaging. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a17f63a064de966efddd5d0335992bc04a5bad8854288c956062ec1d4d7c14fed6"></a>VoiceCommunication&#160;</td><td class="fielddoc"><p>Use this for voice over IP, telephony, etcetera. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f"></a>Unprocessed&#160;</td><td class="fielddoc"><p>Use this preset to obtain an input with no effects. Note that this input will not have automatic gain control so the recorded volume may be very low. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<a id="a5752250c10e96179e3618d7f72937eaf"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5752250c10e96179e3618d7f72937eaf">&#9670;&nbsp;</a></span>SessionId</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f"></a>None&#160;</td><td class="fielddoc"><p>Do not allocate a session ID. Effects cannot be used with this stream. Default.</p>
-<p>Added in API level 28. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123"></a>Allocate&#160;</td><td class="fielddoc"><p>Allocate a session ID that can be used to attach and control effects using the Java AudioEffects API. Note that the use of this flag may result in higher latency.</p>
-<p>Note that this matches the value of AudioManager.AUDIO_SESSION_ID_GENERATE.</p>
-<p>Added in API level 28. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<a id="ae3a52556c58387e0cecba01f9abffdff"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae3a52556c58387e0cecba01f9abffdff">&#9670;&nbsp;</a></span>SharingMode</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="namespaceoboe.html#ae3a52556c58387e0cecba01f9abffdff">oboe::SharingMode</a> : aaudio_sharing_mode_t</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971"></a>Exclusive&#160;</td><td class="fielddoc"><p>This will be the only stream using a particular source or sink. This mode will provide the lowest possible latency. You should close EXCLUSIVE streams immediately when you are not using them. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca"></a>Shared&#160;</td><td class="fielddoc"><p>Multiple applications will be mixed by the AAudio Server. This will have higher latency than the EXCLUSIVE mode. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<a id="a1b2a1bdc891d640eb82724dcd9b7afbb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1b2a1bdc891d640eb82724dcd9b7afbb">&#9670;&nbsp;</a></span>Usage</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="namespaceoboe.html#a1b2a1bdc891d640eb82724dcd9b7afbb">oboe::Usage</a> : aaudio_usage_t</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">strong</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>The Usage attribute expresses "why" you are playing a sound, what is this sound used for. This information is used by certain platforms or routing policies to make more refined volume or routing decisions.</p>
-<p>Note that these match the equivalent values in AudioAttributes in the Android Java API.</p>
-<p>Added in API level 28. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74"></a>Media&#160;</td><td class="fielddoc"><p>Use this for streaming media, music performance, video, podcasts, etcetera. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a17f63a064de966efddd5d0335992bc04a5bad8854288c956062ec1d4d7c14fed6"></a>VoiceCommunication&#160;</td><td class="fielddoc"><p>Use this for voice over IP, telephony, etcetera. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74"></a>VoiceCommunicationSignalling&#160;</td><td class="fielddoc"><p>Use this for sounds associated with telephony such as busy tones, DTMF, etcetera. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba46c4c4d980dfe025ae5b35aa0011dde4"></a>Alarm&#160;</td><td class="fielddoc"><p>Use this to demand the users attention. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71"></a>Notification&#160;</td><td class="fielddoc"><p>Use this for notifying the user when a message has arrived or some other background event has occured. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf"></a>NotificationRingtone&#160;</td><td class="fielddoc"><p>Use this when the phone rings. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f"></a>NotificationEvent&#160;</td><td class="fielddoc"><p>Use this to attract the users attention when, for example, the battery is low. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba639ffd54516c1a84a288a363c9469df8"></a>AssistanceAccessibility&#160;</td><td class="fielddoc"><p>Use this for screen readers, etcetera. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbbade058a1314f9a8504593259ff4f21a1e"></a>AssistanceNavigationGuidance&#160;</td><td class="fielddoc"><p>Use this for driving or navigation directions. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7"></a>AssistanceSonification&#160;</td><td class="fielddoc"><p>Use this for user interface sounds, beeps, etcetera. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb"></a>Game&#160;</td><td class="fielddoc"><p>Use this for game audio and sound effects. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b"></a>Assistant&#160;</td><td class="fielddoc"><p>Use this for audio responses to user queries, audio instructions or help utterances. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="ac67383a3df0f6e7a51f8415ffd9fdaca"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac67383a3df0f6e7a51f8415ffd9fdaca">&#9670;&nbsp;</a></span>convertFormatToSizeInBytes()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int32_t oboe::convertFormatToSizeInBytes </td>
-          <td>(</td>
-          <td class="paramtype">AudioFormat&#160;</td>
-          <td class="paramname"><em>format</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>the size of a sample of the given format in bytes or OBOE_ERROR_ILLEGAL_ARGUMENT </dd></dl>
-
-</div>
-</div>
-<a id="a8d1ae211254cc239019f165b607f4365"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8d1ae211254cc239019f165b607f4365">&#9670;&nbsp;</a></span>convertToText()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template&lt;typename FromType &gt; </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">const char* oboe::convertToText </td>
-          <td>(</td>
-          <td class="paramtype">FromType&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The text is the ASCII symbol corresponding to the supplied Oboe enum value, or an English message saying the value is unrecognized. This is intended for developers to use when debugging. It is not for displaying to users.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">enum</td><td>value </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section see"><dt>See also</dt><dd>common/Utilities.cpp for concrete implementations </dd></dl>
-<dl class="section return"><dt>Returns</dt><dd>text representation of an Oboe enum value. </dd></dl>
-
-</div>
-</div>
-<a id="a54528938e9fccab7ad8947ccf0e409db"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a54528938e9fccab7ad8947ccf0e409db">&#9670;&nbsp;</a></span>getSdkVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int oboe::getSdkVersion </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>Return the version of the SDK that is currently running.</p>
-<p>For example, on Android, this would return 27 for Oreo 8.1. If the version number cannot be determined then this will return -1.</p>
-<dl class="section return"><dt>Returns</dt><dd>version number or -1 </dd></dl>
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/docs/reference/classoboe_1_1_latency_tuner-members.html b/docs/reference/pages.html
similarity index 66%
copy from docs/reference/classoboe_1_1_latency_tuner-members.html
copy to docs/reference/pages.html
index e15fe3a..0e0f087 100644
--- a/docs/reference/classoboe_1_1_latency_tuner-members.html
+++ b/docs/reference/pages.html
@@ -5,7 +5,7 @@
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.14"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: Member List</title>
+<title>Oboe: Related Pages</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -47,6 +47,7 @@
 });
 /* @license-end */</script>
 <div id="main-nav"></div>
+</div><!-- top -->
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -61,23 +62,17 @@
 </iframe>
 </div>
 
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a></li>  </ul>
-</div>
-</div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">oboe::LatencyTuner Member List</div>  </div>
+<div class="title">Related Pages</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>, including all inherited members.</p>
+<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LatencyTuner</b>(AudioStream &amp;stream) (defined in <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00032.html" target="_self">Deprecated List</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
diff --git a/docs/reference/search/all_0.js b/docs/reference/search/all_0.js
index bba1bfd..766494a 100644
--- a/docs/reference/search/all_0.js
+++ b/docs/reference/search/all_0.js
@@ -8,8 +8,9 @@
   ['assistancesonification',['AssistanceSonification',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba1ce57a0572748beebfc0c664ca1077e7',1,'oboe']]],
   ['assistant',['Assistant',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba9b1363da9503dbd4142c0274a88e8d4b',1,'oboe']]],
   ['audioapi',['AudioApi',['../a00032.html#a92972414867c81d5974cb2ed7abefbf6',1,'oboe']]],
-  ['audiostream',['AudioStream',['../a00036.html',1,'oboe']]],
-  ['audiostreambase',['AudioStreamBase',['../a00040.html',1,'oboe']]],
+  ['audioformat',['AudioFormat',['../a00032.html#a58191d1a396041246bd4e0a87dbfdec9',1,'oboe']]],
+  ['audiostream',['AudioStream',['../a00036.html',1,'oboe::AudioStream'],['../a00036.html#a8ebb587a07bf62c864fd62c63b241fd4',1,'oboe::AudioStream::AudioStream()']]],
+  ['audiostreambase',['AudioStreamBase',['../a00040.html',1,'oboe::AudioStreamBase'],['../a00040.html#aa6b103e1b0f808bbc4949d56f0829f98',1,'oboe::AudioStreamBase::AudioStreamBase()']]],
   ['audiostreambuilder',['AudioStreamBuilder',['../a00044.html',1,'oboe']]],
   ['audiostreamcallback',['AudioStreamCallback',['../a00048.html',1,'oboe']]]
 ];
diff --git a/docs/reference/search/all_1.js b/docs/reference/search/all_1.js
index 6d06816..9982315 100644
--- a/docs/reference/search/all_1.js
+++ b/docs/reference/search/all_1.js
@@ -2,10 +2,12 @@
 [
   ['calculatelatencymillis',['calculateLatencyMillis',['../a00036.html#ae023cb001f3261d064f423101798d6be',1,'oboe::AudioStream']]],
   ['camcorder',['Camcorder',['../a00032.html#a17f63a064de966efddd5d0335992bc04a6e8ef178769235d18b44fe2bb5ab33fe',1,'oboe']]],
-  ['channelcount',['ChannelCount',['../a00032.html#a522e6806948369987639a0d1df03c029',1,'oboe']]],
+  ['channelcount',['ChannelCount',['../a00052.html#ad5dce538d5963c81bf58350ab730962d',1,'oboe::DefaultStreamValues::ChannelCount()'],['../a00032.html#a522e6806948369987639a0d1df03c029',1,'oboe::ChannelCount()']]],
   ['close',['close',['../a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8',1,'oboe::AudioStream']]],
   ['contenttype',['ContentType',['../a00032.html#a07eed38097ed944422063801f8f83406',1,'oboe']]],
+  ['convertfloattopcm16',['convertFloatToPcm16',['../a00032.html#adbda063116feb9fa98a31ee820170060',1,'oboe']]],
   ['convertformattosizeinbytes',['convertFormatToSizeInBytes',['../a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca',1,'oboe']]],
-  ['converttotext',['convertToText',['../a00032.html#a8d1ae211254cc239019f165b607f4365',1,'oboe']]],
+  ['convertpcm16tofloat',['convertPcm16ToFloat',['../a00032.html#ad17bee42828d13f2ef62a889e175c643',1,'oboe']]],
+  ['converttotext',['convertToText',['../a00032.html#af65aaea3c5d82eee6906664d61c094b3',1,'oboe']]],
   ['createbasedonsign',['createBasedOnSign',['../a00060.html#a2304c6120e2aad8f2189383a98c7b0a7',1,'oboe::ResultWithValue']]]
 ];
diff --git a/docs/reference/search/all_10.js b/docs/reference/search/all_10.js
index 57aa014..2e1db42 100644
--- a/docs/reference/search/all_10.js
+++ b/docs/reference/search/all_10.js
@@ -1,6 +1,7 @@
 var searchData=
 [
-  ['waitforstatechange',['waitForStateChange',['../a00036.html#a0c865a5501f369d959c39d8ab8b46a07',1,'oboe::AudioStream']]],
-  ['waitforstatetransition',['waitForStateTransition',['../a00036.html#a8adbacd6a55a94a532916ab037fba1d6',1,'oboe::AudioStream']]],
-  ['write',['write',['../a00036.html#ab3f6bf8abed87f3804ac4df3472c3670',1,'oboe::AudioStream']]]
+  ['unprocessed',['Unprocessed',['../a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f',1,'oboe']]],
+  ['unspecified',['Unspecified',['../a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76',1,'oboe::Unspecified()'],['../a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5',1,'oboe::Unspecified()'],['../a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5',1,'oboe::Unspecified()']]],
+  ['usage',['Usage',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb',1,'oboe']]],
+  ['usesaaudio',['usesAAudio',['../a00036.html#a15cdaaaa4c1e8da322d6da33334c8147',1,'oboe::AudioStream']]]
 ];
diff --git a/docs/reference/search/all_11.html b/docs/reference/search/all_11.html
new file mode 100644
index 0000000..b35c8bf
--- /dev/null
+++ b/docs/reference/search/all_11.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_11.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/all_11.js b/docs/reference/search/all_11.js
new file mode 100644
index 0000000..e396fc3
--- /dev/null
+++ b/docs/reference/search/all_11.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['value',['value',['../a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434',1,'oboe::ResultWithValue']]],
+  ['version',['Version',['../a00064.html',1,'oboe']]],
+  ['voicecommunication',['VoiceCommunication',['../a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d',1,'oboe::VoiceCommunication()'],['../a00032.html#a17f63a064de966efddd5d0335992bc04a5bad8854288c956062ec1d4d7c14fed6',1,'oboe::VoiceCommunication()']]],
+  ['voicecommunicationsignalling',['VoiceCommunicationSignalling',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74',1,'oboe']]],
+  ['voicerecognition',['VoiceRecognition',['../a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc',1,'oboe']]]
+];
diff --git a/docs/reference/search/all_12.html b/docs/reference/search/all_12.html
new file mode 100644
index 0000000..fd26524
--- /dev/null
+++ b/docs/reference/search/all_12.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_12.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/all_12.js b/docs/reference/search/all_12.js
new file mode 100644
index 0000000..57aa014
--- /dev/null
+++ b/docs/reference/search/all_12.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['waitforstatechange',['waitForStateChange',['../a00036.html#a0c865a5501f369d959c39d8ab8b46a07',1,'oboe::AudioStream']]],
+  ['waitforstatetransition',['waitForStateTransition',['../a00036.html#a8adbacd6a55a94a532916ab037fba1d6',1,'oboe::AudioStream']]],
+  ['write',['write',['../a00036.html#ab3f6bf8abed87f3804ac4df3472c3670',1,'oboe::AudioStream']]]
+];
diff --git a/docs/reference/search/all_2.js b/docs/reference/search/all_2.js
index 2ade1f5..65acb74 100644
--- a/docs/reference/search/all_2.js
+++ b/docs/reference/search/all_2.js
@@ -1,4 +1,6 @@
 var searchData=
 [
-  ['defaultstreamvalues',['DefaultStreamValues',['../a00052.html',1,'oboe']]]
+  ['datacallbackresult',['DataCallbackResult',['../a00032.html#a9cb0d39766aa6d50132a2daa6e826457',1,'oboe']]],
+  ['defaultstreamvalues',['DefaultStreamValues',['../a00052.html',1,'oboe']]],
+  ['direction',['Direction',['../a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b',1,'oboe']]]
 ];
diff --git a/docs/reference/search/all_3.js b/docs/reference/search/all_3.js
index e11587d..32feb76 100644
--- a/docs/reference/search/all_3.js
+++ b/docs/reference/search/all_3.js
@@ -1,4 +1,5 @@
 var searchData=
 [
+  ['error',['error',['../a00060.html#adfc76ae6db81535c2e82b856975eed41',1,'oboe::ResultWithValue']]],
   ['exclusive',['Exclusive',['../a00032.html#ae3a52556c58387e0cecba01f9abffdffa2ef50b4c466304dc6ac77bac8a779971',1,'oboe']]]
 ];
diff --git a/docs/reference/search/all_4.js b/docs/reference/search/all_4.js
index 8c24102..149c048 100644
--- a/docs/reference/search/all_4.js
+++ b/docs/reference/search/all_4.js
@@ -1,19 +1,7 @@
 var searchData=
 [
-  ['game',['Game',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb',1,'oboe']]],
-  ['generic',['Generic',['../a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544',1,'oboe']]],
-  ['getaudioapi',['getAudioApi',['../a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb',1,'oboe::AudioStream']]],
-  ['getbuffercapacityinframes',['getBufferCapacityInFrames',['../a00040.html#ab1531253e64aaebe9e9eddbafb9098fc',1,'oboe::AudioStreamBase']]],
-  ['getbuffersizeinframes',['getBufferSizeInFrames',['../a00040.html#af5217ab05bfde0d7637024b599302d0b',1,'oboe::AudioStreamBase']]],
-  ['getchannelcount',['getChannelCount',['../a00040.html#aa0b0a068097efaf967fb235c55383dd8',1,'oboe::AudioStreamBase']]],
-  ['getdirection',['getDirection',['../a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1',1,'oboe::AudioStreamBase']]],
-  ['getformat',['getFormat',['../a00040.html#ab1e640461d7bf9d596decb913da7ac86',1,'oboe::AudioStreamBase']]],
-  ['getframesperburst',['getFramesPerBurst',['../a00036.html#ac160acb656515814fa6fdd157c131a0a',1,'oboe::AudioStream']]],
-  ['getframespercallback',['getFramesPerCallback',['../a00040.html#a1c133e1949f0814f60bd8bb61346756b',1,'oboe::AudioStreamBase']]],
-  ['getframeswritten',['getFramesWritten',['../a00036.html#ab43dd4074e1de57bac1c3fd111430341',1,'oboe::AudioStream']]],
-  ['getsamplerate',['getSampleRate',['../a00040.html#ae9d32f3e09174bad69e74f147ee33087',1,'oboe::AudioStreamBase']]],
-  ['getsdkversion',['getSdkVersion',['../a00032.html#a54528938e9fccab7ad8947ccf0e409db',1,'oboe']]],
-  ['getstate',['getState',['../a00036.html#a47bb5798275f14d76444283a6b6f35eb',1,'oboe::AudioStream']]],
-  ['getunderlyingstream',['getUnderlyingStream',['../a00036.html#a5458d7130415eb4defe3dbc11d479e2f',1,'oboe::AudioStream']]],
-  ['getxruncount',['getXRunCount',['../a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261',1,'oboe::AudioStream']]]
+  ['firecallback',['fireCallback',['../a00036.html#a0c4fd19b01a4ef750dd9d6ae3a512eda',1,'oboe::AudioStream']]],
+  ['float',['Float',['../a00032.html#a58191d1a396041246bd4e0a87dbfdec9a22ae0e2b89e5e3d477f988cc36d3272b',1,'oboe']]],
+  ['flush',['flush',['../a00036.html#a32c25c0333eab3d65ce02275ad4acb3d',1,'oboe::AudioStream']]],
+  ['framesperburst',['FramesPerBurst',['../a00052.html#ab5ea5576699cebc56193f5c297d3e300',1,'oboe::DefaultStreamValues']]]
 ];
diff --git a/docs/reference/search/all_5.js b/docs/reference/search/all_5.js
index 37682de..6c381ed 100644
--- a/docs/reference/search/all_5.js
+++ b/docs/reference/search/all_5.js
@@ -1,7 +1,31 @@
 var searchData=
 [
-  ['inputpreset',['InputPreset',['../a00032.html#a17f63a064de966efddd5d0335992bc04',1,'oboe']]],
-  ['isaaudiorecommended',['isAAudioRecommended',['../a00044.html#a622732bbe5c6577356d749f7dc2108df',1,'oboe::AudioStreamBuilder']]],
-  ['isaaudiosupported',['isAAudioSupported',['../a00044.html#a18e7b5f7554a4c2ca763e35e8117d699',1,'oboe::AudioStreamBuilder']]],
-  ['isxruncountsupported',['isXRunCountSupported',['../a00036.html#a43d8a098440cde28f4ee8bedd6d107c4',1,'oboe::AudioStream']]]
+  ['game',['Game',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb',1,'oboe']]],
+  ['generic',['Generic',['../a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544',1,'oboe']]],
+  ['getaudioapi',['getAudioApi',['../a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb',1,'oboe::AudioStream::getAudioApi()'],['../a00044.html#ac9d41811c297fd28bc61833f640bb8d0',1,'oboe::AudioStreamBuilder::getAudioApi()']]],
+  ['getbuffercapacityinframes',['getBufferCapacityInFrames',['../a00040.html#ab1531253e64aaebe9e9eddbafb9098fc',1,'oboe::AudioStreamBase']]],
+  ['getbuffersizeinframes',['getBufferSizeInFrames',['../a00040.html#af5217ab05bfde0d7637024b599302d0b',1,'oboe::AudioStreamBase']]],
+  ['getbytesperframe',['getBytesPerFrame',['../a00036.html#a5c01907a59d5f89a5e4b819fe66b08bc',1,'oboe::AudioStream']]],
+  ['getbytespersample',['getBytesPerSample',['../a00036.html#a44dda61e6e948e49b68f87172f084d62',1,'oboe::AudioStream']]],
+  ['getcallback',['getCallback',['../a00040.html#a1b4a2a191546708da657510c3cd6b797',1,'oboe::AudioStreamBase']]],
+  ['getchannelcount',['getChannelCount',['../a00040.html#aa0b0a068097efaf967fb235c55383dd8',1,'oboe::AudioStreamBase']]],
+  ['getcontenttype',['getContentType',['../a00040.html#ab12e2d068fa87e0553b01a400d96eb82',1,'oboe::AudioStreamBase']]],
+  ['getdeviceid',['getDeviceId',['../a00040.html#a093057d625bc896864b959974c265f21',1,'oboe::AudioStreamBase']]],
+  ['getdirection',['getDirection',['../a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1',1,'oboe::AudioStreamBase']]],
+  ['getformat',['getFormat',['../a00040.html#ab1e640461d7bf9d596decb913da7ac86',1,'oboe::AudioStreamBase']]],
+  ['getframesperburst',['getFramesPerBurst',['../a00036.html#ac160acb656515814fa6fdd157c131a0a',1,'oboe::AudioStream']]],
+  ['getframespercallback',['getFramesPerCallback',['../a00040.html#a1c133e1949f0814f60bd8bb61346756b',1,'oboe::AudioStreamBase']]],
+  ['getframesread',['getFramesRead',['../a00036.html#aeebfc59abd978cd6dff07c16cfe266df',1,'oboe::AudioStream']]],
+  ['getframeswritten',['getFramesWritten',['../a00036.html#ab43dd4074e1de57bac1c3fd111430341',1,'oboe::AudioStream']]],
+  ['getinputpreset',['getInputPreset',['../a00040.html#a5c773b93b8aa38191c7199cab023428a',1,'oboe::AudioStreamBase']]],
+  ['getperformancemode',['getPerformanceMode',['../a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc',1,'oboe::AudioStreamBase']]],
+  ['getsamplerate',['getSampleRate',['../a00040.html#ae9d32f3e09174bad69e74f147ee33087',1,'oboe::AudioStreamBase']]],
+  ['getsdkversion',['getSdkVersion',['../a00032.html#a54528938e9fccab7ad8947ccf0e409db',1,'oboe']]],
+  ['getsessionid',['getSessionId',['../a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e',1,'oboe::AudioStreamBase']]],
+  ['getsharingmode',['getSharingMode',['../a00040.html#a1fb033fc963f971bd1aa8f6707e49b41',1,'oboe::AudioStreamBase']]],
+  ['getstate',['getState',['../a00036.html#a47bb5798275f14d76444283a6b6f35eb',1,'oboe::AudioStream']]],
+  ['gettimestamp',['getTimestamp',['../a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d',1,'oboe::AudioStream']]],
+  ['getunderlyingstream',['getUnderlyingStream',['../a00036.html#a5458d7130415eb4defe3dbc11d479e2f',1,'oboe::AudioStream']]],
+  ['getusage',['getUsage',['../a00040.html#a0bcfb2f8bd11c92b541fd910da9af397',1,'oboe::AudioStreamBase']]],
+  ['getxruncount',['getXRunCount',['../a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261',1,'oboe::AudioStream']]]
 ];
diff --git a/docs/reference/search/all_6.js b/docs/reference/search/all_6.js
index 14dda9c..c5ee922 100644
--- a/docs/reference/search/all_6.js
+++ b/docs/reference/search/all_6.js
@@ -1,4 +1,13 @@
 var searchData=
 [
-  ['latencytuner',['LatencyTuner',['../a00056.html',1,'oboe']]]
+  ['i16',['I16',['../a00032.html#a58191d1a396041246bd4e0a87dbfdec9abcd774f891b5f9df7099f3ea75dadf8d',1,'oboe']]],
+  ['incrementframesread',['incrementFramesRead',['../a00036.html#a81568482a217b314498e2501210758d7',1,'oboe::AudioStream']]],
+  ['incrementframeswritten',['incrementFramesWritten',['../a00036.html#ad6b4c63f6ed1ecb509f7b80352a9c0bd',1,'oboe::AudioStream']]],
+  ['input',['Input',['../a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba324118a6721dd6b8a9b9f4e327df2bf5',1,'oboe']]],
+  ['inputpreset',['InputPreset',['../a00032.html#a17f63a064de966efddd5d0335992bc04',1,'oboe']]],
+  ['invalid',['Invalid',['../a00032.html#a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b',1,'oboe']]],
+  ['isaaudiorecommended',['isAAudioRecommended',['../a00044.html#a622732bbe5c6577356d749f7dc2108df',1,'oboe::AudioStreamBuilder']]],
+  ['isaaudiosupported',['isAAudioSupported',['../a00044.html#a18e7b5f7554a4c2ca763e35e8117d699',1,'oboe::AudioStreamBuilder']]],
+  ['isplaying',['isPlaying',['../a00036.html#ad5260e2cc71108b1b2e694bf6162279f',1,'oboe::AudioStream']]],
+  ['isxruncountsupported',['isXRunCountSupported',['../a00036.html#a43d8a098440cde28f4ee8bedd6d107c4',1,'oboe::AudioStream']]]
 ];
diff --git a/docs/reference/search/all_7.js b/docs/reference/search/all_7.js
index 040b1d1..980d328 100644
--- a/docs/reference/search/all_7.js
+++ b/docs/reference/search/all_7.js
@@ -1,9 +1,9 @@
 var searchData=
 [
-  ['major',['Major',['../a00064.html#a270f2e92582d5187be339eeda8e2b276',1,'oboe::Version']]],
-  ['media',['Media',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74',1,'oboe']]],
-  ['minor',['Minor',['../a00064.html#ae460bb95e3a9099696205a35fffb5469',1,'oboe::Version']]],
-  ['mono',['Mono',['../a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79',1,'oboe']]],
-  ['movie',['Movie',['../a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1',1,'oboe']]],
-  ['music',['Music',['../a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517',1,'oboe']]]
+  ['kdefaulttimeoutnanos',['kDefaultTimeoutNanos',['../a00032.html#aab8f5f081a8b2147e16ec920347c1b5c',1,'oboe']]],
+  ['kmillispersecond',['kMillisPerSecond',['../a00032.html#ad1bb9f5626cec20d3a052a8721959873',1,'oboe']]],
+  ['knanospermicrosecond',['kNanosPerMicrosecond',['../a00032.html#aedef0759ae3622b6f0324799bcbdebf0',1,'oboe']]],
+  ['knanospermillisecond',['kNanosPerMillisecond',['../a00032.html#a831e887150474c087170679eaca8672b',1,'oboe']]],
+  ['knanospersecond',['kNanosPerSecond',['../a00032.html#a5948466b593c4eab65f7025846a39f51',1,'oboe']]],
+  ['kunspecified',['kUnspecified',['../a00032.html#ab0772052200184e514082eaa89be7905',1,'oboe']]]
 ];
diff --git a/docs/reference/search/all_8.js b/docs/reference/search/all_8.js
index daaac4a..435842f 100644
--- a/docs/reference/search/all_8.js
+++ b/docs/reference/search/all_8.js
@@ -1,8 +1,5 @@
 var searchData=
 [
-  ['none',['None',['../a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f',1,'oboe']]],
-  ['notification',['Notification',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71',1,'oboe']]],
-  ['notificationevent',['NotificationEvent',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f',1,'oboe']]],
-  ['notificationringtone',['NotificationRingtone',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf',1,'oboe']]],
-  ['number',['Number',['../a00064.html#ac579661e79bcee45dc676d4647891de0',1,'oboe::Version']]]
+  ['latencytuner',['LatencyTuner',['../a00056.html',1,'oboe::LatencyTuner'],['../a00056.html#a0263b9a55825c0a403653b2b508073ea',1,'oboe::LatencyTuner::LatencyTuner()']]],
+  ['lowlatency',['LowLatency',['../a00032.html#acd0e87a1512eca01c60eb3b7a6676fdea611907b5ab1865515c35357efa41a9b9',1,'oboe']]]
 ];
diff --git a/docs/reference/search/all_9.js b/docs/reference/search/all_9.js
index 56b6df0..2b89aac 100644
--- a/docs/reference/search/all_9.js
+++ b/docs/reference/search/all_9.js
@@ -1,14 +1,28 @@
 var searchData=
 [
-  ['oboe',['oboe',['../a00032.html',1,'']]],
-  ['onaudioready',['onAudioReady',['../a00048.html#af3a7c44f0254abe6e5e5bb566e2317df',1,'oboe::AudioStreamCallback']]],
-  ['ondefaultcallback',['onDefaultCallback',['../a00036.html#abda7ae8e6832030572785de3964ed848',1,'oboe::AudioStream']]],
-  ['onerrorafterclose',['onErrorAfterClose',['../a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba',1,'oboe::AudioStreamCallback']]],
-  ['onerrorbeforeclose',['onErrorBeforeClose',['../a00048.html#a2407ff537a60301fd161bd2c36913bfd',1,'oboe::AudioStreamCallback']]],
-  ['open',['open',['../a00036.html#a686c6ce8a29051c858fd1de386805dc6',1,'oboe::AudioStream']]],
-  ['opensles',['OpenSLES',['../a00032.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b',1,'oboe']]],
-  ['openstream',['openStream',['../a00044.html#a86b94cfa47729bef2e04dce1a9086074',1,'oboe::AudioStreamBuilder']]],
-  ['operator_20bool',['operator bool',['../a00060.html#ae32b1953b777af7d1d0c94862ca39986',1,'oboe::ResultWithValue']]],
-  ['operator_20result',['operator Result',['../a00060.html#af62107817c0bc76047e6b655a78504ba',1,'oboe::ResultWithValue']]],
-  ['operator_21',['operator!',['../a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3',1,'oboe::ResultWithValue']]]
+  ['major',['Major',['../a00064.html#a270f2e92582d5187be339eeda8e2b276',1,'oboe::Version']]],
+  ['mbuffercapacityinframes',['mBufferCapacityInFrames',['../a00040.html#ac81d4719b350f8138aad1af38f0873b6',1,'oboe::AudioStreamBase']]],
+  ['mbuffersizeinframes',['mBufferSizeInFrames',['../a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a',1,'oboe::AudioStreamBase']]],
+  ['mchannelcount',['mChannelCount',['../a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206',1,'oboe::AudioStreamBase']]],
+  ['mcontenttype',['mContentType',['../a00040.html#a5f8f0e5add381b841856de80ea4cdb2b',1,'oboe::AudioStreamBase']]],
+  ['mdeviceid',['mDeviceId',['../a00040.html#a23dafa12fb1a6242b088ebd5a52798c8',1,'oboe::AudioStreamBase']]],
+  ['mdirection',['mDirection',['../a00040.html#a26e9294721561d3b16bcaeec5faf4880',1,'oboe::AudioStreamBase']]],
+  ['media',['Media',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74',1,'oboe']]],
+  ['mformat',['mFormat',['../a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09',1,'oboe::AudioStreamBase']]],
+  ['mframesperburst',['mFramesPerBurst',['../a00040.html#a54061319ed348329a29d883a5de2482e',1,'oboe::AudioStreamBase']]],
+  ['mframespercallback',['mFramesPerCallback',['../a00040.html#a3962eb94420ad0ecea70029236001899',1,'oboe::AudioStreamBase']]],
+  ['mframesread',['mFramesRead',['../a00036.html#a2b9124ba3b0f564fa58b0651438250e7',1,'oboe::AudioStream']]],
+  ['mframeswritten',['mFramesWritten',['../a00036.html#aa88d2a712b91a8b763f2721d78480ba8',1,'oboe::AudioStream']]],
+  ['minor',['Minor',['../a00064.html#ae460bb95e3a9099696205a35fffb5469',1,'oboe::Version']]],
+  ['minputpreset',['mInputPreset',['../a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589',1,'oboe::AudioStreamBase']]],
+  ['mnativeformat',['mNativeFormat',['../a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60',1,'oboe::AudioStream']]],
+  ['mono',['Mono',['../a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79',1,'oboe']]],
+  ['movie',['Movie',['../a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1',1,'oboe']]],
+  ['mperformancemode',['mPerformanceMode',['../a00040.html#ab99671c2d0552557e75dc7b4afe91765',1,'oboe::AudioStreamBase']]],
+  ['msamplerate',['mSampleRate',['../a00040.html#a998885bb6c4f37e145f4626ad4177dea',1,'oboe::AudioStreamBase']]],
+  ['msessionid',['mSessionId',['../a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737',1,'oboe::AudioStreamBase']]],
+  ['msharingmode',['mSharingMode',['../a00040.html#ae9187492b679c97a0963e264954be473',1,'oboe::AudioStreamBase']]],
+  ['mstreamcallback',['mStreamCallback',['../a00040.html#ae3f72318212dd9977d7fa0ced92c91f4',1,'oboe::AudioStreamBase']]],
+  ['musage',['mUsage',['../a00040.html#a5b518e82f39c9fcbd7050fd66adb253c',1,'oboe::AudioStreamBase']]],
+  ['music',['Music',['../a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517',1,'oboe']]]
 ];
diff --git a/docs/reference/search/all_a.js b/docs/reference/search/all_a.js
index 3e251a9..580452f 100644
--- a/docs/reference/search/all_a.js
+++ b/docs/reference/search/all_a.js
@@ -1,4 +1,8 @@
 var searchData=
 [
-  ['patch',['Patch',['../a00064.html#a690110f2b3e887892da8f29ab5c057b2',1,'oboe::Version']]]
+  ['none',['None',['../a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f',1,'oboe::None()'],['../a00032.html#a5752250c10e96179e3618d7f72937eafa6adf97f83acf6453d4a6a4b1070f3754',1,'oboe::None()']]],
+  ['notification',['Notification',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71',1,'oboe']]],
+  ['notificationevent',['NotificationEvent',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f',1,'oboe']]],
+  ['notificationringtone',['NotificationRingtone',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf',1,'oboe']]],
+  ['number',['Number',['../a00064.html#ac579661e79bcee45dc676d4647891de0',1,'oboe::Version']]]
 ];
diff --git a/docs/reference/search/all_b.js b/docs/reference/search/all_b.js
index 9997821..d9cc432 100644
--- a/docs/reference/search/all_b.js
+++ b/docs/reference/search/all_b.js
@@ -1,5 +1,17 @@
 var searchData=
 [
-  ['requestreset',['requestReset',['../a00056.html#a6c0142e08dc65eda8f758b4794450867',1,'oboe::LatencyTuner']]],
-  ['resultwithvalue',['ResultWithValue',['../a00060.html',1,'oboe']]]
+  ['oboe',['oboe',['../a00032.html',1,'']]],
+  ['onaudioready',['onAudioReady',['../a00048.html#af3a7c44f0254abe6e5e5bb566e2317df',1,'oboe::AudioStreamCallback']]],
+  ['ondefaultcallback',['onDefaultCallback',['../a00036.html#abda7ae8e6832030572785de3964ed848',1,'oboe::AudioStream']]],
+  ['onerrorafterclose',['onErrorAfterClose',['../a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba',1,'oboe::AudioStreamCallback']]],
+  ['onerrorbeforeclose',['onErrorBeforeClose',['../a00048.html#a2407ff537a60301fd161bd2c36913bfd',1,'oboe::AudioStreamCallback']]],
+  ['open',['open',['../a00036.html#a686c6ce8a29051c858fd1de386805dc6',1,'oboe::AudioStream']]],
+  ['opensles',['OpenSLES',['../a00032.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b',1,'oboe']]],
+  ['openstream',['openStream',['../a00044.html#a86b94cfa47729bef2e04dce1a9086074',1,'oboe::AudioStreamBuilder']]],
+  ['operator_20bool',['operator bool',['../a00060.html#ae32b1953b777af7d1d0c94862ca39986',1,'oboe::ResultWithValue']]],
+  ['operator_20result',['operator Result',['../a00060.html#af62107817c0bc76047e6b655a78504ba',1,'oboe::ResultWithValue']]],
+  ['operator_21',['operator!',['../a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3',1,'oboe::ResultWithValue']]],
+  ['operator_3c_3c',['operator&lt;&lt;',['../a00032.html#aa403103686222502d1cfc47bafc10aeb',1,'oboe']]],
+  ['operator_3d',['operator=',['../a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc',1,'oboe::AudioStreamBase']]],
+  ['output',['Output',['../a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54',1,'oboe']]]
 ];
diff --git a/docs/reference/search/all_c.js b/docs/reference/search/all_c.js
index ab09002..25016d7 100644
--- a/docs/reference/search/all_c.js
+++ b/docs/reference/search/all_c.js
@@ -1,26 +1,7 @@
 var searchData=
 [
-  ['samplerate',['SampleRate',['../a00052.html#a46a5d9a653f2153f618cadcab764e1b1',1,'oboe::DefaultStreamValues']]],
-  ['sessionid',['SessionId',['../a00032.html#a5752250c10e96179e3618d7f72937eaf',1,'oboe']]],
-  ['setaudioapi',['setAudioApi',['../a00044.html#a38c6d6c5e718df1e3ac69daaac47c391',1,'oboe::AudioStreamBuilder']]],
-  ['setbuffercapacityinframes',['setBufferCapacityInFrames',['../a00044.html#abaff480867af51ca0899bfa6fd7cc3ef',1,'oboe::AudioStreamBuilder']]],
-  ['setbuffersizeinframes',['setBufferSizeInFrames',['../a00036.html#ac93b18e18487e809151f63ec3c6228bb',1,'oboe::AudioStream']]],
-  ['setcallback',['setCallback',['../a00044.html#a698cefa9af73bc97c020c004821fccbd',1,'oboe::AudioStreamBuilder']]],
-  ['setchannelcount',['setChannelCount',['../a00044.html#a075d10291e1f998d90c2f73ef767b5a7',1,'oboe::AudioStreamBuilder']]],
-  ['setcontenttype',['setContentType',['../a00044.html#a6a17bafc217c2b624179fbbf77fe4468',1,'oboe::AudioStreamBuilder']]],
-  ['setdeviceid',['setDeviceId',['../a00044.html#af36ddcd00686a9e1de661bdac0685a8e',1,'oboe::AudioStreamBuilder']]],
-  ['setdirection',['setDirection',['../a00044.html#ab3fbd47b06197619c26393637e26354c',1,'oboe::AudioStreamBuilder']]],
-  ['setformat',['setFormat',['../a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515',1,'oboe::AudioStreamBuilder']]],
-  ['setframespercallback',['setFramesPerCallback',['../a00044.html#a3f397821f61eabaeedaf31064c859a54',1,'oboe::AudioStreamBuilder']]],
-  ['setinputpreset',['setInputPreset',['../a00044.html#a144a3d095fd668210282f1a91f23e1f0',1,'oboe::AudioStreamBuilder']]],
-  ['setperformancemode',['setPerformanceMode',['../a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee',1,'oboe::AudioStreamBuilder']]],
-  ['setsamplerate',['setSampleRate',['../a00044.html#a30ef3d5f51d56a9f980dc09600ed139d',1,'oboe::AudioStreamBuilder']]],
-  ['setsessionid',['setSessionId',['../a00044.html#a54c1651bdbe089d0d714af499e8a5f1d',1,'oboe::AudioStreamBuilder']]],
-  ['setsharingmode',['setSharingMode',['../a00044.html#a3e991742acbbfb6fe5ebcf592c478654',1,'oboe::AudioStreamBuilder']]],
-  ['setusage',['setUsage',['../a00044.html#a593255a2f5eb972665775cfc5bc58f6a',1,'oboe::AudioStreamBuilder']]],
-  ['shared',['Shared',['../a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca',1,'oboe']]],
-  ['sharingmode',['SharingMode',['../a00032.html#ae3a52556c58387e0cecba01f9abffdff',1,'oboe']]],
-  ['sonification',['Sonification',['../a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799',1,'oboe']]],
-  ['speech',['Speech',['../a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1',1,'oboe']]],
-  ['stereo',['Stereo',['../a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba',1,'oboe']]]
+  ['patch',['Patch',['../a00064.html#a690110f2b3e887892da8f29ab5c057b2',1,'oboe::Version']]],
+  ['pause',['pause',['../a00036.html#a04f29836748a8e5842aef2be200022ad',1,'oboe::AudioStream']]],
+  ['performancemode',['PerformanceMode',['../a00032.html#acd0e87a1512eca01c60eb3b7a6676fde',1,'oboe']]],
+  ['powersaving',['PowerSaving',['../a00032.html#acd0e87a1512eca01c60eb3b7a6676fdeabbad080463ed11f9d77797c04aa1e5b1',1,'oboe']]]
 ];
diff --git a/docs/reference/search/all_d.js b/docs/reference/search/all_d.js
index d703e14..f6db3d0 100644
--- a/docs/reference/search/all_d.js
+++ b/docs/reference/search/all_d.js
@@ -1,5 +1,11 @@
 var searchData=
 [
-  ['text',['Text',['../a00064.html#a2c86e578b827fbca5f40c460a7754503',1,'oboe::Version']]],
-  ['tune',['tune',['../a00056.html#ad2be756965e6a9af3114008eda892174',1,'oboe::LatencyTuner']]]
+  ['read',['read',['../a00036.html#acbf3933af829313d281b5455053338da',1,'oboe::AudioStream']]],
+  ['requestflush',['requestFlush',['../a00036.html#a6bd5d633ff999e4da1faf3cd949aa602',1,'oboe::AudioStream']]],
+  ['requestpause',['requestPause',['../a00036.html#a7f18bb3cc5490fd7fbc1f6da63c730f6',1,'oboe::AudioStream']]],
+  ['requestreset',['requestReset',['../a00056.html#a6c0142e08dc65eda8f758b4794450867',1,'oboe::LatencyTuner']]],
+  ['requeststart',['requestStart',['../a00036.html#a3c484e314dee8dfed1d419f487b5d601',1,'oboe::AudioStream']]],
+  ['requeststop',['requestStop',['../a00036.html#a820e634f741e6b5efdcef8104cecb919',1,'oboe::AudioStream']]],
+  ['result',['Result',['../a00032.html#a5e32586b07bf64da91f99fc33c043cb1',1,'oboe']]],
+  ['resultwithvalue',['ResultWithValue',['../a00060.html',1,'oboe::ResultWithValue&lt; T &gt;'],['../a00060.html#aae75caa0d16a9e23a012f77fb50c5927',1,'oboe::ResultWithValue::ResultWithValue(oboe::Result error)'],['../a00060.html#a600309367db58d71f0ec16e90f7ebea5',1,'oboe::ResultWithValue::ResultWithValue(T value)']]]
 ];
diff --git a/docs/reference/search/all_e.js b/docs/reference/search/all_e.js
index 58219ff..8d4ce7d 100644
--- a/docs/reference/search/all_e.js
+++ b/docs/reference/search/all_e.js
@@ -1,7 +1,30 @@
 var searchData=
 [
-  ['unprocessed',['Unprocessed',['../a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f',1,'oboe']]],
-  ['unspecified',['Unspecified',['../a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76',1,'oboe::Unspecified()'],['../a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5',1,'oboe::Unspecified()']]],
-  ['usage',['Usage',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb',1,'oboe']]],
-  ['usesaaudio',['usesAAudio',['../a00036.html#a15cdaaaa4c1e8da322d6da33334c8147',1,'oboe::AudioStream']]]
+  ['samplerate',['SampleRate',['../a00052.html#a46a5d9a653f2153f618cadcab764e1b1',1,'oboe::DefaultStreamValues']]],
+  ['sessionid',['SessionId',['../a00032.html#a5752250c10e96179e3618d7f72937eaf',1,'oboe']]],
+  ['setaudioapi',['setAudioApi',['../a00044.html#a38c6d6c5e718df1e3ac69daaac47c391',1,'oboe::AudioStreamBuilder']]],
+  ['setbuffercapacityinframes',['setBufferCapacityInFrames',['../a00044.html#abaff480867af51ca0899bfa6fd7cc3ef',1,'oboe::AudioStreamBuilder']]],
+  ['setbuffersizeinframes',['setBufferSizeInFrames',['../a00036.html#ac93b18e18487e809151f63ec3c6228bb',1,'oboe::AudioStream']]],
+  ['setcallback',['setCallback',['../a00044.html#a698cefa9af73bc97c020c004821fccbd',1,'oboe::AudioStreamBuilder']]],
+  ['setchannelcount',['setChannelCount',['../a00044.html#a075d10291e1f998d90c2f73ef767b5a7',1,'oboe::AudioStreamBuilder']]],
+  ['setcontenttype',['setContentType',['../a00044.html#a6a17bafc217c2b624179fbbf77fe4468',1,'oboe::AudioStreamBuilder']]],
+  ['setdeviceid',['setDeviceId',['../a00044.html#af36ddcd00686a9e1de661bdac0685a8e',1,'oboe::AudioStreamBuilder']]],
+  ['setdirection',['setDirection',['../a00044.html#ab3fbd47b06197619c26393637e26354c',1,'oboe::AudioStreamBuilder']]],
+  ['setformat',['setFormat',['../a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515',1,'oboe::AudioStreamBuilder']]],
+  ['setframespercallback',['setFramesPerCallback',['../a00044.html#a3f397821f61eabaeedaf31064c859a54',1,'oboe::AudioStreamBuilder']]],
+  ['setinputpreset',['setInputPreset',['../a00044.html#a144a3d095fd668210282f1a91f23e1f0',1,'oboe::AudioStreamBuilder']]],
+  ['setnativeformat',['setNativeFormat',['../a00036.html#ab01c37fca9110e916a482a909f5cc82d',1,'oboe::AudioStream']]],
+  ['setperformancemode',['setPerformanceMode',['../a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee',1,'oboe::AudioStreamBuilder']]],
+  ['setsamplerate',['setSampleRate',['../a00044.html#a30ef3d5f51d56a9f980dc09600ed139d',1,'oboe::AudioStreamBuilder']]],
+  ['setsessionid',['setSessionId',['../a00044.html#a54c1651bdbe089d0d714af499e8a5f1d',1,'oboe::AudioStreamBuilder']]],
+  ['setsharingmode',['setSharingMode',['../a00044.html#a3e991742acbbfb6fe5ebcf592c478654',1,'oboe::AudioStreamBuilder']]],
+  ['setusage',['setUsage',['../a00044.html#a593255a2f5eb972665775cfc5bc58f6a',1,'oboe::AudioStreamBuilder']]],
+  ['shared',['Shared',['../a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca',1,'oboe']]],
+  ['sharingmode',['SharingMode',['../a00032.html#ae3a52556c58387e0cecba01f9abffdff',1,'oboe']]],
+  ['sonification',['Sonification',['../a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799',1,'oboe']]],
+  ['speech',['Speech',['../a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1',1,'oboe']]],
+  ['start',['start',['../a00036.html#af04f03eb6b64b564f1c4401688987d21',1,'oboe::AudioStream']]],
+  ['stereo',['Stereo',['../a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba',1,'oboe']]],
+  ['stop',['stop',['../a00036.html#aec093859d42f0470c884edd1e976d9f3',1,'oboe::AudioStream']]],
+  ['streamstate',['StreamState',['../a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123',1,'oboe']]]
 ];
diff --git a/docs/reference/search/all_f.js b/docs/reference/search/all_f.js
index b372964..d703e14 100644
--- a/docs/reference/search/all_f.js
+++ b/docs/reference/search/all_f.js
@@ -1,7 +1,5 @@
 var searchData=
 [
-  ['version',['Version',['../a00064.html',1,'oboe']]],
-  ['voicecommunication',['VoiceCommunication',['../a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d',1,'oboe::VoiceCommunication()'],['../a00032.html#a17f63a064de966efddd5d0335992bc04a5bad8854288c956062ec1d4d7c14fed6',1,'oboe::VoiceCommunication()']]],
-  ['voicecommunicationsignalling',['VoiceCommunicationSignalling',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74',1,'oboe']]],
-  ['voicerecognition',['VoiceRecognition',['../a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc',1,'oboe']]]
+  ['text',['Text',['../a00064.html#a2c86e578b827fbca5f40c460a7754503',1,'oboe::Version']]],
+  ['tune',['tune',['../a00056.html#ad2be756965e6a9af3114008eda892174',1,'oboe::LatencyTuner']]]
 ];
diff --git a/docs/reference/search/enums_0.js b/docs/reference/search/enums_0.js
index d10a8d4..7c83433 100644
--- a/docs/reference/search/enums_0.js
+++ b/docs/reference/search/enums_0.js
@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['audioapi',['AudioApi',['../a00032.html#a92972414867c81d5974cb2ed7abefbf6',1,'oboe']]]
+  ['audioapi',['AudioApi',['../a00032.html#a92972414867c81d5974cb2ed7abefbf6',1,'oboe']]],
+  ['audioformat',['AudioFormat',['../a00032.html#a58191d1a396041246bd4e0a87dbfdec9',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enums_2.js b/docs/reference/search/enums_2.js
index 7d4262f..294a8c8 100644
--- a/docs/reference/search/enums_2.js
+++ b/docs/reference/search/enums_2.js
@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['inputpreset',['InputPreset',['../a00032.html#a17f63a064de966efddd5d0335992bc04',1,'oboe']]]
+  ['datacallbackresult',['DataCallbackResult',['../a00032.html#a9cb0d39766aa6d50132a2daa6e826457',1,'oboe']]],
+  ['direction',['Direction',['../a00032.html#aea1c5f88e3dd4144f51ed5a434fb387b',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enums_3.js b/docs/reference/search/enums_3.js
index 8f93795..7d4262f 100644
--- a/docs/reference/search/enums_3.js
+++ b/docs/reference/search/enums_3.js
@@ -1,5 +1,4 @@
 var searchData=
 [
-  ['sessionid',['SessionId',['../a00032.html#a5752250c10e96179e3618d7f72937eaf',1,'oboe']]],
-  ['sharingmode',['SharingMode',['../a00032.html#ae3a52556c58387e0cecba01f9abffdff',1,'oboe']]]
+  ['inputpreset',['InputPreset',['../a00032.html#a17f63a064de966efddd5d0335992bc04',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enums_4.js b/docs/reference/search/enums_4.js
index 6936889..dc7790e 100644
--- a/docs/reference/search/enums_4.js
+++ b/docs/reference/search/enums_4.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['usage',['Usage',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb',1,'oboe']]]
+  ['performancemode',['PerformanceMode',['../a00032.html#acd0e87a1512eca01c60eb3b7a6676fde',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enums_5.html b/docs/reference/search/enums_5.html
new file mode 100644
index 0000000..3b86395
--- /dev/null
+++ b/docs/reference/search/enums_5.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enums_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/enums_5.js b/docs/reference/search/enums_5.js
new file mode 100644
index 0000000..9e6d033
--- /dev/null
+++ b/docs/reference/search/enums_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['result',['Result',['../a00032.html#a5e32586b07bf64da91f99fc33c043cb1',1,'oboe']]]
+];
diff --git a/docs/reference/search/enums_6.html b/docs/reference/search/enums_6.html
new file mode 100644
index 0000000..acd7a54
--- /dev/null
+++ b/docs/reference/search/enums_6.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enums_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/enums_6.js b/docs/reference/search/enums_6.js
new file mode 100644
index 0000000..ca162d2
--- /dev/null
+++ b/docs/reference/search/enums_6.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['sessionid',['SessionId',['../a00032.html#a5752250c10e96179e3618d7f72937eaf',1,'oboe']]],
+  ['sharingmode',['SharingMode',['../a00032.html#ae3a52556c58387e0cecba01f9abffdff',1,'oboe']]],
+  ['streamstate',['StreamState',['../a00032.html#a7fd7bd0828b61e3b3097e33dc90ac123',1,'oboe']]]
+];
diff --git a/docs/reference/search/enums_7.html b/docs/reference/search/enums_7.html
new file mode 100644
index 0000000..ee24b45
--- /dev/null
+++ b/docs/reference/search/enums_7.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enums_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/enums_7.js b/docs/reference/search/enums_7.js
new file mode 100644
index 0000000..6936889
--- /dev/null
+++ b/docs/reference/search/enums_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['usage',['Usage',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbb',1,'oboe']]]
+];
diff --git a/docs/reference/search/enumvalues_3.js b/docs/reference/search/enumvalues_3.js
index 3f872d7..d9a33bc 100644
--- a/docs/reference/search/enumvalues_3.js
+++ b/docs/reference/search/enumvalues_3.js
@@ -1,5 +1,4 @@
 var searchData=
 [
-  ['game',['Game',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb',1,'oboe']]],
-  ['generic',['Generic',['../a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544',1,'oboe']]]
+  ['float',['Float',['../a00032.html#a58191d1a396041246bd4e0a87dbfdec9a22ae0e2b89e5e3d477f988cc36d3272b',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enumvalues_4.js b/docs/reference/search/enumvalues_4.js
index 50ea809..3f872d7 100644
--- a/docs/reference/search/enumvalues_4.js
+++ b/docs/reference/search/enumvalues_4.js
@@ -1,7 +1,5 @@
 var searchData=
 [
-  ['media',['Media',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74',1,'oboe']]],
-  ['mono',['Mono',['../a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79',1,'oboe']]],
-  ['movie',['Movie',['../a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1',1,'oboe']]],
-  ['music',['Music',['../a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517',1,'oboe']]]
+  ['game',['Game',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba63d72051e901c069f8aa1b32aa0c43bb',1,'oboe']]],
+  ['generic',['Generic',['../a00032.html#a17f63a064de966efddd5d0335992bc04a0ba6f369e7f8a700c14afe2992290544',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enumvalues_5.js b/docs/reference/search/enumvalues_5.js
index 30728ae..9f70d07 100644
--- a/docs/reference/search/enumvalues_5.js
+++ b/docs/reference/search/enumvalues_5.js
@@ -1,7 +1,6 @@
 var searchData=
 [
-  ['none',['None',['../a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f',1,'oboe']]],
-  ['notification',['Notification',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71',1,'oboe']]],
-  ['notificationevent',['NotificationEvent',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f',1,'oboe']]],
-  ['notificationringtone',['NotificationRingtone',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf',1,'oboe']]]
+  ['i16',['I16',['../a00032.html#a58191d1a396041246bd4e0a87dbfdec9abcd774f891b5f9df7099f3ea75dadf8d',1,'oboe']]],
+  ['input',['Input',['../a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba324118a6721dd6b8a9b9f4e327df2bf5',1,'oboe']]],
+  ['invalid',['Invalid',['../a00032.html#a58191d1a396041246bd4e0a87dbfdec9a4bbb8f967da6d1a610596d7257179c2b',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enumvalues_6.js b/docs/reference/search/enumvalues_6.js
index 9a1508f..9c54de8 100644
--- a/docs/reference/search/enumvalues_6.js
+++ b/docs/reference/search/enumvalues_6.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['opensles',['OpenSLES',['../a00032.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b',1,'oboe']]]
+  ['lowlatency',['LowLatency',['../a00032.html#acd0e87a1512eca01c60eb3b7a6676fdea611907b5ab1865515c35357efa41a9b9',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enumvalues_7.js b/docs/reference/search/enumvalues_7.js
index 04f3bc4..50ea809 100644
--- a/docs/reference/search/enumvalues_7.js
+++ b/docs/reference/search/enumvalues_7.js
@@ -1,7 +1,7 @@
 var searchData=
 [
-  ['shared',['Shared',['../a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca',1,'oboe']]],
-  ['sonification',['Sonification',['../a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799',1,'oboe']]],
-  ['speech',['Speech',['../a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1',1,'oboe']]],
-  ['stereo',['Stereo',['../a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba',1,'oboe']]]
+  ['media',['Media',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba3b563524fdb17b4a86590470d40bef74',1,'oboe']]],
+  ['mono',['Mono',['../a00032.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79',1,'oboe']]],
+  ['movie',['Movie',['../a00032.html#a07eed38097ed944422063801f8f83406a8b3b366178c2b7b1688bca6cd33758b1',1,'oboe']]],
+  ['music',['Music',['../a00032.html#a07eed38097ed944422063801f8f83406ac156fcc7b29059305cef26f3904d4517',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enumvalues_8.js b/docs/reference/search/enumvalues_8.js
index c3b1d9f..d8758a7 100644
--- a/docs/reference/search/enumvalues_8.js
+++ b/docs/reference/search/enumvalues_8.js
@@ -1,5 +1,7 @@
 var searchData=
 [
-  ['unprocessed',['Unprocessed',['../a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f',1,'oboe']]],
-  ['unspecified',['Unspecified',['../a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76',1,'oboe::Unspecified()'],['../a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5',1,'oboe::Unspecified()']]]
+  ['none',['None',['../a00032.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f',1,'oboe::None()'],['../a00032.html#a5752250c10e96179e3618d7f72937eafa6adf97f83acf6453d4a6a4b1070f3754',1,'oboe::None()']]],
+  ['notification',['Notification',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba96d008db67fc0b5551a926842bbb6a71',1,'oboe']]],
+  ['notificationevent',['NotificationEvent',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba089240b5380dbd12f1eac0ec258a3b2f',1,'oboe']]],
+  ['notificationringtone',['NotificationRingtone',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba4e7a4b08274d472394b740a20d3bbdaf',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enumvalues_9.js b/docs/reference/search/enumvalues_9.js
index a62416c..1f7b136 100644
--- a/docs/reference/search/enumvalues_9.js
+++ b/docs/reference/search/enumvalues_9.js
@@ -1,6 +1,5 @@
 var searchData=
 [
-  ['voicecommunication',['VoiceCommunication',['../a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d',1,'oboe::VoiceCommunication()'],['../a00032.html#a17f63a064de966efddd5d0335992bc04a5bad8854288c956062ec1d4d7c14fed6',1,'oboe::VoiceCommunication()']]],
-  ['voicecommunicationsignalling',['VoiceCommunicationSignalling',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74',1,'oboe']]],
-  ['voicerecognition',['VoiceRecognition',['../a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc',1,'oboe']]]
+  ['opensles',['OpenSLES',['../a00032.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b',1,'oboe']]],
+  ['output',['Output',['../a00032.html#aea1c5f88e3dd4144f51ed5a434fb387ba29c2c02a361c9d7028472e5d92cd4a54',1,'oboe']]]
 ];
diff --git a/docs/reference/search/enumvalues_a.html b/docs/reference/search/enumvalues_a.html
new file mode 100644
index 0000000..1ec3a2a
--- /dev/null
+++ b/docs/reference/search/enumvalues_a.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enumvalues_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/enumvalues_a.js b/docs/reference/search/enumvalues_a.js
new file mode 100644
index 0000000..f44abd9
--- /dev/null
+++ b/docs/reference/search/enumvalues_a.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['powersaving',['PowerSaving',['../a00032.html#acd0e87a1512eca01c60eb3b7a6676fdeabbad080463ed11f9d77797c04aa1e5b1',1,'oboe']]]
+];
diff --git a/docs/reference/search/enumvalues_b.html b/docs/reference/search/enumvalues_b.html
new file mode 100644
index 0000000..bfc2bf3
--- /dev/null
+++ b/docs/reference/search/enumvalues_b.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enumvalues_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/enumvalues_b.js b/docs/reference/search/enumvalues_b.js
new file mode 100644
index 0000000..04f3bc4
--- /dev/null
+++ b/docs/reference/search/enumvalues_b.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['shared',['Shared',['../a00032.html#ae3a52556c58387e0cecba01f9abffdffaa6156ea9d66fef24e87e841fbabf7cca',1,'oboe']]],
+  ['sonification',['Sonification',['../a00032.html#a07eed38097ed944422063801f8f83406a0885eef555037e94a7cf39fe683c2799',1,'oboe']]],
+  ['speech',['Speech',['../a00032.html#a07eed38097ed944422063801f8f83406a3dc48a4b4619aa4edd1da7b937b4dcd1',1,'oboe']]],
+  ['stereo',['Stereo',['../a00032.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba',1,'oboe']]]
+];
diff --git a/docs/reference/search/enumvalues_c.html b/docs/reference/search/enumvalues_c.html
new file mode 100644
index 0000000..36070b8
--- /dev/null
+++ b/docs/reference/search/enumvalues_c.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enumvalues_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/enumvalues_c.js b/docs/reference/search/enumvalues_c.js
new file mode 100644
index 0000000..ac3b81f
--- /dev/null
+++ b/docs/reference/search/enumvalues_c.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['unprocessed',['Unprocessed',['../a00032.html#a17f63a064de966efddd5d0335992bc04acad9424158aefae0af7975901b11d85f',1,'oboe']]],
+  ['unspecified',['Unspecified',['../a00032.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76',1,'oboe::Unspecified()'],['../a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5',1,'oboe::Unspecified()'],['../a00032.html#a522e6806948369987639a0d1df03c029a6fcdc090caeade09d0efd6253932b6f5',1,'oboe::Unspecified()']]]
+];
diff --git a/docs/reference/search/enumvalues_d.html b/docs/reference/search/enumvalues_d.html
new file mode 100644
index 0000000..e15d8c9
--- /dev/null
+++ b/docs/reference/search/enumvalues_d.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enumvalues_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/enumvalues_d.js b/docs/reference/search/enumvalues_d.js
new file mode 100644
index 0000000..a62416c
--- /dev/null
+++ b/docs/reference/search/enumvalues_d.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['voicecommunication',['VoiceCommunication',['../a00032.html#a17f63a064de966efddd5d0335992bc04a1862e72c9730c448fbec6f61a5d8234d',1,'oboe::VoiceCommunication()'],['../a00032.html#a17f63a064de966efddd5d0335992bc04a5bad8854288c956062ec1d4d7c14fed6',1,'oboe::VoiceCommunication()']]],
+  ['voicecommunicationsignalling',['VoiceCommunicationSignalling',['../a00032.html#a1b2a1bdc891d640eb82724dcd9b7afbba404f62633744bf4da0c6a27a2b78ce74',1,'oboe']]],
+  ['voicerecognition',['VoiceRecognition',['../a00032.html#a17f63a064de966efddd5d0335992bc04af6e440b4e9edf49afe18aa4be77be6fc',1,'oboe']]]
+];
diff --git a/docs/reference/search/functions_0.js b/docs/reference/search/functions_0.js
index b960c68..99961b4 100644
--- a/docs/reference/search/functions_0.js
+++ b/docs/reference/search/functions_0.js
@@ -1,8 +1,5 @@
 var searchData=
 [
-  ['calculatelatencymillis',['calculateLatencyMillis',['../a00036.html#ae023cb001f3261d064f423101798d6be',1,'oboe::AudioStream']]],
-  ['close',['close',['../a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8',1,'oboe::AudioStream']]],
-  ['convertformattosizeinbytes',['convertFormatToSizeInBytes',['../a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca',1,'oboe']]],
-  ['converttotext',['convertToText',['../a00032.html#a8d1ae211254cc239019f165b607f4365',1,'oboe']]],
-  ['createbasedonsign',['createBasedOnSign',['../a00060.html#a2304c6120e2aad8f2189383a98c7b0a7',1,'oboe::ResultWithValue']]]
+  ['audiostream',['AudioStream',['../a00036.html#a8ebb587a07bf62c864fd62c63b241fd4',1,'oboe::AudioStream']]],
+  ['audiostreambase',['AudioStreamBase',['../a00040.html#aa6b103e1b0f808bbc4949d56f0829f98',1,'oboe::AudioStreamBase']]]
 ];
diff --git a/docs/reference/search/functions_1.js b/docs/reference/search/functions_1.js
index 233a00e..2eb05eb 100644
--- a/docs/reference/search/functions_1.js
+++ b/docs/reference/search/functions_1.js
@@ -1,17 +1,10 @@
 var searchData=
 [
-  ['getaudioapi',['getAudioApi',['../a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb',1,'oboe::AudioStream']]],
-  ['getbuffercapacityinframes',['getBufferCapacityInFrames',['../a00040.html#ab1531253e64aaebe9e9eddbafb9098fc',1,'oboe::AudioStreamBase']]],
-  ['getbuffersizeinframes',['getBufferSizeInFrames',['../a00040.html#af5217ab05bfde0d7637024b599302d0b',1,'oboe::AudioStreamBase']]],
-  ['getchannelcount',['getChannelCount',['../a00040.html#aa0b0a068097efaf967fb235c55383dd8',1,'oboe::AudioStreamBase']]],
-  ['getdirection',['getDirection',['../a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1',1,'oboe::AudioStreamBase']]],
-  ['getformat',['getFormat',['../a00040.html#ab1e640461d7bf9d596decb913da7ac86',1,'oboe::AudioStreamBase']]],
-  ['getframesperburst',['getFramesPerBurst',['../a00036.html#ac160acb656515814fa6fdd157c131a0a',1,'oboe::AudioStream']]],
-  ['getframespercallback',['getFramesPerCallback',['../a00040.html#a1c133e1949f0814f60bd8bb61346756b',1,'oboe::AudioStreamBase']]],
-  ['getframeswritten',['getFramesWritten',['../a00036.html#ab43dd4074e1de57bac1c3fd111430341',1,'oboe::AudioStream']]],
-  ['getsamplerate',['getSampleRate',['../a00040.html#ae9d32f3e09174bad69e74f147ee33087',1,'oboe::AudioStreamBase']]],
-  ['getsdkversion',['getSdkVersion',['../a00032.html#a54528938e9fccab7ad8947ccf0e409db',1,'oboe']]],
-  ['getstate',['getState',['../a00036.html#a47bb5798275f14d76444283a6b6f35eb',1,'oboe::AudioStream']]],
-  ['getunderlyingstream',['getUnderlyingStream',['../a00036.html#a5458d7130415eb4defe3dbc11d479e2f',1,'oboe::AudioStream']]],
-  ['getxruncount',['getXRunCount',['../a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261',1,'oboe::AudioStream']]]
+  ['calculatelatencymillis',['calculateLatencyMillis',['../a00036.html#ae023cb001f3261d064f423101798d6be',1,'oboe::AudioStream']]],
+  ['close',['close',['../a00036.html#ad33a20f0d6792e322b9d8a2bcf14fcf8',1,'oboe::AudioStream']]],
+  ['convertfloattopcm16',['convertFloatToPcm16',['../a00032.html#adbda063116feb9fa98a31ee820170060',1,'oboe']]],
+  ['convertformattosizeinbytes',['convertFormatToSizeInBytes',['../a00032.html#ac67383a3df0f6e7a51f8415ffd9fdaca',1,'oboe']]],
+  ['convertpcm16tofloat',['convertPcm16ToFloat',['../a00032.html#ad17bee42828d13f2ef62a889e175c643',1,'oboe']]],
+  ['converttotext',['convertToText',['../a00032.html#af65aaea3c5d82eee6906664d61c094b3',1,'oboe']]],
+  ['createbasedonsign',['createBasedOnSign',['../a00060.html#a2304c6120e2aad8f2189383a98c7b0a7',1,'oboe::ResultWithValue']]]
 ];
diff --git a/docs/reference/search/functions_2.js b/docs/reference/search/functions_2.js
index dbacfe3..313a17a 100644
--- a/docs/reference/search/functions_2.js
+++ b/docs/reference/search/functions_2.js
@@ -1,6 +1,4 @@
 var searchData=
 [
-  ['isaaudiorecommended',['isAAudioRecommended',['../a00044.html#a622732bbe5c6577356d749f7dc2108df',1,'oboe::AudioStreamBuilder']]],
-  ['isaaudiosupported',['isAAudioSupported',['../a00044.html#a18e7b5f7554a4c2ca763e35e8117d699',1,'oboe::AudioStreamBuilder']]],
-  ['isxruncountsupported',['isXRunCountSupported',['../a00036.html#a43d8a098440cde28f4ee8bedd6d107c4',1,'oboe::AudioStream']]]
+  ['error',['error',['../a00060.html#adfc76ae6db81535c2e82b856975eed41',1,'oboe::ResultWithValue']]]
 ];
diff --git a/docs/reference/search/functions_3.js b/docs/reference/search/functions_3.js
index d8643bc..cdee9ca 100644
--- a/docs/reference/search/functions_3.js
+++ b/docs/reference/search/functions_3.js
@@ -1,12 +1,5 @@
 var searchData=
 [
-  ['onaudioready',['onAudioReady',['../a00048.html#af3a7c44f0254abe6e5e5bb566e2317df',1,'oboe::AudioStreamCallback']]],
-  ['ondefaultcallback',['onDefaultCallback',['../a00036.html#abda7ae8e6832030572785de3964ed848',1,'oboe::AudioStream']]],
-  ['onerrorafterclose',['onErrorAfterClose',['../a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba',1,'oboe::AudioStreamCallback']]],
-  ['onerrorbeforeclose',['onErrorBeforeClose',['../a00048.html#a2407ff537a60301fd161bd2c36913bfd',1,'oboe::AudioStreamCallback']]],
-  ['open',['open',['../a00036.html#a686c6ce8a29051c858fd1de386805dc6',1,'oboe::AudioStream']]],
-  ['openstream',['openStream',['../a00044.html#a86b94cfa47729bef2e04dce1a9086074',1,'oboe::AudioStreamBuilder']]],
-  ['operator_20bool',['operator bool',['../a00060.html#ae32b1953b777af7d1d0c94862ca39986',1,'oboe::ResultWithValue']]],
-  ['operator_20result',['operator Result',['../a00060.html#af62107817c0bc76047e6b655a78504ba',1,'oboe::ResultWithValue']]],
-  ['operator_21',['operator!',['../a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3',1,'oboe::ResultWithValue']]]
+  ['firecallback',['fireCallback',['../a00036.html#a0c4fd19b01a4ef750dd9d6ae3a512eda',1,'oboe::AudioStream']]],
+  ['flush',['flush',['../a00036.html#a32c25c0333eab3d65ce02275ad4acb3d',1,'oboe::AudioStream']]]
 ];
diff --git a/docs/reference/search/functions_4.js b/docs/reference/search/functions_4.js
index 16f0798..24b2768 100644
--- a/docs/reference/search/functions_4.js
+++ b/docs/reference/search/functions_4.js
@@ -1,4 +1,29 @@
 var searchData=
 [
-  ['requestreset',['requestReset',['../a00056.html#a6c0142e08dc65eda8f758b4794450867',1,'oboe::LatencyTuner']]]
+  ['getaudioapi',['getAudioApi',['../a00036.html#a2b7a3cee7444114843dbdd1fc705f6bb',1,'oboe::AudioStream::getAudioApi()'],['../a00044.html#ac9d41811c297fd28bc61833f640bb8d0',1,'oboe::AudioStreamBuilder::getAudioApi()']]],
+  ['getbuffercapacityinframes',['getBufferCapacityInFrames',['../a00040.html#ab1531253e64aaebe9e9eddbafb9098fc',1,'oboe::AudioStreamBase']]],
+  ['getbuffersizeinframes',['getBufferSizeInFrames',['../a00040.html#af5217ab05bfde0d7637024b599302d0b',1,'oboe::AudioStreamBase']]],
+  ['getbytesperframe',['getBytesPerFrame',['../a00036.html#a5c01907a59d5f89a5e4b819fe66b08bc',1,'oboe::AudioStream']]],
+  ['getbytespersample',['getBytesPerSample',['../a00036.html#a44dda61e6e948e49b68f87172f084d62',1,'oboe::AudioStream']]],
+  ['getcallback',['getCallback',['../a00040.html#a1b4a2a191546708da657510c3cd6b797',1,'oboe::AudioStreamBase']]],
+  ['getchannelcount',['getChannelCount',['../a00040.html#aa0b0a068097efaf967fb235c55383dd8',1,'oboe::AudioStreamBase']]],
+  ['getcontenttype',['getContentType',['../a00040.html#ab12e2d068fa87e0553b01a400d96eb82',1,'oboe::AudioStreamBase']]],
+  ['getdeviceid',['getDeviceId',['../a00040.html#a093057d625bc896864b959974c265f21',1,'oboe::AudioStreamBase']]],
+  ['getdirection',['getDirection',['../a00040.html#a6f86f2233a04c5a0b056f0c1c261f1b1',1,'oboe::AudioStreamBase']]],
+  ['getformat',['getFormat',['../a00040.html#ab1e640461d7bf9d596decb913da7ac86',1,'oboe::AudioStreamBase']]],
+  ['getframesperburst',['getFramesPerBurst',['../a00036.html#ac160acb656515814fa6fdd157c131a0a',1,'oboe::AudioStream']]],
+  ['getframespercallback',['getFramesPerCallback',['../a00040.html#a1c133e1949f0814f60bd8bb61346756b',1,'oboe::AudioStreamBase']]],
+  ['getframesread',['getFramesRead',['../a00036.html#aeebfc59abd978cd6dff07c16cfe266df',1,'oboe::AudioStream']]],
+  ['getframeswritten',['getFramesWritten',['../a00036.html#ab43dd4074e1de57bac1c3fd111430341',1,'oboe::AudioStream']]],
+  ['getinputpreset',['getInputPreset',['../a00040.html#a5c773b93b8aa38191c7199cab023428a',1,'oboe::AudioStreamBase']]],
+  ['getperformancemode',['getPerformanceMode',['../a00040.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc',1,'oboe::AudioStreamBase']]],
+  ['getsamplerate',['getSampleRate',['../a00040.html#ae9d32f3e09174bad69e74f147ee33087',1,'oboe::AudioStreamBase']]],
+  ['getsdkversion',['getSdkVersion',['../a00032.html#a54528938e9fccab7ad8947ccf0e409db',1,'oboe']]],
+  ['getsessionid',['getSessionId',['../a00040.html#aa3c502ce09bbad7690a2dd6acaf8892e',1,'oboe::AudioStreamBase']]],
+  ['getsharingmode',['getSharingMode',['../a00040.html#a1fb033fc963f971bd1aa8f6707e49b41',1,'oboe::AudioStreamBase']]],
+  ['getstate',['getState',['../a00036.html#a47bb5798275f14d76444283a6b6f35eb',1,'oboe::AudioStream']]],
+  ['gettimestamp',['getTimestamp',['../a00036.html#a1d7cf4e43fb9d7b31857a90d9eceee6d',1,'oboe::AudioStream']]],
+  ['getunderlyingstream',['getUnderlyingStream',['../a00036.html#a5458d7130415eb4defe3dbc11d479e2f',1,'oboe::AudioStream']]],
+  ['getusage',['getUsage',['../a00040.html#a0bcfb2f8bd11c92b541fd910da9af397',1,'oboe::AudioStreamBase']]],
+  ['getxruncount',['getXRunCount',['../a00036.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261',1,'oboe::AudioStream']]]
 ];
diff --git a/docs/reference/search/functions_5.js b/docs/reference/search/functions_5.js
index 0abd90f..bc43339 100644
--- a/docs/reference/search/functions_5.js
+++ b/docs/reference/search/functions_5.js
@@ -1,19 +1,9 @@
 var searchData=
 [
-  ['setaudioapi',['setAudioApi',['../a00044.html#a38c6d6c5e718df1e3ac69daaac47c391',1,'oboe::AudioStreamBuilder']]],
-  ['setbuffercapacityinframes',['setBufferCapacityInFrames',['../a00044.html#abaff480867af51ca0899bfa6fd7cc3ef',1,'oboe::AudioStreamBuilder']]],
-  ['setbuffersizeinframes',['setBufferSizeInFrames',['../a00036.html#ac93b18e18487e809151f63ec3c6228bb',1,'oboe::AudioStream']]],
-  ['setcallback',['setCallback',['../a00044.html#a698cefa9af73bc97c020c004821fccbd',1,'oboe::AudioStreamBuilder']]],
-  ['setchannelcount',['setChannelCount',['../a00044.html#a075d10291e1f998d90c2f73ef767b5a7',1,'oboe::AudioStreamBuilder']]],
-  ['setcontenttype',['setContentType',['../a00044.html#a6a17bafc217c2b624179fbbf77fe4468',1,'oboe::AudioStreamBuilder']]],
-  ['setdeviceid',['setDeviceId',['../a00044.html#af36ddcd00686a9e1de661bdac0685a8e',1,'oboe::AudioStreamBuilder']]],
-  ['setdirection',['setDirection',['../a00044.html#ab3fbd47b06197619c26393637e26354c',1,'oboe::AudioStreamBuilder']]],
-  ['setformat',['setFormat',['../a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515',1,'oboe::AudioStreamBuilder']]],
-  ['setframespercallback',['setFramesPerCallback',['../a00044.html#a3f397821f61eabaeedaf31064c859a54',1,'oboe::AudioStreamBuilder']]],
-  ['setinputpreset',['setInputPreset',['../a00044.html#a144a3d095fd668210282f1a91f23e1f0',1,'oboe::AudioStreamBuilder']]],
-  ['setperformancemode',['setPerformanceMode',['../a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee',1,'oboe::AudioStreamBuilder']]],
-  ['setsamplerate',['setSampleRate',['../a00044.html#a30ef3d5f51d56a9f980dc09600ed139d',1,'oboe::AudioStreamBuilder']]],
-  ['setsessionid',['setSessionId',['../a00044.html#a54c1651bdbe089d0d714af499e8a5f1d',1,'oboe::AudioStreamBuilder']]],
-  ['setsharingmode',['setSharingMode',['../a00044.html#a3e991742acbbfb6fe5ebcf592c478654',1,'oboe::AudioStreamBuilder']]],
-  ['setusage',['setUsage',['../a00044.html#a593255a2f5eb972665775cfc5bc58f6a',1,'oboe::AudioStreamBuilder']]]
+  ['incrementframesread',['incrementFramesRead',['../a00036.html#a81568482a217b314498e2501210758d7',1,'oboe::AudioStream']]],
+  ['incrementframeswritten',['incrementFramesWritten',['../a00036.html#ad6b4c63f6ed1ecb509f7b80352a9c0bd',1,'oboe::AudioStream']]],
+  ['isaaudiorecommended',['isAAudioRecommended',['../a00044.html#a622732bbe5c6577356d749f7dc2108df',1,'oboe::AudioStreamBuilder']]],
+  ['isaaudiosupported',['isAAudioSupported',['../a00044.html#a18e7b5f7554a4c2ca763e35e8117d699',1,'oboe::AudioStreamBuilder']]],
+  ['isplaying',['isPlaying',['../a00036.html#ad5260e2cc71108b1b2e694bf6162279f',1,'oboe::AudioStream']]],
+  ['isxruncountsupported',['isXRunCountSupported',['../a00036.html#a43d8a098440cde28f4ee8bedd6d107c4',1,'oboe::AudioStream']]]
 ];
diff --git a/docs/reference/search/functions_6.js b/docs/reference/search/functions_6.js
index 9f8dfb6..68e93bd 100644
--- a/docs/reference/search/functions_6.js
+++ b/docs/reference/search/functions_6.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['tune',['tune',['../a00056.html#ad2be756965e6a9af3114008eda892174',1,'oboe::LatencyTuner']]]
+  ['latencytuner',['LatencyTuner',['../a00056.html#a0263b9a55825c0a403653b2b508073ea',1,'oboe::LatencyTuner']]]
 ];
diff --git a/docs/reference/search/functions_7.js b/docs/reference/search/functions_7.js
index 88c115f..3b927be 100644
--- a/docs/reference/search/functions_7.js
+++ b/docs/reference/search/functions_7.js
@@ -1,4 +1,14 @@
 var searchData=
 [
-  ['usesaaudio',['usesAAudio',['../a00036.html#a15cdaaaa4c1e8da322d6da33334c8147',1,'oboe::AudioStream']]]
+  ['onaudioready',['onAudioReady',['../a00048.html#af3a7c44f0254abe6e5e5bb566e2317df',1,'oboe::AudioStreamCallback']]],
+  ['ondefaultcallback',['onDefaultCallback',['../a00036.html#abda7ae8e6832030572785de3964ed848',1,'oboe::AudioStream']]],
+  ['onerrorafterclose',['onErrorAfterClose',['../a00048.html#a7089c5e18a80cba89eb3f4fe2341aeba',1,'oboe::AudioStreamCallback']]],
+  ['onerrorbeforeclose',['onErrorBeforeClose',['../a00048.html#a2407ff537a60301fd161bd2c36913bfd',1,'oboe::AudioStreamCallback']]],
+  ['open',['open',['../a00036.html#a686c6ce8a29051c858fd1de386805dc6',1,'oboe::AudioStream']]],
+  ['openstream',['openStream',['../a00044.html#a86b94cfa47729bef2e04dce1a9086074',1,'oboe::AudioStreamBuilder']]],
+  ['operator_20bool',['operator bool',['../a00060.html#ae32b1953b777af7d1d0c94862ca39986',1,'oboe::ResultWithValue']]],
+  ['operator_20result',['operator Result',['../a00060.html#af62107817c0bc76047e6b655a78504ba',1,'oboe::ResultWithValue']]],
+  ['operator_21',['operator!',['../a00060.html#a2dbc8b09ead8b073a78af95b4b0186e3',1,'oboe::ResultWithValue']]],
+  ['operator_3c_3c',['operator&lt;&lt;',['../a00032.html#aa403103686222502d1cfc47bafc10aeb',1,'oboe']]],
+  ['operator_3d',['operator=',['../a00040.html#aa9c987a59555d7a60b9f7a63f4afc7fc',1,'oboe::AudioStreamBase']]]
 ];
diff --git a/docs/reference/search/functions_8.js b/docs/reference/search/functions_8.js
index 57aa014..385c084 100644
--- a/docs/reference/search/functions_8.js
+++ b/docs/reference/search/functions_8.js
@@ -1,6 +1,4 @@
 var searchData=
 [
-  ['waitforstatechange',['waitForStateChange',['../a00036.html#a0c865a5501f369d959c39d8ab8b46a07',1,'oboe::AudioStream']]],
-  ['waitforstatetransition',['waitForStateTransition',['../a00036.html#a8adbacd6a55a94a532916ab037fba1d6',1,'oboe::AudioStream']]],
-  ['write',['write',['../a00036.html#ab3f6bf8abed87f3804ac4df3472c3670',1,'oboe::AudioStream']]]
+  ['pause',['pause',['../a00036.html#a04f29836748a8e5842aef2be200022ad',1,'oboe::AudioStream']]]
 ];
diff --git a/docs/reference/search/functions_9.html b/docs/reference/search/functions_9.html
new file mode 100644
index 0000000..5ccec42
--- /dev/null
+++ b/docs/reference/search/functions_9.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/functions_9.js b/docs/reference/search/functions_9.js
new file mode 100644
index 0000000..7be5129
--- /dev/null
+++ b/docs/reference/search/functions_9.js
@@ -0,0 +1,10 @@
+var searchData=
+[
+  ['read',['read',['../a00036.html#acbf3933af829313d281b5455053338da',1,'oboe::AudioStream']]],
+  ['requestflush',['requestFlush',['../a00036.html#a6bd5d633ff999e4da1faf3cd949aa602',1,'oboe::AudioStream']]],
+  ['requestpause',['requestPause',['../a00036.html#a7f18bb3cc5490fd7fbc1f6da63c730f6',1,'oboe::AudioStream']]],
+  ['requestreset',['requestReset',['../a00056.html#a6c0142e08dc65eda8f758b4794450867',1,'oboe::LatencyTuner']]],
+  ['requeststart',['requestStart',['../a00036.html#a3c484e314dee8dfed1d419f487b5d601',1,'oboe::AudioStream']]],
+  ['requeststop',['requestStop',['../a00036.html#a820e634f741e6b5efdcef8104cecb919',1,'oboe::AudioStream']]],
+  ['resultwithvalue',['ResultWithValue',['../a00060.html#aae75caa0d16a9e23a012f77fb50c5927',1,'oboe::ResultWithValue::ResultWithValue(oboe::Result error)'],['../a00060.html#a600309367db58d71f0ec16e90f7ebea5',1,'oboe::ResultWithValue::ResultWithValue(T value)']]]
+];
diff --git a/docs/reference/search/functions_a.html b/docs/reference/search/functions_a.html
new file mode 100644
index 0000000..3958eb7
--- /dev/null
+++ b/docs/reference/search/functions_a.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/functions_a.js b/docs/reference/search/functions_a.js
new file mode 100644
index 0000000..5823ff7
--- /dev/null
+++ b/docs/reference/search/functions_a.js
@@ -0,0 +1,22 @@
+var searchData=
+[
+  ['setaudioapi',['setAudioApi',['../a00044.html#a38c6d6c5e718df1e3ac69daaac47c391',1,'oboe::AudioStreamBuilder']]],
+  ['setbuffercapacityinframes',['setBufferCapacityInFrames',['../a00044.html#abaff480867af51ca0899bfa6fd7cc3ef',1,'oboe::AudioStreamBuilder']]],
+  ['setbuffersizeinframes',['setBufferSizeInFrames',['../a00036.html#ac93b18e18487e809151f63ec3c6228bb',1,'oboe::AudioStream']]],
+  ['setcallback',['setCallback',['../a00044.html#a698cefa9af73bc97c020c004821fccbd',1,'oboe::AudioStreamBuilder']]],
+  ['setchannelcount',['setChannelCount',['../a00044.html#a075d10291e1f998d90c2f73ef767b5a7',1,'oboe::AudioStreamBuilder']]],
+  ['setcontenttype',['setContentType',['../a00044.html#a6a17bafc217c2b624179fbbf77fe4468',1,'oboe::AudioStreamBuilder']]],
+  ['setdeviceid',['setDeviceId',['../a00044.html#af36ddcd00686a9e1de661bdac0685a8e',1,'oboe::AudioStreamBuilder']]],
+  ['setdirection',['setDirection',['../a00044.html#ab3fbd47b06197619c26393637e26354c',1,'oboe::AudioStreamBuilder']]],
+  ['setformat',['setFormat',['../a00044.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515',1,'oboe::AudioStreamBuilder']]],
+  ['setframespercallback',['setFramesPerCallback',['../a00044.html#a3f397821f61eabaeedaf31064c859a54',1,'oboe::AudioStreamBuilder']]],
+  ['setinputpreset',['setInputPreset',['../a00044.html#a144a3d095fd668210282f1a91f23e1f0',1,'oboe::AudioStreamBuilder']]],
+  ['setnativeformat',['setNativeFormat',['../a00036.html#ab01c37fca9110e916a482a909f5cc82d',1,'oboe::AudioStream']]],
+  ['setperformancemode',['setPerformanceMode',['../a00044.html#a6cd1d65612e844e59da71a68ea0ab3ee',1,'oboe::AudioStreamBuilder']]],
+  ['setsamplerate',['setSampleRate',['../a00044.html#a30ef3d5f51d56a9f980dc09600ed139d',1,'oboe::AudioStreamBuilder']]],
+  ['setsessionid',['setSessionId',['../a00044.html#a54c1651bdbe089d0d714af499e8a5f1d',1,'oboe::AudioStreamBuilder']]],
+  ['setsharingmode',['setSharingMode',['../a00044.html#a3e991742acbbfb6fe5ebcf592c478654',1,'oboe::AudioStreamBuilder']]],
+  ['setusage',['setUsage',['../a00044.html#a593255a2f5eb972665775cfc5bc58f6a',1,'oboe::AudioStreamBuilder']]],
+  ['start',['start',['../a00036.html#af04f03eb6b64b564f1c4401688987d21',1,'oboe::AudioStream']]],
+  ['stop',['stop',['../a00036.html#aec093859d42f0470c884edd1e976d9f3',1,'oboe::AudioStream']]]
+];
diff --git a/docs/reference/search/functions_b.html b/docs/reference/search/functions_b.html
new file mode 100644
index 0000000..b99b702
--- /dev/null
+++ b/docs/reference/search/functions_b.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/functions_b.js b/docs/reference/search/functions_b.js
new file mode 100644
index 0000000..9f8dfb6
--- /dev/null
+++ b/docs/reference/search/functions_b.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['tune',['tune',['../a00056.html#ad2be756965e6a9af3114008eda892174',1,'oboe::LatencyTuner']]]
+];
diff --git a/docs/reference/search/functions_c.html b/docs/reference/search/functions_c.html
new file mode 100644
index 0000000..3a33d87
--- /dev/null
+++ b/docs/reference/search/functions_c.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/functions_c.js b/docs/reference/search/functions_c.js
new file mode 100644
index 0000000..88c115f
--- /dev/null
+++ b/docs/reference/search/functions_c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['usesaaudio',['usesAAudio',['../a00036.html#a15cdaaaa4c1e8da322d6da33334c8147',1,'oboe::AudioStream']]]
+];
diff --git a/docs/reference/search/functions_d.html b/docs/reference/search/functions_d.html
new file mode 100644
index 0000000..31b75b8
--- /dev/null
+++ b/docs/reference/search/functions_d.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/functions_d.js b/docs/reference/search/functions_d.js
new file mode 100644
index 0000000..c9e0576
--- /dev/null
+++ b/docs/reference/search/functions_d.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['value',['value',['../a00060.html#a45f5c99a2c9f8fbaca502276f7ebb434',1,'oboe::ResultWithValue']]]
+];
diff --git a/docs/reference/search/functions_e.html b/docs/reference/search/functions_e.html
new file mode 100644
index 0000000..cddb9bb
--- /dev/null
+++ b/docs/reference/search/functions_e.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/functions_e.js b/docs/reference/search/functions_e.js
new file mode 100644
index 0000000..57aa014
--- /dev/null
+++ b/docs/reference/search/functions_e.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['waitforstatechange',['waitForStateChange',['../a00036.html#a0c865a5501f369d959c39d8ab8b46a07',1,'oboe::AudioStream']]],
+  ['waitforstatetransition',['waitForStateTransition',['../a00036.html#a8adbacd6a55a94a532916ab037fba1d6',1,'oboe::AudioStream']]],
+  ['write',['write',['../a00036.html#ab3f6bf8abed87f3804ac4df3472c3670',1,'oboe::AudioStream']]]
+];
diff --git a/docs/reference/search/pages_0.html b/docs/reference/search/pages_0.html
new file mode 100644
index 0000000..d752858
--- /dev/null
+++ b/docs/reference/search/pages_0.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/pages_0.js b/docs/reference/search/pages_0.js
new file mode 100644
index 0000000..6ced283
--- /dev/null
+++ b/docs/reference/search/pages_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['deprecated_20list',['Deprecated List',['../a00032.html',1,'']]]
+];
diff --git a/docs/reference/search/pages_1.html b/docs/reference/search/pages_1.html
new file mode 100644
index 0000000..924fb48
--- /dev/null
+++ b/docs/reference/search/pages_1.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/pages_1.js b/docs/reference/search/pages_1.js
new file mode 100644
index 0000000..093992d
--- /dev/null
+++ b/docs/reference/search/pages_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['todo_20list',['Todo List',['../a00032.html',1,'']]]
+];
diff --git a/docs/reference/search/searchdata.js b/docs/reference/search/searchdata.js
index 4a41a4c..19097a0 100644
--- a/docs/reference/search/searchdata.js
+++ b/docs/reference/search/searchdata.js
@@ -1,12 +1,12 @@
 var indexSectionsWithContent =
 {
-  0: "acdegilmnoprstuvw",
+  0: "acdefgiklmnoprstuvw",
   1: "adlrv",
   2: "o",
-  3: "cgiorstuw",
-  4: "mnpst",
-  5: "acisu",
-  6: "acegmnosuv"
+  3: "acefgiloprstuvw",
+  4: "cfkmnpst",
+  5: "acdiprsu",
+  6: "acefgilmnopsuv"
 };
 
 var indexSectionNames =
diff --git a/docs/reference/search/variables_0.js b/docs/reference/search/variables_0.js
index 093dfa7..5f9c251 100644
--- a/docs/reference/search/variables_0.js
+++ b/docs/reference/search/variables_0.js
@@ -1,5 +1,4 @@
 var searchData=
 [
-  ['major',['Major',['../a00064.html#a270f2e92582d5187be339eeda8e2b276',1,'oboe::Version']]],
-  ['minor',['Minor',['../a00064.html#ae460bb95e3a9099696205a35fffb5469',1,'oboe::Version']]]
+  ['channelcount',['ChannelCount',['../a00052.html#ad5dce538d5963c81bf58350ab730962d',1,'oboe::DefaultStreamValues']]]
 ];
diff --git a/docs/reference/search/variables_1.js b/docs/reference/search/variables_1.js
index 3f287d2..fa2a0d2 100644
--- a/docs/reference/search/variables_1.js
+++ b/docs/reference/search/variables_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['number',['Number',['../a00064.html#ac579661e79bcee45dc676d4647891de0',1,'oboe::Version']]]
+  ['framesperburst',['FramesPerBurst',['../a00052.html#ab5ea5576699cebc56193f5c297d3e300',1,'oboe::DefaultStreamValues']]]
 ];
diff --git a/docs/reference/search/variables_2.js b/docs/reference/search/variables_2.js
index 3e251a9..980d328 100644
--- a/docs/reference/search/variables_2.js
+++ b/docs/reference/search/variables_2.js
@@ -1,4 +1,9 @@
 var searchData=
 [
-  ['patch',['Patch',['../a00064.html#a690110f2b3e887892da8f29ab5c057b2',1,'oboe::Version']]]
+  ['kdefaulttimeoutnanos',['kDefaultTimeoutNanos',['../a00032.html#aab8f5f081a8b2147e16ec920347c1b5c',1,'oboe']]],
+  ['kmillispersecond',['kMillisPerSecond',['../a00032.html#ad1bb9f5626cec20d3a052a8721959873',1,'oboe']]],
+  ['knanospermicrosecond',['kNanosPerMicrosecond',['../a00032.html#aedef0759ae3622b6f0324799bcbdebf0',1,'oboe']]],
+  ['knanospermillisecond',['kNanosPerMillisecond',['../a00032.html#a831e887150474c087170679eaca8672b',1,'oboe']]],
+  ['knanospersecond',['kNanosPerSecond',['../a00032.html#a5948466b593c4eab65f7025846a39f51',1,'oboe']]],
+  ['kunspecified',['kUnspecified',['../a00032.html#ab0772052200184e514082eaa89be7905',1,'oboe']]]
 ];
diff --git a/docs/reference/search/variables_3.js b/docs/reference/search/variables_3.js
index 0667719..d645969 100644
--- a/docs/reference/search/variables_3.js
+++ b/docs/reference/search/variables_3.js
@@ -1,4 +1,24 @@
 var searchData=
 [
-  ['samplerate',['SampleRate',['../a00052.html#a46a5d9a653f2153f618cadcab764e1b1',1,'oboe::DefaultStreamValues']]]
+  ['major',['Major',['../a00064.html#a270f2e92582d5187be339eeda8e2b276',1,'oboe::Version']]],
+  ['mbuffercapacityinframes',['mBufferCapacityInFrames',['../a00040.html#ac81d4719b350f8138aad1af38f0873b6',1,'oboe::AudioStreamBase']]],
+  ['mbuffersizeinframes',['mBufferSizeInFrames',['../a00040.html#a3b65595d26d1eae1b8ce9925a5b98f6a',1,'oboe::AudioStreamBase']]],
+  ['mchannelcount',['mChannelCount',['../a00040.html#a5ff460bac9d14dfeac4eeddfcbb6e206',1,'oboe::AudioStreamBase']]],
+  ['mcontenttype',['mContentType',['../a00040.html#a5f8f0e5add381b841856de80ea4cdb2b',1,'oboe::AudioStreamBase']]],
+  ['mdeviceid',['mDeviceId',['../a00040.html#a23dafa12fb1a6242b088ebd5a52798c8',1,'oboe::AudioStreamBase']]],
+  ['mdirection',['mDirection',['../a00040.html#a26e9294721561d3b16bcaeec5faf4880',1,'oboe::AudioStreamBase']]],
+  ['mformat',['mFormat',['../a00040.html#a7869f04836c2c2bdc10c7309ad4b8e09',1,'oboe::AudioStreamBase']]],
+  ['mframesperburst',['mFramesPerBurst',['../a00040.html#a54061319ed348329a29d883a5de2482e',1,'oboe::AudioStreamBase']]],
+  ['mframespercallback',['mFramesPerCallback',['../a00040.html#a3962eb94420ad0ecea70029236001899',1,'oboe::AudioStreamBase']]],
+  ['mframesread',['mFramesRead',['../a00036.html#a2b9124ba3b0f564fa58b0651438250e7',1,'oboe::AudioStream']]],
+  ['mframeswritten',['mFramesWritten',['../a00036.html#aa88d2a712b91a8b763f2721d78480ba8',1,'oboe::AudioStream']]],
+  ['minor',['Minor',['../a00064.html#ae460bb95e3a9099696205a35fffb5469',1,'oboe::Version']]],
+  ['minputpreset',['mInputPreset',['../a00040.html#a1e5d4f5b30c4cc36f81ffd858cc00589',1,'oboe::AudioStreamBase']]],
+  ['mnativeformat',['mNativeFormat',['../a00036.html#a07ed6b5e5bd4bc276bc1e1fc08e51d60',1,'oboe::AudioStream']]],
+  ['mperformancemode',['mPerformanceMode',['../a00040.html#ab99671c2d0552557e75dc7b4afe91765',1,'oboe::AudioStreamBase']]],
+  ['msamplerate',['mSampleRate',['../a00040.html#a998885bb6c4f37e145f4626ad4177dea',1,'oboe::AudioStreamBase']]],
+  ['msessionid',['mSessionId',['../a00040.html#abe1c1e9cada1ced9b5c1504ac9b07737',1,'oboe::AudioStreamBase']]],
+  ['msharingmode',['mSharingMode',['../a00040.html#ae9187492b679c97a0963e264954be473',1,'oboe::AudioStreamBase']]],
+  ['mstreamcallback',['mStreamCallback',['../a00040.html#ae3f72318212dd9977d7fa0ced92c91f4',1,'oboe::AudioStreamBase']]],
+  ['musage',['mUsage',['../a00040.html#a5b518e82f39c9fcbd7050fd66adb253c',1,'oboe::AudioStreamBase']]]
 ];
diff --git a/docs/reference/search/variables_4.js b/docs/reference/search/variables_4.js
index 13a9407..3f287d2 100644
--- a/docs/reference/search/variables_4.js
+++ b/docs/reference/search/variables_4.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['text',['Text',['../a00064.html#a2c86e578b827fbca5f40c460a7754503',1,'oboe::Version']]]
+  ['number',['Number',['../a00064.html#ac579661e79bcee45dc676d4647891de0',1,'oboe::Version']]]
 ];
diff --git a/docs/reference/search/variables_5.html b/docs/reference/search/variables_5.html
new file mode 100644
index 0000000..7e95e94
--- /dev/null
+++ b/docs/reference/search/variables_5.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/variables_5.js b/docs/reference/search/variables_5.js
new file mode 100644
index 0000000..3e251a9
--- /dev/null
+++ b/docs/reference/search/variables_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['patch',['Patch',['../a00064.html#a690110f2b3e887892da8f29ab5c057b2',1,'oboe::Version']]]
+];
diff --git a/docs/reference/search/variables_6.html b/docs/reference/search/variables_6.html
new file mode 100644
index 0000000..3d398e6
--- /dev/null
+++ b/docs/reference/search/variables_6.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/variables_6.js b/docs/reference/search/variables_6.js
new file mode 100644
index 0000000..0667719
--- /dev/null
+++ b/docs/reference/search/variables_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['samplerate',['SampleRate',['../a00052.html#a46a5d9a653f2153f618cadcab764e1b1',1,'oboe::DefaultStreamValues']]]
+];
diff --git a/docs/reference/search/variables_7.html b/docs/reference/search/variables_7.html
new file mode 100644
index 0000000..7b79146
--- /dev/null
+++ b/docs/reference/search/variables_7.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.14"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/variables_7.js b/docs/reference/search/variables_7.js
new file mode 100644
index 0000000..13a9407
--- /dev/null
+++ b/docs/reference/search/variables_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['text',['Text',['../a00064.html#a2c86e578b827fbca5f40c460a7754503',1,'oboe::Version']]]
+];
diff --git a/docs/reference/structoboe_1_1_version-members.html b/docs/reference/structoboe_1_1_version-members.html
deleted file mode 100644
index 32eab8a..0000000
--- a/docs/reference/structoboe_1_1_version-members.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.14"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Oboe: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">Oboe
-   &#160;<span id="projectnumber">1.0</span>
-   </div>
-   <div id="projectbrief">Audio library for Android</div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.14 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="structoboe_1_1_version.html">Version</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">oboe::Version Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="structoboe_1_1_version.html">oboe::Version</a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276">Major</a></td><td class="entry"><a class="el" href="structoboe_1_1_version.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469">Minor</a></td><td class="entry"><a class="el" href="structoboe_1_1_version.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0">Number</a></td><td class="entry"><a class="el" href="structoboe_1_1_version.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a></td><td class="entry"><a class="el" href="structoboe_1_1_version.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503">Text</a></td><td class="entry"><a class="el" href="structoboe_1_1_version.html">oboe::Version</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.14
-</small></address>
-</body>
-</html>
diff --git a/include/oboe/AudioStream.h b/include/oboe/AudioStream.h
index cb54a1c..1e9a205 100644
--- a/include/oboe/AudioStream.h
+++ b/include/oboe/AudioStream.h
@@ -28,6 +28,12 @@
 
 namespace oboe {
 
+/**
+ * The default number of nanoseconds to wait for when performing state change operations on the
+ * stream, such as `start` and `stop`.
+ *
+ * @see oboe::AudioStream::start
+ */
 constexpr int64_t kDefaultTimeoutNanos = (2000 * kNanosPerMillisecond);
 
 /**
@@ -37,6 +43,12 @@
 public:
 
     AudioStream() {}
+
+    /**
+     * Construct an `AudioStream` using the given `AudioStreamBuilder`
+     *
+     * @param builder containing all the stream's attributes
+     */
     explicit AudioStream(const AudioStreamBuilder &builder);
 
     virtual ~AudioStream() = default;
@@ -56,20 +68,56 @@
      */
     virtual Result close() = 0;
 
-    /*
-     * These are synchronous and will block until the operation is complete.
+    /**
+     * Start the stream. This will block until the stream has been started, an error occurs
+     * or `timeoutNanoseconds` has been reached.
      */
     virtual Result start(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
+
+    /**
+     * Pause the stream. This will block until the stream has been paused, an error occurs
+     * or `timeoutNanoseconds` has been reached.
+     */
     virtual Result pause(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
+
+    /**
+     * Flush the stream. This will block until the stream has been flushed, an error occurs
+     * or `timeoutNanoseconds` has been reached.
+     */
     virtual Result flush(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
+
+    /**
+     * Stop the stream. This will block until the stream has been stopped, an error occurs
+     * or `timeoutNanoseconds` has been reached.
+     */
     virtual Result stop(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
 
     /* Asynchronous requests.
      * Use waitForStateChange() if you need to wait for completion.
      */
+
+    /**
+     * Start the stream asynchronously. Returns immediately (does not block). Equivalent to calling
+     * `start(0)`.
+     */
     virtual Result requestStart() = 0;
+
+    /**
+     * Pause the stream asynchronously. Returns immediately (does not block). Equivalent to calling
+     * `pause(0)`.
+     */
     virtual Result requestPause() = 0;
+
+    /**
+     * Flush the stream asynchronously. Returns immediately (does not block). Equivalent to calling
+     * `flush(0)`.
+     */
     virtual Result requestFlush() = 0;
+
+    /**
+     * Stop the stream asynchronously. Returns immediately (does not block). Equivalent to calling
+     * `stop(0)`.
+     */
     virtual Result requestStop() = 0;
 
     /**
@@ -151,18 +199,44 @@
      */
     virtual int32_t getFramesPerBurst() = 0;
 
+    /**
+     * Indicates whether the audio stream is playing.
+     *
+     * THIS MAY BE REMOVED IN FUTURE. https://github.com/google/oboe/issues/208
+     */
     bool isPlaying();
 
+    /**
+     * Get the number of bytes in each audio frame. This is calculated using the channel count
+     * and the sample format. For example, a 2 channel floating point stream will have
+     * 2 * 4 = 8 bytes per frame.
+     *
+     * @return number of bytes in each audio frame.
+     */
     int32_t getBytesPerFrame() const { return mChannelCount * getBytesPerSample(); }
 
+    /**
+     * Get the number of bytes per sample. This is calculated using the sample format. For example,
+     * stream using 16-bit integer samples will have 2 bytes per sample.
+     *
+     * @return the number of bytes per sample.
+     */
     int32_t getBytesPerSample() const;
 
     /**
+     * The number of audio frames written into the stream.
      * This monotonic counter will never get reset.
+     *
      * @return the number of frames written so far
      */
     virtual int64_t getFramesWritten() { return mFramesWritten; }
 
+    /**
+     * The number of audio frames read from the stream.
+     * This monotonic counter will never get reset.
+     *
+     * @return the number of frames read so far
+     */
     virtual int64_t getFramesRead() { return mFramesRead; }
 
     /**
@@ -192,6 +266,15 @@
         return ResultWithValue<double>(Result::ErrorUnimplemented);
     }
 
+    /**
+     * Get the timestamp that the frame at `framePosition` was presented to the
+     * audio hardware.
+     *
+     * @param clockId the type of clock to use e.g. CLOCK_MONOTONIC
+     * @param framePosition the frame number to query
+     * @param timeNanoseconds an output parameter which will contain the presentation timestamp
+     * (if the operation is successful)
+     */
     virtual Result getTimestamp(clockid_t clockId,
                                 int64_t *framePosition,
                                 int64_t *timeNanoseconds) {
@@ -200,10 +283,11 @@
 
     // ============== I/O ===========================
     /**
-     * A high level write that will wait until the write is complete or it runs out of time.
-     * If timeoutNanoseconds is zero then this call will not wait.
+     * Write data from the supplied buffer into the stream. This method will block until the write
+     * is complete or it runs out of time.
      *
-     * @param stream A stream created using OboeStream_Open().
+     * If `timeoutNanoseconds` is zero then this call will not wait.
+     *
      * @param buffer The address of the first sample.
      * @param numFrames Number of frames to write. Only complete frames will be written.
      * @param timeoutNanoseconds Maximum number of nanoseconds to wait for completion.
@@ -216,6 +300,18 @@
         return ResultWithValue<int32_t>(Result::ErrorUnimplemented);
     }
 
+    /**
+     * Read data into the supplied buffer from the stream. This method will block until the read
+     * is complete or it runs out of time.
+     *
+     * If `timeoutNanoseconds` is zero then this call will not wait.
+     *
+     * @param buffer The address of the first sample.
+     * @param numFrames Number of frames to read. Only complete frames will be read.
+     * @param timeoutNanoseconds Maximum number of nanoseconds to wait for completion.
+     * @return a ResultWithValue which has a result of Result::OK and a value containing the number
+     * of frames actually read, or result of Result::Error*.
+     */
     virtual ResultWithValue<int32_t> read(void *buffer,
                             int32_t numFrames,
                             int64_t timeoutNanoseconds) {
@@ -223,21 +319,24 @@
     }
 
     /**
+     * Get the underlying audio API which the stream uses.
      *
-     * @return the API that this stream uses
+     * @return the API that this stream uses.
      */
     virtual AudioApi getAudioApi() const = 0;
 
     /**
-     * @return true if this stream is implemented using the AAudio API
+     * Returns true if the underlying audio API is AAudio.
+     *
+     * @return true if this stream is implemented using the AAudio API.
      */
     bool usesAAudio() const {
         return getAudioApi() == AudioApi::AAudio;
     }
 
     /**
-     * Do not use this for production. This is only for debugging.
-     * If you need to call this method then something is wrong.
+     * Only for debugging. Do use in production.
+     * If you need to call this method something is wrong.
      * If you think you need it for production then please let us know
      * so we can modify Oboe so that you don't need this.
      *
@@ -249,9 +348,22 @@
 
 protected:
 
+    /**
+     * Increment the frames written to this stream
+     *
+     * @param frames number of frames to increment by
+     * @return total frames which have been written
+     */
     virtual int64_t incrementFramesWritten(int32_t frames) {
         return mFramesWritten += frames;
     }
+
+    /**
+     * Increment the frames which have been read from this stream
+     *
+     * @param frames number of frames to increment by
+     * @return total frames which have been read
+     */
     virtual int64_t incrementFramesRead(int32_t frames) {
         return mFramesRead += frames;
     }
@@ -277,22 +389,46 @@
         return DataCallbackResult::Stop;
     }
 
+    /**
+     * Override this to provide your own behaviour for the audio callback
+     *
+     * @param audioData container array which audio frames will be written into or read from
+     * @param numFrames number of frames which were read/written
+     * @return the result of the callback: stop or continue
+     *
+     */
     DataCallbackResult fireCallback(void *audioData, int numFrames);
 
+    /**
+     * Used to set the format of the underlying stream
+     */
     virtual void setNativeFormat(AudioFormat format) {
         mNativeFormat = format;
     }
 
-    // TODO: make private
-    // These do not change after open.
+    /**
+     * Do not set directly, use `setNativeFormat`
+     *
+     * TODO: make private
+     * These do not change after open.
+     */
     AudioFormat mNativeFormat = AudioFormat::Invalid;
 
-    // TODO these should be atomic like in AAudio
+    /**
+     * Number of frames which have been written into the stream
+     *
+     * TODO these should be atomic like in AAudio
+     */
     int64_t              mFramesWritten = 0;
+
+    /**
+     * Number of frames which have been read from the stream
+     *
+     * TODO these should be atomic like in AAudio
+     */
     int64_t              mFramesRead = 0;
 
 private:
-    // TODO these should be atomic like in AAudio
     int                  mPreviousScheduler = -1;
 };
 
diff --git a/include/oboe/AudioStreamBase.h b/include/oboe/AudioStreamBase.h
index 9b38fa5..e31b051 100644
--- a/include/oboe/AudioStreamBase.h
+++ b/include/oboe/AudioStreamBase.h
@@ -24,13 +24,8 @@
 namespace oboe {
 
 /**
- * Base class containing parameters for Oboe streams and builders.
- *
- * OboeStreamBuilder can return OBOE_UNSPECIFIED or the requested value.
- *
- * OboeStream will generally return the actual final value, but getFramesPerCallback()
- * can be unspecified even for a stream.
- */
+ * Base class containing parameters for audio streams and builders.
+ **/
 class AudioStreamBase {
 public:
 
@@ -39,12 +34,19 @@
     virtual ~AudioStreamBase() = default;
 
     // This class only contains primitives so we can use default constructor and copy methods.
+
+    /**
+     * Default copy constructor
+     */
     AudioStreamBase(const AudioStreamBase&) = default;
 
+    /**
+     * Default assignment operator
+     */
     AudioStreamBase& operator=(const AudioStreamBase&) = default;
 
     /**
-     * @return number of channels, for example 2 for stereo
+     * @return number of channels, for example 2 for stereo, or kUnspecified
      */
     int getChannelCount() const { return mChannelCount; }
 
@@ -54,18 +56,17 @@
     Direction getDirection() const { return mDirection; }
 
     /**
-     * @return sample rate for the stream
+     * @return sample rate for the stream or kUnspecified
      */
     int32_t getSampleRate() const { return mSampleRate; }
 
     /**
-     * @return framesPerCallback or OBOE_UNSPECIFIED
+     * @return the number of frames in each callback or kUnspecified.
      */
     int getFramesPerCallback() const { return mFramesPerCallback; }
 
     /**
-     * @return OBOE_AUDIO_FORMAT_PCM_FLOAT, OBOE_AUDIO_FORMAT_PCM_I16
-     *         or OBOE_AUDIO_FORMAT_UNSPECIFIED
+     * @return the audio sample format (e.g. Float or I16)
      */
     AudioFormat getFormat() const { return mFormat; }
 
@@ -78,46 +79,90 @@
     virtual int32_t getBufferSizeInFrames() { return mBufferSizeInFrames; };
 
     /**
-     * @return capacityInFrames or OBOE_UNSPECIFIED
+     * @return capacityInFrames or kUnspecified
      */
     virtual int32_t getBufferCapacityInFrames() const { return mBufferCapacityInFrames; }
 
+    /**
+     * @return the sharing mode of the stream.
+     */
     SharingMode getSharingMode() const { return mSharingMode; }
 
+    /**
+     * @return the performance mode of the stream.
+     */
     PerformanceMode getPerformanceMode() const { return mPerformanceMode; }
 
+    /**
+     * @return the device ID of the stream.
+     */
     int32_t getDeviceId() const { return mDeviceId; }
 
+    /**
+     * @return the callback object for this stream, if set.
+     */
     AudioStreamCallback* getCallback() const {
         return mStreamCallback;
     }
 
+    /**
+     * @return the usage for this stream.
+     */
     Usage getUsage() const { return mUsage; }
 
+    /**
+     * @return the stream's content type.
+     */
     ContentType getContentType() const { return mContentType; }
 
+    /**
+     * @return the stream's input preset.
+     */
     InputPreset getInputPreset() const { return mInputPreset; }
 
+    /**
+     * @return the stream's session ID allocation strategy (None or Allocate).
+     */
     SessionId getSessionId() const { return mSessionId; }
 
 protected:
+
+    /** The callback which will be fired when new data is ready to be read/written **/
     AudioStreamCallback            *mStreamCallback = nullptr;
+    /** Number of audio frames which will be requested in each callback */
     int32_t                         mFramesPerCallback = kUnspecified;
+    /** Stream channel count */
     int32_t                         mChannelCount = kUnspecified;
+    /** Stream sample rate */
     int32_t                         mSampleRate = kUnspecified;
+    /** Stream audio device ID */
     int32_t                         mDeviceId = kUnspecified;
+    /** Stream buffer capacity specified as a number of audio frames */
     int32_t                         mBufferCapacityInFrames = kUnspecified;
+    /** Stream buffer size specified as a number of audio frames */
     int32_t                         mBufferSizeInFrames = kUnspecified;
+    /**
+     * Number of frames which will be copied to/from the audio device in a single read/write
+     * operation
+     */
     int32_t                         mFramesPerBurst = kUnspecified;
 
+    /** Stream sharing mode */
     SharingMode                     mSharingMode = SharingMode::Shared;
+    /** Format of audio frames */
     AudioFormat                     mFormat = AudioFormat::Unspecified;
+    /** Stream direction */
     Direction                       mDirection = Direction::Output;
+    /** Stream performance mode */
     PerformanceMode                 mPerformanceMode = PerformanceMode::None;
-    // Added in API 28
+
+    /** Stream usage. Only active on Android 28+ */
     Usage                           mUsage = Usage::Media;
+    /** Stream content type. Only active on Android 28+ */
     ContentType                     mContentType = ContentType::Music;
+    /** Stream input preset. Only active on Android 28+ */
     InputPreset                     mInputPreset = InputPreset::VoiceRecognition;
+    /** Stream session ID allocation strategy. Only active on Android 28+ */
     SessionId                       mSessionId = SessionId::None;
 };
 
diff --git a/include/oboe/AudioStreamBuilder.h b/include/oboe/AudioStreamBuilder.h
index 307493a..9286a57 100644
--- a/include/oboe/AudioStreamBuilder.h
+++ b/include/oboe/AudioStreamBuilder.h
@@ -111,6 +111,13 @@
         return this;
     }
 
+    /**
+     * Get the audio API which will be requested when opening the stream. No guarantees that this is
+     * the API which will actually be used. Query the stream itself to find out the API which is
+     * being used.
+     *
+     * @return the requested audio API
+     */
     AudioApi getAudioApi() const { return mAudioApi; }
 
     /**
diff --git a/include/oboe/AudioStreamCallback.h b/include/oboe/AudioStreamCallback.h
index 9a5db17..19a293f 100644
--- a/include/oboe/AudioStreamCallback.h
+++ b/include/oboe/AudioStreamCallback.h
@@ -23,6 +23,13 @@
 
 class AudioStream;
 
+/**
+ * AudioStreamCallback defines a callback interface for:
+ *
+ * 1) moving data to/from an audio stream using `onAudioReady`
+ * 2) being alerted when a stream has an error using `onError*` methods
+ *
+ */
 class AudioStreamCallback {
 public:
     virtual ~AudioStreamCallback() = default;
diff --git a/include/oboe/Definitions.h b/include/oboe/Definitions.h
index 04ad121..094f733 100644
--- a/include/oboe/Definitions.h
+++ b/include/oboe/Definitions.h
@@ -35,14 +35,35 @@
 
 namespace oboe {
 
+    /**
+     * Represents any attribute, property or value which hasn't been specified.
+     */
     constexpr int32_t kUnspecified = 0;
 
     // TODO: Investigate using std::chrono
+    /**
+     * The number of nanoseconds in a microsecond. 1,000.
+     */
     constexpr int64_t kNanosPerMicrosecond =    1000;
+
+    /**
+     * The number of nanoseconds in a millisecond. 1,000,000.
+     */
     constexpr int64_t kNanosPerMillisecond =    kNanosPerMicrosecond * 1000;
+
+    /**
+     * The number of milliseconds in a second. 1,000.
+     */
     constexpr int64_t kMillisPerSecond =        1000;
+
+    /**
+     * The number of nanoseconds in a second. 1,000,000,000.
+     */
     constexpr int64_t kNanosPerSecond =         kNanosPerMillisecond * kMillisPerSecond;
 
+    /**
+     * The state of the audio stream.
+     */
     enum class StreamState : aaudio_stream_state_t {
         Uninitialized = AAUDIO_STREAM_STATE_UNINITIALIZED,
         Unknown = AAUDIO_STREAM_STATE_UNKNOWN,
@@ -60,23 +81,62 @@
         Disconnected = AAUDIO_STREAM_STATE_DISCONNECTED,
     };
 
+    /**
+     * The direction of the stream.
+     */
     enum class Direction : aaudio_direction_t {
+
+        /**
+         * Used for playback.
+         */
         Output = AAUDIO_DIRECTION_OUTPUT,
+
+        /**
+         * Used for recording.
+         */
         Input = AAUDIO_DIRECTION_INPUT,
     };
 
+    /**
+     * The format of audio samples.
+     */
     enum class AudioFormat : aaudio_format_t {
+        /**
+         * Invalid format.
+         */
         Invalid = AAUDIO_FORMAT_INVALID,
+
+        /**
+         * Unspecified format. Format will be decided by Oboe.
+         */
         Unspecified = AAUDIO_FORMAT_UNSPECIFIED,
+
+        /**
+         * Signed 16-bit integers.
+         */
         I16 = AAUDIO_FORMAT_PCM_I16,
+
+        /**
+         * Single precision floating points.
+         */
         Float = AAUDIO_FORMAT_PCM_FLOAT,
     };
 
+    /**
+     * The result of an audio callback.
+     */
     enum class DataCallbackResult : aaudio_data_callback_result_t {
+        // Indicates to the caller that the callbacks should continue.
         Continue = AAUDIO_CALLBACK_RESULT_CONTINUE,
+
+        // Indicates to the caller that the callbacks should stop immediately.
         Stop = AAUDIO_CALLBACK_RESULT_STOP,
     };
 
+    /**
+     * The result of an operation. All except the `OK` result indicates that an error occurred.
+     * The `Result` can be converted into a human readable string using `convertToText`.
+     */
     enum class Result : aaudio_result_t {
         OK,
         ErrorBase = AAUDIO_ERROR_BASE,
@@ -110,6 +170,9 @@
         ErrorClosed,
     };
 
+    /**
+     * The sharing mode of the audio stream.
+     */
     enum class SharingMode : aaudio_sharing_mode_t {
 
         /**
@@ -126,18 +189,30 @@
         Shared = AAUDIO_SHARING_MODE_SHARED,
     };
 
+    /**
+     * The performance mode of the audio stream.
+     */
     enum class PerformanceMode : aaudio_performance_mode_t {
 
-        // No particular performance needs. Default.
+        /**
+         * No particular performance needs. Default.
+         */
         None = AAUDIO_PERFORMANCE_MODE_NONE,
 
-        // Extending battery life is most important.
+        /**
+         * Extending battery life is most important.
+         */
         PowerSaving = AAUDIO_PERFORMANCE_MODE_POWER_SAVING,
 
-        // Reducing latency is most important.
+        /**
+         * Reducing latency is most important.
+         */
         LowLatency = AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
     };
 
+    /**
+     * The underlying audio API used by the audio stream.
+     */
     enum class AudioApi : int32_t {
         /**
          * Try to use AAudio. If not available then use OpenSL ES.
@@ -163,13 +238,13 @@
 #endif
 
     /**
-     * The Usage attribute expresses "why" you are playing a sound, what is this sound used for.
+     * The Usage attribute expresses *why* you are playing a sound, what is this sound used for.
      * This information is used by certain platforms or routing policies
      * to make more refined volume or routing decisions.
      *
      * Note that these match the equivalent values in AudioAttributes in the Android Java API.
      *
-     * Added in API level 28.
+     * This attribute only has an effect on Android API 28+.
      */
     enum class Usage : aaudio_usage_t {
         /**
@@ -238,16 +313,16 @@
 
 
     /**
-     * The CONTENT_TYPE attribute describes "what" you are playing.
+     * The ContentType attribute describes *what* you are playing.
      * It expresses the general category of the content. This information is optional.
-     * But in case it is known (for instance {@link #AAUDIO_CONTENT_TYPE_MOVIE} for a
-     * movie streaming service or {@link #AAUDIO_CONTENT_TYPE_SPEECH} for
+     * But in case it is known (for instance {@link Movie} for a
+     * movie streaming service or {@link Speech} for
      * an audio book application) this information might be used by the audio framework to
      * enforce audio focus.
      *
      * Note that these match the equivalent values in AudioAttributes in the Android Java API.
      *
-     * Added in API level 28.
+     * This attribute only has an effect on Android API 28+.
      */
     enum ContentType : aaudio_content_type_t {
 
@@ -280,7 +355,7 @@
      *
      * Note that these match the equivalent values in MediaRecorder.AudioSource in the Android Java API.
      *
-     * Added in API level 28.
+     * This attribute only has an effect on Android API 28+.
      */
     enum InputPreset : aaudio_input_preset_t {
         /**
@@ -311,13 +386,16 @@
         Unprocessed = CONSTANT_API_P(9, AAUDIO_INPUT_PRESET_UNPROCESSED),
     };
 
+    /**
+     * This attribute can be used to allocate a session ID to the audio stream.
+     *
+     * This attribute only has an effect on Android API 28+.
+     */
     enum SessionId {
         /**
          * Do not allocate a session ID.
          * Effects cannot be used with this stream.
          * Default.
-         *
-         * Added in API level 28.
          */
          None = CONSTANT_API_P(-1, AAUDIO_SESSION_ID_NONE),
 
@@ -327,12 +405,20 @@
          * Note that the use of this flag may result in higher latency.
          *
          * Note that this matches the value of AudioManager.AUDIO_SESSION_ID_GENERATE.
-         *
-         * Added in API level 28.
          */
          Allocate = CONSTANT_API_P(0, AAUDIO_SESSION_ID_ALLOCATE),
     };
 
+    /**
+     * The channel count of the audio stream. The underlying type is `int32_t`.
+     * Use of this enum is convenient to avoid "magic"
+     * numbers when specifying the channel count.
+     *
+     * For example, you can write
+     * `builder.setChannelCount(ChannelCount::Stereo)`
+     * rather than `builder.setChannelCount(2)`
+     *
+     */
     enum ChannelCount : int32_t {
       /**
        * Audio channel count definition, use Mono or Stereo
@@ -352,31 +438,35 @@
 
 #undef CONSTANT_API_P
 
+    /**
+     * On API 16 to 25 OpenSL ES will be used. When using OpenSL ES the optimal values for sampleRate and
+     * framesPerBurst are not known by the native code.
+     * On API 17+ these values should be obtained from the AudioManager using this code:
+     *
+     * <pre><code>
+        // Note that this technique only works for built-in speakers and headphones.
+        AudioManager myAudioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+        String sampleRateStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
+        int defaultSampleRate = Integer.parseInt(sampleRateStr);
+        String framesPerBurstStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
+        int defaultFramesPerBurst = Integer.parseInt(framesPerBurstStr);
+        </code></pre>
+     *
+     * It can then be passed down to Oboe through JNI.
+     *
+     * AAudio will get the optimal framesPerBurst from the HAL and will ignore this value.
+     */
     class DefaultStreamValues {
 
     public:
 
-        /**
-         * On API 16 to 25 OpenSL ES will be used. When using OpenSL ES the optimal values for sampleRate and
-         * framesPerBurst are not known by the native code.
-         * On API 17+ these values should be obtained from the AudioManager using this code:
-         *
-         * <pre><code>
-            // Note that this technique only works for built-in speakers and headphones.
-            AudioManager myAudioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
-            String sampleRateStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
-            int defaultSampleRate = Integer.parseInt(sampleRateStr);
-            String framesPerBurstStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
-            int defaultFramesPerBurst = Integer.parseInt(framesPerBurstStr);
-            </code></pre>
-         *
-         * It can then be passed down to Oboe through JNI.
-         *
-         * AAudio will get the optimal framesPerBurst from the HAL and will ignore this value.
-         */
+        /** The default sample rate to use when opening new audio streams */
         static int32_t SampleRate;
+        /** The default frames per burst to use when opening new audio streams */
         static int32_t FramesPerBurst;
+        /** The default channel count to use when opening new audio streams */
         static int32_t ChannelCount;
+
     };
 
 
diff --git a/include/oboe/LatencyTuner.h b/include/oboe/LatencyTuner.h
index 7b879ba..84889b1 100644
--- a/include/oboe/LatencyTuner.h
+++ b/include/oboe/LatencyTuner.h
@@ -25,9 +25,8 @@
 namespace oboe {
 
 /**
- * This can be used to dynamically tune the latency of an output stream.
- * It adjusts the bufferSize based on the number of underruns.
- * The bufferSize is the portion of the total bufferCapacity that is used to store data.
+ * LatencyTuner can be used to dynamically tune the latency of an output stream.
+ * It adjusts the stream's bufferSize by monitoring the number of underruns.
  *
  * This only affects the latency associated with the first level of buffering that is closest
  * to the application. It does not affect low latency in the HAL, or touch latency in the UI.
@@ -41,6 +40,12 @@
  */
 class LatencyTuner {
 public:
+
+    /**
+     * Construct a new LatencyTuner object which will act on the given audio stream
+     *
+     * @param stream the stream who's latency will be tuned
+     */
     explicit LatencyTuner(AudioStream &stream);
 
     /**
diff --git a/include/oboe/ResultWithValue.h b/include/oboe/ResultWithValue.h
index a198803..edc125e 100644
--- a/include/oboe/ResultWithValue.h
+++ b/include/oboe/ResultWithValue.h
@@ -23,21 +23,61 @@
 
 namespace oboe {
 
+/**
+ * A ResultWithValue can store both the result of an operation (either OK or an error) and a value.
+ *
+ * It has been designed for cases where the caller needs to know whether an operation succeeded and,
+ * if it did, a value which was obtained during the operation.
+ *
+ * For example, when reading from a stream the caller needs to know the result of the read operation
+ * and, if it was successful, how many frames were read. Note that ResultWithValue can be evaluated
+ * as a boolean so it's simple to check whether the result is OK.
+ *
+ * <code>
+ * ResultWithValue<int32_t> resultOfRead = myStream.read(&buffer, numFrames, timeoutNanoseconds);
+ *
+ * if (resultOfRead){
+ *     LOGD("Frames read: %d", resultOfRead.value());
+ * } else {
+ *     LOGD("Error reading from stream: %s", resultOfRead.error());
+ * }
+ * </code>
+ */
 template <typename T>
 class ResultWithValue {
 public:
+
+    /**
+     * Construct a ResultWithValue containing an error result.
+     *
+     * @param error The error
+     */
     ResultWithValue(oboe::Result error)
             : mValue{}
             , mError(error) {}
 
+    /**
+     * Construct a ResultWithValue containing an OK result and a value.
+     *
+     * @param value the value to store
+     */
     explicit ResultWithValue(T value)
             : mValue(value)
             , mError(oboe::Result::OK) {}
 
+    /**
+     * Get the result.
+     *
+     * @return the result
+     */
     oboe::Result error() const {
         return mError;
     }
 
+    /**
+     * Get the value
+     * @return
+     */
     T value() const {
         return mValue;
     }
@@ -96,6 +136,9 @@
     const oboe::Result  mError;
 };
 
+/**
+ * If the result is `OK` then return the value, otherwise return a human-readable error message.
+ */
 template <typename T>
 std::ostream& operator<<(std::ostream &strm, const ResultWithValue<T> &result) {
     if (!result) {
diff --git a/include/oboe/Utilities.h b/include/oboe/Utilities.h
index 29a9b6d..29700fd 100644
--- a/include/oboe/Utilities.h
+++ b/include/oboe/Utilities.h
@@ -23,7 +23,22 @@
 
 namespace oboe {
 
+/**
+ * Convert an array of floats to an array of 16-bit integers.
+ *
+ * @param source the input array.
+ * @param destination the output array.
+ * @param numSamples the number of values to convert.
+ */
 void convertFloatToPcm16(const float *source, int16_t *destination, int32_t numSamples);
+
+/**
+ * Convert an array of 16-bit integers to an array of floats.
+ *
+ * @param source the input array.
+ * @param destination the output array.
+ * @param numSamples the number of values to convert.
+ */
 void convertPcm16ToFloat(const int16_t *source, float *destination, int32_t numSamples);
 
 /**
@@ -37,11 +52,11 @@
  * This is intended for developers to use when debugging.
  * It is not for displaying to users.
  *
- * @param enum value @see common/Utilities.cpp for concrete implementations
+ * @param input object to convert from. @see common/Utilities.cpp for concrete implementations
  * @return text representation of an Oboe enum value.
  */
 template <typename FromType>
-const char * convertToText(FromType);
+const char * convertToText(FromType input);
 
 /**
  * Return the version of the SDK that is currently running.
diff --git a/include/oboe/Version.h b/include/oboe/Version.h
index 3c65b07..cbad28a 100644
--- a/include/oboe/Version.h
+++ b/include/oboe/Version.h
@@ -51,6 +51,9 @@
 
 namespace oboe {
 
+/**
+ * Oboe versioning object
+ */
 struct Version {
     /**
      * This is incremented when we make breaking API changes. Based loosely on https://semver.org/.