summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Scavone <gary@music.mcgill.ca>2013-10-11 01:59:33 +0200
committerStephen Sinclair <sinclair@music.mcgill.ca>2013-10-11 01:59:33 +0200
commit28d6722f3a2769f35a528a02550c22500b6aab1c (patch)
treead2f11aecfad76e28aa6bc754638d5db8116295b
parentda9b77ef9a50a97f7c1f2e154edb938acff02214 (diff)
Release 4.0.8 tarball4.0.8
-rwxr-xr-xconfigure35
-rw-r--r--doc/html/RtAudio_8h.html8
-rw-r--r--doc/html/RtAudio_8h_source.html1191
-rw-r--r--doc/html/RtError_8h_source.html6
-rw-r--r--doc/html/acknowledge.html12
-rw-r--r--doc/html/bugs.html45
-rw-r--r--doc/html/classRtAudio.html2
-rw-r--r--doc/html/classRtError-members.html6
-rw-r--r--doc/html/classRtError.html12
-rw-r--r--doc/html/duplex.html4
-rw-r--r--doc/html/functions.html6
-rw-r--r--doc/html/functions_func.html6
-rw-r--r--doc/html/index.html4
-rw-r--r--doc/html/license.html2
-rw-r--r--doc/html/playback.html4
-rw-r--r--doc/html/recording.html4
-rw-r--r--doc/html/settings.html4
-rw-r--r--doc/html/structRtAudio_1_1StreamOptions.html4
18 files changed, 696 insertions, 659 deletions
diff --git a/configure b/configure
index 1f88ae3..52e9e29 100755
--- a/configure
+++ b/configure
@@ -671,7 +671,6 @@ EGREP
cppflag
cxxflag
object_path
-api
build
build_cpu
build_vendor
@@ -680,6 +679,10 @@ host
host_cpu
host_vendor
host_os
+sharedlib
+sharedname
+libflags
+api
objects
LIBOBJS
LTLIBOBJS'
@@ -4099,9 +4102,6 @@ fi
CXXFLAGS="$CXXFLAGS $cxxflag"
-# Checks for package options and external software
-api=""
-
# Make sure we can run config.sub.
$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
{ { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
@@ -4185,6 +4185,26 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+sharedlib="librtaudio.so"
+
+sharedname="librtaudio.so.\$(RELEASE)"
+
+libflags="-shared -Wl,-soname,\$(SHAREDLIB).\$(MAJOR) -o \$(SHAREDLIB).\$(RELEASE)"
+
+case $host in
+ *-apple*)
+ sharedlib="librtaudio.dylib"
+
+ sharedname="librtaudio.\$(RELEASE).dylib"
+
+ libflags="-dynamiclib -o librtaudio.\$(RELEASE).dylib"
+
+esac
+
+# Checks for package options and external software
+api=""
+
{ echo "$as_me:$LINENO: checking for audio API" >&5
echo $ECHO_N "checking for audio API... $ECHO_C" >&6; }
case $host in
@@ -5888,7 +5908,6 @@ EGREP!$EGREP$ac_delim
cppflag!$cppflag$ac_delim
cxxflag!$cxxflag$ac_delim
object_path!$object_path$ac_delim
-api!$api$ac_delim
build!$build$ac_delim
build_cpu!$build_cpu$ac_delim
build_vendor!$build_vendor$ac_delim
@@ -5897,12 +5916,16 @@ host!$host$ac_delim
host_cpu!$host_cpu$ac_delim
host_vendor!$host_vendor$ac_delim
host_os!$host_os$ac_delim
+sharedlib!$sharedlib$ac_delim
+sharedname!$sharedname$ac_delim
+libflags!$libflags$ac_delim
+api!$api$ac_delim
objects!$objects$ac_delim
LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 68; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 71; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/doc/html/RtAudio_8h.html b/doc/html/RtAudio_8h.html
index bf3d222..d361bde 100644
--- a/doc/html/RtAudio_8h.html
+++ b/doc/html/RtAudio_8h.html
@@ -50,11 +50,11 @@
<div class="memdoc">
<p><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> data format type. </p>
-<p>Support for signed integers and floats. Audio data fed to/from an <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> stream is assumed to ALWAYS be in host byte order. The internal routines will automatically take care of any necessary byte-swapping between the host format and the soundcard. Thus, endian-ness is not a concern in the following format definitions.</p>
+<p>Support for signed integers and floats. Audio data fed to/from an <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> stream is assumed to ALWAYS be in host byte order. The internal routines will automatically take care of any necessary byte-swapping between the host format and the soundcard. Thus, endian-ness is not a concern in the following format definitions. Note that 24-bit data is expected to be encapsulated in a 32-bit format.</p>
<ul>
<li><em>RTAUDIO_SINT8:</em> 8-bit signed integer.</li>
<li><em>RTAUDIO_SINT16:</em> 16-bit signed integer.</li>
-<li><em>RTAUDIO_SINT24:</em> Upper 3 bytes of 32-bit signed integer.</li>
+<li><em>RTAUDIO_SINT24:</em> Lower 3 bytes of 32-bit signed integer.</li>
<li><em>RTAUDIO_SINT32:</em> 32-bit signed integer.</li>
<li><em>RTAUDIO_FLOAT32:</em> Normalized between plus/minus 1.0.</li>
<li><em>RTAUDIO_FLOAT64:</em> Normalized between plus/minus 1.0. </li>
@@ -79,11 +79,13 @@
<li><em>RTAUDIO_NONINTERLEAVED:</em> Use non-interleaved buffers (default = interleaved).</li>
<li><em>RTAUDIO_MINIMIZE_LATENCY:</em> Attempt to set stream parameters for lowest possible latency.</li>
<li><em>RTAUDIO_HOG_DEVICE:</em> Attempt grab device for exclusive use.</li>
+<li><em>RTAUDIO_ALSA_USE_DEFAULT:</em> Use the "default" PCM device (ALSA only).</li>
</ul>
<p>By default, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> streams pass and receive audio data from the client in an interleaved format. By passing the RTAUDIO_NONINTERLEAVED flag to the openStream() function, audio data will instead be presented in non-interleaved buffers. In this case, each buffer argument in the RtAudioCallback function will point to a single array of data, with <code>nFrames</code> samples for each channel concatenated back-to-back. For example, the first sample of data for the second channel would be located at index <code>nFrames</code> (assuming the <code>buffer</code> pointer was recast to the correct data type for the stream).</p>
<p>Certain audio APIs offer a number of parameters that influence the I/O latency of a stream. By default, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to set these parameters internally for robust (glitch-free) performance (though some APIs, like Windows Direct Sound, make this difficult). By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() function, internal stream settings will be influenced in an attempt to minimize stream latency, though possibly at the expense of stream performance.</p>
<p>If the RTAUDIO_HOG_DEVICE flag is set, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to open the input and/or output stream device(s) for exclusive use. Note that this is not possible with all supported audio APIs.</p>
-<p>If the RTAUDIO_SCHEDULE_REALTIME flag is set, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to select realtime scheduling (round-robin) for the callback thread. </p>
+<p>If the RTAUDIO_SCHEDULE_REALTIME flag is set, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to select realtime scheduling (round-robin) for the callback thread.</p>
+<p>If the RTAUDIO_ALSA_USE_DEFAULT flag is set, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to open the "default" PCM device when using the ALSA API. Note that this will override any specified input or output device id. </p>
</div>
</div>
diff --git a/doc/html/RtAudio_8h_source.html b/doc/html/RtAudio_8h_source.html
index b1bd2a6..4de954c 100644
--- a/doc/html/RtAudio_8h_source.html
+++ b/doc/html/RtAudio_8h_source.html
@@ -12,7 +12,7 @@
<h1>RtAudio.h</h1><a href="RtAudio_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/************************************************************************/</span>
<a name="l00039"></a>00039 <span class="comment">/************************************************************************/</span>
<a name="l00040"></a>00040
-<a name="l00045"></a>00045 <span class="comment">// RtAudio: Version 4.0.7</span>
+<a name="l00045"></a>00045 <span class="comment">// RtAudio: Version 4.0.8</span>
<a name="l00046"></a>00046
<a name="l00047"></a>00047 <span class="preprocessor">#ifndef __RTAUDIO_H</span>
<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define __RTAUDIO_H</span>
@@ -21,615 +21,616 @@
<a name="l00051"></a>00051 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00052"></a>00052 <span class="preprocessor">#include &quot;RtError.h&quot;</span>
<a name="l00053"></a>00053
-<a name="l00070"></a><a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8">00070</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a>;
-<a name="l00071"></a>00071 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_SINT8 = 0x1; <span class="comment">// 8-bit signed integer.</span>
-<a name="l00072"></a>00072 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_SINT16 = 0x2; <span class="comment">// 16-bit signed integer.</span>
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_SINT24 = 0x4; <span class="comment">// Lower 3 bytes of 32-bit signed integer.</span>
-<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_SINT32 = 0x8; <span class="comment">// 32-bit signed integer.</span>
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_FLOAT32 = 0x10; <span class="comment">// Normalized between plus/minus 1.0.</span>
-<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_FLOAT64 = 0x20; <span class="comment">// Normalized between plus/minus 1.0.</span>
-<a name="l00077"></a>00077
-<a name="l00115"></a><a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41">00115</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a>;
-<a name="l00116"></a>00116 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> RTAUDIO_NONINTERLEAVED = 0x1; <span class="comment">// Use non-interleaved buffers (default = interleaved).</span>
-<a name="l00117"></a>00117 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> RTAUDIO_MINIMIZE_LATENCY = 0x2; <span class="comment">// Attempt to set stream parameters for lowest possible latency.</span>
-<a name="l00118"></a>00118 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> RTAUDIO_HOG_DEVICE = 0x4; <span class="comment">// Attempt grab device and prevent use by others.</span>
-<a name="l00119"></a>00119 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> RTAUDIO_SCHEDULE_REALTIME = 0x8; <span class="comment">// Try to select realtime scheduling for callback thread.</span>
-<a name="l00120"></a>00120
-<a name="l00132"></a><a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806">00132</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806" title="RtAudio stream status (over- or underflow) flags.">RtAudioStreamStatus</a>;
-<a name="l00133"></a>00133 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806" title="RtAudio stream status (over- or underflow) flags.">RtAudioStreamStatus</a> RTAUDIO_INPUT_OVERFLOW = 0x1; <span class="comment">// Input data was discarded because of an overflow condition at the driver.</span>
-<a name="l00134"></a>00134 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806" title="RtAudio stream status (over- or underflow) flags.">RtAudioStreamStatus</a> RTAUDIO_OUTPUT_UNDERFLOW = 0x2; <span class="comment">// The output buffer ran low, likely causing a gap in the output sound.</span>
-<a name="l00135"></a>00135
-<a name="l00137"></a>00137
-<a name="l00175"></a><a class="code" href="RtAudio_8h.html#a112c7b7e25a974977f6fc094cef1a31f">00175</a> <span class="keyword">typedef</span> int (*<a class="code" href="RtAudio_8h.html#a112c7b7e25a974977f6fc094cef1a31f" title="RtAudio callback function prototype.">RtAudioCallback</a>)( <span class="keywordtype">void</span> *outputBuffer, <span class="keywordtype">void</span> *inputBuffer,
-<a name="l00176"></a>00176 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFrames,
-<a name="l00177"></a>00177 <span class="keywordtype">double</span> streamTime,
-<a name="l00178"></a>00178 <a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806" title="RtAudio stream status (over- or underflow) flags.">RtAudioStreamStatus</a> status,
-<a name="l00179"></a>00179 <span class="keywordtype">void</span> *userData );
-<a name="l00180"></a>00180
-<a name="l00181"></a>00181
-<a name="l00182"></a>00182 <span class="comment">// **************************************************************** //</span>
-<a name="l00183"></a>00183 <span class="comment">//</span>
-<a name="l00184"></a>00184 <span class="comment">// RtAudio class declaration.</span>
-<a name="l00185"></a>00185 <span class="comment">//</span>
-<a name="l00186"></a>00186 <span class="comment">// RtAudio is a &quot;controller&quot; used to select an available audio i/o</span>
-<a name="l00187"></a>00187 <span class="comment">// interface. It presents a common API for the user to call but all</span>
-<a name="l00188"></a>00188 <span class="comment">// functionality is implemented by the class RtApi and its</span>
-<a name="l00189"></a>00189 <span class="comment">// subclasses. RtAudio creates an instance of an RtApi subclass</span>
-<a name="l00190"></a>00190 <span class="comment">// based on the user&#39;s API choice. If no choice is made, RtAudio</span>
-<a name="l00191"></a>00191 <span class="comment">// attempts to make a &quot;logical&quot; API selection.</span>
-<a name="l00192"></a>00192 <span class="comment">//</span>
-<a name="l00193"></a>00193 <span class="comment">// **************************************************************** //</span>
-<a name="l00194"></a>00194
-<a name="l00195"></a>00195 <span class="keyword">class </span>RtApi;
-<a name="l00196"></a>00196
-<a name="l00197"></a><a class="code" href="classRtAudio.html">00197</a> <span class="keyword">class </span><a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>
-<a name="l00198"></a>00198 {
-<a name="l00199"></a>00199 <span class="keyword">public</span>:
-<a name="l00200"></a>00200
-<a name="l00202"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849">00202</a> <span class="keyword">enum</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">Api</a> {
-<a name="l00203"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa49af3ac767106158bc6cad74fb214ae">00203</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa49af3ac767106158bc6cad74fb214ae">UNSPECIFIED</a>,
-<a name="l00204"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa7a2ba095c2806caa893b6fb8fc3a1a8">00204</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa7a2ba095c2806caa893b6fb8fc3a1a8">LINUX_ALSA</a>,
-<a name="l00205"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a39c84615e61de75e6a4e865596d62c82">00205</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a39c84615e61de75e6a4e865596d62c82">LINUX_OSS</a>,
-<a name="l00206"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a4767e17c6edfbd827f91763915df4105">00206</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a4767e17c6edfbd827f91763915df4105">UNIX_JACK</a>,
-<a name="l00207"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a9fec92b8272244a87a6a11a717bd662d">00207</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a9fec92b8272244a87a6a11a717bd662d">MACOSX_CORE</a>,
-<a name="l00208"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a219517d1df90f94d07758481155bd469">00208</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a219517d1df90f94d07758481155bd469">WINDOWS_ASIO</a>,
-<a name="l00209"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a28478830f42c2fd61e6c7ad498901931">00209</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a28478830f42c2fd61e6c7ad498901931">WINDOWS_DS</a>,
-<a name="l00210"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849ab06b8fd88bf18c9a2b8271f6961ae2d1">00210</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849ab06b8fd88bf18c9a2b8271f6961ae2d1">RTAUDIO_DUMMY</a>
-<a name="l00211"></a>00211 };
-<a name="l00212"></a>00212
-<a name="l00214"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html">00214</a> <span class="keyword">struct </span><a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">DeviceInfo</a> {
-<a name="l00215"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a97573717ccb1e75a834a0a108cd6982d">00215</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a97573717ccb1e75a834a0a108cd6982d">probed</a>;
-<a name="l00216"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a24df596ab8d54f2eb540c7cf16212b3b">00216</a> std::string <a class="code" href="structRtAudio_1_1DeviceInfo.html#a24df596ab8d54f2eb540c7cf16212b3b">name</a>;
-<a name="l00217"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a81aaf488f8158ef55b1bb678f66feb7d">00217</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a81aaf488f8158ef55b1bb678f66feb7d">outputChannels</a>;
-<a name="l00218"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a56247b458a937ae84d98ca9c4b243275">00218</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a56247b458a937ae84d98ca9c4b243275">inputChannels</a>;
-<a name="l00219"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a3e8ad34c2d14e24293a0beafc26186e7">00219</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a3e8ad34c2d14e24293a0beafc26186e7">duplexChannels</a>;
-<a name="l00220"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a5365245e73ffe29a05734de4474acd58">00220</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a5365245e73ffe29a05734de4474acd58">isDefaultOutput</a>;
-<a name="l00221"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a7c8aca084bd908799b6be5954b80def2">00221</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a7c8aca084bd908799b6be5954b80def2">isDefaultInput</a>;
-<a name="l00222"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#afa65f5f92f66ce7aacd3ff35e11b230f">00222</a> std::vector&lt;unsigned int&gt; <a class="code" href="structRtAudio_1_1DeviceInfo.html#afa65f5f92f66ce7aacd3ff35e11b230f">sampleRates</a>;
-<a name="l00223"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a23251b549b89b2fe04a57fcd7cb76ea4">00223</a> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a23251b549b89b2fe04a57fcd7cb76ea4">nativeFormats</a>;
-<a name="l00225"></a>00225 <span class="comment">// Default constructor.</span>
-<a name="l00226"></a>00226 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">DeviceInfo</a>()
-<a name="l00227"></a>00227 :<a class="code" href="structRtAudio_1_1DeviceInfo.html#a97573717ccb1e75a834a0a108cd6982d">probed</a>(false), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a81aaf488f8158ef55b1bb678f66feb7d">outputChannels</a>(0), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a56247b458a937ae84d98ca9c4b243275">inputChannels</a>(0), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a3e8ad34c2d14e24293a0beafc26186e7">duplexChannels</a>(0),
-<a name="l00228"></a>00228 <a class="code" href="structRtAudio_1_1DeviceInfo.html#a5365245e73ffe29a05734de4474acd58">isDefaultOutput</a>(false), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a7c8aca084bd908799b6be5954b80def2">isDefaultInput</a>(false), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a23251b549b89b2fe04a57fcd7cb76ea4">nativeFormats</a>(0) {}
-<a name="l00229"></a>00229 };
-<a name="l00230"></a>00230
-<a name="l00232"></a><a class="code" href="structRtAudio_1_1StreamParameters.html">00232</a> <span class="keyword">struct </span><a class="code" href="structRtAudio_1_1StreamParameters.html" title="The structure for specifying input or ouput stream parameters.">StreamParameters</a> {
-<a name="l00233"></a><a class="code" href="structRtAudio_1_1StreamParameters.html#ab3c72bcf3ef12149ae9a4fb597cc5489">00233</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamParameters.html#ab3c72bcf3ef12149ae9a4fb597cc5489">deviceId</a>;
-<a name="l00234"></a><a class="code" href="structRtAudio_1_1StreamParameters.html#a88a10091b6e284e21235cc6f25332ebd">00234</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamParameters.html#a88a10091b6e284e21235cc6f25332ebd">nChannels</a>;
-<a name="l00235"></a><a class="code" href="structRtAudio_1_1StreamParameters.html#ad4b4503782653ec93c83328c46abe50c">00235</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamParameters.html#ad4b4503782653ec93c83328c46abe50c">firstChannel</a>;
-<a name="l00237"></a>00237 <span class="comment">// Default constructor.</span>
-<a name="l00238"></a>00238 <a class="code" href="structRtAudio_1_1StreamParameters.html" title="The structure for specifying input or ouput stream parameters.">StreamParameters</a>()
-<a name="l00239"></a>00239 : <a class="code" href="structRtAudio_1_1StreamParameters.html#ab3c72bcf3ef12149ae9a4fb597cc5489">deviceId</a>(0), <a class="code" href="structRtAudio_1_1StreamParameters.html#a88a10091b6e284e21235cc6f25332ebd">nChannels</a>(0), <a class="code" href="structRtAudio_1_1StreamParameters.html#ad4b4503782653ec93c83328c46abe50c">firstChannel</a>(0) {}
-<a name="l00240"></a>00240 };
-<a name="l00241"></a>00241
-<a name="l00243"></a>00243
-<a name="l00294"></a><a class="code" href="structRtAudio_1_1StreamOptions.html">00294</a> <span class="keyword">struct </span><a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">StreamOptions</a> {
-<a name="l00295"></a><a class="code" href="structRtAudio_1_1StreamOptions.html#a0ecc98b031aa3af49d09b781643e298b">00295</a> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> <a class="code" href="structRtAudio_1_1StreamOptions.html#a0ecc98b031aa3af49d09b781643e298b">flags</a>;
-<a name="l00296"></a><a class="code" href="structRtAudio_1_1StreamOptions.html#a75a14cfab903d0e1c091bc16aec80240">00296</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamOptions.html#a75a14cfab903d0e1c091bc16aec80240">numberOfBuffers</a>;
-<a name="l00297"></a><a class="code" href="structRtAudio_1_1StreamOptions.html#a2a4b0b8d690c624d20f4e8f4be6ca9ba">00297</a> std::string <a class="code" href="structRtAudio_1_1StreamOptions.html#a2a4b0b8d690c624d20f4e8f4be6ca9ba">streamName</a>;
-<a name="l00298"></a><a class="code" href="structRtAudio_1_1StreamOptions.html#adfd267059434edb21573c584e6367def">00298</a> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamOptions.html#adfd267059434edb21573c584e6367def">priority</a>;
-<a name="l00300"></a>00300 <span class="comment">// Default constructor.</span>
-<a name="l00301"></a>00301 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">StreamOptions</a>()
-<a name="l00302"></a>00302 : <a class="code" href="structRtAudio_1_1StreamOptions.html#a0ecc98b031aa3af49d09b781643e298b">flags</a>(0), <a class="code" href="structRtAudio_1_1StreamOptions.html#a75a14cfab903d0e1c091bc16aec80240">numberOfBuffers</a>(0), <a class="code" href="structRtAudio_1_1StreamOptions.html#adfd267059434edb21573c584e6367def">priority</a>(0) {}
-<a name="l00303"></a>00303 };
-<a name="l00304"></a>00304
-<a name="l00306"></a>00306
-<a name="l00311"></a>00311 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#ae266ffad2ef428d0b2c6c262d391ce26" title="A static function to determine the available compiled audio APIs.">getCompiledApi</a>( std::vector&lt;RtAudio::Api&gt; &amp;apis ) <span class="keywordflow">throw</span>();
-<a name="l00312"></a>00312
-<a name="l00314"></a>00314
-<a name="l00322"></a>00322 <a class="code" href="classRtAudio.html#afd0bfa26deae9804e18faff59d0273d9" title="The class constructor.">RtAudio</a>( <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> api=<a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa49af3ac767106158bc6cad74fb214ae">UNSPECIFIED</a> ) throw();
-<a name="l00323"></a>00323
+<a name="l00072"></a><a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8">00072</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a>;
+<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_SINT8 = 0x1; <span class="comment">// 8-bit signed integer.</span>
+<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_SINT16 = 0x2; <span class="comment">// 16-bit signed integer.</span>
+<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_SINT24 = 0x4; <span class="comment">// Lower 3 bytes of 32-bit signed integer.</span>
+<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_SINT32 = 0x8; <span class="comment">// 32-bit signed integer.</span>
+<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_FLOAT32 = 0x10; <span class="comment">// Normalized between plus/minus 1.0.</span>
+<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> RTAUDIO_FLOAT64 = 0x20; <span class="comment">// Normalized between plus/minus 1.0.</span>
+<a name="l00079"></a>00079
+<a name="l00122"></a><a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41">00122</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a>;
+<a name="l00123"></a>00123 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> RTAUDIO_NONINTERLEAVED = 0x1; <span class="comment">// Use non-interleaved buffers (default = interleaved).</span>
+<a name="l00124"></a>00124 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> RTAUDIO_MINIMIZE_LATENCY = 0x2; <span class="comment">// Attempt to set stream parameters for lowest possible latency.</span>
+<a name="l00125"></a>00125 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> RTAUDIO_HOG_DEVICE = 0x4; <span class="comment">// Attempt grab device and prevent use by others.</span>
+<a name="l00126"></a>00126 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> RTAUDIO_SCHEDULE_REALTIME = 0x8; <span class="comment">// Try to select realtime scheduling for callback thread.</span>
+<a name="l00127"></a>00127 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> RTAUDIO_ALSA_USE_DEFAULT = 0x10; <span class="comment">// Use the &quot;default&quot; PCM device (ALSA only).</span>
+<a name="l00128"></a>00128
+<a name="l00140"></a><a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806">00140</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806" title="RtAudio stream status (over- or underflow) flags.">RtAudioStreamStatus</a>;
+<a name="l00141"></a>00141 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806" title="RtAudio stream status (over- or underflow) flags.">RtAudioStreamStatus</a> RTAUDIO_INPUT_OVERFLOW = 0x1; <span class="comment">// Input data was discarded because of an overflow condition at the driver.</span>
+<a name="l00142"></a>00142 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806" title="RtAudio stream status (over- or underflow) flags.">RtAudioStreamStatus</a> RTAUDIO_OUTPUT_UNDERFLOW = 0x2; <span class="comment">// The output buffer ran low, likely causing a gap in the output sound.</span>
+<a name="l00143"></a>00143
+<a name="l00145"></a>00145
+<a name="l00183"></a><a class="code" href="RtAudio_8h.html#a112c7b7e25a974977f6fc094cef1a31f">00183</a> <span class="keyword">typedef</span> int (*<a class="code" href="RtAudio_8h.html#a112c7b7e25a974977f6fc094cef1a31f" title="RtAudio callback function prototype.">RtAudioCallback</a>)( <span class="keywordtype">void</span> *outputBuffer, <span class="keywordtype">void</span> *inputBuffer,
+<a name="l00184"></a>00184 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFrames,
+<a name="l00185"></a>00185 <span class="keywordtype">double</span> streamTime,
+<a name="l00186"></a>00186 <a class="code" href="RtAudio_8h.html#a80e306d363583da3b0a1b65d9b57c806" title="RtAudio stream status (over- or underflow) flags.">RtAudioStreamStatus</a> status,
+<a name="l00187"></a>00187 <span class="keywordtype">void</span> *userData );
+<a name="l00188"></a>00188
+<a name="l00189"></a>00189
+<a name="l00190"></a>00190 <span class="comment">// **************************************************************** //</span>
+<a name="l00191"></a>00191 <span class="comment">//</span>
+<a name="l00192"></a>00192 <span class="comment">// RtAudio class declaration.</span>
+<a name="l00193"></a>00193 <span class="comment">//</span>
+<a name="l00194"></a>00194 <span class="comment">// RtAudio is a &quot;controller&quot; used to select an available audio i/o</span>
+<a name="l00195"></a>00195 <span class="comment">// interface. It presents a common API for the user to call but all</span>
+<a name="l00196"></a>00196 <span class="comment">// functionality is implemented by the class RtApi and its</span>
+<a name="l00197"></a>00197 <span class="comment">// subclasses. RtAudio creates an instance of an RtApi subclass</span>
+<a name="l00198"></a>00198 <span class="comment">// based on the user&#39;s API choice. If no choice is made, RtAudio</span>
+<a name="l00199"></a>00199 <span class="comment">// attempts to make a &quot;logical&quot; API selection.</span>
+<a name="l00200"></a>00200 <span class="comment">//</span>
+<a name="l00201"></a>00201 <span class="comment">// **************************************************************** //</span>
+<a name="l00202"></a>00202
+<a name="l00203"></a>00203 <span class="keyword">class </span>RtApi;
+<a name="l00204"></a>00204
+<a name="l00205"></a><a class="code" href="classRtAudio.html">00205</a> <span class="keyword">class </span><a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>
+<a name="l00206"></a>00206 {
+<a name="l00207"></a>00207 <span class="keyword">public</span>:
+<a name="l00208"></a>00208
+<a name="l00210"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849">00210</a> <span class="keyword">enum</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">Api</a> {
+<a name="l00211"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa49af3ac767106158bc6cad74fb214ae">00211</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa49af3ac767106158bc6cad74fb214ae">UNSPECIFIED</a>,
+<a name="l00212"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa7a2ba095c2806caa893b6fb8fc3a1a8">00212</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa7a2ba095c2806caa893b6fb8fc3a1a8">LINUX_ALSA</a>,
+<a name="l00213"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a39c84615e61de75e6a4e865596d62c82">00213</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a39c84615e61de75e6a4e865596d62c82">LINUX_OSS</a>,
+<a name="l00214"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a4767e17c6edfbd827f91763915df4105">00214</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a4767e17c6edfbd827f91763915df4105">UNIX_JACK</a>,
+<a name="l00215"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a9fec92b8272244a87a6a11a717bd662d">00215</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a9fec92b8272244a87a6a11a717bd662d">MACOSX_CORE</a>,
+<a name="l00216"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a219517d1df90f94d07758481155bd469">00216</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a219517d1df90f94d07758481155bd469">WINDOWS_ASIO</a>,
+<a name="l00217"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a28478830f42c2fd61e6c7ad498901931">00217</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a28478830f42c2fd61e6c7ad498901931">WINDOWS_DS</a>,
+<a name="l00218"></a><a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849ab06b8fd88bf18c9a2b8271f6961ae2d1">00218</a> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849ab06b8fd88bf18c9a2b8271f6961ae2d1">RTAUDIO_DUMMY</a>
+<a name="l00219"></a>00219 };
+<a name="l00220"></a>00220
+<a name="l00222"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html">00222</a> <span class="keyword">struct </span><a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">DeviceInfo</a> {
+<a name="l00223"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a97573717ccb1e75a834a0a108cd6982d">00223</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a97573717ccb1e75a834a0a108cd6982d">probed</a>;
+<a name="l00224"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a24df596ab8d54f2eb540c7cf16212b3b">00224</a> std::string <a class="code" href="structRtAudio_1_1DeviceInfo.html#a24df596ab8d54f2eb540c7cf16212b3b">name</a>;
+<a name="l00225"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a81aaf488f8158ef55b1bb678f66feb7d">00225</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a81aaf488f8158ef55b1bb678f66feb7d">outputChannels</a>;
+<a name="l00226"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a56247b458a937ae84d98ca9c4b243275">00226</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a56247b458a937ae84d98ca9c4b243275">inputChannels</a>;
+<a name="l00227"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a3e8ad34c2d14e24293a0beafc26186e7">00227</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a3e8ad34c2d14e24293a0beafc26186e7">duplexChannels</a>;
+<a name="l00228"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a5365245e73ffe29a05734de4474acd58">00228</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a5365245e73ffe29a05734de4474acd58">isDefaultOutput</a>;
+<a name="l00229"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a7c8aca084bd908799b6be5954b80def2">00229</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a7c8aca084bd908799b6be5954b80def2">isDefaultInput</a>;
+<a name="l00230"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#afa65f5f92f66ce7aacd3ff35e11b230f">00230</a> std::vector&lt;unsigned int&gt; <a class="code" href="structRtAudio_1_1DeviceInfo.html#afa65f5f92f66ce7aacd3ff35e11b230f">sampleRates</a>;
+<a name="l00231"></a><a class="code" href="structRtAudio_1_1DeviceInfo.html#a23251b549b89b2fe04a57fcd7cb76ea4">00231</a> <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> <a class="code" href="structRtAudio_1_1DeviceInfo.html#a23251b549b89b2fe04a57fcd7cb76ea4">nativeFormats</a>;
+<a name="l00233"></a>00233 <span class="comment">// Default constructor.</span>
+<a name="l00234"></a>00234 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">DeviceInfo</a>()
+<a name="l00235"></a>00235 :<a class="code" href="structRtAudio_1_1DeviceInfo.html#a97573717ccb1e75a834a0a108cd6982d">probed</a>(false), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a81aaf488f8158ef55b1bb678f66feb7d">outputChannels</a>(0), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a56247b458a937ae84d98ca9c4b243275">inputChannels</a>(0), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a3e8ad34c2d14e24293a0beafc26186e7">duplexChannels</a>(0),
+<a name="l00236"></a>00236 <a class="code" href="structRtAudio_1_1DeviceInfo.html#a5365245e73ffe29a05734de4474acd58">isDefaultOutput</a>(false), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a7c8aca084bd908799b6be5954b80def2">isDefaultInput</a>(false), <a class="code" href="structRtAudio_1_1DeviceInfo.html#a23251b549b89b2fe04a57fcd7cb76ea4">nativeFormats</a>(0) {}
+<a name="l00237"></a>00237 };
+<a name="l00238"></a>00238
+<a name="l00240"></a><a class="code" href="structRtAudio_1_1StreamParameters.html">00240</a> <span class="keyword">struct </span><a class="code" href="structRtAudio_1_1StreamParameters.html" title="The structure for specifying input or ouput stream parameters.">StreamParameters</a> {
+<a name="l00241"></a><a class="code" href="structRtAudio_1_1StreamParameters.html#ab3c72bcf3ef12149ae9a4fb597cc5489">00241</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamParameters.html#ab3c72bcf3ef12149ae9a4fb597cc5489">deviceId</a>;
+<a name="l00242"></a><a class="code" href="structRtAudio_1_1StreamParameters.html#a88a10091b6e284e21235cc6f25332ebd">00242</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamParameters.html#a88a10091b6e284e21235cc6f25332ebd">nChannels</a>;
+<a name="l00243"></a><a class="code" href="structRtAudio_1_1StreamParameters.html#ad4b4503782653ec93c83328c46abe50c">00243</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamParameters.html#ad4b4503782653ec93c83328c46abe50c">firstChannel</a>;
+<a name="l00245"></a>00245 <span class="comment">// Default constructor.</span>
+<a name="l00246"></a>00246 <a class="code" href="structRtAudio_1_1StreamParameters.html" title="The structure for specifying input or ouput stream parameters.">StreamParameters</a>()
+<a name="l00247"></a>00247 : <a class="code" href="structRtAudio_1_1StreamParameters.html#ab3c72bcf3ef12149ae9a4fb597cc5489">deviceId</a>(0), <a class="code" href="structRtAudio_1_1StreamParameters.html#a88a10091b6e284e21235cc6f25332ebd">nChannels</a>(0), <a class="code" href="structRtAudio_1_1StreamParameters.html#ad4b4503782653ec93c83328c46abe50c">firstChannel</a>(0) {}
+<a name="l00248"></a>00248 };
+<a name="l00249"></a>00249
+<a name="l00251"></a>00251
+<a name="l00307"></a><a class="code" href="structRtAudio_1_1StreamOptions.html">00307</a> <span class="keyword">struct </span><a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">StreamOptions</a> {
+<a name="l00308"></a><a class="code" href="structRtAudio_1_1StreamOptions.html#a0ecc98b031aa3af49d09b781643e298b">00308</a> <a class="code" href="RtAudio_8h.html#a2c0f59b200dcec4d4e760f9166b29c41" title="RtAudio stream option flags.">RtAudioStreamFlags</a> <a class="code" href="structRtAudio_1_1StreamOptions.html#a0ecc98b031aa3af49d09b781643e298b">flags</a>;
+<a name="l00309"></a><a class="code" href="structRtAudio_1_1StreamOptions.html#a75a14cfab903d0e1c091bc16aec80240">00309</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamOptions.html#a75a14cfab903d0e1c091bc16aec80240">numberOfBuffers</a>;
+<a name="l00310"></a><a class="code" href="structRtAudio_1_1StreamOptions.html#a2a4b0b8d690c624d20f4e8f4be6ca9ba">00310</a> std::string <a class="code" href="structRtAudio_1_1StreamOptions.html#a2a4b0b8d690c624d20f4e8f4be6ca9ba">streamName</a>;
+<a name="l00311"></a><a class="code" href="structRtAudio_1_1StreamOptions.html#adfd267059434edb21573c584e6367def">00311</a> <span class="keywordtype">int</span> <a class="code" href="structRtAudio_1_1StreamOptions.html#adfd267059434edb21573c584e6367def">priority</a>;
+<a name="l00313"></a>00313 <span class="comment">// Default constructor.</span>
+<a name="l00314"></a>00314 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">StreamOptions</a>()
+<a name="l00315"></a>00315 : <a class="code" href="structRtAudio_1_1StreamOptions.html#a0ecc98b031aa3af49d09b781643e298b">flags</a>(0), <a class="code" href="structRtAudio_1_1StreamOptions.html#a75a14cfab903d0e1c091bc16aec80240">numberOfBuffers</a>(0), <a class="code" href="structRtAudio_1_1StreamOptions.html#adfd267059434edb21573c584e6367def">priority</a>(0) {}
+<a name="l00316"></a>00316 };
+<a name="l00317"></a>00317
+<a name="l00319"></a>00319
+<a name="l00324"></a>00324 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#ae266ffad2ef428d0b2c6c262d391ce26" title="A static function to determine the available compiled audio APIs.">getCompiledApi</a>( std::vector&lt;RtAudio::Api&gt; &amp;apis ) <span class="keywordflow">throw</span>();
<a name="l00325"></a>00325
-<a name="l00329"></a>00329 ~<a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>() throw();
-<a name="l00330"></a>00330
-<a name="l00332"></a>00332 <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::<a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">Api</a> <a class="code" href="classRtAudio.html#a83687634795792b2c47e4ae1cf8a5246" title="Returns the audio API specifier for the current instance of RtAudio.">getCurrentApi</a>( <span class="keywordtype">void</span> ) throw();
-<a name="l00333"></a>00333
-<a name="l00335"></a>00335
-<a name="l00340"></a>00340 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a747ce2d73803641bbb66d6e78092aa1a" title="A public function that queries for the number of audio devices available.">getDeviceCount</a>( <span class="keywordtype">void</span> ) throw();
-<a name="l00341"></a>00341
+<a name="l00327"></a>00327
+<a name="l00335"></a>00335 <a class="code" href="classRtAudio.html#afd0bfa26deae9804e18faff59d0273d9" title="The class constructor.">RtAudio</a>( <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> api=<a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa49af3ac767106158bc6cad74fb214ae">UNSPECIFIED</a> ) throw();
+<a name="l00336"></a>00336
+<a name="l00338"></a>00338
+<a name="l00342"></a>00342 ~<a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>() throw();
<a name="l00343"></a>00343
-<a name="l00353"></a>00353 <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::DeviceInfo <a class="code" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8" title="Return an RtAudio::DeviceInfo structure for a specified device number.">getDeviceInfo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00345"></a>00345 <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::<a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">Api</a> <a class="code" href="classRtAudio.html#a83687634795792b2c47e4ae1cf8a5246" title="Returns the audio API specifier for the current instance of RtAudio.">getCurrentApi</a>( <span class="keywordtype">void</span> ) throw();
+<a name="l00346"></a>00346
+<a name="l00348"></a>00348
+<a name="l00353"></a>00353 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a747ce2d73803641bbb66d6e78092aa1a" title="A public function that queries for the number of audio devices available.">getDeviceCount</a>( <span class="keywordtype">void</span> ) throw();
<a name="l00354"></a>00354
<a name="l00356"></a>00356
-<a name="l00363"></a>00363 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a3a3f3dbe13ea696b521e49cdaaa357bc" title="A function that returns the index of the default output device.">getDefaultOutputDevice</a>( <span class="keywordtype">void</span> ) throw();
-<a name="l00364"></a>00364
-<a name="l00366"></a>00366
-<a name="l00373"></a>00373 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#aad8b94edd3cd379ee300b125750ac6ce" title="A function that returns the index of the default input device.">getDefaultInputDevice</a>( <span class="keywordtype">void</span> ) throw();
-<a name="l00374"></a>00374
-<a name="l00376"></a>00376
-<a name="l00413"></a>00413 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">openStream</a>( <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::StreamParameters *outputParameters,
-<a name="l00414"></a>00414 <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::StreamParameters *inputParameters,
-<a name="l00415"></a>00415 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00416"></a>00416 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferFrames, <a class="code" href="RtAudio_8h.html#a112c7b7e25a974977f6fc094cef1a31f" title="RtAudio callback function prototype.">RtAudioCallback</a> callback,
-<a name="l00417"></a>00417 <span class="keywordtype">void</span> *userData = NULL, <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::StreamOptions *options = NULL );
-<a name="l00418"></a>00418
-<a name="l00420"></a>00420
-<a name="l00424"></a>00424 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a" title="A function that closes a stream and frees any associated stream memory.">closeStream</a>( <span class="keywordtype">void</span> ) throw();
-<a name="l00425"></a>00425
-<a name="l00427"></a>00427
-<a name="l00433"></a>00433 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80" title="A function that starts a stream.">startStream</a>( <span class="keywordtype">void</span> );
-<a name="l00434"></a>00434
-<a name="l00436"></a>00436
-<a name="l00442"></a>00442 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd" title="Stop a stream, allowing any samples remaining in the output queue to be played.">stopStream</a>( <span class="keywordtype">void</span> );
-<a name="l00443"></a>00443
-<a name="l00445"></a>00445
-<a name="l00451"></a>00451 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#ad0586b47cd6bb9591a80b4052815991f" title="Stop a stream, discarding any samples remaining in the input/output queue.">abortStream</a>( <span class="keywordtype">void</span> );
-<a name="l00452"></a>00452
-<a name="l00454"></a>00454 <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f" title="Returns true if a stream is open and false if not.">isStreamOpen</a>( <span class="keywordtype">void</span> ) const throw();
-<a name="l00455"></a>00455
-<a name="l00457"></a>00457 <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a84cc8d9b7ab9bc5f37bcf48430ec5aea" title="Returns true if the stream is running and false if it is stopped or not open.">isStreamRunning</a>( <span class="keywordtype">void</span> ) const throw();
+<a name="l00366"></a>00366 <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::DeviceInfo <a class="code" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8" title="Return an RtAudio::DeviceInfo structure for a specified device number.">getDeviceInfo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00367"></a>00367
+<a name="l00369"></a>00369
+<a name="l00376"></a>00376 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a3a3f3dbe13ea696b521e49cdaaa357bc" title="A function that returns the index of the default output device.">getDefaultOutputDevice</a>( <span class="keywordtype">void</span> ) throw();
+<a name="l00377"></a>00377
+<a name="l00379"></a>00379
+<a name="l00386"></a>00386 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#aad8b94edd3cd379ee300b125750ac6ce" title="A function that returns the index of the default input device.">getDefaultInputDevice</a>( <span class="keywordtype">void</span> ) throw();
+<a name="l00387"></a>00387
+<a name="l00389"></a>00389
+<a name="l00426"></a>00426 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">openStream</a>( <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::StreamParameters *outputParameters,
+<a name="l00427"></a>00427 <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::StreamParameters *inputParameters,
+<a name="l00428"></a>00428 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00429"></a>00429 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferFrames, <a class="code" href="RtAudio_8h.html#a112c7b7e25a974977f6fc094cef1a31f" title="RtAudio callback function prototype.">RtAudioCallback</a> callback,
+<a name="l00430"></a>00430 <span class="keywordtype">void</span> *userData = NULL, <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::StreamOptions *options = NULL );
+<a name="l00431"></a>00431
+<a name="l00433"></a>00433
+<a name="l00437"></a>00437 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a" title="A function that closes a stream and frees any associated stream memory.">closeStream</a>( <span class="keywordtype">void</span> ) throw();
+<a name="l00438"></a>00438
+<a name="l00440"></a>00440
+<a name="l00446"></a>00446 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80" title="A function that starts a stream.">startStream</a>( <span class="keywordtype">void</span> );
+<a name="l00447"></a>00447
+<a name="l00449"></a>00449
+<a name="l00455"></a>00455 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd" title="Stop a stream, allowing any samples remaining in the output queue to be played.">stopStream</a>( <span class="keywordtype">void</span> );
+<a name="l00456"></a>00456
<a name="l00458"></a>00458
-<a name="l00460"></a>00460
-<a name="l00463"></a>00463 <span class="keywordtype">double</span> <a class="code" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca" title="Returns the number of elapsed seconds since the stream was started.">getStreamTime</a>( <span class="keywordtype">void</span> );
-<a name="l00464"></a>00464
-<a name="l00466"></a>00466
-<a name="l00474"></a>00474 <span class="keywordtype">long</span> <a class="code" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3" title="Returns the internal stream latency in sample frames.">getStreamLatency</a>( <span class="keywordtype">void</span> );
-<a name="l00475"></a>00475
+<a name="l00464"></a>00464 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#ad0586b47cd6bb9591a80b4052815991f" title="Stop a stream, discarding any samples remaining in the input/output queue.">abortStream</a>( <span class="keywordtype">void</span> );
+<a name="l00465"></a>00465
+<a name="l00467"></a>00467 <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f" title="Returns true if a stream is open and false if not.">isStreamOpen</a>( <span class="keywordtype">void</span> ) const throw();
+<a name="l00468"></a>00468
+<a name="l00470"></a>00470 <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a84cc8d9b7ab9bc5f37bcf48430ec5aea" title="Returns true if the stream is running and false if it is stopped or not open.">isStreamRunning</a>( <span class="keywordtype">void</span> ) const throw();
+<a name="l00471"></a>00471
+<a name="l00473"></a>00473
+<a name="l00476"></a>00476 <span class="keywordtype">double</span> <a class="code" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca" title="Returns the number of elapsed seconds since the stream was started.">getStreamTime</a>( <span class="keywordtype">void</span> );
<a name="l00477"></a>00477
-<a name="l00482"></a>00482 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a28214b8b05d60b45c24ee6fae7b2a0b5" title="Returns actual sample rate in use by the stream.">getStreamSampleRate</a>( <span class="keywordtype">void</span> );
-<a name="l00483"></a>00483
-<a name="l00485"></a>00485 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af0752ee51cce3dd90a3bd009f9fdbe77" title="Specify whether warning messages should be printed to stderr.">showWarnings</a>( <span class="keywordtype">bool</span> value = true ) throw();
-<a name="l00486"></a>00486
-<a name="l00487"></a>00487 protected:
+<a name="l00479"></a>00479
+<a name="l00487"></a>00487 <span class="keywordtype">long</span> <a class="code" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3" title="Returns the internal stream latency in sample frames.">getStreamLatency</a>( <span class="keywordtype">void</span> );
<a name="l00488"></a>00488
-<a name="l00489"></a>00489 <span class="keywordtype">void</span> openRtApi( <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::<a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">Api</a> api );
-<a name="l00490"></a>00490 RtApi *rtapi_;
-<a name="l00491"></a>00491 };
-<a name="l00492"></a>00492
-<a name="l00493"></a>00493 <span class="comment">// Operating system dependent thread functionality.</span>
-<a name="l00494"></a>00494 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)</span>
-<a name="l00495"></a>00495 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;windows.h&gt;</span>
-<a name="l00496"></a>00496 <span class="preprocessor"> #include &lt;process.h&gt;</span>
-<a name="l00497"></a>00497
-<a name="l00498"></a>00498 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ThreadHandle;
-<a name="l00499"></a>00499 <span class="keyword">typedef</span> CRITICAL_SECTION StreamMutex;
-<a name="l00500"></a>00500
-<a name="l00501"></a>00501 <span class="preprocessor">#elif defined(__LINUX_ALSA__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__)</span>
-<a name="l00502"></a>00502 <span class="preprocessor"></span> <span class="comment">// Using pthread library for various flavors of unix.</span>
-<a name="l00503"></a>00503 <span class="preprocessor"> #include &lt;pthread.h&gt;</span>
-<a name="l00504"></a>00504
-<a name="l00505"></a>00505 <span class="keyword">typedef</span> pthread_t ThreadHandle;
-<a name="l00506"></a>00506 <span class="keyword">typedef</span> pthread_mutex_t StreamMutex;
-<a name="l00507"></a>00507
-<a name="l00508"></a>00508 <span class="preprocessor">#else // Setup for &quot;dummy&quot; behavior</span>
-<a name="l00509"></a>00509 <span class="preprocessor"></span>
-<a name="l00510"></a>00510 <span class="preprocessor"> #define __RTAUDIO_DUMMY__</span>
-<a name="l00511"></a>00511 <span class="preprocessor"></span> <span class="keyword">typedef</span> <span class="keywordtype">int</span> ThreadHandle;
-<a name="l00512"></a>00512 <span class="keyword">typedef</span> <span class="keywordtype">int</span> StreamMutex;
+<a name="l00490"></a>00490
+<a name="l00495"></a>00495 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a28214b8b05d60b45c24ee6fae7b2a0b5" title="Returns actual sample rate in use by the stream.">getStreamSampleRate</a>( <span class="keywordtype">void</span> );
+<a name="l00496"></a>00496
+<a name="l00498"></a>00498 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af0752ee51cce3dd90a3bd009f9fdbe77" title="Specify whether warning messages should be printed to stderr.">showWarnings</a>( <span class="keywordtype">bool</span> value = true ) throw();
+<a name="l00499"></a>00499
+<a name="l00500"></a>00500 protected:
+<a name="l00501"></a>00501
+<a name="l00502"></a>00502 <span class="keywordtype">void</span> openRtApi( <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>::<a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">Api</a> api );
+<a name="l00503"></a>00503 RtApi *rtapi_;
+<a name="l00504"></a>00504 };
+<a name="l00505"></a>00505
+<a name="l00506"></a>00506 <span class="comment">// Operating system dependent thread functionality.</span>
+<a name="l00507"></a>00507 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)</span>
+<a name="l00508"></a>00508 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;windows.h&gt;</span>
+<a name="l00509"></a>00509 <span class="preprocessor"> #include &lt;process.h&gt;</span>
+<a name="l00510"></a>00510
+<a name="l00511"></a>00511 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ThreadHandle;
+<a name="l00512"></a>00512 <span class="keyword">typedef</span> CRITICAL_SECTION StreamMutex;
<a name="l00513"></a>00513
-<a name="l00514"></a>00514 <span class="preprocessor">#endif</span>
-<a name="l00515"></a>00515 <span class="preprocessor"></span>
-<a name="l00516"></a>00516 <span class="comment">// This global structure type is used to pass callback information</span>
-<a name="l00517"></a>00517 <span class="comment">// between the private RtAudio stream structure and global callback</span>
-<a name="l00518"></a>00518 <span class="comment">// handling functions.</span>
-<a name="l00519"></a>00519 <span class="keyword">struct </span>CallbackInfo {
-<a name="l00520"></a>00520 <span class="keywordtype">void</span> *object; <span class="comment">// Used as a &quot;this&quot; pointer.</span>
-<a name="l00521"></a>00521 ThreadHandle thread;
-<a name="l00522"></a>00522 <span class="keywordtype">void</span> *callback;
-<a name="l00523"></a>00523 <span class="keywordtype">void</span> *userData;
-<a name="l00524"></a>00524 <span class="keywordtype">void</span> *apiInfo; <span class="comment">// void pointer for API specific callback information</span>
-<a name="l00525"></a>00525 <span class="keywordtype">bool</span> isRunning;
+<a name="l00514"></a>00514 <span class="preprocessor">#elif defined(__LINUX_ALSA__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__)</span>
+<a name="l00515"></a>00515 <span class="preprocessor"></span> <span class="comment">// Using pthread library for various flavors of unix.</span>
+<a name="l00516"></a>00516 <span class="preprocessor"> #include &lt;pthread.h&gt;</span>
+<a name="l00517"></a>00517
+<a name="l00518"></a>00518 <span class="keyword">typedef</span> pthread_t ThreadHandle;
+<a name="l00519"></a>00519 <span class="keyword">typedef</span> pthread_mutex_t StreamMutex;
+<a name="l00520"></a>00520
+<a name="l00521"></a>00521 <span class="preprocessor">#else // Setup for &quot;dummy&quot; behavior</span>
+<a name="l00522"></a>00522 <span class="preprocessor"></span>
+<a name="l00523"></a>00523 <span class="preprocessor"> #define __RTAUDIO_DUMMY__</span>
+<a name="l00524"></a>00524 <span class="preprocessor"></span> <span class="keyword">typedef</span> <span class="keywordtype">int</span> ThreadHandle;
+<a name="l00525"></a>00525 <span class="keyword">typedef</span> <span class="keywordtype">int</span> StreamMutex;
<a name="l00526"></a>00526
-<a name="l00527"></a>00527 <span class="comment">// Default constructor.</span>
-<a name="l00528"></a>00528 CallbackInfo()
-<a name="l00529"></a>00529 :object(0), callback(0), userData(0), apiInfo(0), isRunning(false) {}
-<a name="l00530"></a>00530 };
-<a name="l00531"></a>00531
-<a name="l00532"></a>00532 <span class="comment">// **************************************************************** //</span>
-<a name="l00533"></a>00533 <span class="comment">//</span>
-<a name="l00534"></a>00534 <span class="comment">// RtApi class declaration.</span>
-<a name="l00535"></a>00535 <span class="comment">//</span>
-<a name="l00536"></a>00536 <span class="comment">// Subclasses of RtApi contain all API- and OS-specific code necessary</span>
-<a name="l00537"></a>00537 <span class="comment">// to fully implement the RtAudio API.</span>
-<a name="l00538"></a>00538 <span class="comment">//</span>
-<a name="l00539"></a>00539 <span class="comment">// Note that RtApi is an abstract base class and cannot be</span>
-<a name="l00540"></a>00540 <span class="comment">// explicitly instantiated. The class RtAudio will create an</span>
-<a name="l00541"></a>00541 <span class="comment">// instance of an RtApi subclass (RtApiOss, RtApiAlsa,</span>
-<a name="l00542"></a>00542 <span class="comment">// RtApiJack, RtApiCore, RtApiAl, RtApiDs, or RtApiAsio).</span>
-<a name="l00543"></a>00543 <span class="comment">//</span>
-<a name="l00544"></a>00544 <span class="comment">// **************************************************************** //</span>
-<a name="l00545"></a>00545
-<a name="l00546"></a>00546 <span class="preprocessor">#if defined( HAVE_GETTIMEOFDAY )</span>
-<a name="l00547"></a>00547 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;sys/time.h&gt;</span>
-<a name="l00548"></a>00548 <span class="preprocessor">#endif</span>
-<a name="l00549"></a>00549 <span class="preprocessor"></span>
-<a name="l00550"></a>00550 <span class="preprocessor">#include &lt;sstream&gt;</span>
-<a name="l00551"></a>00551
-<a name="l00552"></a>00552 <span class="keyword">class </span>RtApi
-<a name="l00553"></a>00553 {
-<a name="l00554"></a>00554 <span class="keyword">public</span>:
-<a name="l00555"></a>00555
-<a name="l00556"></a>00556 RtApi();
-<a name="l00557"></a>00557 <span class="keyword">virtual</span> ~RtApi();
-<a name="l00558"></a>00558 <span class="keyword">virtual</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> <a class="code" href="classRtAudio.html#a83687634795792b2c47e4ae1cf8a5246" title="Returns the audio API specifier for the current instance of RtAudio.">getCurrentApi</a>( <span class="keywordtype">void</span> ) = 0;
-<a name="l00559"></a>00559 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a747ce2d73803641bbb66d6e78092aa1a" title="A public function that queries for the number of audio devices available.">getDeviceCount</a>( <span class="keywordtype">void</span> ) = 0;
-<a name="l00560"></a>00560 <span class="keyword">virtual</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> <a class="code" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8" title="Return an RtAudio::DeviceInfo structure for a specified device number.">getDeviceInfo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) = 0;
-<a name="l00561"></a>00561 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#aad8b94edd3cd379ee300b125750ac6ce" title="A function that returns the index of the default input device.">getDefaultInputDevice</a>( <span class="keywordtype">void</span> );
-<a name="l00562"></a>00562 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a3a3f3dbe13ea696b521e49cdaaa357bc" title="A function that returns the index of the default output device.">getDefaultOutputDevice</a>( <span class="keywordtype">void</span> );
-<a name="l00563"></a>00563 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">openStream</a>( <a class="code" href="structRtAudio_1_1StreamParameters.html" title="The structure for specifying input or ouput stream parameters.">RtAudio::StreamParameters</a> *outputParameters,
-<a name="l00564"></a>00564 <a class="code" href="structRtAudio_1_1StreamParameters.html" title="The structure for specifying input or ouput stream parameters.">RtAudio::StreamParameters</a> *inputParameters,
-<a name="l00565"></a>00565 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00566"></a>00566 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferFrames, <a class="code" href="RtAudio_8h.html#a112c7b7e25a974977f6fc094cef1a31f" title="RtAudio callback function prototype.">RtAudioCallback</a> callback,
-<a name="l00567"></a>00567 <span class="keywordtype">void</span> *userData, <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
-<a name="l00568"></a>00568 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a" title="A function that closes a stream and frees any associated stream memory.">closeStream</a>( <span class="keywordtype">void</span> );
-<a name="l00569"></a>00569 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80" title="A function that starts a stream.">startStream</a>( <span class="keywordtype">void</span> ) = 0;
-<a name="l00570"></a>00570 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd" title="Stop a stream, allowing any samples remaining in the output queue to be played.">stopStream</a>( <span class="keywordtype">void</span> ) = 0;
-<a name="l00571"></a>00571 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#ad0586b47cd6bb9591a80b4052815991f" title="Stop a stream, discarding any samples remaining in the input/output queue.">abortStream</a>( <span class="keywordtype">void</span> ) = 0;
-<a name="l00572"></a>00572 <span class="keywordtype">long</span> <a class="code" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3" title="Returns the internal stream latency in sample frames.">getStreamLatency</a>( <span class="keywordtype">void</span> );
-<a name="l00573"></a>00573 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a28214b8b05d60b45c24ee6fae7b2a0b5" title="Returns actual sample rate in use by the stream.">getStreamSampleRate</a>( <span class="keywordtype">void</span> );
-<a name="l00574"></a>00574 <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca" title="Returns the number of elapsed seconds since the stream was started.">getStreamTime</a>( <span class="keywordtype">void</span> );
-<a name="l00575"></a>00575 <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f" title="Returns true if a stream is open and false if not.">isStreamOpen</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stream_.state != STREAM_CLOSED; };
-<a name="l00576"></a>00576 <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a84cc8d9b7ab9bc5f37bcf48430ec5aea" title="Returns true if the stream is running and false if it is stopped or not open.">isStreamRunning</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stream_.state == STREAM_RUNNING; };
-<a name="l00577"></a>00577 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af0752ee51cce3dd90a3bd009f9fdbe77" title="Specify whether warning messages should be printed to stderr.">showWarnings</a>( <span class="keywordtype">bool</span> value ) { showWarnings_ = value; };
-<a name="l00578"></a>00578
-<a name="l00579"></a>00579
-<a name="l00580"></a>00580 <span class="keyword">protected</span>:
-<a name="l00581"></a>00581
-<a name="l00582"></a>00582 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MAX_SAMPLE_RATES;
-<a name="l00583"></a>00583 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> SAMPLE_RATES[];
-<a name="l00584"></a>00584
-<a name="l00585"></a>00585 <span class="keyword">enum</span> { FAILURE, SUCCESS };
-<a name="l00586"></a>00586
-<a name="l00587"></a>00587 <span class="keyword">enum</span> StreamState {
-<a name="l00588"></a>00588 STREAM_STOPPED,
-<a name="l00589"></a>00589 STREAM_RUNNING,
-<a name="l00590"></a>00590 STREAM_CLOSED = -50
-<a name="l00591"></a>00591 };
+<a name="l00527"></a>00527 <span class="preprocessor">#endif</span>
+<a name="l00528"></a>00528 <span class="preprocessor"></span>
+<a name="l00529"></a>00529 <span class="comment">// This global structure type is used to pass callback information</span>
+<a name="l00530"></a>00530 <span class="comment">// between the private RtAudio stream structure and global callback</span>
+<a name="l00531"></a>00531 <span class="comment">// handling functions.</span>
+<a name="l00532"></a>00532 <span class="keyword">struct </span>CallbackInfo {
+<a name="l00533"></a>00533 <span class="keywordtype">void</span> *object; <span class="comment">// Used as a &quot;this&quot; pointer.</span>
+<a name="l00534"></a>00534 ThreadHandle thread;
+<a name="l00535"></a>00535 <span class="keywordtype">void</span> *callback;
+<a name="l00536"></a>00536 <span class="keywordtype">void</span> *userData;
+<a name="l00537"></a>00537 <span class="keywordtype">void</span> *apiInfo; <span class="comment">// void pointer for API specific callback information</span>
+<a name="l00538"></a>00538 <span class="keywordtype">bool</span> isRunning;
+<a name="l00539"></a>00539
+<a name="l00540"></a>00540 <span class="comment">// Default constructor.</span>
+<a name="l00541"></a>00541 CallbackInfo()
+<a name="l00542"></a>00542 :object(0), callback(0), userData(0), apiInfo(0), isRunning(false) {}
+<a name="l00543"></a>00543 };
+<a name="l00544"></a>00544
+<a name="l00545"></a>00545 <span class="comment">// **************************************************************** //</span>
+<a name="l00546"></a>00546 <span class="comment">//</span>
+<a name="l00547"></a>00547 <span class="comment">// RtApi class declaration.</span>
+<a name="l00548"></a>00548 <span class="comment">//</span>
+<a name="l00549"></a>00549 <span class="comment">// Subclasses of RtApi contain all API- and OS-specific code necessary</span>
+<a name="l00550"></a>00550 <span class="comment">// to fully implement the RtAudio API.</span>
+<a name="l00551"></a>00551 <span class="comment">//</span>
+<a name="l00552"></a>00552 <span class="comment">// Note that RtApi is an abstract base class and cannot be</span>
+<a name="l00553"></a>00553 <span class="comment">// explicitly instantiated. The class RtAudio will create an</span>
+<a name="l00554"></a>00554 <span class="comment">// instance of an RtApi subclass (RtApiOss, RtApiAlsa,</span>
+<a name="l00555"></a>00555 <span class="comment">// RtApiJack, RtApiCore, RtApiAl, RtApiDs, or RtApiAsio).</span>
+<a name="l00556"></a>00556 <span class="comment">//</span>
+<a name="l00557"></a>00557 <span class="comment">// **************************************************************** //</span>
+<a name="l00558"></a>00558
+<a name="l00559"></a>00559 <span class="preprocessor">#if defined( HAVE_GETTIMEOFDAY )</span>
+<a name="l00560"></a>00560 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;sys/time.h&gt;</span>
+<a name="l00561"></a>00561 <span class="preprocessor">#endif</span>
+<a name="l00562"></a>00562 <span class="preprocessor"></span>
+<a name="l00563"></a>00563 <span class="preprocessor">#include &lt;sstream&gt;</span>
+<a name="l00564"></a>00564
+<a name="l00565"></a>00565 <span class="keyword">class </span>RtApi
+<a name="l00566"></a>00566 {
+<a name="l00567"></a>00567 <span class="keyword">public</span>:
+<a name="l00568"></a>00568
+<a name="l00569"></a>00569 RtApi();
+<a name="l00570"></a>00570 <span class="keyword">virtual</span> ~RtApi();
+<a name="l00571"></a>00571 <span class="keyword">virtual</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> <a class="code" href="classRtAudio.html#a83687634795792b2c47e4ae1cf8a5246" title="Returns the audio API specifier for the current instance of RtAudio.">getCurrentApi</a>( <span class="keywordtype">void</span> ) = 0;
+<a name="l00572"></a>00572 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a747ce2d73803641bbb66d6e78092aa1a" title="A public function that queries for the number of audio devices available.">getDeviceCount</a>( <span class="keywordtype">void</span> ) = 0;
+<a name="l00573"></a>00573 <span class="keyword">virtual</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> <a class="code" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8" title="Return an RtAudio::DeviceInfo structure for a specified device number.">getDeviceInfo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) = 0;
+<a name="l00574"></a>00574 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#aad8b94edd3cd379ee300b125750ac6ce" title="A function that returns the index of the default input device.">getDefaultInputDevice</a>( <span class="keywordtype">void</span> );
+<a name="l00575"></a>00575 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a3a3f3dbe13ea696b521e49cdaaa357bc" title="A function that returns the index of the default output device.">getDefaultOutputDevice</a>( <span class="keywordtype">void</span> );
+<a name="l00576"></a>00576 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">openStream</a>( <a class="code" href="structRtAudio_1_1StreamParameters.html" title="The structure for specifying input or ouput stream parameters.">RtAudio::StreamParameters</a> *outputParameters,
+<a name="l00577"></a>00577 <a class="code" href="structRtAudio_1_1StreamParameters.html" title="The structure for specifying input or ouput stream parameters.">RtAudio::StreamParameters</a> *inputParameters,
+<a name="l00578"></a>00578 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00579"></a>00579 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferFrames, <a class="code" href="RtAudio_8h.html#a112c7b7e25a974977f6fc094cef1a31f" title="RtAudio callback function prototype.">RtAudioCallback</a> callback,
+<a name="l00580"></a>00580 <span class="keywordtype">void</span> *userData, <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
+<a name="l00581"></a>00581 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a" title="A function that closes a stream and frees any associated stream memory.">closeStream</a>( <span class="keywordtype">void</span> );
+<a name="l00582"></a>00582 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80" title="A function that starts a stream.">startStream</a>( <span class="keywordtype">void</span> ) = 0;
+<a name="l00583"></a>00583 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd" title="Stop a stream, allowing any samples remaining in the output queue to be played.">stopStream</a>( <span class="keywordtype">void</span> ) = 0;
+<a name="l00584"></a>00584 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#ad0586b47cd6bb9591a80b4052815991f" title="Stop a stream, discarding any samples remaining in the input/output queue.">abortStream</a>( <span class="keywordtype">void</span> ) = 0;
+<a name="l00585"></a>00585 <span class="keywordtype">long</span> <a class="code" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3" title="Returns the internal stream latency in sample frames.">getStreamLatency</a>( <span class="keywordtype">void</span> );
+<a name="l00586"></a>00586 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a28214b8b05d60b45c24ee6fae7b2a0b5" title="Returns actual sample rate in use by the stream.">getStreamSampleRate</a>( <span class="keywordtype">void</span> );
+<a name="l00587"></a>00587 <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca" title="Returns the number of elapsed seconds since the stream was started.">getStreamTime</a>( <span class="keywordtype">void</span> );
+<a name="l00588"></a>00588 <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f" title="Returns true if a stream is open and false if not.">isStreamOpen</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stream_.state != STREAM_CLOSED; };
+<a name="l00589"></a>00589 <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a84cc8d9b7ab9bc5f37bcf48430ec5aea" title="Returns true if the stream is running and false if it is stopped or not open.">isStreamRunning</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stream_.state == STREAM_RUNNING; };
+<a name="l00590"></a>00590 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af0752ee51cce3dd90a3bd009f9fdbe77" title="Specify whether warning messages should be printed to stderr.">showWarnings</a>( <span class="keywordtype">bool</span> value ) { showWarnings_ = value; };
+<a name="l00591"></a>00591
<a name="l00592"></a>00592
-<a name="l00593"></a>00593 <span class="keyword">enum</span> StreamMode {
-<a name="l00594"></a>00594 OUTPUT,
-<a name="l00595"></a>00595 INPUT,
-<a name="l00596"></a>00596 DUPLEX,
-<a name="l00597"></a>00597 UNINITIALIZED = -75
-<a name="l00598"></a>00598 };
+<a name="l00593"></a>00593 <span class="keyword">protected</span>:
+<a name="l00594"></a>00594
+<a name="l00595"></a>00595 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MAX_SAMPLE_RATES;
+<a name="l00596"></a>00596 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> SAMPLE_RATES[];
+<a name="l00597"></a>00597
+<a name="l00598"></a>00598 <span class="keyword">enum</span> { FAILURE, SUCCESS };
<a name="l00599"></a>00599
-<a name="l00600"></a>00600 <span class="comment">// A protected structure used for buffer conversion.</span>
-<a name="l00601"></a>00601 <span class="keyword">struct </span>ConvertInfo {
-<a name="l00602"></a>00602 <span class="keywordtype">int</span> channels;
-<a name="l00603"></a>00603 <span class="keywordtype">int</span> inJump, outJump;
-<a name="l00604"></a>00604 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> inFormat, outFormat;
-<a name="l00605"></a>00605 std::vector&lt;int&gt; inOffset;
-<a name="l00606"></a>00606 std::vector&lt;int&gt; outOffset;
-<a name="l00607"></a>00607 };
-<a name="l00608"></a>00608
-<a name="l00609"></a>00609 <span class="comment">// A protected structure for audio streams.</span>
-<a name="l00610"></a>00610 <span class="keyword">struct </span>RtApiStream {
-<a name="l00611"></a>00611 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device[2]; <span class="comment">// Playback and record, respectively.</span>
-<a name="l00612"></a>00612 <span class="keywordtype">void</span> *apiHandle; <span class="comment">// void pointer for API specific stream handle information</span>
-<a name="l00613"></a>00613 StreamMode mode; <span class="comment">// OUTPUT, INPUT, or DUPLEX.</span>
-<a name="l00614"></a>00614 StreamState state; <span class="comment">// STOPPED, RUNNING, or CLOSED</span>
-<a name="l00615"></a>00615 <span class="keywordtype">char</span> *userBuffer[2]; <span class="comment">// Playback and record, respectively.</span>
-<a name="l00616"></a>00616 <span class="keywordtype">char</span> *deviceBuffer;
-<a name="l00617"></a>00617 <span class="keywordtype">bool</span> doConvertBuffer[2]; <span class="comment">// Playback and record, respectively.</span>
-<a name="l00618"></a>00618 <span class="keywordtype">bool</span> userInterleaved;
-<a name="l00619"></a>00619 <span class="keywordtype">bool</span> deviceInterleaved[2]; <span class="comment">// Playback and record, respectively.</span>
-<a name="l00620"></a>00620 <span class="keywordtype">bool</span> doByteSwap[2]; <span class="comment">// Playback and record, respectively.</span>
-<a name="l00621"></a>00621 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate;
-<a name="l00622"></a>00622 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferSize;
-<a name="l00623"></a>00623 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBuffers;
-<a name="l00624"></a>00624 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nUserChannels[2]; <span class="comment">// Playback and record, respectively.</span>
-<a name="l00625"></a>00625 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nDeviceChannels[2]; <span class="comment">// Playback and record channels, respectively.</span>
-<a name="l00626"></a>00626 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelOffset[2]; <span class="comment">// Playback and record, respectively.</span>
-<a name="l00627"></a>00627 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> latency[2]; <span class="comment">// Playback and record, respectively.</span>
-<a name="l00628"></a>00628 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> userFormat;
-<a name="l00629"></a>00629 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> deviceFormat[2]; <span class="comment">// Playback and record, respectively.</span>
-<a name="l00630"></a>00630 StreamMutex mutex;
-<a name="l00631"></a>00631 CallbackInfo callbackInfo;
-<a name="l00632"></a>00632 ConvertInfo convertInfo[2];
-<a name="l00633"></a>00633 <span class="keywordtype">double</span> streamTime; <span class="comment">// Number of elapsed seconds since the stream started.</span>
-<a name="l00634"></a>00634
-<a name="l00635"></a>00635 <span class="preprocessor">#if defined(HAVE_GETTIMEOFDAY)</span>
-<a name="l00636"></a>00636 <span class="preprocessor"></span> <span class="keyword">struct </span>timeval lastTickTimestamp;
-<a name="l00637"></a>00637 <span class="preprocessor">#endif</span>
-<a name="l00638"></a>00638 <span class="preprocessor"></span>
-<a name="l00639"></a>00639 RtApiStream()
-<a name="l00640"></a>00640 :apiHandle(0), deviceBuffer(0) { device[0] = 11111; device[1] = 11111; }
-<a name="l00641"></a>00641 };
-<a name="l00642"></a>00642
-<a name="l00643"></a>00643 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> Int16;
-<a name="l00644"></a>00644 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> Int32;
-<a name="l00645"></a>00645 <span class="keyword">typedef</span> <span class="keywordtype">float</span> Float32;
-<a name="l00646"></a>00646 <span class="keyword">typedef</span> <span class="keywordtype">double</span> Float64;
+<a name="l00600"></a>00600 <span class="keyword">enum</span> StreamState {
+<a name="l00601"></a>00601 STREAM_STOPPED,
+<a name="l00602"></a>00602 STREAM_RUNNING,
+<a name="l00603"></a>00603 STREAM_CLOSED = -50
+<a name="l00604"></a>00604 };
+<a name="l00605"></a>00605
+<a name="l00606"></a>00606 <span class="keyword">enum</span> StreamMode {
+<a name="l00607"></a>00607 OUTPUT,
+<a name="l00608"></a>00608 INPUT,
+<a name="l00609"></a>00609 DUPLEX,
+<a name="l00610"></a>00610 UNINITIALIZED = -75
+<a name="l00611"></a>00611 };
+<a name="l00612"></a>00612
+<a name="l00613"></a>00613 <span class="comment">// A protected structure used for buffer conversion.</span>
+<a name="l00614"></a>00614 <span class="keyword">struct </span>ConvertInfo {
+<a name="l00615"></a>00615 <span class="keywordtype">int</span> channels;
+<a name="l00616"></a>00616 <span class="keywordtype">int</span> inJump, outJump;
+<a name="l00617"></a>00617 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> inFormat, outFormat;
+<a name="l00618"></a>00618 std::vector&lt;int&gt; inOffset;
+<a name="l00619"></a>00619 std::vector&lt;int&gt; outOffset;
+<a name="l00620"></a>00620 };
+<a name="l00621"></a>00621
+<a name="l00622"></a>00622 <span class="comment">// A protected structure for audio streams.</span>
+<a name="l00623"></a>00623 <span class="keyword">struct </span>RtApiStream {
+<a name="l00624"></a>00624 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device[2]; <span class="comment">// Playback and record, respectively.</span>
+<a name="l00625"></a>00625 <span class="keywordtype">void</span> *apiHandle; <span class="comment">// void pointer for API specific stream handle information</span>
+<a name="l00626"></a>00626 StreamMode mode; <span class="comment">// OUTPUT, INPUT, or DUPLEX.</span>
+<a name="l00627"></a>00627 StreamState state; <span class="comment">// STOPPED, RUNNING, or CLOSED</span>
+<a name="l00628"></a>00628 <span class="keywordtype">char</span> *userBuffer[2]; <span class="comment">// Playback and record, respectively.</span>
+<a name="l00629"></a>00629 <span class="keywordtype">char</span> *deviceBuffer;
+<a name="l00630"></a>00630 <span class="keywordtype">bool</span> doConvertBuffer[2]; <span class="comment">// Playback and record, respectively.</span>
+<a name="l00631"></a>00631 <span class="keywordtype">bool</span> userInterleaved;
+<a name="l00632"></a>00632 <span class="keywordtype">bool</span> deviceInterleaved[2]; <span class="comment">// Playback and record, respectively.</span>
+<a name="l00633"></a>00633 <span class="keywordtype">bool</span> doByteSwap[2]; <span class="comment">// Playback and record, respectively.</span>
+<a name="l00634"></a>00634 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate;
+<a name="l00635"></a>00635 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferSize;
+<a name="l00636"></a>00636 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBuffers;
+<a name="l00637"></a>00637 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nUserChannels[2]; <span class="comment">// Playback and record, respectively.</span>
+<a name="l00638"></a>00638 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nDeviceChannels[2]; <span class="comment">// Playback and record channels, respectively.</span>
+<a name="l00639"></a>00639 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelOffset[2]; <span class="comment">// Playback and record, respectively.</span>
+<a name="l00640"></a>00640 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> latency[2]; <span class="comment">// Playback and record, respectively.</span>
+<a name="l00641"></a>00641 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> userFormat;
+<a name="l00642"></a>00642 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> deviceFormat[2]; <span class="comment">// Playback and record, respectively.</span>
+<a name="l00643"></a>00643 StreamMutex mutex;
+<a name="l00644"></a>00644 CallbackInfo callbackInfo;
+<a name="l00645"></a>00645 ConvertInfo convertInfo[2];
+<a name="l00646"></a>00646 <span class="keywordtype">double</span> streamTime; <span class="comment">// Number of elapsed seconds since the stream started.</span>
<a name="l00647"></a>00647
-<a name="l00648"></a>00648 std::ostringstream errorStream_;
-<a name="l00649"></a>00649 std::string errorText_;
-<a name="l00650"></a>00650 <span class="keywordtype">bool</span> showWarnings_;
-<a name="l00651"></a>00651 RtApiStream stream_;
-<a name="l00652"></a>00652
-<a name="l00660"></a>00660 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
-<a name="l00661"></a>00661 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00662"></a>00662 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00663"></a>00663 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
-<a name="l00664"></a>00664
-<a name="l00666"></a>00666 <span class="keywordtype">void</span> tickStreamTime( <span class="keywordtype">void</span> );
-<a name="l00667"></a>00667
-<a name="l00669"></a>00669 <span class="keywordtype">void</span> clearStreamInfo();
-<a name="l00670"></a>00670
-<a name="l00675"></a>00675 <span class="keywordtype">void</span> verifyStream( <span class="keywordtype">void</span> );
-<a name="l00676"></a>00676
-<a name="l00678"></a>00678 <span class="keywordtype">void</span> error( <a class="code" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903ac" title="Defined RtError types.">RtError::Type</a> type );
-<a name="l00679"></a>00679
-<a name="l00684"></a>00684 <span class="keywordtype">void</span> convertBuffer( <span class="keywordtype">char</span> *outBuffer, <span class="keywordtype">char</span> *inBuffer, ConvertInfo &amp;info );
-<a name="l00685"></a>00685
-<a name="l00687"></a>00687 <span class="keywordtype">void</span> byteSwapBuffer( <span class="keywordtype">char</span> *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> samples, <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format );
-<a name="l00688"></a>00688
-<a name="l00690"></a>00690 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> formatBytes( <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format );
-<a name="l00691"></a>00691
-<a name="l00693"></a>00693 <span class="keywordtype">void</span> setConvertInfo( StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel );
-<a name="l00694"></a>00694 };
-<a name="l00695"></a>00695
-<a name="l00696"></a>00696 <span class="comment">// **************************************************************** //</span>
-<a name="l00697"></a>00697 <span class="comment">//</span>
-<a name="l00698"></a>00698 <span class="comment">// Inline RtAudio definitions.</span>
-<a name="l00699"></a>00699 <span class="comment">//</span>
-<a name="l00700"></a>00700 <span class="comment">// **************************************************************** //</span>
+<a name="l00648"></a>00648 <span class="preprocessor">#if defined(HAVE_GETTIMEOFDAY)</span>
+<a name="l00649"></a>00649 <span class="preprocessor"></span> <span class="keyword">struct </span>timeval lastTickTimestamp;
+<a name="l00650"></a>00650 <span class="preprocessor">#endif</span>
+<a name="l00651"></a>00651 <span class="preprocessor"></span>
+<a name="l00652"></a>00652 RtApiStream()
+<a name="l00653"></a>00653 :apiHandle(0), deviceBuffer(0) { device[0] = 11111; device[1] = 11111; }
+<a name="l00654"></a>00654 };
+<a name="l00655"></a>00655
+<a name="l00656"></a>00656 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> Int16;
+<a name="l00657"></a>00657 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> Int32;
+<a name="l00658"></a>00658 <span class="keyword">typedef</span> <span class="keywordtype">float</span> Float32;
+<a name="l00659"></a>00659 <span class="keyword">typedef</span> <span class="keywordtype">double</span> Float64;
+<a name="l00660"></a>00660
+<a name="l00661"></a>00661 std::ostringstream errorStream_;
+<a name="l00662"></a>00662 std::string errorText_;
+<a name="l00663"></a>00663 <span class="keywordtype">bool</span> showWarnings_;
+<a name="l00664"></a>00664 RtApiStream stream_;
+<a name="l00665"></a>00665
+<a name="l00673"></a>00673 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
+<a name="l00674"></a>00674 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00675"></a>00675 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00676"></a>00676 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
+<a name="l00677"></a>00677
+<a name="l00679"></a>00679 <span class="keywordtype">void</span> tickStreamTime( <span class="keywordtype">void</span> );
+<a name="l00680"></a>00680
+<a name="l00682"></a>00682 <span class="keywordtype">void</span> clearStreamInfo();
+<a name="l00683"></a>00683
+<a name="l00688"></a>00688 <span class="keywordtype">void</span> verifyStream( <span class="keywordtype">void</span> );
+<a name="l00689"></a>00689
+<a name="l00691"></a>00691 <span class="keywordtype">void</span> error( <a class="code" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903ac" title="Defined RtError types.">RtError::Type</a> type );
+<a name="l00692"></a>00692
+<a name="l00697"></a>00697 <span class="keywordtype">void</span> convertBuffer( <span class="keywordtype">char</span> *outBuffer, <span class="keywordtype">char</span> *inBuffer, ConvertInfo &amp;info );
+<a name="l00698"></a>00698
+<a name="l00700"></a>00700 <span class="keywordtype">void</span> byteSwapBuffer( <span class="keywordtype">char</span> *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> samples, <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format );
<a name="l00701"></a>00701
-<a name="l00702"></a><a class="code" href="classRtAudio.html#a83687634795792b2c47e4ae1cf8a5246">00702</a> <span class="keyword">inline</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> <a class="code" href="classRtAudio.html#a83687634795792b2c47e4ae1cf8a5246" title="Returns the audio API specifier for the current instance of RtAudio.">RtAudio :: getCurrentApi</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getCurrentApi(); }
-<a name="l00703"></a><a class="code" href="classRtAudio.html#a747ce2d73803641bbb66d6e78092aa1a">00703</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a747ce2d73803641bbb66d6e78092aa1a" title="A public function that queries for the number of audio devices available.">RtAudio :: getDeviceCount</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceCount(); }
-<a name="l00704"></a><a class="code" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8">00704</a> <span class="keyword">inline</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> <a class="code" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8" title="Return an RtAudio::DeviceInfo structure for a specified device number.">RtAudio :: getDeviceInfo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceInfo( device ); }
-<a name="l00705"></a><a class="code" href="classRtAudio.html#aad8b94edd3cd379ee300b125750ac6ce">00705</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#aad8b94edd3cd379ee300b125750ac6ce" title="A function that returns the index of the default input device.">RtAudio :: getDefaultInputDevice</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDefaultInputDevice(); }
-<a name="l00706"></a><a class="code" href="classRtAudio.html#a3a3f3dbe13ea696b521e49cdaaa357bc">00706</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a3a3f3dbe13ea696b521e49cdaaa357bc" title="A function that returns the index of the default output device.">RtAudio :: getDefaultOutputDevice</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDefaultOutputDevice(); }
-<a name="l00707"></a><a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a">00707</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a" title="A function that closes a stream and frees any associated stream memory.">RtAudio :: closeStream</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;closeStream(); }
-<a name="l00708"></a><a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80">00708</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80" title="A function that starts a stream.">RtAudio :: startStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;startStream(); }
-<a name="l00709"></a><a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd">00709</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd" title="Stop a stream, allowing any samples remaining in the output queue to be played.">RtAudio :: stopStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;stopStream(); }
-<a name="l00710"></a><a class="code" href="classRtAudio.html#ad0586b47cd6bb9591a80b4052815991f">00710</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#ad0586b47cd6bb9591a80b4052815991f" title="Stop a stream, discarding any samples remaining in the input/output queue.">RtAudio :: abortStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;abortStream(); }
-<a name="l00711"></a><a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f">00711</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f" title="Returns true if a stream is open and false if not.">RtAudio :: isStreamOpen</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> rtapi_-&gt;isStreamOpen(); }
-<a name="l00712"></a><a class="code" href="classRtAudio.html#a84cc8d9b7ab9bc5f37bcf48430ec5aea">00712</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a84cc8d9b7ab9bc5f37bcf48430ec5aea" title="Returns true if the stream is running and false if it is stopped or not open.">RtAudio :: isStreamRunning</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> rtapi_-&gt;isStreamRunning(); }
-<a name="l00713"></a><a class="code" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3">00713</a> <span class="keyword">inline</span> <span class="keywordtype">long</span> <a class="code" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3" title="Returns the internal stream latency in sample frames.">RtAudio :: getStreamLatency</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamLatency(); }
-<a name="l00714"></a><a class="code" href="classRtAudio.html#a28214b8b05d60b45c24ee6fae7b2a0b5">00714</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a28214b8b05d60b45c24ee6fae7b2a0b5" title="Returns actual sample rate in use by the stream.">RtAudio :: getStreamSampleRate</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamSampleRate(); };
-<a name="l00715"></a><a class="code" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca">00715</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca" title="Returns the number of elapsed seconds since the stream was started.">RtAudio :: getStreamTime</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamTime(); }
-<a name="l00716"></a><a class="code" href="classRtAudio.html#af0752ee51cce3dd90a3bd009f9fdbe77">00716</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af0752ee51cce3dd90a3bd009f9fdbe77" title="Specify whether warning messages should be printed to stderr.">RtAudio :: showWarnings</a>( <span class="keywordtype">bool</span> value ) <span class="keywordflow">throw</span>() { rtapi_-&gt;showWarnings( value ); }
-<a name="l00717"></a>00717
-<a name="l00718"></a>00718 <span class="comment">// RtApi Subclass prototypes.</span>
-<a name="l00719"></a>00719
-<a name="l00720"></a>00720 <span class="preprocessor">#if defined(__MACOSX_CORE__)</span>
-<a name="l00721"></a>00721 <span class="preprocessor"></span>
-<a name="l00722"></a>00722 <span class="preprocessor">#include &lt;CoreAudio/AudioHardware.h&gt;</span>
-<a name="l00723"></a>00723
-<a name="l00724"></a>00724 <span class="keyword">class </span>RtApiCore: <span class="keyword">public</span> RtApi
-<a name="l00725"></a>00725 {
-<a name="l00726"></a>00726 <span class="keyword">public</span>:
-<a name="l00727"></a>00727
-<a name="l00728"></a>00728 RtApiCore();
-<a name="l00729"></a>00729 ~RtApiCore();
-<a name="l00730"></a>00730 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a9fec92b8272244a87a6a11a717bd662d">RtAudio::MACOSX_CORE</a>; };
-<a name="l00731"></a>00731 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
-<a name="l00732"></a>00732 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
-<a name="l00733"></a>00733 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultOutputDevice( <span class="keywordtype">void</span> );
-<a name="l00734"></a>00734 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultInputDevice( <span class="keywordtype">void</span> );
-<a name="l00735"></a>00735 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
-<a name="l00736"></a>00736 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
-<a name="l00737"></a>00737 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
-<a name="l00738"></a>00738 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
-<a name="l00739"></a>00739 <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
+<a name="l00703"></a>00703 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> formatBytes( <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format );
+<a name="l00704"></a>00704
+<a name="l00706"></a>00706 <span class="keywordtype">void</span> setConvertInfo( StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel );
+<a name="l00707"></a>00707 };
+<a name="l00708"></a>00708
+<a name="l00709"></a>00709 <span class="comment">// **************************************************************** //</span>
+<a name="l00710"></a>00710 <span class="comment">//</span>
+<a name="l00711"></a>00711 <span class="comment">// Inline RtAudio definitions.</span>
+<a name="l00712"></a>00712 <span class="comment">//</span>
+<a name="l00713"></a>00713 <span class="comment">// **************************************************************** //</span>
+<a name="l00714"></a>00714
+<a name="l00715"></a><a class="code" href="classRtAudio.html#a83687634795792b2c47e4ae1cf8a5246">00715</a> <span class="keyword">inline</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> <a class="code" href="classRtAudio.html#a83687634795792b2c47e4ae1cf8a5246" title="Returns the audio API specifier for the current instance of RtAudio.">RtAudio :: getCurrentApi</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getCurrentApi(); }
+<a name="l00716"></a><a class="code" href="classRtAudio.html#a747ce2d73803641bbb66d6e78092aa1a">00716</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a747ce2d73803641bbb66d6e78092aa1a" title="A public function that queries for the number of audio devices available.">RtAudio :: getDeviceCount</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceCount(); }
+<a name="l00717"></a><a class="code" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8">00717</a> <span class="keyword">inline</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> <a class="code" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8" title="Return an RtAudio::DeviceInfo structure for a specified device number.">RtAudio :: getDeviceInfo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceInfo( device ); }
+<a name="l00718"></a><a class="code" href="classRtAudio.html#aad8b94edd3cd379ee300b125750ac6ce">00718</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#aad8b94edd3cd379ee300b125750ac6ce" title="A function that returns the index of the default input device.">RtAudio :: getDefaultInputDevice</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDefaultInputDevice(); }
+<a name="l00719"></a><a class="code" href="classRtAudio.html#a3a3f3dbe13ea696b521e49cdaaa357bc">00719</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a3a3f3dbe13ea696b521e49cdaaa357bc" title="A function that returns the index of the default output device.">RtAudio :: getDefaultOutputDevice</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDefaultOutputDevice(); }
+<a name="l00720"></a><a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a">00720</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a" title="A function that closes a stream and frees any associated stream memory.">RtAudio :: closeStream</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;closeStream(); }
+<a name="l00721"></a><a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80">00721</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80" title="A function that starts a stream.">RtAudio :: startStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;startStream(); }
+<a name="l00722"></a><a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd">00722</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd" title="Stop a stream, allowing any samples remaining in the output queue to be played.">RtAudio :: stopStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;stopStream(); }
+<a name="l00723"></a><a class="code" href="classRtAudio.html#ad0586b47cd6bb9591a80b4052815991f">00723</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#ad0586b47cd6bb9591a80b4052815991f" title="Stop a stream, discarding any samples remaining in the input/output queue.">RtAudio :: abortStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;abortStream(); }
+<a name="l00724"></a><a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f">00724</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f" title="Returns true if a stream is open and false if not.">RtAudio :: isStreamOpen</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> rtapi_-&gt;isStreamOpen(); }
+<a name="l00725"></a><a class="code" href="classRtAudio.html#a84cc8d9b7ab9bc5f37bcf48430ec5aea">00725</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a84cc8d9b7ab9bc5f37bcf48430ec5aea" title="Returns true if the stream is running and false if it is stopped or not open.">RtAudio :: isStreamRunning</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> rtapi_-&gt;isStreamRunning(); }
+<a name="l00726"></a><a class="code" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3">00726</a> <span class="keyword">inline</span> <span class="keywordtype">long</span> <a class="code" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3" title="Returns the internal stream latency in sample frames.">RtAudio :: getStreamLatency</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamLatency(); }
+<a name="l00727"></a><a class="code" href="classRtAudio.html#a28214b8b05d60b45c24ee6fae7b2a0b5">00727</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a28214b8b05d60b45c24ee6fae7b2a0b5" title="Returns actual sample rate in use by the stream.">RtAudio :: getStreamSampleRate</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamSampleRate(); };
+<a name="l00728"></a><a class="code" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca">00728</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca" title="Returns the number of elapsed seconds since the stream was started.">RtAudio :: getStreamTime</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamTime(); }
+<a name="l00729"></a><a class="code" href="classRtAudio.html#af0752ee51cce3dd90a3bd009f9fdbe77">00729</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#af0752ee51cce3dd90a3bd009f9fdbe77" title="Specify whether warning messages should be printed to stderr.">RtAudio :: showWarnings</a>( <span class="keywordtype">bool</span> value ) <span class="keywordflow">throw</span>() { rtapi_-&gt;showWarnings( value ); }
+<a name="l00730"></a>00730
+<a name="l00731"></a>00731 <span class="comment">// RtApi Subclass prototypes.</span>
+<a name="l00732"></a>00732
+<a name="l00733"></a>00733 <span class="preprocessor">#if defined(__MACOSX_CORE__)</span>
+<a name="l00734"></a>00734 <span class="preprocessor"></span>
+<a name="l00735"></a>00735 <span class="preprocessor">#include &lt;CoreAudio/AudioHardware.h&gt;</span>
+<a name="l00736"></a>00736
+<a name="l00737"></a>00737 <span class="keyword">class </span>RtApiCore: <span class="keyword">public</span> RtApi
+<a name="l00738"></a>00738 {
+<a name="l00739"></a>00739 <span class="keyword">public</span>:
<a name="l00740"></a>00740
-<a name="l00741"></a>00741 <span class="comment">// This function is intended for internal use only. It must be</span>
-<a name="l00742"></a>00742 <span class="comment">// public because it is called by the internal callback handler,</span>
-<a name="l00743"></a>00743 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
-<a name="l00744"></a>00744 <span class="comment">// will most likely produce highly undesireable results!</span>
-<a name="l00745"></a>00745 <span class="keywordtype">bool</span> callbackEvent( AudioDeviceID deviceId,
-<a name="l00746"></a>00746 <span class="keyword">const</span> AudioBufferList *inBufferList,
-<a name="l00747"></a>00747 <span class="keyword">const</span> AudioBufferList *outBufferList );
-<a name="l00748"></a>00748
-<a name="l00749"></a>00749 <span class="keyword">private</span>:
-<a name="l00750"></a>00750
-<a name="l00751"></a>00751 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
-<a name="l00752"></a>00752 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00753"></a>00753 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00754"></a>00754 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
-<a name="l00755"></a>00755 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* getErrorCode( OSStatus code );
-<a name="l00756"></a>00756 };
-<a name="l00757"></a>00757
-<a name="l00758"></a>00758 <span class="preprocessor">#endif</span>
-<a name="l00759"></a>00759 <span class="preprocessor"></span>
-<a name="l00760"></a>00760 <span class="preprocessor">#if defined(__UNIX_JACK__)</span>
-<a name="l00761"></a>00761 <span class="preprocessor"></span>
-<a name="l00762"></a>00762 <span class="keyword">class </span>RtApiJack: <span class="keyword">public</span> RtApi
-<a name="l00763"></a>00763 {
-<a name="l00764"></a>00764 <span class="keyword">public</span>:
-<a name="l00765"></a>00765
-<a name="l00766"></a>00766 RtApiJack();
-<a name="l00767"></a>00767 ~RtApiJack();
-<a name="l00768"></a>00768 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a4767e17c6edfbd827f91763915df4105">RtAudio::UNIX_JACK</a>; };
-<a name="l00769"></a>00769 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
-<a name="l00770"></a>00770 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
-<a name="l00771"></a>00771 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
-<a name="l00772"></a>00772 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
-<a name="l00773"></a>00773 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
-<a name="l00774"></a>00774 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
-<a name="l00775"></a>00775 <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
-<a name="l00776"></a>00776
-<a name="l00777"></a>00777 <span class="comment">// This function is intended for internal use only. It must be</span>
-<a name="l00778"></a>00778 <span class="comment">// public because it is called by the internal callback handler,</span>
-<a name="l00779"></a>00779 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
-<a name="l00780"></a>00780 <span class="comment">// will most likely produce highly undesireable results!</span>
-<a name="l00781"></a>00781 <span class="keywordtype">bool</span> callbackEvent( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nframes );
-<a name="l00782"></a>00782
-<a name="l00783"></a>00783 <span class="keyword">private</span>:
-<a name="l00784"></a>00784
-<a name="l00785"></a>00785 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
-<a name="l00786"></a>00786 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00787"></a>00787 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00788"></a>00788 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
-<a name="l00789"></a>00789 };
-<a name="l00790"></a>00790
-<a name="l00791"></a>00791 <span class="preprocessor">#endif</span>
-<a name="l00792"></a>00792 <span class="preprocessor"></span>
-<a name="l00793"></a>00793 <span class="preprocessor">#if defined(__WINDOWS_ASIO__)</span>
-<a name="l00794"></a>00794 <span class="preprocessor"></span>
-<a name="l00795"></a>00795 <span class="keyword">class </span>RtApiAsio: <span class="keyword">public</span> RtApi
-<a name="l00796"></a>00796 {
-<a name="l00797"></a>00797 <span class="keyword">public</span>:
-<a name="l00798"></a>00798
-<a name="l00799"></a>00799 RtApiAsio();
-<a name="l00800"></a>00800 ~RtApiAsio();
-<a name="l00801"></a>00801 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a219517d1df90f94d07758481155bd469">RtAudio::WINDOWS_ASIO</a>; };
-<a name="l00802"></a>00802 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
-<a name="l00803"></a>00803 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
-<a name="l00804"></a>00804 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
-<a name="l00805"></a>00805 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
-<a name="l00806"></a>00806 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
-<a name="l00807"></a>00807 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
-<a name="l00808"></a>00808 <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
-<a name="l00809"></a>00809
-<a name="l00810"></a>00810 <span class="comment">// This function is intended for internal use only. It must be</span>
-<a name="l00811"></a>00811 <span class="comment">// public because it is called by the internal callback handler,</span>
-<a name="l00812"></a>00812 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
-<a name="l00813"></a>00813 <span class="comment">// will most likely produce highly undesireable results!</span>
-<a name="l00814"></a>00814 <span class="keywordtype">bool</span> callbackEvent( <span class="keywordtype">long</span> bufferIndex );
-<a name="l00815"></a>00815
-<a name="l00816"></a>00816 <span class="keyword">private</span>:
-<a name="l00817"></a>00817
-<a name="l00818"></a>00818 std::vector&lt;RtAudio::DeviceInfo&gt; devices_;
-<a name="l00819"></a>00819 <span class="keywordtype">void</span> saveDeviceInfo( <span class="keywordtype">void</span> );
-<a name="l00820"></a>00820 <span class="keywordtype">bool</span> coInitialized_;
-<a name="l00821"></a>00821 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
-<a name="l00822"></a>00822 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00823"></a>00823 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00824"></a>00824 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
-<a name="l00825"></a>00825 };
-<a name="l00826"></a>00826
-<a name="l00827"></a>00827 <span class="preprocessor">#endif</span>
-<a name="l00828"></a>00828 <span class="preprocessor"></span>
-<a name="l00829"></a>00829 <span class="preprocessor">#if defined(__WINDOWS_DS__)</span>
-<a name="l00830"></a>00830 <span class="preprocessor"></span>
-<a name="l00831"></a>00831 <span class="keyword">class </span>RtApiDs: <span class="keyword">public</span> RtApi
-<a name="l00832"></a>00832 {
-<a name="l00833"></a>00833 <span class="keyword">public</span>:
-<a name="l00834"></a>00834
-<a name="l00835"></a>00835 RtApiDs();
-<a name="l00836"></a>00836 ~RtApiDs();
-<a name="l00837"></a>00837 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a28478830f42c2fd61e6c7ad498901931">RtAudio::WINDOWS_DS</a>; };
-<a name="l00838"></a>00838 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
-<a name="l00839"></a>00839 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultOutputDevice( <span class="keywordtype">void</span> );
-<a name="l00840"></a>00840 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultInputDevice( <span class="keywordtype">void</span> );
-<a name="l00841"></a>00841 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
-<a name="l00842"></a>00842 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
-<a name="l00843"></a>00843 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
-<a name="l00844"></a>00844 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
-<a name="l00845"></a>00845 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
-<a name="l00846"></a>00846 <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
+<a name="l00741"></a>00741 RtApiCore();
+<a name="l00742"></a>00742 ~RtApiCore();
+<a name="l00743"></a>00743 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a9fec92b8272244a87a6a11a717bd662d">RtAudio::MACOSX_CORE</a>; };
+<a name="l00744"></a>00744 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
+<a name="l00745"></a>00745 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00746"></a>00746 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultOutputDevice( <span class="keywordtype">void</span> );
+<a name="l00747"></a>00747 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultInputDevice( <span class="keywordtype">void</span> );
+<a name="l00748"></a>00748 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
+<a name="l00749"></a>00749 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
+<a name="l00750"></a>00750 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
+<a name="l00751"></a>00751 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
+<a name="l00752"></a>00752 <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
+<a name="l00753"></a>00753
+<a name="l00754"></a>00754 <span class="comment">// This function is intended for internal use only. It must be</span>
+<a name="l00755"></a>00755 <span class="comment">// public because it is called by the internal callback handler,</span>
+<a name="l00756"></a>00756 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
+<a name="l00757"></a>00757 <span class="comment">// will most likely produce highly undesireable results!</span>
+<a name="l00758"></a>00758 <span class="keywordtype">bool</span> callbackEvent( AudioDeviceID deviceId,
+<a name="l00759"></a>00759 <span class="keyword">const</span> AudioBufferList *inBufferList,
+<a name="l00760"></a>00760 <span class="keyword">const</span> AudioBufferList *outBufferList );
+<a name="l00761"></a>00761
+<a name="l00762"></a>00762 <span class="keyword">private</span>:
+<a name="l00763"></a>00763
+<a name="l00764"></a>00764 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
+<a name="l00765"></a>00765 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00766"></a>00766 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00767"></a>00767 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
+<a name="l00768"></a>00768 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* getErrorCode( OSStatus code );
+<a name="l00769"></a>00769 };
+<a name="l00770"></a>00770
+<a name="l00771"></a>00771 <span class="preprocessor">#endif</span>
+<a name="l00772"></a>00772 <span class="preprocessor"></span>
+<a name="l00773"></a>00773 <span class="preprocessor">#if defined(__UNIX_JACK__)</span>
+<a name="l00774"></a>00774 <span class="preprocessor"></span>
+<a name="l00775"></a>00775 <span class="keyword">class </span>RtApiJack: <span class="keyword">public</span> RtApi
+<a name="l00776"></a>00776 {
+<a name="l00777"></a>00777 <span class="keyword">public</span>:
+<a name="l00778"></a>00778
+<a name="l00779"></a>00779 RtApiJack();
+<a name="l00780"></a>00780 ~RtApiJack();
+<a name="l00781"></a>00781 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a4767e17c6edfbd827f91763915df4105">RtAudio::UNIX_JACK</a>; };
+<a name="l00782"></a>00782 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
+<a name="l00783"></a>00783 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00784"></a>00784 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
+<a name="l00785"></a>00785 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
+<a name="l00786"></a>00786 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
+<a name="l00787"></a>00787 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
+<a name="l00788"></a>00788 <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
+<a name="l00789"></a>00789
+<a name="l00790"></a>00790 <span class="comment">// This function is intended for internal use only. It must be</span>
+<a name="l00791"></a>00791 <span class="comment">// public because it is called by the internal callback handler,</span>
+<a name="l00792"></a>00792 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
+<a name="l00793"></a>00793 <span class="comment">// will most likely produce highly undesireable results!</span>
+<a name="l00794"></a>00794 <span class="keywordtype">bool</span> callbackEvent( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nframes );
+<a name="l00795"></a>00795
+<a name="l00796"></a>00796 <span class="keyword">private</span>:
+<a name="l00797"></a>00797
+<a name="l00798"></a>00798 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
+<a name="l00799"></a>00799 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00800"></a>00800 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00801"></a>00801 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
+<a name="l00802"></a>00802 };
+<a name="l00803"></a>00803
+<a name="l00804"></a>00804 <span class="preprocessor">#endif</span>
+<a name="l00805"></a>00805 <span class="preprocessor"></span>
+<a name="l00806"></a>00806 <span class="preprocessor">#if defined(__WINDOWS_ASIO__)</span>
+<a name="l00807"></a>00807 <span class="preprocessor"></span>
+<a name="l00808"></a>00808 <span class="keyword">class </span>RtApiAsio: <span class="keyword">public</span> RtApi
+<a name="l00809"></a>00809 {
+<a name="l00810"></a>00810 <span class="keyword">public</span>:
+<a name="l00811"></a>00811
+<a name="l00812"></a>00812 RtApiAsio();
+<a name="l00813"></a>00813 ~RtApiAsio();
+<a name="l00814"></a>00814 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a219517d1df90f94d07758481155bd469">RtAudio::WINDOWS_ASIO</a>; };
+<a name="l00815"></a>00815 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
+<a name="l00816"></a>00816 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00817"></a>00817 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
+<a name="l00818"></a>00818 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
+<a name="l00819"></a>00819 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
+<a name="l00820"></a>00820 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
+<a name="l00821"></a>00821 <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
+<a name="l00822"></a>00822
+<a name="l00823"></a>00823 <span class="comment">// This function is intended for internal use only. It must be</span>
+<a name="l00824"></a>00824 <span class="comment">// public because it is called by the internal callback handler,</span>
+<a name="l00825"></a>00825 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
+<a name="l00826"></a>00826 <span class="comment">// will most likely produce highly undesireable results!</span>
+<a name="l00827"></a>00827 <span class="keywordtype">bool</span> callbackEvent( <span class="keywordtype">long</span> bufferIndex );
+<a name="l00828"></a>00828
+<a name="l00829"></a>00829 <span class="keyword">private</span>:
+<a name="l00830"></a>00830
+<a name="l00831"></a>00831 std::vector&lt;RtAudio::DeviceInfo&gt; devices_;
+<a name="l00832"></a>00832 <span class="keywordtype">void</span> saveDeviceInfo( <span class="keywordtype">void</span> );
+<a name="l00833"></a>00833 <span class="keywordtype">bool</span> coInitialized_;
+<a name="l00834"></a>00834 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
+<a name="l00835"></a>00835 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00836"></a>00836 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00837"></a>00837 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
+<a name="l00838"></a>00838 };
+<a name="l00839"></a>00839
+<a name="l00840"></a>00840 <span class="preprocessor">#endif</span>
+<a name="l00841"></a>00841 <span class="preprocessor"></span>
+<a name="l00842"></a>00842 <span class="preprocessor">#if defined(__WINDOWS_DS__)</span>
+<a name="l00843"></a>00843 <span class="preprocessor"></span>
+<a name="l00844"></a>00844 <span class="keyword">class </span>RtApiDs: <span class="keyword">public</span> RtApi
+<a name="l00845"></a>00845 {
+<a name="l00846"></a>00846 <span class="keyword">public</span>:
<a name="l00847"></a>00847
-<a name="l00848"></a>00848 <span class="comment">// This function is intended for internal use only. It must be</span>
-<a name="l00849"></a>00849 <span class="comment">// public because it is called by the internal callback handler,</span>
-<a name="l00850"></a>00850 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
-<a name="l00851"></a>00851 <span class="comment">// will most likely produce highly undesireable results!</span>
-<a name="l00852"></a>00852 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
-<a name="l00853"></a>00853
-<a name="l00854"></a>00854 <span class="keyword">private</span>:
-<a name="l00855"></a>00855
-<a name="l00856"></a>00856 <span class="keywordtype">bool</span> coInitialized_;
-<a name="l00857"></a>00857 <span class="keywordtype">bool</span> buffersRolling;
-<a name="l00858"></a>00858 <span class="keywordtype">long</span> duplexPrerollBytes;
-<a name="l00859"></a>00859 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
-<a name="l00860"></a>00860 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00861"></a>00861 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00862"></a>00862 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
-<a name="l00863"></a>00863 };
-<a name="l00864"></a>00864
-<a name="l00865"></a>00865 <span class="preprocessor">#endif</span>
-<a name="l00866"></a>00866 <span class="preprocessor"></span>
-<a name="l00867"></a>00867 <span class="preprocessor">#if defined(__LINUX_ALSA__)</span>
-<a name="l00868"></a>00868 <span class="preprocessor"></span>
-<a name="l00869"></a>00869 <span class="keyword">class </span>RtApiAlsa: <span class="keyword">public</span> RtApi
-<a name="l00870"></a>00870 {
-<a name="l00871"></a>00871 <span class="keyword">public</span>:
-<a name="l00872"></a>00872
-<a name="l00873"></a>00873 RtApiAlsa();
-<a name="l00874"></a>00874 ~RtApiAlsa();
-<a name="l00875"></a>00875 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi() { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa7a2ba095c2806caa893b6fb8fc3a1a8">RtAudio::LINUX_ALSA</a>; };
-<a name="l00876"></a>00876 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
-<a name="l00877"></a>00877 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
-<a name="l00878"></a>00878 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
-<a name="l00879"></a>00879 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
-<a name="l00880"></a>00880 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
-<a name="l00881"></a>00881 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
-<a name="l00882"></a>00882
-<a name="l00883"></a>00883 <span class="comment">// This function is intended for internal use only. It must be</span>
-<a name="l00884"></a>00884 <span class="comment">// public because it is called by the internal callback handler,</span>
-<a name="l00885"></a>00885 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
-<a name="l00886"></a>00886 <span class="comment">// will most likely produce highly undesireable results!</span>
-<a name="l00887"></a>00887 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
-<a name="l00888"></a>00888
-<a name="l00889"></a>00889 <span class="keyword">private</span>:
-<a name="l00890"></a>00890
-<a name="l00891"></a>00891 std::vector&lt;RtAudio::DeviceInfo&gt; devices_;
-<a name="l00892"></a>00892 <span class="keywordtype">void</span> saveDeviceInfo( <span class="keywordtype">void</span> );
-<a name="l00893"></a>00893 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
-<a name="l00894"></a>00894 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00895"></a>00895 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00896"></a>00896 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
-<a name="l00897"></a>00897 };
-<a name="l00898"></a>00898
-<a name="l00899"></a>00899 <span class="preprocessor">#endif</span>
-<a name="l00900"></a>00900 <span class="preprocessor"></span>
-<a name="l00901"></a>00901 <span class="preprocessor">#if defined(__LINUX_OSS__)</span>
-<a name="l00902"></a>00902 <span class="preprocessor"></span>
-<a name="l00903"></a>00903 <span class="keyword">class </span>RtApiOss: <span class="keyword">public</span> RtApi
-<a name="l00904"></a>00904 {
-<a name="l00905"></a>00905 <span class="keyword">public</span>:
-<a name="l00906"></a>00906
-<a name="l00907"></a>00907 RtApiOss();
-<a name="l00908"></a>00908 ~RtApiOss();
-<a name="l00909"></a>00909 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi() { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a39c84615e61de75e6a4e865596d62c82">RtAudio::LINUX_OSS</a>; };
-<a name="l00910"></a>00910 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
-<a name="l00911"></a>00911 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
-<a name="l00912"></a>00912 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
-<a name="l00913"></a>00913 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
-<a name="l00914"></a>00914 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
-<a name="l00915"></a>00915 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
-<a name="l00916"></a>00916
-<a name="l00917"></a>00917 <span class="comment">// This function is intended for internal use only. It must be</span>
-<a name="l00918"></a>00918 <span class="comment">// public because it is called by the internal callback handler,</span>
-<a name="l00919"></a>00919 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
-<a name="l00920"></a>00920 <span class="comment">// will most likely produce highly undesireable results!</span>
-<a name="l00921"></a>00921 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
-<a name="l00922"></a>00922
-<a name="l00923"></a>00923 <span class="keyword">private</span>:
-<a name="l00924"></a>00924
-<a name="l00925"></a>00925 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
-<a name="l00926"></a>00926 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00927"></a>00927 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00928"></a>00928 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
-<a name="l00929"></a>00929 };
-<a name="l00930"></a>00930
-<a name="l00931"></a>00931 <span class="preprocessor">#endif</span>
-<a name="l00932"></a>00932 <span class="preprocessor"></span>
-<a name="l00933"></a>00933 <span class="preprocessor">#if defined(__RTAUDIO_DUMMY__)</span>
-<a name="l00934"></a>00934 <span class="preprocessor"></span>
-<a name="l00935"></a>00935 <span class="keyword">class </span>RtApiDummy: <span class="keyword">public</span> RtApi
-<a name="l00936"></a>00936 {
-<a name="l00937"></a>00937 <span class="keyword">public</span>:
-<a name="l00938"></a>00938
-<a name="l00939"></a>00939 RtApiDummy() { errorText_ = <span class="stringliteral">&quot;RtApiDummy: This class provides no functionality.&quot;</span>; error( <a class="code" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903aca3a1603c24a56cbdaf5f8ae4ddcb86398">RtError::WARNING</a> ); };
-<a name="l00940"></a>00940 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849ab06b8fd88bf18c9a2b8271f6961ae2d1">RtAudio::RTAUDIO_DUMMY</a>; };
-<a name="l00941"></a>00941 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> 0; };
-<a name="l00942"></a>00942 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) { <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> info; <span class="keywordflow">return</span> info; };
-<a name="l00943"></a>00943 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> ) {};
-<a name="l00944"></a>00944 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> ) {};
-<a name="l00945"></a>00945 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> ) {};
-<a name="l00946"></a>00946 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> ) {};
-<a name="l00947"></a>00947
-<a name="l00948"></a>00948 <span class="keyword">private</span>:
-<a name="l00949"></a>00949
-<a name="l00950"></a>00950 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
-<a name="l00951"></a>00951 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00952"></a>00952 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00953"></a>00953 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; };
-<a name="l00954"></a>00954 };
-<a name="l00955"></a>00955
-<a name="l00956"></a>00956 <span class="preprocessor">#endif</span>
-<a name="l00957"></a>00957 <span class="preprocessor"></span>
-<a name="l00958"></a>00958 <span class="preprocessor">#endif</span>
-<a name="l00959"></a>00959 <span class="preprocessor"></span>
-<a name="l00960"></a>00960 <span class="comment">// Indentation settings for Vim and Emacs</span>
-<a name="l00961"></a>00961 <span class="comment">//</span>
-<a name="l00962"></a>00962 <span class="comment">// Local Variables:</span>
-<a name="l00963"></a>00963 <span class="comment">// c-basic-offset: 2</span>
-<a name="l00964"></a>00964 <span class="comment">// indent-tabs-mode: nil</span>
-<a name="l00965"></a>00965 <span class="comment">// End:</span>
-<a name="l00966"></a>00966 <span class="comment">//</span>
-<a name="l00967"></a>00967 <span class="comment">// vim: et sts=2 sw=2</span>
+<a name="l00848"></a>00848 RtApiDs();
+<a name="l00849"></a>00849 ~RtApiDs();
+<a name="l00850"></a>00850 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a28478830f42c2fd61e6c7ad498901931">RtAudio::WINDOWS_DS</a>; };
+<a name="l00851"></a>00851 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
+<a name="l00852"></a>00852 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultOutputDevice( <span class="keywordtype">void</span> );
+<a name="l00853"></a>00853 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultInputDevice( <span class="keywordtype">void</span> );
+<a name="l00854"></a>00854 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00855"></a>00855 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
+<a name="l00856"></a>00856 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
+<a name="l00857"></a>00857 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
+<a name="l00858"></a>00858 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
+<a name="l00859"></a>00859 <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
+<a name="l00860"></a>00860
+<a name="l00861"></a>00861 <span class="comment">// This function is intended for internal use only. It must be</span>
+<a name="l00862"></a>00862 <span class="comment">// public because it is called by the internal callback handler,</span>
+<a name="l00863"></a>00863 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
+<a name="l00864"></a>00864 <span class="comment">// will most likely produce highly undesireable results!</span>
+<a name="l00865"></a>00865 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
+<a name="l00866"></a>00866
+<a name="l00867"></a>00867 <span class="keyword">private</span>:
+<a name="l00868"></a>00868
+<a name="l00869"></a>00869 <span class="keywordtype">bool</span> coInitialized_;
+<a name="l00870"></a>00870 <span class="keywordtype">bool</span> buffersRolling;
+<a name="l00871"></a>00871 <span class="keywordtype">long</span> duplexPrerollBytes;
+<a name="l00872"></a>00872 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
+<a name="l00873"></a>00873 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00874"></a>00874 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00875"></a>00875 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
+<a name="l00876"></a>00876 };
+<a name="l00877"></a>00877
+<a name="l00878"></a>00878 <span class="preprocessor">#endif</span>
+<a name="l00879"></a>00879 <span class="preprocessor"></span>
+<a name="l00880"></a>00880 <span class="preprocessor">#if defined(__LINUX_ALSA__)</span>
+<a name="l00881"></a>00881 <span class="preprocessor"></span>
+<a name="l00882"></a>00882 <span class="keyword">class </span>RtApiAlsa: <span class="keyword">public</span> RtApi
+<a name="l00883"></a>00883 {
+<a name="l00884"></a>00884 <span class="keyword">public</span>:
+<a name="l00885"></a>00885
+<a name="l00886"></a>00886 RtApiAlsa();
+<a name="l00887"></a>00887 ~RtApiAlsa();
+<a name="l00888"></a>00888 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi() { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849aa7a2ba095c2806caa893b6fb8fc3a1a8">RtAudio::LINUX_ALSA</a>; };
+<a name="l00889"></a>00889 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
+<a name="l00890"></a>00890 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00891"></a>00891 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
+<a name="l00892"></a>00892 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
+<a name="l00893"></a>00893 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
+<a name="l00894"></a>00894 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
+<a name="l00895"></a>00895
+<a name="l00896"></a>00896 <span class="comment">// This function is intended for internal use only. It must be</span>
+<a name="l00897"></a>00897 <span class="comment">// public because it is called by the internal callback handler,</span>
+<a name="l00898"></a>00898 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
+<a name="l00899"></a>00899 <span class="comment">// will most likely produce highly undesireable results!</span>
+<a name="l00900"></a>00900 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
+<a name="l00901"></a>00901
+<a name="l00902"></a>00902 <span class="keyword">private</span>:
+<a name="l00903"></a>00903
+<a name="l00904"></a>00904 std::vector&lt;RtAudio::DeviceInfo&gt; devices_;
+<a name="l00905"></a>00905 <span class="keywordtype">void</span> saveDeviceInfo( <span class="keywordtype">void</span> );
+<a name="l00906"></a>00906 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
+<a name="l00907"></a>00907 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00908"></a>00908 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00909"></a>00909 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
+<a name="l00910"></a>00910 };
+<a name="l00911"></a>00911
+<a name="l00912"></a>00912 <span class="preprocessor">#endif</span>
+<a name="l00913"></a>00913 <span class="preprocessor"></span>
+<a name="l00914"></a>00914 <span class="preprocessor">#if defined(__LINUX_OSS__)</span>
+<a name="l00915"></a>00915 <span class="preprocessor"></span>
+<a name="l00916"></a>00916 <span class="keyword">class </span>RtApiOss: <span class="keyword">public</span> RtApi
+<a name="l00917"></a>00917 {
+<a name="l00918"></a>00918 <span class="keyword">public</span>:
+<a name="l00919"></a>00919
+<a name="l00920"></a>00920 RtApiOss();
+<a name="l00921"></a>00921 ~RtApiOss();
+<a name="l00922"></a>00922 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi() { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849a39c84615e61de75e6a4e865596d62c82">RtAudio::LINUX_OSS</a>; };
+<a name="l00923"></a>00923 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
+<a name="l00924"></a>00924 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00925"></a>00925 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
+<a name="l00926"></a>00926 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
+<a name="l00927"></a>00927 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
+<a name="l00928"></a>00928 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
+<a name="l00929"></a>00929
+<a name="l00930"></a>00930 <span class="comment">// This function is intended for internal use only. It must be</span>
+<a name="l00931"></a>00931 <span class="comment">// public because it is called by the internal callback handler,</span>
+<a name="l00932"></a>00932 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
+<a name="l00933"></a>00933 <span class="comment">// will most likely produce highly undesireable results!</span>
+<a name="l00934"></a>00934 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
+<a name="l00935"></a>00935
+<a name="l00936"></a>00936 <span class="keyword">private</span>:
+<a name="l00937"></a>00937
+<a name="l00938"></a>00938 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
+<a name="l00939"></a>00939 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00940"></a>00940 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00941"></a>00941 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options );
+<a name="l00942"></a>00942 };
+<a name="l00943"></a>00943
+<a name="l00944"></a>00944 <span class="preprocessor">#endif</span>
+<a name="l00945"></a>00945 <span class="preprocessor"></span>
+<a name="l00946"></a>00946 <span class="preprocessor">#if defined(__RTAUDIO_DUMMY__)</span>
+<a name="l00947"></a>00947 <span class="preprocessor"></span>
+<a name="l00948"></a>00948 <span class="keyword">class </span>RtApiDummy: <span class="keyword">public</span> RtApi
+<a name="l00949"></a>00949 {
+<a name="l00950"></a>00950 <span class="keyword">public</span>:
+<a name="l00951"></a>00951
+<a name="l00952"></a>00952 RtApiDummy() { errorText_ = <span class="stringliteral">&quot;RtApiDummy: This class provides no functionality.&quot;</span>; error( <a class="code" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903aca3a1603c24a56cbdaf5f8ae4ddcb86398">RtError::WARNING</a> ); };
+<a name="l00953"></a>00953 <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849" title="Audio API specifier arguments.">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#ac9b6f625da88249d08a8409a9db0d849ab06b8fd88bf18c9a2b8271f6961ae2d1">RtAudio::RTAUDIO_DUMMY</a>; };
+<a name="l00954"></a>00954 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> 0; };
+<a name="l00955"></a>00955 <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) { <a class="code" href="structRtAudio_1_1DeviceInfo.html" title="The public device information structure for returning queried values.">RtAudio::DeviceInfo</a> info; <span class="keywordflow">return</span> info; };
+<a name="l00956"></a>00956 <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> ) {};
+<a name="l00957"></a>00957 <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> ) {};
+<a name="l00958"></a>00958 <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> ) {};
+<a name="l00959"></a>00959 <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> ) {};
+<a name="l00960"></a>00960
+<a name="l00961"></a>00961 <span class="keyword">private</span>:
+<a name="l00962"></a>00962
+<a name="l00963"></a>00963 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels,
+<a name="l00964"></a>00964 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00965"></a>00965 <a class="code" href="RtAudio_8h.html#aafca92882d25915560018873221e44b8" title="RtAudio data format type.">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00966"></a>00966 <a class="code" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> *options ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; };
+<a name="l00967"></a>00967 };
+<a name="l00968"></a>00968
+<a name="l00969"></a>00969 <span class="preprocessor">#endif</span>
+<a name="l00970"></a>00970 <span class="preprocessor"></span>
+<a name="l00971"></a>00971 <span class="preprocessor">#endif</span>
+<a name="l00972"></a>00972 <span class="preprocessor"></span>
+<a name="l00973"></a>00973 <span class="comment">// Indentation settings for Vim and Emacs</span>
+<a name="l00974"></a>00974 <span class="comment">//</span>
+<a name="l00975"></a>00975 <span class="comment">// Local Variables:</span>
+<a name="l00976"></a>00976 <span class="comment">// c-basic-offset: 2</span>
+<a name="l00977"></a>00977 <span class="comment">// indent-tabs-mode: nil</span>
+<a name="l00978"></a>00978 <span class="comment">// End:</span>
+<a name="l00979"></a>00979 <span class="comment">//</span>
+<a name="l00980"></a>00980 <span class="comment">// vim: et sts=2 sw=2</span>
</pre></div></div>
<HR>
diff --git a/doc/html/RtError_8h_source.html b/doc/html/RtError_8h_source.html
index 2a208f7..08d41e3 100644
--- a/doc/html/RtError_8h_source.html
+++ b/doc/html/RtError_8h_source.html
@@ -40,11 +40,11 @@
<a name="l00039"></a>00039
<a name="l00041"></a><a class="code" href="classRtError.html#a6793e03386e7e69ffafb65a296dfa48c">00041</a> <span class="keyword">virtual</span> <a class="code" href="classRtError.html#a6793e03386e7e69ffafb65a296dfa48c" title="The destructor.">~RtError</a>( <span class="keywordtype">void</span> ) throw() {}
<a name="l00042"></a>00042
-<a name="l00044"></a><a class="code" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943">00044</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943" title="Prints thrown error message to stderr.">printMessage</a>( <span class="keywordtype">void</span> ) throw() { std::cerr &lt;&lt; <span class="charliteral">&#39;\n&#39;</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">&quot;\n\n&quot;</span>; }
+<a name="l00044"></a><a class="code" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc">00044</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc" title="Prints thrown error message to stderr.">printMessage</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span> throw() { std::cerr &lt;&lt; <span class="charliteral">&#39;\n&#39;</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">&quot;\n\n&quot;</span>; }
<a name="l00045"></a>00045
-<a name="l00047"></a><a class="code" href="classRtError.html#a4ee7df9728d73f533afbaddcd9ca4d9c">00047</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903ac" title="Defined RtError types.">Type</a>&amp; <a class="code" href="classRtError.html#a4ee7df9728d73f533afbaddcd9ca4d9c" title="Returns the thrown error message type.">getType</a>(<span class="keywordtype">void</span>) throw() { <span class="keywordflow">return</span> type_; }
+<a name="l00047"></a><a class="code" href="classRtError.html#a3e316dc9b9b41fe2f64cabf34beb4fe7">00047</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903ac" title="Defined RtError types.">Type</a>&amp; <a class="code" href="classRtError.html#a3e316dc9b9b41fe2f64cabf34beb4fe7" title="Returns the thrown error message type.">getType</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> type_; }
<a name="l00048"></a>00048
-<a name="l00050"></a><a class="code" href="classRtError.html#ac7f467788e29d246333d7af050801164">00050</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classRtError.html#ac7f467788e29d246333d7af050801164" title="Returns the thrown error message string.">getMessage</a>(<span class="keywordtype">void</span>) throw() { <span class="keywordflow">return</span> message_; }
+<a name="l00050"></a><a class="code" href="classRtError.html#afd067ba6b46edd37f989cad02cd70b50">00050</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classRtError.html#afd067ba6b46edd37f989cad02cd70b50" title="Returns the thrown error message string.">getMessage</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> message_; }
<a name="l00051"></a>00051
<a name="l00053"></a><a class="code" href="classRtError.html#aeb843b7a7785d66061c61ebfc29e7e9d">00053</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classRtError.html#aeb843b7a7785d66061c61ebfc29e7e9d" title="Returns the thrown error message as a c-style string.">what</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> message_.c_str(); }
<a name="l00054"></a>00054
diff --git a/doc/html/acknowledge.html b/doc/html/acknowledge.html
index 0dc714b..88b81e2 100644
--- a/doc/html/acknowledge.html
+++ b/doc/html/acknowledge.html
@@ -19,11 +19,17 @@ Anders Ervik </li>
<li>
Robin Davies (Windows DS and ASIO) </li>
<li>
-Ryan Williams (Windows non-MS compiler ASIO support) </li>
-<li>
-Ed Wildgoose (Linux ALSA and Jack) </li>
+Antoine Lefebvre </li>
<li>
Dominic Mazzoni </li>
+<li>
+Tristan Matthews </li>
+<li>
+Ryan Williams (Windows non-MS compiler ASIO support) </li>
+<li>
+<p class="startli">Ed Wildgoose (Linux ALSA and Jack)</p>
+<p class="endli"></p>
+</li>
</ul>
<p>The <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> API incorporates many of the concepts developed in the <a href="http://www.portaudio.com/">PortAudio</a> project by Phil Burk and Ross Bencina. Early development also incorporated ideas from Bill Schottstaedt's <a href="http://www-ccrma.stanford.edu/software/snd/sndlib/">sndlib</a>. The CCRMA <a href="http://www-ccrma.stanford.edu/groups/soundwire/">SoundWire group</a> provided valuable feedback during the API proposal stages.</p>
<p>The early 2.0 version of <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> was slowly developed over the course of many months while in residence at the <a href="http://www.iua.upf.es/">Institut Universitari de L'Audiovisual (IUA)</a> in Barcelona, Spain and the <a href="http://www.acoustics.hut.fi/">Laboratory of Acoustics and Audio Signal Processing</a> at the Helsinki University of Technology, Finland. Much subsequent development happened while working at the <a href="http://www-ccrma.stanford.edu/">Center for Computer Research in Music and Acoustics (CCRMA)</a> at <a href="http://www.stanford.edu/">Stanford University</a>. All recent versions of <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> have been completed while working as an assistant / associate professor of <a href="http://www.music.mcgill.ca/musictech/">Music Technology</a> at <a href="http://www.mcgill.ca/">McGill University</a>. This work was supported in part by the United States Air Force Office of Scientific Research (grant #F49620-99-1-0293). </p>
diff --git a/doc/html/bugs.html b/doc/html/bugs.html
index 686bc7a..fd17ccb 100644
--- a/doc/html/bugs.html
+++ b/doc/html/bugs.html
@@ -12,7 +12,7 @@
<table border=1 cellpadding=10 cellspacing=0>
<tr bgcolor="#C7CAFF"><td><b>#</b></td><td><b>Version</b></td><td><b>API</b></td><td><b>Description</b></td><td><b>Status</b></td></b></tr>
-<tr><td>1</td><td>4.0.7</td><td>Windows ASIO using gcc4.4 (MinGW)</td><td>Functions to set and query supported sample rates fail</td></tr>
+
</table>
<h2>Confirmed Bugs (Unfixed):</h2>
@@ -26,27 +26,30 @@
<table border=1 cellpadding=10 cellspacing=0>
<tr bgcolor="#C7CAFF"><td><b>#</b></td><td><b>Version</b></td><td><b>API</b></td><td><b>Description</b></td></tr>
-<tr><td>1</td><td>4.0</td><td>Windows DS</td><td>Memory allocation bug in device querying</td></tr>
-<tr><td>2</td><td>4.0</td><td>All unices</td><td>Default pthread scheduling priority changed to SCHED_RR when defined</td></tr>
-<tr><td>3</td><td>4.0</td><td>ALSA</td><td>Changed sample rate setting to use <tt>snd_pcm_hw_params_set_rate_near()</tt> function</td></tr>
-<tr><td>4</td><td>4.0</td><td>CoreAudio</td><td>RtAudio checks a device's <i>internal</i> data format and sets it to the highest allowable bit rate. For some stupid devices, like the Griffin iMic, the default format is 8-bit mono when the requested format and number of channels does not exist. So, we need to query the device's capabilities using the kAudioStreamPropertyPhysicalFormats selector - i.e. ask a device for all of the channels/format/rate combination that it supports - and then enumerate through them to pick the best one.</td></tr>
-<tr><td>5</td><td>4.0.1</td><td>All</td><td>Fix to RtError::WARNING typo in RtAudio.cpp</td></tr>
-<tr><td>6</td><td>4.0.2</td><td>All</td><td>Fix to RtError::WARNING typo in RtAudio.h (RtApiDummy)</td></tr>
-<tr><td>7</td><td>4.0.4</td><td>Jack</td><td>Jack in/out port flag fix</td></tr>
-<tr><td>8</td><td>4.0.4</td><td>ALSA/OSS</td><td>Memory leak fixes in ALSA and OSS</td></tr>
-<tr><td>9</td><td>4.0.4</td><td>All</td><td>Fixed RtAudio::DeviceInfo description in "probing" documentation</td></tr>
-<tr><td>10</td><td>4.0.4</td><td>All</td><td>Fixed clearing of error message stream in error()</td></tr>
-<tr><td>11</td><td>4.0.4</td><td>All</td><td>Fixes in configure script</td></tr>
-<tr><td>12</td><td>4.0.5</td><td>All</td><td>Fix to the way the stream state is changed to avoid infinite loop problem</td></tr>
-<tr><td>13</td><td>4.0.5</td><td>All</td><td>Fix to int<->float conversion in convertBuffer() (thanks to Theo Veenker)</td></tr>
-<tr><td>14</td><td>4.0.5</td><td>All</td><td>Bug fix in byteSwapBuffer() (thanks to Stefan Muller Arisona and Theo Veenker)</td></tr>
-<tr><td>15</td><td>4.0.5</td><td>OS-X</td><td>Fixed a few gcc 4.4 errors in OS-X</td></tr>
-<tr><td>16</td><td>4.0.5</td><td>All</td><td>Fixed bug in rtaudio-config script</td></tr>
-<tr><td>17</td><td>4.0.5</td><td>ALSA</td><td>64-bit fixes in ALSA API (thanks to Stefan Muller Arisona)</td></tr>
-<tr><td>18</td><td>4.0.5</td><td>ASIO</td><td>Fixed ASIO sample rate selection bug (thanks to Sasha Zheligovsky)</td></tr>
-<tr><td>19</td><td>4.0.6</td><td>ALSA</td><td>Fixed ALSA code to set period size to power of two (thanks to Joakim Karrstrom)</td></tr>
+<tr><td>24</td><td>4.0.8</td><td>All</td><td>Various updates to most APIs to improve stopping efficiency and avoid lockup issues</td></tr>
+<tr><td>23</td><td>4.0.8</td><td>All</td><td>New python binding in "contrib" directory (beta, thanks to Antoine Lefebvre)</td></tr>
+<tr><td>22</td><td>4.0.8</td><td>OS-X</td><td>Fixed problem handling device names in some languages (CFString conversion, Vincent B&eacute;nony)</td></tr>
+<tr><td>21</td><td>4.0.8</td><td>ASIO</td><td>Fixed problem using gcc4.4 (MinGW) to set and query supported sample rates</td></tr>
<tr><td>20</td><td>4.0.6</td><td>OS-X</td><td>Fixed OS-X for OS < 10.5 ... need preprocessor definition around new variable type (thanks to Tristan Matthews)</td></tr>
-
+<tr><td>19</td><td>4.0.6</td><td>ALSA</td><td>Fixed ALSA code to set period size to power of two (thanks to Joakim Karrstrom)</td></tr>
+<tr><td>18</td><td>4.0.5</td><td>ASIO</td><td>Fixed ASIO sample rate selection bug (thanks to Sasha Zheligovsky)</td></tr>
+<tr><td>17</td><td>4.0.5</td><td>ALSA</td><td>64-bit fixes in ALSA API (thanks to Stefan Muller Arisona)</td></tr>
+<tr><td>16</td><td>4.0.5</td><td>All</td><td>Fixed bug in rtaudio-config script</td></tr>
+<tr><td>15</td><td>4.0.5</td><td>OS-X</td><td>Fixed a few gcc 4.4 errors in OS-X</td></tr>
+<tr><td>14</td><td>4.0.5</td><td>All</td><td>Bug fix in byteSwapBuffer() (thanks to Stefan Muller Arisona and Theo Veenker)</td></tr>
+<tr><td>13</td><td>4.0.5</td><td>All</td><td>Fix to int<->float conversion in convertBuffer() (thanks to Theo Veenker)</td></tr>
+<tr><td>12</td><td>4.0.5</td><td>All</td><td>Fix to the way the stream state is changed to avoid infinite loop problem</td></tr>
+<tr><td>11</td><td>4.0.4</td><td>All</td><td>Fixes in configure script</td></tr>
+<tr><td>10</td><td>4.0.4</td><td>All</td><td>Fixed clearing of error message stream in error()</td></tr>
+<tr><td>9</td><td>4.0.4</td><td>All</td><td>Fixed RtAudio::DeviceInfo description in "probing" documentation</td></tr>
+<tr><td>8</td><td>4.0.4</td><td>ALSA/OSS</td><td>Memory leak fixes in ALSA and OSS</td></tr>
+<tr><td>7</td><td>4.0.4</td><td>Jack</td><td>Jack in/out port flag fix</td></tr>
+<tr><td>6</td><td>4.0.2</td><td>All</td><td>Fix to RtError::WARNING typo in RtAudio.h (RtApiDummy)</td></tr>
+<tr><td>5</td><td>4.0.1</td><td>All</td><td>Fix to RtError::WARNING typo in RtAudio.cpp</td></tr>
+<tr><td>4</td><td>4.0</td><td>CoreAudio</td><td>RtAudio checks a device's <i>internal</i> data format and sets it to the highest allowable bit rate. For some stupid devices, like the Griffin iMic, the default format is 8-bit mono when the requested format and number of channels does not exist. So, we need to query the device's capabilities using the kAudioStreamPropertyPhysicalFormats selector - i.e. ask a device for all of the channels/format/rate combination that it supports - and then enumerate through them to pick the best one.</td></tr>
+<tr><td>3</td><td>4.0</td><td>ALSA</td><td>Changed sample rate setting to use <tt>snd_pcm_hw_params_set_rate_near()</tt> function</td></tr>
+<tr><td>2</td><td>4.0</td><td>All unices</td><td>Default pthread scheduling priority changed to SCHED_RR when defined</td></tr>
+<tr><td>1</td><td>4.0</td><td>Windows DS</td><td>Memory allocation bug in device querying</td></tr>
</table>
diff --git a/doc/html/classRtAudio.html b/doc/html/classRtAudio.html
index 2038c91..c9ffc32 100644
--- a/doc/html/classRtAudio.html
+++ b/doc/html/classRtAudio.html
@@ -89,7 +89,7 @@ void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<p>Realtime audio i/o C++ classes. </p>
<p><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> provides a common API (Application Programming Interface) for realtime audio input/output across Linux (native ALSA, Jack, and OSS), Macintosh OS X (CoreAudio and Jack), and Windows (DirectSound and ASIO) operating systems.</p>
<p><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> WWW site: <a href="http://www.music.mcgill.ca/~gary/rtaudio/">http://www.music.mcgill.ca/~gary/rtaudio/</a></p>
-<p><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>: realtime audio i/o C++ classes Copyright (c) 2001-2010 Gary P. Scavone</p>
+<p><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>: realtime audio i/o C++ classes Copyright (c) 2001-2011 Gary P. Scavone</p>
<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p>
<p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
<p>Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. This is, however, not a binding provision of this license.</p>
diff --git a/doc/html/classRtError-members.html b/doc/html/classRtError-members.html
index a1604e8..70bf786 100644
--- a/doc/html/classRtError-members.html
+++ b/doc/html/classRtError-members.html
@@ -13,14 +13,14 @@
<h1>RtError Member List</h1>This is the complete list of members for <a class="el" href="classRtError.html">RtError</a>, including all inherited members.<table>
<tr class="memlist"><td><a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903aca20e5a369394d19b704ace17002007eba">DEBUG_WARNING</a> enum value</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903aca995e97ecf6beeedaba525022a63aec6b">DRIVER_ERROR</a> enum value</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="classRtError.html#ac7f467788e29d246333d7af050801164">getMessage</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="classRtError.html#a4ee7df9728d73f533afbaddcd9ca4d9c">getType</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="classRtError.html#afd067ba6b46edd37f989cad02cd70b50">getMessage</a>(void) const </td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="classRtError.html#a3e316dc9b9b41fe2f64cabf34beb4fe7">getType</a>(void) const </td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903acad6064062066fffdba258237a7c2159b1">INVALID_DEVICE</a> enum value</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903acaa3eabf0f71120beaba94148a1b78fed6">INVALID_PARAMETER</a> enum value</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903aca8e65f51a3fbdc1a4a1552b3260df36bc">INVALID_USE</a> enum value</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903acab4f813e5a36905c89d4081a59497432e">MEMORY_ERROR</a> enum value</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903acaf267eb2d710f33d649ba840eeab6ff82">NO_DEVICES_FOUND</a> enum value</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943">printMessage</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc">printMessage</a>(void) const </td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtError.html#aa479a305ccbe56be0fd9137b9b405a37">RtError</a>(const std::string &amp;message, Type type=RtError::UNSPECIFIED)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903aca8947d0a2e2a84ecf3646271844e06a6b">SYSTEM_ERROR</a> enum value</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903acaeb6282f991e2d93ab294a4272fc3f6c6">THREAD_ERROR</a> enum value</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
diff --git a/doc/html/classRtError.html b/doc/html/classRtError.html
index 29fd564..7558d31 100644
--- a/doc/html/classRtError.html
+++ b/doc/html/classRtError.html
@@ -44,14 +44,14 @@
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6793e03386e7e69ffafb65a296dfa48c"></a><!-- doxytag: member="RtError::~RtError" ref="a6793e03386e7e69ffafb65a296dfa48c" args="(void)" -->
virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a6793e03386e7e69ffafb65a296dfa48c">~RtError</a> (void) throw ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The destructor. <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada41f7472122f45bc5b4677f066e0943"></a><!-- doxytag: member="RtError::printMessage" ref="ada41f7472122f45bc5b4677f066e0943" args="(void)" -->
-virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943">printMessage</a> (void) throw ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a251dcdac396c998c91706dd2dd3b8bfc"></a><!-- doxytag: member="RtError::printMessage" ref="a251dcdac396c998c91706dd2dd3b8bfc" args="(void) const " -->
+virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc">printMessage</a> (void) const throw ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Prints thrown error message to stderr. <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ee7df9728d73f533afbaddcd9ca4d9c"></a><!-- doxytag: member="RtError::getType" ref="a4ee7df9728d73f533afbaddcd9ca4d9c" args="(void)" -->
-virtual const <a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903ac">Type</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a4ee7df9728d73f533afbaddcd9ca4d9c">getType</a> (void) throw ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e316dc9b9b41fe2f64cabf34beb4fe7"></a><!-- doxytag: member="RtError::getType" ref="a3e316dc9b9b41fe2f64cabf34beb4fe7" args="(void) const " -->
+virtual const <a class="el" href="classRtError.html#ab04667aae01bffc354a9ac6bda6903ac">Type</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a3e316dc9b9b41fe2f64cabf34beb4fe7">getType</a> (void) const throw ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the thrown error message type. <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7f467788e29d246333d7af050801164"></a><!-- doxytag: member="RtError::getMessage" ref="ac7f467788e29d246333d7af050801164" args="(void)" -->
-virtual const std::string &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#ac7f467788e29d246333d7af050801164">getMessage</a> (void) throw ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd067ba6b46edd37f989cad02cd70b50"></a><!-- doxytag: member="RtError::getMessage" ref="afd067ba6b46edd37f989cad02cd70b50" args="(void) const " -->
+virtual const std::string &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#afd067ba6b46edd37f989cad02cd70b50">getMessage</a> (void) const throw ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the thrown error message string. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb843b7a7785d66061c61ebfc29e7e9d"></a><!-- doxytag: member="RtError::what" ref="aeb843b7a7785d66061c61ebfc29e7e9d" args="(void) const " -->
virtual const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#aeb843b7a7785d66061c61ebfc29e7e9d">what</a> (void) const throw ()</td></tr>
diff --git a/doc/html/duplex.html b/doc/html/duplex.html
index 6e85d69..c2ba304 100644
--- a/doc/html/duplex.html
+++ b/doc/html/duplex.html
@@ -51,7 +51,7 @@
adac.<a class="code" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">openStream</a>( &amp;oParams, &amp;iParams, RTAUDIO_SINT32, 44100, &amp;bufferFrames, &amp;inout, (<span class="keywordtype">void</span> *)&amp;bufferBytes );
}
<span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html" title="Exception handling class for RtAudio &amp;amp; RtMidi.">RtError</a>&amp; e ) {
- e.<a class="code" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943" title="Prints thrown error message to stderr.">printMessage</a>();
+ e.<a class="code" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc" title="Prints thrown error message to stderr.">printMessage</a>();
exit( 0 );
}
@@ -68,7 +68,7 @@
adac.<a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd" title="Stop a stream, allowing any samples remaining in the output queue to be played.">stopStream</a>();
}
<span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html" title="Exception handling class for RtAudio &amp;amp; RtMidi.">RtError</a>&amp; e ) {
- e.<a class="code" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943" title="Prints thrown error message to stderr.">printMessage</a>();
+ e.<a class="code" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc" title="Prints thrown error message to stderr.">printMessage</a>();
<span class="keywordflow">goto</span> cleanup;
}
diff --git a/doc/html/functions.html b/doc/html/functions.html
index 611ba70..a41b82c 100644
--- a/doc/html/functions.html
+++ b/doc/html/functions.html
@@ -105,7 +105,7 @@ Here is a list of all documented class members with links to the class documenta
: <a class="el" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8">RtAudio</a>
</li>
<li>getMessage()
-: <a class="el" href="classRtError.html#ac7f467788e29d246333d7af050801164">RtError</a>
+: <a class="el" href="classRtError.html#afd067ba6b46edd37f989cad02cd70b50">RtError</a>
</li>
<li>getStreamLatency()
: <a class="el" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3">RtAudio</a>
@@ -117,7 +117,7 @@ Here is a list of all documented class members with links to the class documenta
: <a class="el" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca">RtAudio</a>
</li>
<li>getType()
-: <a class="el" href="classRtError.html#a4ee7df9728d73f533afbaddcd9ca4d9c">RtError</a>
+: <a class="el" href="classRtError.html#a3e316dc9b9b41fe2f64cabf34beb4fe7">RtError</a>
</li>
</ul>
@@ -201,7 +201,7 @@ Here is a list of all documented class members with links to the class documenta
<h3><a class="anchor" id="index_p">- p -</a></h3><ul>
<li>printMessage()
-: <a class="el" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943">RtError</a>
+: <a class="el" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc">RtError</a>
</li>
<li>priority
: <a class="el" href="structRtAudio_1_1StreamOptions.html#adfd267059434edb21573c584e6367def">RtAudio::StreamOptions</a>
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
index 1ef9c06..71627bd 100644
--- a/doc/html/functions_func.html
+++ b/doc/html/functions_func.html
@@ -45,7 +45,7 @@
: <a class="el" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8">RtAudio</a>
</li>
<li>getMessage()
-: <a class="el" href="classRtError.html#ac7f467788e29d246333d7af050801164">RtError</a>
+: <a class="el" href="classRtError.html#afd067ba6b46edd37f989cad02cd70b50">RtError</a>
</li>
<li>getStreamLatency()
: <a class="el" href="classRtAudio.html#a843c989d9f501c71bc2f2c5ca18df9f3">RtAudio</a>
@@ -57,7 +57,7 @@
: <a class="el" href="classRtAudio.html#a344e59a62353c5791db4621b985cb2ca">RtAudio</a>
</li>
<li>getType()
-: <a class="el" href="classRtError.html#a4ee7df9728d73f533afbaddcd9ca4d9c">RtError</a>
+: <a class="el" href="classRtError.html#a3e316dc9b9b41fe2f64cabf34beb4fe7">RtError</a>
</li>
<li>isStreamOpen()
: <a class="el" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f">RtAudio</a>
@@ -69,7 +69,7 @@
: <a class="el" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8">RtAudio</a>
</li>
<li>printMessage()
-: <a class="el" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943">RtError</a>
+: <a class="el" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc">RtError</a>
</li>
<li>RtAudio()
: <a class="el" href="classRtAudio.html#afd0bfa26deae9804e18faff59d0273d9">RtAudio</a>
diff --git a/doc/html/index.html b/doc/html/index.html
index 531fc6a..c469f3b 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -10,7 +10,7 @@
<HR>
<!-- Generated by Doxygen 1.6.2 -->
<div class="contents">
-<h1>The <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> Home Page </h1><h3 class="version">4.0.7 </h3><p><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> is a set of C++ classes that provide a common API (Application Programming Interface) for realtime audio input/output across Linux, Macintosh OS-X and Windows (DirectSound and ASIO) operating systems. <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> significantly simplifies the process of interacting with computer audio hardware. It was designed with the following objectives:</p>
+<h1>The <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> Home Page </h1><h3 class="version">4.0.8 </h3><p><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> is a set of C++ classes that provide a common API (Application Programming Interface) for realtime audio input/output across Linux, Macintosh OS-X and Windows (DirectSound and ASIO) operating systems. <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> significantly simplifies the process of interacting with computer audio hardware. It was designed with the following objectives:</p>
<ul>
<li>
object-oriented C++ design </li>
@@ -47,7 +47,7 @@ What's New (Version 4.0)</a></h2>
<p>Devices are now re-enumerated every time the <a class="el" href="classRtAudio.html#a747ce2d73803641bbb66d6e78092aa1a" title="A public function that queries for the number of audio devices available.">RtAudio::getDeviceCount()</a>, <a class="el" href="classRtAudio.html#a02d7ff44ad1d7eae22283a052f3dfda8" title="Return an RtAudio::DeviceInfo structure for a specified device number.">RtAudio::getDeviceInfo()</a>, and <a class="el" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">RtAudio::openStream()</a> functions are called. This allows for the proper identification of hot-pluggable (USB, Firewire, ...) devices that are connected after an <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> instance is created.</p>
<h2><a class="anchor" id="download">
Download</a></h2>
-<p>Latest Release (4 February 2010): <a href="http://www.music.mcgill.ca/~gary/rtaudio/release/rtaudio-4.0.7.tar.gz">Version 4.0.7</a></p>
+<p>Latest Release (12 April 2011): <a href="http://www.music.mcgill.ca/~gary/rtaudio/release/rtaudio-4.0.8.tar.gz">Version 4.0.8</a></p>
<h2><a class="anchor" id="documentation">
Documentation Links</a></h2>
<ol type="1">
diff --git a/doc/html/license.html b/doc/html/license.html
index 2e6a981..530fc58 100644
--- a/doc/html/license.html
+++ b/doc/html/license.html
@@ -13,7 +13,7 @@
<h1><a class="anchor" id="license">License </a></h1><p><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a>: a set of realtime audio i/o C++ classes<br/>
- Copyright (c) 2001-2010 Gary P. Scavone</p>
+ Copyright (c) 2001-2011 Gary P. Scavone</p>
<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p>
<p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
<p>Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. This is, however, not a binding provision of this license.</p>
diff --git a/doc/html/playback.html b/doc/html/playback.html
index 0af9ebb..d938956 100644
--- a/doc/html/playback.html
+++ b/doc/html/playback.html
@@ -63,7 +63,7 @@
dac.<a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80" title="A function that starts a stream.">startStream</a>();
}
<span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html" title="Exception handling class for RtAudio &amp;amp; RtMidi.">RtError</a>&amp; e ) {
- e.<a class="code" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943" title="Prints thrown error message to stderr.">printMessage</a>();
+ e.<a class="code" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc" title="Prints thrown error message to stderr.">printMessage</a>();
exit( 0 );
}
@@ -76,7 +76,7 @@
dac.<a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd" title="Stop a stream, allowing any samples remaining in the output queue to be played.">stopStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html" title="Exception handling class for RtAudio &amp;amp; RtMidi.">RtError</a>&amp; e) {
- e.<a class="code" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943" title="Prints thrown error message to stderr.">printMessage</a>();
+ e.<a class="code" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc" title="Prints thrown error message to stderr.">printMessage</a>();
}
<span class="keywordflow">if</span> ( dac.<a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f" title="Returns true if a stream is open and false if not.">isStreamOpen</a>() ) dac.<a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a" title="A function that closes a stream and frees any associated stream memory.">closeStream</a>();
diff --git a/doc/html/recording.html b/doc/html/recording.html
index 3e86db4..778fba3 100644
--- a/doc/html/recording.html
+++ b/doc/html/recording.html
@@ -50,7 +50,7 @@
adc.<a class="code" href="classRtAudio.html#aec017a89629ccef66a90b60be22a2f80" title="A function that starts a stream.">startStream</a>();
}
<span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html" title="Exception handling class for RtAudio &amp;amp; RtMidi.">RtError</a>&amp; e ) {
- e.<a class="code" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943" title="Prints thrown error message to stderr.">printMessage</a>();
+ e.<a class="code" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc" title="Prints thrown error message to stderr.">printMessage</a>();
exit( 0 );
}
@@ -63,7 +63,7 @@
adc.<a class="code" href="classRtAudio.html#af4c241ff86936ecc8108f0d9dfe3efdd" title="Stop a stream, allowing any samples remaining in the output queue to be played.">stopStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html" title="Exception handling class for RtAudio &amp;amp; RtMidi.">RtError</a>&amp; e) {
- e.<a class="code" href="classRtError.html#ada41f7472122f45bc5b4677f066e0943" title="Prints thrown error message to stderr.">printMessage</a>();
+ e.<a class="code" href="classRtError.html#a251dcdac396c998c91706dd2dd3b8bfc" title="Prints thrown error message to stderr.">printMessage</a>();
}
<span class="keywordflow">if</span> ( adc.<a class="code" href="classRtAudio.html#a3863e45ff81dbe97176de0ee7545917f" title="Returns true if a stream is open and false if not.">isStreamOpen</a>() ) adc.<a class="code" href="classRtAudio.html#a90d599002ad32cf250a4cb866f2cc93a" title="A function that closes a stream and frees any associated stream memory.">closeStream</a>();
diff --git a/doc/html/settings.html b/doc/html/settings.html
index 2813a1d..d030ef9 100644
--- a/doc/html/settings.html
+++ b/doc/html/settings.html
@@ -34,13 +34,13 @@
sampleRate, &amp;bufferFrames, &amp;myCallback, NULL, &amp;options );
}
<span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html" title="Exception handling class for RtAudio &amp;amp; RtMidi.">RtError</a>&amp; e ) {
- std::cout &lt;&lt; <span class="charliteral">&#39;\n&#39;</span> &lt;&lt; e.<a class="code" href="classRtError.html#ac7f467788e29d246333d7af050801164" title="Returns the thrown error message string.">getMessage</a>() &lt;&lt; <span class="charliteral">&#39;\n&#39;</span> &lt;&lt; std::endl;
+ std::cout &lt;&lt; <span class="charliteral">&#39;\n&#39;</span> &lt;&lt; e.<a class="code" href="classRtError.html#afd067ba6b46edd37f989cad02cd70b50" title="Returns the thrown error message string.">getMessage</a>() &lt;&lt; <span class="charliteral">&#39;\n&#39;</span> &lt;&lt; std::endl;
exit( 0 );
}
<span class="keywordflow">return</span> 0;
}
-</pre></div><p>The <a class="el" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">RtAudio::openStream()</a> function attempts to open a stream with a specified set of parameter values. In the above example, we attempt to open a two channel playback stream using the default output device, 32-bit floating point data, a sample rate of 44100 Hz, and a frame rate of 256 sample frames per output buffer. If the user specifies an invalid parameter value (such as a device id greater than or equal to the number of enumerated devices), an <a class="el" href="classRtError.html" title="Exception handling class for RtAudio &amp; RtMidi.">RtError</a> is thrown of type = INVALID_USE. If a system error occurs or the device does not support the specified parameter values, an <a class="el" href="classRtError.html" title="Exception handling class for RtAudio &amp; RtMidi.">RtError</a> of type = SYSTEM_ERROR is thrown. In either case, a descriptive error message is bundled with the exception and can be queried with the <a class="el" href="classRtError.html#ac7f467788e29d246333d7af050801164" title="Returns the thrown error message string.">RtError::getMessage()</a> or <a class="el" href="classRtError.html#aeb843b7a7785d66061c61ebfc29e7e9d" title="Returns the thrown error message as a c-style string.">RtError::what()</a> functions.</p>
+</pre></div><p>The <a class="el" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">RtAudio::openStream()</a> function attempts to open a stream with a specified set of parameter values. In the above example, we attempt to open a two channel playback stream using the default output device, 32-bit floating point data, a sample rate of 44100 Hz, and a frame rate of 256 sample frames per output buffer. If the user specifies an invalid parameter value (such as a device id greater than or equal to the number of enumerated devices), an <a class="el" href="classRtError.html" title="Exception handling class for RtAudio &amp; RtMidi.">RtError</a> is thrown of type = INVALID_USE. If a system error occurs or the device does not support the specified parameter values, an <a class="el" href="classRtError.html" title="Exception handling class for RtAudio &amp; RtMidi.">RtError</a> of type = SYSTEM_ERROR is thrown. In either case, a descriptive error message is bundled with the exception and can be queried with the <a class="el" href="classRtError.html#afd067ba6b46edd37f989cad02cd70b50" title="Returns the thrown error message string.">RtError::getMessage()</a> or <a class="el" href="classRtError.html#aeb843b7a7785d66061c61ebfc29e7e9d" title="Returns the thrown error message as a c-style string.">RtError::what()</a> functions.</p>
<p><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> provides four signed integer and two floating point data formats which can be specified using the RtAudioFormat parameter values mentioned earlier. If the opened device does not natively support the given format, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will automatically perform the necessary data format conversion.</p>
<p>The <code>bufferFrames</code> parameter specifies the desired number of sample frames that will be written to and/or read from a device per write/read operation. This parameter can be used to control stream latency though there is no guarantee that the passed value will be that used by a device. In general, a lower <code>bufferFrames</code> value will produce less latency but perhaps less robust performance. A value of zero can be specified, in which case the smallest allowable value will be used. The <code>bufferFrames</code> parameter is passed as a pointer and the actual value used by the stream is set during the device setup procedure. <code>bufferFrames</code> values should be a power of two. Optimal and allowable buffer values tend to vary between systems and devices. Stream latency can also be controlled via the optional <a class="el" href="structRtAudio_1_1StreamOptions.html" title="The structure for specifying stream options.">RtAudio::StreamOptions</a> member <code>numberOfBuffers</code> (not used in the example above), though this tends to be more system dependent. In particular, the <code>numberOfBuffers</code> parameter is ignored when using the OS-X Core Audio, Jack, and the Windows ASIO APIs.</p>
<p>As noted earlier, the device capabilities reported by a driver or underlying audio API are not always accurate and/or may be dependent on a combination of device settings. Because of this, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> does not attempt to query a device's capabilities or use previously reported values when opening a device. Instead, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> simply attempts to set the given parameters on a specified device and then checks whether the setup is successful or not.</p>
diff --git a/doc/html/structRtAudio_1_1StreamOptions.html b/doc/html/structRtAudio_1_1StreamOptions.html
index 336c876..2d8a3ad 100644
--- a/doc/html/structRtAudio_1_1StreamOptions.html
+++ b/doc/html/structRtAudio_1_1StreamOptions.html
@@ -34,11 +34,13 @@
<li><em>RTAUDIO_MINIMIZE_LATENCY:</em> Attempt to set stream parameters for lowest possible latency.</li>
<li><em>RTAUDIO_HOG_DEVICE:</em> Attempt grab device for exclusive use.</li>
<li><em>RTAUDIO_SCHEDULE_REALTIME:</em> Attempt to select realtime scheduling for callback thread.</li>
+<li><em>RTAUDIO_ALSA_USE_DEFAULT:</em> Use the "default" PCM device (ALSA only).</li>
</ul>
<p>By default, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> streams pass and receive audio data from the client in an interleaved format. By passing the RTAUDIO_NONINTERLEAVED flag to the <a class="el" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">openStream()</a> function, audio data will instead be presented in non-interleaved buffers. In this case, each buffer argument in the RtAudioCallback function will point to a single array of data, with <code>nFrames</code> samples for each channel concatenated back-to-back. For example, the first sample of data for the second channel would be located at index <code>nFrames</code> (assuming the <code>buffer</code> pointer was recast to the correct data type for the stream).</p>
<p>Certain audio APIs offer a number of parameters that influence the I/O latency of a stream. By default, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to set these parameters internally for robust (glitch-free) performance (though some APIs, like Windows Direct Sound, make this difficult). By passing the RTAUDIO_MINIMIZE_LATENCY flag to the <a class="el" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">openStream()</a> function, internal stream settings will be influenced in an attempt to minimize stream latency, though possibly at the expense of stream performance.</p>
<p>If the RTAUDIO_HOG_DEVICE flag is set, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to open the input and/or output stream device(s) for exclusive use. Note that this is not possible with all supported audio APIs.</p>
<p>If the RTAUDIO_SCHEDULE_REALTIME flag is set, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to select realtime scheduling (round-robin) for the callback thread. The <code>priority</code> parameter will only be used if the RTAUDIO_SCHEDULE_REALTIME flag is set. It defines the thread's realtime priority.</p>
+<p>If the RTAUDIO_ALSA_USE_DEFAULT flag is set, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to open the "default" PCM device when using the ALSA API. Note that this will override any specified input or output device id.</p>
<p>The <code>numberOfBuffers</code> parameter can be used to control stream latency in the Windows DirectSound, Linux OSS, and Linux Alsa APIs only. A value of two is usually the smallest allowed. Larger numbers can potentially result in more robust stream performance, though likely at the cost of stream latency. The value set by the user is replaced during execution of the <a class="el" href="classRtAudio.html#afacc99740fa4c5606fb35467cdea6da8" title="A public function for opening a stream with the specified parameters.">RtAudio::openStream()</a> function by the value actually used by the system.</p>
<p>The <code>streamName</code> parameter can be used to set the client name when using the Jack API. By default, the client name is set to RtApiJack. However, if you wish to create multiple instances of <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> with Jack, each instance must have a unique client name. </p>
<hr/><h2>Member Data Documentation</h2>
@@ -52,7 +54,7 @@
</table>
</div>
<div class="memdoc">
-<p>A bit-mask of stream flags (RTAUDIO_NONINTERLEAVED, RTAUDIO_MINIMIZE_LATENCY, RTAUDIO_HOG_DEVICE). </p>
+<p>A bit-mask of stream flags (RTAUDIO_NONINTERLEAVED, RTAUDIO_MINIMIZE_LATENCY, RTAUDIO_HOG_DEVICE, RTAUDIO_ALSA_USE_DEFAULT). </p>
</div>
</div>