Release 4.0.8 tarball 4.0.8
authorGary Scavone <gary@music.mcgill.ca>
Thu, 10 Oct 2013 23:59:33 +0000 (01:59 +0200)
committerStephen Sinclair <sinclair@music.mcgill.ca>
Thu, 10 Oct 2013 23:59:33 +0000 (01:59 +0200)
18 files changed:
configure
doc/html/RtAudio_8h.html
doc/html/RtAudio_8h_source.html
doc/html/RtError_8h_source.html
doc/html/acknowledge.html
doc/html/bugs.html
doc/html/classRtAudio.html
doc/html/classRtError-members.html
doc/html/classRtError.html
doc/html/duplex.html
doc/html/functions.html
doc/html/functions_func.html
doc/html/index.html
doc/html/license.html
doc/html/playback.html
doc/html/recording.html
doc/html/settings.html
doc/html/structRtAudio_1_1StreamOptions.html

index 1f88ae39f511c3e85097232d8cc73b483133346e..52e9e2957719f7c4065e159aa4a3ac499e2180bc 100755 (executable)
--- 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
index bf3d222561b9ff32c5f6096fc47a4aedde69d760..d361bde945e1cdb7037ad1a819de55414d566cbf 100644 (file)
 <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>
 <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>
index b1bd2a6af38c0eac88707564eb6a7db16cef2196..4de954c8e3962647e324e0bd2c2b0f422ca2cbe7 100644 (file)
@@ -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>
 <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>
 
index 2a208f78133a6aa61a06f4f2edb3d9839af6d4c6..08d41e37fc33020600f2bba8b91a7e3df8b2bb05 100644 (file)
 <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 
index 0dc714b82ed512ad4da39a6f0db17d076cde15bc..88b81e2e86c38e67fb9efbd79fcfc4ad5d6628fb 100644 (file)
@@ -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>
index 686bc7a48b456efae171a3406da1b7d9ca6c2381..fd17ccbf99c3292b6293079c14ac6fa1c1686da7 100644 (file)
@@ -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>
 
 <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>
 
 
index 2038c9155a4122b240fe02a35436ec78e0c6fe8a..c9ffc3201ede2aeebb8ab43aae5b8e320931ad2b 100644 (file)
@@ -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>
index a1604e837081afcc0eaf4f915802474589575a69..70bf786879caff27a855bc29865bc3b99579a97a 100644 (file)
 <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>
index 29fd5648530d3e909c0b94e6c4f9f1207ae8e891..7558d317493f4296c69453606f3aa4f1b14d4dda 100644 (file)
 <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>
index 6e85d6918a3484ecb96d67cfcf6efcc1c0cd7d56..c2ba3041c3c20d373e9365e475677ad7f48af460 100644 (file)
@@ -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;
   }
 
index 611ba70f0e224f3f58e9199f1ac436910fa7eb19..a41b82cf78dbad71733b9d3d41f9b3940ab4f078 100644 (file)
@@ -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>
index 1ef9c06876be18fce32d2e3fa1f280638394f622..71627bdee5f413c9334f3bb415c85ad686b0bae5 100644 (file)
@@ -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>
index 531fc6a309940750a08bf8f4b5f89570ebcb9ca5..c469f3b9f70f2dd97f9f09d1f6aa2dd3c40c3bd8 100644 (file)
@@ -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">
index 2e6a981bbc4b15fd55a47a9373040cba06088937..530fc58f58c1a594235781ef61bfca308f0dd3ea 100644 (file)
@@ -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>
index 0af9ebbc7d3c2d72325f6fbf3c319ae62863b099..d9389567f974c6447ad4b4a6115feffd94369bbe 100644 (file)
@@ -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>();
index 3e86db4b3db586d433e4d5222cb8eec9545a37a8..778fba3a6da7589786e335a1973edd730e2c7aca 100644 (file)
@@ -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>();
index 2813a1dbf51a1985a0e5c82f9af12d7582b6e79b..d030ef978bd0e46f455ee997c3017cd7dadfc8f9 100644 (file)
                     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>
index 336c8761d469b084683c01c411d36d0922a7ac2c..2d8a3ad838f0c132611df1db6605a1e86430fac2 100644 (file)
 <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>