• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6<meta name="generator" content="Doxygen 1.8.15"/>
7<meta name="viewport" content="width=device-width, initial-scale=1"/>
8<title>Oboe: oboe::AudioStreamCallback Class Reference</title>
9<link href="tabs.css" rel="stylesheet" type="text/css"/>
10<script type="text/javascript" src="jquery.js"></script>
11<script type="text/javascript" src="dynsections.js"></script>
12<link href="search/search.css" rel="stylesheet" type="text/css"/>
13<script type="text/javascript" src="search/searchdata.js"></script>
14<script type="text/javascript" src="search/search.js"></script>
15<link href="doxygen.css" rel="stylesheet" type="text/css" />
16</head>
17<body>
18<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
19<div id="titlearea">
20<table cellspacing="0" cellpadding="0">
21 <tbody>
22 <tr style="height: 56px;">
23  <td id="projectalign" style="padding-left: 0.5em;">
24   <div id="projectname">Oboe
25   &#160;<span id="projectnumber">1.2</span>
26   </div>
27   <div id="projectbrief">A library for creating real-time audio apps on Android</div>
28  </td>
29 </tr>
30 </tbody>
31</table>
32</div>
33<!-- end header part -->
34<!-- Generated by Doxygen 1.8.15 -->
35<script type="text/javascript">
36/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
37var searchBox = new SearchBox("searchBox", "search",false,'Search');
38/* @license-end */
39</script>
40<script type="text/javascript" src="menudata.js"></script>
41<script type="text/javascript" src="menu.js"></script>
42<script type="text/javascript">
43/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
44$(function() {
45  initMenu('',true,false,'search.php','Search');
46  $(document).ready(function() { init_search(); });
47});
48/* @license-end */</script>
49<div id="main-nav"></div>
50<!-- window showing the filter options -->
51<div id="MSearchSelectWindow"
52     onmouseover="return searchBox.OnSearchSelectShow()"
53     onmouseout="return searchBox.OnSearchSelectHide()"
54     onkeydown="return searchBox.OnSearchSelectKey(event)">
55</div>
56
57<!-- iframe showing the search results (closed by default) -->
58<div id="MSearchResultsWindow">
59<iframe src="javascript:void(0)" frameborder="0"
60        name="MSearchResults" id="MSearchResults">
61</iframe>
62</div>
63
64<div id="nav-path" class="navpath">
65  <ul>
66<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>
67</div>
68</div><!-- top -->
69<div class="header">
70  <div class="summary">
71<a href="#pub-methods">Public Member Functions</a> &#124;
72<a href="classoboe_1_1_audio_stream_callback-members.html">List of all members</a>  </div>
73  <div class="headertitle">
74<div class="title">oboe::AudioStreamCallback Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
75</div><!--header-->
76<div class="contents">
77
78<p><code>#include &lt;<a class="el" href="_audio_stream_callback_8h_source.html">AudioStreamCallback.h</a>&gt;</code></p>
79<div class="dynheader">
80Inheritance diagram for oboe::AudioStreamCallback:</div>
81<div class="dyncontent">
82 <div class="center">
83  <img src="classoboe_1_1_audio_stream_callback.png" usemap="#oboe::AudioStreamCallback_map" alt=""/>
84  <map id="oboe::AudioStreamCallback_map" name="oboe::AudioStreamCallback_map">
85<area href="classoboe_1_1_stabilized_callback.html" alt="oboe::StabilizedCallback" shape="rect" coords="0,56,167,80"/>
86  </map>
87</div></div>
88<table class="memberdecls">
89<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
90Public Member Functions</h2></td></tr>
91<tr class="memitem:af3a7c44f0254abe6e5e5bb566e2317df"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a>&#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>
92<tr class="separator:af3a7c44f0254abe6e5e5bb566e2317df"><td class="memSeparator" colspan="2">&#160;</td></tr>
93<tr class="memitem:a77ceb641f941164d7b4d4c51c9a888b9"><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#a77ceb641f941164d7b4d4c51c9a888b9">onErrorBeforeClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
94<tr class="separator:a77ceb641f941164d7b4d4c51c9a888b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
95<tr class="memitem:a57a1b21efc764e8bbf8d92008a993bfd"><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#a57a1b21efc764e8bbf8d92008a993bfd">onErrorAfterClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
96<tr class="separator:a57a1b21efc764e8bbf8d92008a993bfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
97</table>
98<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
99<div class="textblock"><p><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> defines a callback interface for:</p>
100<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>
101</div><h2 class="groupheader">Member Function Documentation</h2>
102<a id="af3a7c44f0254abe6e5e5bb566e2317df"></a>
103<h2 class="memtitle"><span class="permalink"><a href="#af3a7c44f0254abe6e5e5bb566e2317df">&#9670;&nbsp;</a></span>onAudioReady()</h2>
104
105<div class="memitem">
106<div class="memproto">
107<table class="mlabels">
108  <tr>
109  <td class="mlabels-left">
110      <table class="memname">
111        <tr>
112          <td class="memname">virtual <a class="el" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> oboe::AudioStreamCallback::onAudioReady </td>
113          <td>(</td>
114          <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *&#160;</td>
115          <td class="paramname"><em>oboeStream</em>, </td>
116        </tr>
117        <tr>
118          <td class="paramkey"></td>
119          <td></td>
120          <td class="paramtype">void *&#160;</td>
121          <td class="paramname"><em>audioData</em>, </td>
122        </tr>
123        <tr>
124          <td class="paramkey"></td>
125          <td></td>
126          <td class="paramtype">int32_t&#160;</td>
127          <td class="paramname"><em>numFrames</em>&#160;</td>
128        </tr>
129        <tr>
130          <td></td>
131          <td>)</td>
132          <td></td><td></td>
133        </tr>
134      </table>
135  </td>
136  <td class="mlabels-right">
137<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
138  </tr>
139</table>
140</div><div class="memdoc">
141<p>A buffer is ready for processing.</p>
142<p>For an output stream, this function should render and write numFrames of data in the stream's current data format to the audioData buffer.</p>
143<p>For an input stream, this function should read and process numFrames of data from the audioData buffer.</p>
144<p>The audio data is passed through the buffer. So do NOT call read() or write() on the stream that is making the callback.</p>
145<p>Note that numFrames can vary unless <a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">AudioStreamBuilder::setFramesPerCallback()</a> is called.</p>
146<p>Also note that this callback function should be considered a "real-time" function. It must not do anything that could cause an unbounded delay because that can cause the audio to glitch or pop.</p>
147<p>These are things the function should NOT do: </p><ul>
148<li>
149allocate memory using, for example, malloc() or new </li>
150<li>
151any file operations such as opening, closing, reading or writing </li>
152<li>
153any network operations such as streaming </li>
154<li>
155use any mutexes or other synchronization primitives </li>
156<li>
157sleep </li>
158<li>
159oboeStream-&gt;stop(), pause(), flush() or close() </li>
160<li>
161oboeStream-&gt;read() </li>
162<li>
163oboeStream-&gt;write() </li>
164</ul>
165<p>The following are OK to call from the data callback: </p><ul>
166<li>
167oboeStream-&gt;get*() </li>
168<li>
169<a class="el" href="namespaceoboe.html#af65aaea3c5d82eee6906664d61c094b3">oboe::convertToText()</a> </li>
170<li>
171oboeStream-&gt;setBufferSizeInFrames() </li>
172</ul>
173<p>If you need to move data, eg. MIDI commands, in or out of the callback function then we recommend the use of non-blocking techniques such as an atomic FIFO.</p>
174<dl class="params"><dt>Parameters</dt><dd>
175  <table class="params">
176    <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
177    <tr><td class="paramname">audioData</td><td>buffer containing input data or a place to put output data </td></tr>
178    <tr><td class="paramname">numFrames</td><td>number of frames to be processed </td></tr>
179  </table>
180  </dd>
181</dl>
182<dl class="section return"><dt>Returns</dt><dd>DataCallbackResult::Continue or DataCallbackResult::Stop </dd></dl>
183
184<p>Implemented in <a class="el" href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">oboe::StabilizedCallback</a>.</p>
185
186</div>
187</div>
188<a id="a57a1b21efc764e8bbf8d92008a993bfd"></a>
189<h2 class="memtitle"><span class="permalink"><a href="#a57a1b21efc764e8bbf8d92008a993bfd">&#9670;&nbsp;</a></span>onErrorAfterClose()</h2>
190
191<div class="memitem">
192<div class="memproto">
193<table class="mlabels">
194  <tr>
195  <td class="mlabels-left">
196      <table class="memname">
197        <tr>
198          <td class="memname">virtual void oboe::AudioStreamCallback::onErrorAfterClose </td>
199          <td>(</td>
200          <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *&#160;</td>
201          <td class="paramname">, </td>
202        </tr>
203        <tr>
204          <td class="paramkey"></td>
205          <td></td>
206          <td class="paramtype"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>&#160;</td>
207          <td class="paramname">&#160;</td>
208        </tr>
209        <tr>
210          <td></td>
211          <td>)</td>
212          <td></td><td></td>
213        </tr>
214      </table>
215  </td>
216  <td class="mlabels-right">
217<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
218  </tr>
219</table>
220</div><div class="memdoc">
221<p>This will be called when an error occurs on a stream or when the stream is disconnected. The underlying AAudio or OpenSL ES stream will already be stopped AND closed by Oboe. So the underlying stream cannot be referenced. But you can still query most parameters.</p>
222<p>This callback could be used to reopen a new stream on another device. You can safely delete the old <a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> in this method.</p>
223<dl class="params"><dt>Parameters</dt><dd>
224  <table class="params">
225    <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
226    <tr><td class="paramname">error</td><td></td></tr>
227  </table>
228  </dd>
229</dl>
230
231<p>Reimplemented in <a class="el" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">oboe::StabilizedCallback</a>.</p>
232
233</div>
234</div>
235<a id="a77ceb641f941164d7b4d4c51c9a888b9"></a>
236<h2 class="memtitle"><span class="permalink"><a href="#a77ceb641f941164d7b4d4c51c9a888b9">&#9670;&nbsp;</a></span>onErrorBeforeClose()</h2>
237
238<div class="memitem">
239<div class="memproto">
240<table class="mlabels">
241  <tr>
242  <td class="mlabels-left">
243      <table class="memname">
244        <tr>
245          <td class="memname">virtual void oboe::AudioStreamCallback::onErrorBeforeClose </td>
246          <td>(</td>
247          <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *&#160;</td>
248          <td class="paramname">, </td>
249        </tr>
250        <tr>
251          <td class="paramkey"></td>
252          <td></td>
253          <td class="paramtype"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>&#160;</td>
254          <td class="paramname">&#160;</td>
255        </tr>
256        <tr>
257          <td></td>
258          <td>)</td>
259          <td></td><td></td>
260        </tr>
261      </table>
262  </td>
263  <td class="mlabels-right">
264<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
265  </tr>
266</table>
267</div><div class="memdoc">
268<p>This will be called when an error occurs on a stream or when the stream is disconnected.</p>
269<p>Note that this will be called on a different thread than the <a class="el" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady()</a> thread. This thread will be created by Oboe.</p>
270<p>The underlying stream will already be stopped by Oboe but not yet closed. So the stream can be queried.</p>
271<p>Do not close or delete the stream in this method because it will be closed after this method returns.</p>
272<dl class="params"><dt>Parameters</dt><dd>
273  <table class="params">
274    <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
275    <tr><td class="paramname">error</td><td></td></tr>
276  </table>
277  </dd>
278</dl>
279
280<p>Reimplemented in <a class="el" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">oboe::StabilizedCallback</a>.</p>
281
282</div>
283</div>
284<hr/>The documentation for this class was generated from the following file:<ul>
285<li>include/oboe/<a class="el" href="_audio_stream_callback_8h_source.html">AudioStreamCallback.h</a></li>
286</ul>
287</div><!-- contents -->
288<!-- start footer part -->
289<hr class="footer"/><address class="footer"><small>
290Generated by &#160;<a href="http://www.doxygen.org/index.html">
291<img class="footer" src="doxygen.png" alt="doxygen"/>
292</a> 1.8.15
293</small></address>
294</body>
295</html>
296