Browse Source

Release 3.0.2 tarball

tags/3.0.2
Gary Scavone Stephen Sinclair 11 years ago
parent
commit
4f7c61bd5c
19 changed files with 1447 additions and 1118 deletions
  1. +0
    -68
      configure
  2. +595
    -513
      doc/html/RtAudio_8h-source.html
  3. +40
    -40
      doc/html/RtError_8h-source.html
  4. +2
    -2
      doc/html/annotated.html
  5. +17
    -15
      doc/html/classRtAudio-members.html
  6. +325
    -175
      doc/html/classRtAudio.html
  7. +4
    -4
      doc/html/classRtError-members.html
  8. +45
    -44
      doc/html/classRtError.html
  9. +207
    -67
      doc/html/doxygen.css
  10. BIN
      doc/html/doxygen.png
  11. +2
    -2
      doc/html/files.html
  12. +18
    -18
      doc/html/functions.html
  13. +3
    -3
      doc/html/functions_enum.html
  14. +3
    -3
      doc/html/functions_eval.html
  15. +16
    -16
      doc/html/functions_func.html
  16. +3
    -3
      doc/html/functions_vars.html
  17. +111
    -97
      doc/html/index.html
  18. +3
    -3
      doc/html/structRtAudioDeviceInfo-members.html
  19. +53
    -45
      doc/html/structRtAudioDeviceInfo.html

+ 0
- 68
configure View File

@@ -3863,74 +3863,6 @@ fi

frameworks="-framework CoreAudio"


echo "$as_me:$LINENO: checking for printf in -lstdc++" >&5
echo $ECHO_N "checking for printf in -lstdc++... $ECHO_C" >&6
if test "${ac_cv_lib_stdcpp_printf+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lstdc++ $LIBS"
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */

/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char printf ();
int
main ()
{
printf ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_lib_stdcpp_printf=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5

ac_cv_lib_stdcpp_printf=no
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
echo "$as_me:$LINENO: result: $ac_cv_lib_stdcpp_printf" >&5
echo "${ECHO_T}$ac_cv_lib_stdcpp_printf" >&6
if test $ac_cv_lib_stdcpp_printf = yes; then
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSTDC__ 1
_ACEOF

LIBS="-lstdc++ $LIBS"

else
{ { echo "$as_me:$LINENO: error: RtAudio requires the C++ library!" >&5
echo "$as_me: error: RtAudio requires the C++ library!" >&2;}
{ (exit 1); exit 1; }; }
fi

;;

*)


+ 595
- 513
doc/html/RtAudio_8h-source.html
File diff suppressed because it is too large
View File


+ 40
- 40
doc/html/RtError_8h-source.html View File

@@ -7,56 +7,56 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>RtError.h</h1><div class="fragment"><pre>00001 <span class="comment">/************************************************************************/</span>
00010 <span class="comment">/************************************************************************/</span>
00011
00012 <span class="preprocessor">#ifndef RTERROR_H</span>
00013 <span class="preprocessor"></span><span class="preprocessor">#define RTERROR_H</span>
00014 <span class="preprocessor"></span>
00015 <span class="preprocessor">#include &lt;iostream&gt;</span>
00016 <span class="preprocessor">#include &lt;string&gt;</span>
00017
<!-- Generated by Doxygen 1.4.4 -->
<h1>RtError.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/************************************************************************/</span>
<a name="l00010"></a>00010 <span class="comment">/************************************************************************/</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="preprocessor">#ifndef RTERROR_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define RTERROR_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span>
<a name="l00015"></a>00015 <span class="preprocessor">#include &lt;iostream&gt;</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00017"></a>00017
<a name="l00018"></a><a class="code" href="classRtError.html">00018</a> <span class="keyword">class </span><a class="code" href="classRtError.html">RtError</a>
00019 {
00020 <span class="keyword">public</span>:
<a name="l00019"></a>00019 {
<a name="l00020"></a>00020 <span class="keyword">public</span>:
<a name="l00022"></a><a class="code" href="classRtError.html#w11">00022</a> <span class="keyword">enum</span> <a class="code" href="classRtError.html#w11">Type</a> {
00023 <a class="code" href="classRtError.html#w11w0">WARNING</a>,
00024 <a class="code" href="classRtError.html#w11w1">DEBUG_WARNING</a>,
00025 <a class="code" href="classRtError.html#w11w2">UNSPECIFIED</a>,
00026 <a class="code" href="classRtError.html#w11w3">NO_DEVICES_FOUND</a>,
00027 <a class="code" href="classRtError.html#w11w4">INVALID_DEVICE</a>,
00028 <a class="code" href="classRtError.html#w11w5">INVALID_STREAM</a>,
00029 <a class="code" href="classRtError.html#w11w6">MEMORY_ERROR</a>,
00030 <a class="code" href="classRtError.html#w11w7">INVALID_PARAMETER</a>,
00031 <a class="code" href="classRtError.html#w11w8">DRIVER_ERROR</a>,
00032 <a class="code" href="classRtError.html#w11w9">SYSTEM_ERROR</a>,
00033 <a class="code" href="classRtError.html#w11w10">THREAD_ERROR</a>
00034 };
00035
00036 <span class="keyword">protected</span>:
00037 std::string message_;
00038 <a class="code" href="classRtError.html#w11">Type</a> type_;
00039
00040 <span class="keyword">public</span>:
<a name="l00042"></a><a class="code" href="classRtError.html#a0">00042</a> <a class="code" href="classRtError.html#a0">RtError</a>(<span class="keyword">const</span> std::string&amp; message, Type type = RtError::UNSPECIFIED) : message_(message), type_(type){}
00043
<a name="l00023"></a>00023 <a class="code" href="classRtError.html#w11w0">WARNING</a>,
<a name="l00024"></a>00024 <a class="code" href="classRtError.html#w11w1">DEBUG_WARNING</a>,
<a name="l00025"></a>00025 <a class="code" href="classRtError.html#w11w2">UNSPECIFIED</a>,
<a name="l00026"></a>00026 <a class="code" href="classRtError.html#w11w3">NO_DEVICES_FOUND</a>,
<a name="l00027"></a>00027 <a class="code" href="classRtError.html#w11w4">INVALID_DEVICE</a>,
<a name="l00028"></a>00028 <a class="code" href="classRtError.html#w11w5">INVALID_STREAM</a>,
<a name="l00029"></a>00029 <a class="code" href="classRtError.html#w11w6">MEMORY_ERROR</a>,
<a name="l00030"></a>00030 <a class="code" href="classRtError.html#w11w7">INVALID_PARAMETER</a>,
<a name="l00031"></a>00031 <a class="code" href="classRtError.html#w11w8">DRIVER_ERROR</a>,
<a name="l00032"></a>00032 <a class="code" href="classRtError.html#w11w9">SYSTEM_ERROR</a>,
<a name="l00033"></a><a class="code" href="classRtError.html#w11w10">00033</a> <a class="code" href="classRtError.html#w11w10">THREAD_ERROR</a>
<a name="l00034"></a>00034 };
<a name="l00035"></a>00035
<a name="l00036"></a>00036 <span class="keyword">protected</span>:
<a name="l00037"></a>00037 std::string message_;
<a name="l00038"></a>00038 <a class="code" href="classRtError.html#w11">Type</a> type_;
<a name="l00039"></a>00039
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a><a class="code" href="classRtError.html#a0">00042</a> <a class="code" href="classRtError.html#a0">RtError</a>(<span class="keyword">const</span> std::string&amp; message, <a class="code" href="classRtError.html#w11">Type</a> type = <a class="code" href="classRtError.html#w11w2">RtError::UNSPECIFIED</a>) : message_(message), type_(type) {}
<a name="l00043"></a>00043
<a name="l00045"></a><a class="code" href="classRtError.html#a1">00045</a> <span class="keyword">virtual</span> <a class="code" href="classRtError.html#a1">~RtError</a>(<span class="keywordtype">void</span>) {};
00046
<a name="l00046"></a>00046
<a name="l00048"></a><a class="code" href="classRtError.html#a2">00048</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtError.html#a2">printMessage</a>(<span class="keywordtype">void</span>) { std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">"\n\n"</span>; }
00049
<a name="l00049"></a>00049
<a name="l00051"></a><a class="code" href="classRtError.html#a3">00051</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classRtError.html#w11">Type</a>&amp; <a class="code" href="classRtError.html#a3">getType</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> type_; }
00052
<a name="l00052"></a>00052
<a name="l00054"></a><a class="code" href="classRtError.html#a4">00054</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classRtError.html#a4">getMessage</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_; }
00055
<a name="l00055"></a>00055
<a name="l00057"></a><a class="code" href="classRtError.html#a5">00057</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classRtError.html#a5">getMessageString</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_.c_str(); }
00058 };
00059
00060 <span class="preprocessor">#endif</span>
<a name="l00058"></a>00058 };
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="preprocessor">#endif</span>
</pre></div><HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 2
- 2
doc/html/annotated.html View File

@@ -7,7 +7,7 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<!-- Generated by Doxygen 1.4.4 -->
<h1>RtAudio Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
<tr><td class="indexkey"><a class="el" href="classRtAudio.html">RtAudio</a></td><td class="indexvalue">Realtime audio i/o C++ classes </td></tr>
<tr><td class="indexkey"><a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a></td><td class="indexvalue">The public device information structure for returning queried values </td></tr>
@@ -16,7 +16,7 @@
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 17
- 15
doc/html/classRtAudio-members.html View File

@@ -7,35 +7,37 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>RtAudio Member List</h1>This is the complete list of members for <a class="el" href="classRtAudio.html">RtAudio</a>, including all inherited members.<table>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a13">abortStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a5">cancelStreamCallback</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a10">closeStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a6">getDeviceCount</a>(void)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a7">getDeviceInfo</a>(int device)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a8">getStreamBuffer</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<!-- Generated by Doxygen 1.4.4 -->
<h1>RtAudio Member List</h1>This is the complete list of members for <a class="el" href="classRtAudio.html">RtAudio</a>, including all inherited members.<p><table>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a15">abortStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a7">cancelStreamCallback</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a12">closeStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a8">getDeviceCount</a>(void)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a9">getDeviceInfo</a>(int device)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a10">getStreamBuffer</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#w8w5">IRIX_AL</a> enum value</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#w8w1">LINUX_ALSA</a> enum value</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#w8w3">LINUX_JACK</a> enum value</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#w8w2">LINUX_OSS</a> enum value</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#w8w4">MACOSX_CORE</a> enum value</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a3">openStream</a>(int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int numberOfBuffers)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a4">openStream</a>(int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int numberOfBuffers)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a5">openStream</a>(int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int *numberOfBuffers)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a0">RtAudio</a>(RtAudioApi api=UNSPECIFIED)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a1">RtAudio</a>(int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int numberOfBuffers, RtAudioApi api=UNSPECIFIED)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a2">RtAudio</a>(int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int *numberOfBuffers, RtAudioApi api=UNSPECIFIED)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#w8">RtAudioApi</a> enum name</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a4">setStreamCallback</a>(RtAudioCallback callback, void *userData)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a11">startStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a12">stopStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a9">tickStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a6">setStreamCallback</a>(RtAudioCallback callback, void *userData)</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a13">startStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a14">stopStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a11">tickStream</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td><code> [inline]</code></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#w8w0">UNSPECIFIED</a> enum value</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#w8w6">WINDOWS_ASIO</a> enum value</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#w8w7">WINDOWS_DS</a> enum value</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a2">~RtAudio</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="classRtAudio.html#a3">~RtAudio</a>()</td><td><a class="el" href="classRtAudio.html">RtAudio</a></td><td></td></tr>
</table><HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 325
- 175
doc/html/classRtAudio.html View File

@@ -7,16 +7,16 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>RtAudio Class Reference</h1>Realtime audio i/o C++ classes.
<!-- Generated by Doxygen 1.4.4 -->
<h1>RtAudio Class Reference</h1><!-- doxytag: class="RtAudio" -->Realtime audio i/o C++ classes.
<a href="#_details">More...</a>
<p>
<code>#include &lt;<a class="el" href="RtAudio_8h-source.html">RtAudio.h</a>&gt;</code>
<p>
<a href="classRtAudio-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
<a href="classRtAudio-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#w8">RtAudioApi</a> { <br>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#w8">RtAudioApi</a> { <br>
&nbsp;&nbsp;<a class="el" href="classRtAudio.html#w8w0">UNSPECIFIED</a>,
<a class="el" href="classRtAudio.html#w8w1">LINUX_ALSA</a>,
<a class="el" href="classRtAudio.html#w8w2">LINUX_OSS</a>,
@@ -29,76 +29,83 @@
<br>
}</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Audio API specifier arguments. </em> <a href="#w8">More...</a><em><br><br></td></tr>
<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a0">RtAudio</a> (<a class="el" href="classRtAudio.html#w8">RtAudioApi</a> api=UNSPECIFIED)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Audio API specifier arguments. <a href="classRtAudio.html#w8">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a0">RtAudio</a> (<a class="el" href="classRtAudio.html#w8">RtAudioApi</a> api=UNSPECIFIED)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The default class constructor. </em> <a href="#a0"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a1">RtAudio</a> (int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int numberOfBuffers, <a class="el" href="classRtAudio.html#w8">RtAudioApi</a> api=UNSPECIFIED)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The default class constructor. <a href="#a0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a1">RtAudio</a> (int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int numberOfBuffers, <a class="el" href="classRtAudio.html#w8">RtAudioApi</a> api=UNSPECIFIED)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A constructor which can be used to open a stream during instantiation. </em> <a href="#a1"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a2">~RtAudio</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A constructor which can be used to open a stream during instantiation. <a href="#a1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a2">RtAudio</a> (int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int *numberOfBuffers, <a class="el" href="classRtAudio.html#w8">RtAudioApi</a> api=UNSPECIFIED)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The destructor. </em> <a href="#a2"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a3">openStream</a> (int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int numberOfBuffers)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An overloaded constructor which opens a stream and also returns <code>numberOfBuffers</code> parameter via pointer argument. <a href="#a2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a3">~RtAudio</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method for opening a stream with the specified parameters. </em> <a href="#a3"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a4">setStreamCallback</a> (RtAudioCallback callback, void *userData)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The destructor. <a href="#a3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a4">openStream</a> (int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int numberOfBuffers)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method which sets a user-defined callback function for a given stream. </em> <a href="#a4"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a5">cancelStreamCallback</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method for opening a stream with the specified parameters. <a href="#a4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a5">openStream</a> (int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int *numberOfBuffers)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method which cancels a callback process and function for the stream. </em> <a href="#a5"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="a6" doxytag="RtAudio::getDeviceCount" ></a>
int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a6">getDeviceCount</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method for opening a stream and also returning <code>numberOfBuffers</code> parameter via pointer argument. <a href="#a5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a6">setStreamCallback</a> (RtAudioCallback callback, void *userData)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method which returns the number of audio devices found. <br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a7">getDeviceInfo</a> (int device)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method which sets a user-defined callback function for a given stream. <a href="#a6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a7">cancelStreamCallback</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return an <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> structure for a specified device number. </em> <a href="#a7"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>char *const &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a8">getStreamBuffer</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method which cancels a callback process and function for the stream. <a href="#a7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8"></a><!-- doxytag: member="RtAudio::getDeviceCount" ref="a8" args="(void)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a8">getDeviceCount</a> (void)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method which returns a pointer to the buffer for an open stream. </em> <a href="#a8"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a9">tickStream</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method which returns the number of audio devices found. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a9">getDeviceInfo</a> (int device)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Public method used to trigger processing of input/output data for a stream. </em> <a href="#a9"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a10">closeStream</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return an <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> structure for a specified device number. <a href="#a9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">char *const&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a10">getStreamBuffer</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Public method which closes a stream and frees any associated buffers. </em> <a href="#a10"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a11">startStream</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A public method which returns a pointer to the buffer for an open stream. <a href="#a10"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a11">tickStream</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Public method which starts a stream. </em> <a href="#a11"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a12">stopStream</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Public method used to trigger processing of input/output data for a stream. <a href="#a11"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a12">closeStream</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Stop a stream, allowing any samples remaining in the queue to be played out and/or read in. </em> <a href="#a12"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtAudio.html#a13">abortStream</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Public method which closes a stream and frees any associated buffers. <a href="#a12"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a13">startStream</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Stop a stream, discarding any samples remaining in the input/output queue. </em> <a href="#a13"></a><em><br><br></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Public method which starts a stream. <a href="#a13"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a14">stopStream</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Stop a stream, allowing any samples remaining in the queue to be played out and/or read in. <a href="#a14"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html#a15">abortStream</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Stop a stream, discarding any samples remaining in the input/output queue. <a href="#a15"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Realtime audio i/o C++ classes.
<p>
RtAudio provides a common API (Application Programming Interface) for realtime audio input/output across Linux (native ALSA, Jack, and OSS), SGI, Macintosh OS X (CoreAudio), and Windows (DirectSound and ASIO) operating systems.<p>
RtAudio WWW site: <a href="http://music.mcgill.ca/~gary/rtaudio/">http://music.mcgill.ca/~gary/rtaudio/</a><p>
RtAudio: a realtime audio i/o C++ class Copyright (c) 2001-2004 Gary P. Scavone<p>
RtAudio: realtime audio i/o C++ classes Copyright (c) 2001-2005 Gary P. Scavone<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>
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<p>
Any person wishing to distribute modifications to the Software is requested to send the modifications to the original developer so that they can be incorporated into the canonical version.<p>
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
<p>
<hr><h2>Member Enumeration Documentation</h2>
<a class="anchor" name="w8" doxytag="RtAudio::RtAudioApi" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="w8"></a><!-- doxytag: member="RtAudio::RtAudioApi" ref="w8" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> enum <a class="el" href="classRtAudio.html#w8">RtAudio::RtAudioApi</a>
<td class="md" nowrap valign="top">enum <a class="el" href="classRtAudio.html#w8">RtAudio::RtAudioApi</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -108,23 +115,23 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
<p>
Audio API specifier arguments.
<p>
<dl compact><dt><b>Enumeration values: </b></dt><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em><a class="anchor" name="w8w0" doxytag="UNSPECIFIED" ></a>UNSPECIFIED</em>&nbsp;</td><td>
<dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="w8w0"></a><!-- doxytag: member="UNSPECIFIED" ref="w8w0" args="" -->UNSPECIFIED</em>&nbsp;</td><td>
Search for a working compiled API. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w8w1" doxytag="LINUX_ALSA" ></a>LINUX_ALSA</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w8w1"></a><!-- doxytag: member="LINUX_ALSA" ref="w8w1" args="" -->LINUX_ALSA</em>&nbsp;</td><td>
The Advanced Linux Sound Architecture API. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w8w2" doxytag="LINUX_OSS" ></a>LINUX_OSS</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w8w2"></a><!-- doxytag: member="LINUX_OSS" ref="w8w2" args="" -->LINUX_OSS</em>&nbsp;</td><td>
The Linux Open Sound System API. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w8w3" doxytag="LINUX_JACK" ></a>LINUX_JACK</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w8w3"></a><!-- doxytag: member="LINUX_JACK" ref="w8w3" args="" -->LINUX_JACK</em>&nbsp;</td><td>
The Linux Jack Low-Latency Audio Server API. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w8w4" doxytag="MACOSX_CORE" ></a>MACOSX_CORE</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w8w4"></a><!-- doxytag: member="MACOSX_CORE" ref="w8w4" args="" -->MACOSX_CORE</em>&nbsp;</td><td>
Macintosh OS-X Core Audio API. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w8w5" doxytag="IRIX_AL" ></a>IRIX_AL</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w8w5"></a><!-- doxytag: member="IRIX_AL" ref="w8w5" args="" -->IRIX_AL</em>&nbsp;</td><td>
The Irix Audio Library API. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w8w6" doxytag="WINDOWS_ASIO" ></a>WINDOWS_ASIO</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w8w6"></a><!-- doxytag: member="WINDOWS_ASIO" ref="w8w6" args="" -->WINDOWS_ASIO</em>&nbsp;</td><td>
The Steinberg Audio Stream I/O API. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w8w7" doxytag="WINDOWS_DS" ></a>WINDOWS_DS</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w8w7"></a><!-- doxytag: member="WINDOWS_DS" ref="w8w7" args="" -->WINDOWS_DS</em>&nbsp;</td><td>
The Microsoft Direct Sound API. </td></tr>
</table>
</dl>
@@ -132,25 +139,24 @@ The Microsoft Direct Sound API. </td></tr>
</tr>
</table>
<hr><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" name="a0" doxytag="RtAudio::RtAudio" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a0"></a><!-- doxytag: member="RtAudio::RtAudio" ref="a0" args="(RtAudioApi api=UNSPECIFIED)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> RtAudio::RtAudio </td>
<td class="md" nowrap valign="top">RtAudio::RtAudio </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top"><a class="el" href="classRtAudio.html#w8">RtAudioApi</a>&nbsp;</td>
<td class="mdname1" valign="top" nowrap> <em>api</em> = UNSPECIFIED </td>
<td class="mdname1" valign="top" nowrap> <em>api</em> = <code>UNSPECIFIED</code> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -161,79 +167,78 @@ The Microsoft Direct Sound API. </td></tr>
The default class constructor.
<p>
Probes the system to make sure at least one audio input/output device is available and determines the api-specific identifier for each device found. An <a class="el" href="classRtError.html">RtError</a> error can be thrown if no devices are found or if a memory allocation error occurs.<p>
If no API argument is specified and multiple API support has been compiled, the default order of use is JACK, ALSA, OSS (Linux systems) and ASIO, DS (Windows systems). </td>
If no API argument is specified and multiple API support has been compiled, the default order of use is JACK, ALSA, OSS (Linux systems) and ASIO, DS (Windows systems). </td>
</tr>
</table>
<a class="anchor" name="a1" doxytag="RtAudio::RtAudio" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a1"></a><!-- doxytag: member="RtAudio::RtAudio" ref="a1" args="(int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int numberOfBuffers, RtAudioApi api=UNSPECIFIED)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> RtAudio::RtAudio </td>
<td class="md" nowrap valign="top">RtAudio::RtAudio </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">int&nbsp;</td>
<td class="mdname" nowrap> <em>outputDevice</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>outputChannels</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>inputDevice</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>inputChannels</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>RtAudioFormat&nbsp;</td>
<td class="mdname" nowrap> <em>format</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>sampleRate</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int *&nbsp;</td>
<td class="mdname" nowrap> <em>bufferSize</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>numberOfBuffers</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap><a class="el" href="classRtAudio.html#w8">RtAudioApi</a>&nbsp;</td>
<td class="mdname" nowrap> <em>api</em> = UNSPECIFIED</td>
<td class="mdname" nowrap> <em>api</em> = <code>UNSPECIFIED</code></td>
</tr>
<tr>
<td></td>
<td class="md"></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -243,28 +248,108 @@ If no API argument is specified and multiple API support has been compiled, the
<p>
A constructor which can be used to open a stream during instantiation.
<p>
The specified output and/or input device identifiers correspond to those enumerated via the <a class="el" href="classRtAudio.html#a7">getDeviceInfo()</a> method. If device = 0, the default or first available devices meeting the given parameters is selected. If an output or input channel value is zero, the corresponding device value is ignored. When a stream is successfully opened, its identifier is returned via the "streamId" pointer. An <a class="el" href="classRtError.html">RtError</a> can be thrown if no devices are found for the given parameters, if a memory allocation error occurs, or if a driver error occurs. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="classRtAudio.html#a3">openStream()</a> </dd></dl>
The specified output and/or input device identifiers correspond to those enumerated via the <a class="el" href="classRtAudio.html#a9">getDeviceInfo()</a> method. If device = 0, the default or first available devices meeting the given parameters is selected. If an output or input channel value is zero, the corresponding device value is ignored. When a stream is successfully opened, its identifier is returned via the "streamId" pointer. An <a class="el" href="classRtError.html">RtError</a> can be thrown if no devices are found for the given parameters, if a memory allocation error occurs, or if a driver error occurs.<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="classRtAudio.html#a4">openStream()</a></dd></dl>
</td>
</tr>
</table>
<a class="anchor" name="a2"></a><!-- doxytag: member="RtAudio::RtAudio" ref="a2" args="(int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int *numberOfBuffers, RtAudioApi api=UNSPECIFIED)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">RtAudio::RtAudio </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">int&nbsp;</td>
<td class="mdname" nowrap> <em>outputDevice</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>outputChannels</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>inputDevice</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>inputChannels</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>RtAudioFormat&nbsp;</td>
<td class="mdname" nowrap> <em>format</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>sampleRate</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int *&nbsp;</td>
<td class="mdname" nowrap> <em>bufferSize</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int *&nbsp;</td>
<td class="mdname" nowrap> <em>numberOfBuffers</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap><a class="el" href="classRtAudio.html#w8">RtAudioApi</a>&nbsp;</td>
<td class="mdname" nowrap> <em>api</em> = <code>UNSPECIFIED</code></td>
</tr>
<tr>
<td class="md"></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>

<p>
An overloaded constructor which opens a stream and also returns <code>numberOfBuffers</code> parameter via pointer argument.
<p>
See the previous constructor call for details. This overloaded version differs only in that it takes a pointer argument for the <code>numberOfBuffers</code> parameter and returns the value used by the audio device (which may be different from that requested). Note that the <code>numberofBuffers</code> parameter is not used with the Linux Jack, Macintosh CoreAudio, and Windows ASIO APIs. </td>
</tr>
</table>
<a class="anchor" name="a2" doxytag="RtAudio::~RtAudio" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a3"></a><!-- doxytag: member="RtAudio::~RtAudio" ref="a3" args="()" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> RtAudio::~<a class="el" href="classRtAudio.html">RtAudio</a> </td>
<td class="md" nowrap valign="top">RtAudio::~RtAudio </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -274,74 +359,73 @@ The specified output and/or input device identifiers correspond to those enumera
<p>
The destructor.
<p>
Stops and closes an open stream and devices and deallocates buffer and structure memory. </td>
Stops and closes an open stream and devices and deallocates buffer and structure memory. </td>
</tr>
</table>
<hr><h2>Member Function Documentation</h2>
<a class="anchor" name="a3" doxytag="RtAudio::openStream" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a4"></a><!-- doxytag: member="RtAudio::openStream" ref="a4" args="(int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int numberOfBuffers)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void RtAudio::openStream </td>
<td class="md" nowrap valign="top">void RtAudio::openStream </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">int&nbsp;</td>
<td class="mdname" nowrap> <em>outputDevice</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>outputChannels</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>inputDevice</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>inputChannels</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>RtAudioFormat&nbsp;</td>
<td class="mdname" nowrap> <em>format</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>sampleRate</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int *&nbsp;</td>
<td class="mdname" nowrap> <em>bufferSize</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>numberOfBuffers</em></td>
</tr>
<tr>
<td></td>
<td class="md"></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -354,47 +438,121 @@ A public method for opening a stream with the specified parameters.
An <a class="el" href="classRtError.html">RtError</a> is thrown if a stream cannot be opened.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign=top><em>outputDevice:</em>&nbsp;</td><td>If equal to 0, the default or first device found meeting the given parameters is opened. Otherwise, the device number should correspond to one of those enumerated via the <a class="el" href="classRtAudio.html#a7">getDeviceInfo()</a> method. </td></tr>
<tr><td valign=top><em>outputChannels:</em>&nbsp;</td><td>The desired number of output channels. If equal to zero, the outputDevice identifier is ignored. </td></tr>
<tr><td valign=top><em>inputDevice:</em>&nbsp;</td><td>If equal to 0, the default or first device found meeting the given parameters is opened. Otherwise, the device number should correspond to one of those enumerated via the <a class="el" href="classRtAudio.html#a7">getDeviceInfo()</a> method. </td></tr>
<tr><td valign=top><em>inputChannels:</em>&nbsp;</td><td>The desired number of input channels. If equal to zero, the inputDevice identifier is ignored. </td></tr>
<tr><td valign=top><em>format:</em>&nbsp;</td><td>An RtAudioFormat specifying the desired sample data format. </td></tr>
<tr><td valign=top><em>sampleRate:</em>&nbsp;</td><td>The desired sample rate (sample frames per second). </td></tr>
<tr><td valign=top><em>*bufferSize:</em>&nbsp;</td><td>A pointer value indicating the desired internal buffer size in sample frames. The actual value used by the device is returned via the same pointer. A value of zero can be specified, in which case the lowest allowable value is determined. </td></tr>
<tr><td valign=top><em>numberOfBuffers:</em>&nbsp;</td><td>A value which can be used to help control device latency. More buffers typically result in more robust performance, though at a cost of greater latency. A value of zero can be specified, in which case the lowest allowable value is used. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>outputDevice,:</em>&nbsp;</td><td>If equal to 0, the default or first device found meeting the given parameters is opened. Otherwise, the device number should correspond to one of those enumerated via the <a class="el" href="classRtAudio.html#a9">getDeviceInfo()</a> method. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>outputChannels,:</em>&nbsp;</td><td>The desired number of output channels. If equal to zero, the outputDevice identifier is ignored. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>inputDevice,:</em>&nbsp;</td><td>If equal to 0, the default or first device found meeting the given parameters is opened. Otherwise, the device number should correspond to one of those enumerated via the <a class="el" href="classRtAudio.html#a9">getDeviceInfo()</a> method. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>inputChannels,:</em>&nbsp;</td><td>The desired number of input channels. If equal to zero, the inputDevice identifier is ignored. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>format,:</em>&nbsp;</td><td>An RtAudioFormat specifying the desired sample data format. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>sampleRate,:</em>&nbsp;</td><td>The desired sample rate (sample frames per second). </td></tr>
<tr><td valign="top"></td><td valign="top"><em>*bufferSize,:</em>&nbsp;</td><td>A pointer value indicating the desired internal buffer size in sample frames. The actual value used by the device is returned via the same pointer. A value of zero can be specified, in which case the lowest allowable value is determined. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>numberOfBuffers,:</em>&nbsp;</td><td>A value which can be used to help control device latency. More buffers typically result in more robust performance, though at a cost of greater latency. A value of zero can be specified, in which case the lowest allowable value is used.</td></tr>
</table>
</dl>
</td>
</tr>
</table>
<a class="anchor" name="a4" doxytag="RtAudio::setStreamCallback" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a5"></a><!-- doxytag: member="RtAudio::openStream" ref="a5" args="(int outputDevice, int outputChannels, int inputDevice, int inputChannels, RtAudioFormat format, int sampleRate, int *bufferSize, int *numberOfBuffers)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void RtAudio::setStreamCallback </td>
<td class="md" nowrap valign="top">void RtAudio::openStream </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">int&nbsp;</td>
<td class="mdname" nowrap> <em>outputDevice</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>outputChannels</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>inputDevice</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>inputChannels</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>RtAudioFormat&nbsp;</td>
<td class="mdname" nowrap> <em>format</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int&nbsp;</td>
<td class="mdname" nowrap> <em>sampleRate</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int *&nbsp;</td>
<td class="mdname" nowrap> <em>bufferSize</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>int *&nbsp;</td>
<td class="mdname" nowrap> <em>numberOfBuffers</em></td>
</tr>
<tr>
<td class="md"></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>

<p>
A public method for opening a stream and also returning <code>numberOfBuffers</code> parameter via pointer argument.
<p>
See the previous function call for details. This overloaded version differs only in that it takes a pointer argument for the <code>numberOfBuffers</code> parameter and returns the value used by the audio device (which may be different from that requested). Note that the <code>numberofBuffers</code> parameter is not used with the Linux Jack, Macintosh CoreAudio, and Windows ASIO APIs. </td>
</tr>
</table>
<a class="anchor" name="a6"></a><!-- doxytag: member="RtAudio::setStreamCallback" ref="a6" args="(RtAudioCallback callback, void *userData)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">void RtAudio::setStreamCallback </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">RtAudioCallback&nbsp;</td>
<td class="mdname" nowrap> <em>callback</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>void *&nbsp;</td>
<td class="mdname" nowrap> <em>userData</em></td>
</tr>
<tr>
<td></td>
<td class="md"></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"><code> [inline]</code></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -404,27 +562,26 @@ An <a class="el" href="classRtError.html">RtError</a> is thrown if a stream cann
<p>
A public method which sets a user-defined callback function for a given stream.
<p>
This method assigns a callback function to a previously opened stream for non-blocking stream functionality. A separate process is initiated, though the user function is called only when the stream is "running" (between calls to the <a class="el" href="classRtAudio.html#a11">startStream()</a> and <a class="el" href="classRtAudio.html#a12">stopStream()</a> methods, respectively). The callback process remains active for the duration of the stream and is automatically shutdown when the stream is closed (via the <a class="el" href="classRtAudio.html#a10">closeStream()</a> method or by object destruction). The callback process can also be shutdown and the user function de-referenced through an explicit call to the <a class="el" href="classRtAudio.html#a5">cancelStreamCallback()</a> method. Note that the stream can use only blocking or callback functionality at a particular time, though it is possible to alternate modes on the same stream through the use of the <a class="el" href="classRtAudio.html#a4">setStreamCallback()</a> and <a class="el" href="classRtAudio.html#a5">cancelStreamCallback()</a> methods (the blocking <a class="el" href="classRtAudio.html#a9">tickStream()</a> method can be used before a callback is set and/or after a callback is cancelled). An <a class="el" href="classRtError.html">RtError</a> will be thrown if called when no stream is open or a thread errors occurs. </td>
This method assigns a callback function to a previously opened stream for non-blocking stream functionality. A separate process is initiated, though the user function is called only when the stream is "running" (between calls to the <a class="el" href="classRtAudio.html#a13">startStream()</a> and <a class="el" href="classRtAudio.html#a14">stopStream()</a> methods, respectively). The callback process remains active for the duration of the stream and is automatically shutdown when the stream is closed (via the <a class="el" href="classRtAudio.html#a12">closeStream()</a> method or by object destruction). The callback process can also be shutdown and the user function de-referenced through an explicit call to the <a class="el" href="classRtAudio.html#a7">cancelStreamCallback()</a> method. Note that the stream can use only blocking or callback functionality at a particular time, though it is possible to alternate modes on the same stream through the use of the <a class="el" href="classRtAudio.html#a6">setStreamCallback()</a> and <a class="el" href="classRtAudio.html#a7">cancelStreamCallback()</a> methods (the blocking <a class="el" href="classRtAudio.html#a11">tickStream()</a> method can be used before a callback is set and/or after a callback is cancelled). An <a class="el" href="classRtError.html">RtError</a> will be thrown if called when no stream is open or a thread errors occurs. </td>
</tr>
</table>
<a class="anchor" name="a5" doxytag="RtAudio::cancelStreamCallback" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a7"></a><!-- doxytag: member="RtAudio::cancelStreamCallback" ref="a7" args="()" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void RtAudio::cancelStreamCallback </td>
<td class="md" nowrap valign="top">void RtAudio::cancelStreamCallback </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -434,28 +591,27 @@ This method assigns a callback function to a previously opened stream for non-bl
<p>
A public method which cancels a callback process and function for the stream.
<p>
This method shuts down a callback process and de-references the user function for the stream. Callback functionality can subsequently be restarted on the stream via the <a class="el" href="classRtAudio.html#a4">setStreamCallback()</a> method. An <a class="el" href="classRtError.html">RtError</a> will be thrown if called when no stream is open. </td>
This method shuts down a callback process and de-references the user function for the stream. Callback functionality can subsequently be restarted on the stream via the <a class="el" href="classRtAudio.html#a6">setStreamCallback()</a> method. An <a class="el" href="classRtError.html">RtError</a> will be thrown if called when no stream is open. </td>
</tr>
</table>
<a class="anchor" name="a7" doxytag="RtAudio::getDeviceInfo" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a9"></a><!-- doxytag: member="RtAudio::getDeviceInfo" ref="a9" args="(int device)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> RtAudio::getDeviceInfo </td>
<td class="md" nowrap valign="top"><a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> RtAudio::getDeviceInfo </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">int&nbsp;</td>
<td class="mdname1" valign="top" nowrap> <em>device</em> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -465,27 +621,26 @@ This method shuts down a callback process and de-references the user function fo
<p>
Return an <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> structure for a specified device number.
<p>
Any device integer between 1 and <a class="el" href="classRtAudio.html#a6">getDeviceCount()</a> is valid. If a device is busy or otherwise unavailable, the structure member "probed" will have a value of "false" and all other members are undefined. If the specified device is the current default input or output device, the "isDefault" member will have a value of "true". An <a class="el" href="classRtError.html">RtError</a> will be thrown for an invalid device argument. </td>
Any device integer between 1 and <a class="el" href="classRtAudio.html#a8">getDeviceCount()</a> is valid. If a device is busy or otherwise unavailable, the structure member "probed" will have a value of "false" and all other members are undefined. If the specified device is the current default input or output device, the "isDefault" member will have a value of "true". An <a class="el" href="classRtError.html">RtError</a> will be thrown for an invalid device argument. </td>
</tr>
</table>
<a class="anchor" name="a8" doxytag="RtAudio::getStreamBuffer" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a10"></a><!-- doxytag: member="RtAudio::getStreamBuffer" ref="a10" args="()" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> char* const RtAudio::getStreamBuffer </td>
<td class="md" nowrap valign="top">char* const RtAudio::getStreamBuffer </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -495,27 +650,26 @@ Any device integer between 1 and <a class="el" href="classRtAudio.html#a6">getDe
<p>
A public method which returns a pointer to the buffer for an open stream.
<p>
The user should fill and/or read the buffer data in interleaved format and then call the <a class="el" href="classRtAudio.html#a9">tickStream()</a> method. An <a class="el" href="classRtError.html">RtError</a> will be thrown if called when no stream is open. </td>
The user should fill and/or read the buffer data in interleaved format and then call the <a class="el" href="classRtAudio.html#a11">tickStream()</a> method. An <a class="el" href="classRtError.html">RtError</a> will be thrown if called when no stream is open. </td>
</tr>
</table>
<a class="anchor" name="a9" doxytag="RtAudio::tickStream" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a11"></a><!-- doxytag: member="RtAudio::tickStream" ref="a11" args="()" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void RtAudio::tickStream </td>
<td class="md" nowrap valign="top">void RtAudio::tickStream </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -525,27 +679,26 @@ The user should fill and/or read the buffer data in interleaved format and then
<p>
Public method used to trigger processing of input/output data for a stream.
<p>
This method blocks until all buffer data is read/written. An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver error occurs or if called when no stream is open. </td>
This method blocks until all buffer data is read/written. An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver error occurs or if called when no stream is open. </td>
</tr>
</table>
<a class="anchor" name="a10" doxytag="RtAudio::closeStream" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a12"></a><!-- doxytag: member="RtAudio::closeStream" ref="a12" args="()" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void RtAudio::closeStream </td>
<td class="md" nowrap valign="top">void RtAudio::closeStream </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -555,27 +708,26 @@ This method blocks until all buffer data is read/written. An <a class="el" href=
<p>
Public method which closes a stream and frees any associated buffers.
<p>
If a stream is not open, this method issues a warning and returns (an <a class="el" href="classRtError.html">RtError</a> is not thrown). </td>
If a stream is not open, this method issues a warning and returns (an <a class="el" href="classRtError.html">RtError</a> is not thrown). </td>
</tr>
</table>
<a class="anchor" name="a11" doxytag="RtAudio::startStream" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a13"></a><!-- doxytag: member="RtAudio::startStream" ref="a13" args="()" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void RtAudio::startStream </td>
<td class="md" nowrap valign="top">void RtAudio::startStream </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -585,27 +737,26 @@ If a stream is not open, this method issues a warning and returns (an <a class="
<p>
Public method which starts a stream.
<p>
An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver error occurs or if called when no stream is open. </td>
An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver error occurs or if called when no stream is open. </td>
</tr>
</table>
<a class="anchor" name="a12" doxytag="RtAudio::stopStream" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a14"></a><!-- doxytag: member="RtAudio::stopStream" ref="a14" args="()" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void RtAudio::stopStream </td>
<td class="md" nowrap valign="top">void RtAudio::stopStream </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -615,27 +766,26 @@ An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver
<p>
Stop a stream, allowing any samples remaining in the queue to be played out and/or read in.
<p>
An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver error occurs or if called when no stream is open. </td>
An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver error occurs or if called when no stream is open. </td>
</tr>
</table>
<a class="anchor" name="a13" doxytag="RtAudio::abortStream" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="a15"></a><!-- doxytag: member="RtAudio::abortStream" ref="a15" args="()" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void RtAudio::abortStream </td>
<td class="md" nowrap valign="top">void RtAudio::abortStream </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>

</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -645,7 +795,7 @@ An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver
<p>
Stop a stream, discarding any samples remaining in the input/output queue.
<p>
An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver error occurs or if called when no stream is open. </td>
An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver error occurs or if called when no stream is open. </td>
</tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
@@ -653,7 +803,7 @@ An <a class="el" href="classRtError.html">RtError</a> will be thrown if a driver
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 4
- 4
doc/html/classRtError-members.html View File

@@ -7,8 +7,8 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<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>
<!-- Generated by Doxygen 1.4.4 -->
<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.<p><table>
<tr class="memlist"><td><a class="el" href="classRtError.html#w11w1">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#w11w8">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#a4">getMessage</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
@@ -20,7 +20,7 @@
<tr class="memlist"><td><a class="el" href="classRtError.html#w11w6">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#w11w3">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#a2">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#a0">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#a0">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#w11w9">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#w11w10">THREAD_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#w11">Type</a> enum name</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
@@ -30,7 +30,7 @@
</table><HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 45
- 44
doc/html/classRtError.html View File

@@ -7,16 +7,16 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>RtError Class Reference</h1>Exception handling class for <a class="el" href="classRtAudio.html">RtAudio</a> &amp; RtMidi.
<!-- Generated by Doxygen 1.4.4 -->
<h1>RtError Class Reference</h1><!-- doxytag: class="RtError" -->Exception handling class for <a class="el" href="classRtAudio.html">RtAudio</a> &amp; RtMidi.
<a href="#_details">More...</a>
<p>
<code>#include &lt;<a class="el" href="RtError_8h-source.html">RtError.h</a>&gt;</code>
<p>
<a href="classRtError-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
<a href="classRtError-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtError.html#w11">Type</a> { <br>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#w11">Type</a> { <br>
&nbsp;&nbsp;<a class="el" href="classRtError.html#w11w0">WARNING</a>,
<a class="el" href="classRtError.html#w11w1">DEBUG_WARNING</a>,
<a class="el" href="classRtError.html#w11w2">UNSPECIFIED</a>,
@@ -33,51 +33,52 @@
<br>
}</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Defined RtError types. </em> <a href="#w11">More...</a><em><br><br></td></tr>
<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="a0" doxytag="RtError::RtError" ></a>
&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtError.html#a0">RtError</a> (const std::string &amp;message, <a class="el" href="classRtError.html#w11">Type</a> type=RtError::UNSPECIFIED)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Defined RtError types. <a href="classRtError.html#w11">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0"></a><!-- doxytag: member="RtError::RtError" ref="a0" args="(const std::string &amp;message, Type type=RtError::UNSPECIFIED)" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a0">RtError</a> (const std::string &amp;message, <a class="el" href="classRtError.html#w11">Type</a> type=RtError::UNSPECIFIED)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The constructor. <br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="a1" doxytag="RtError::~RtError" ></a>
virtual&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtError.html#a1">~RtError</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The constructor. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1"></a><!-- doxytag: member="RtError::~RtError" ref="a1" args="(void)" -->
virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a1">~RtError</a> (void)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The destructor. <br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="a2" doxytag="RtError::printMessage" ></a>
virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtError.html#a2">printMessage</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The destructor. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2"></a><!-- doxytag: member="RtError::printMessage" ref="a2" args="(void)" -->
virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a2">printMessage</a> (void)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Prints thrown error message to stderr. <br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="a3" doxytag="RtError::getType" ></a>
virtual const <a class="el" href="classRtError.html#w11">Type</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtError.html#a3">getType</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Prints thrown error message to stderr. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3"></a><!-- doxytag: member="RtError::getType" ref="a3" args="(void)" -->
virtual const <a class="el" href="classRtError.html#w11">Type</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a3">getType</a> (void)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the thrown error message type. <br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="a4" doxytag="RtError::getMessage" ></a>
virtual const std::string &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtError.html#a4">getMessage</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the thrown error message type. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4"></a><!-- doxytag: member="RtError::getMessage" ref="a4" args="(void)" -->
virtual const std::string &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a4">getMessage</a> (void)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the thrown error message string. <br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="a5" doxytag="RtError::getMessageString" ></a>
virtual const char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="classRtError.html#a5">getMessageString</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the thrown error message string. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5"></a><!-- doxytag: member="RtError::getMessageString" ref="a5" args="(void)" -->
virtual const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtError.html#a5">getMessageString</a> (void)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the thrown error message as a C string. <br><br></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the thrown error message as a C string. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Exception handling class for <a class="el" href="classRtAudio.html">RtAudio</a> &amp; RtMidi.
<p>
The RtError class is quite simple but it does allow errors to be "caught" by <a class="el" href="classRtError.html#w11">RtError::Type</a>. See the <a class="el" href="classRtAudio.html">RtAudio</a> and RtMidi documentation to know which methods can throw an RtError.
The RtError class is quite simple but it does allow errors to be "caught" by <a class="el" href="classRtError.html#w11">RtError::Type</a>. See the <a class="el" href="classRtAudio.html">RtAudio</a> and RtMidi documentation to know which methods can throw an RtError.
<p>
<hr><h2>Member Enumeration Documentation</h2>
<a class="anchor" name="w11" doxytag="RtError::Type" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="w11"></a><!-- doxytag: member="RtError::Type" ref="w11" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> enum <a class="el" href="classRtError.html#w11">RtError::Type</a>
<td class="md" nowrap valign="top">enum <a class="el" href="classRtError.html#w11">RtError::Type</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -87,29 +88,29 @@ The RtError class is quite simple but it does allow errors to be "caught" by <a
<p>
Defined RtError types.
<p>
<dl compact><dt><b>Enumeration values: </b></dt><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em><a class="anchor" name="w11w0" doxytag="WARNING" ></a>WARNING</em>&nbsp;</td><td>
<dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="w11w0"></a><!-- doxytag: member="WARNING" ref="w11w0" args="" -->WARNING</em>&nbsp;</td><td>
A non-critical error. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w1" doxytag="DEBUG_WARNING" ></a>DEBUG_WARNING</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w1"></a><!-- doxytag: member="DEBUG_WARNING" ref="w11w1" args="" -->DEBUG_WARNING</em>&nbsp;</td><td>
A non-critical error which might be useful for debugging. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w2" doxytag="UNSPECIFIED" ></a>UNSPECIFIED</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w2"></a><!-- doxytag: member="UNSPECIFIED" ref="w11w2" args="" -->UNSPECIFIED</em>&nbsp;</td><td>
The default, unspecified error type. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w3" doxytag="NO_DEVICES_FOUND" ></a>NO_DEVICES_FOUND</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w3"></a><!-- doxytag: member="NO_DEVICES_FOUND" ref="w11w3" args="" -->NO_DEVICES_FOUND</em>&nbsp;</td><td>
No devices found on system. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w4" doxytag="INVALID_DEVICE" ></a>INVALID_DEVICE</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w4"></a><!-- doxytag: member="INVALID_DEVICE" ref="w11w4" args="" -->INVALID_DEVICE</em>&nbsp;</td><td>
An invalid device ID was specified. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w5" doxytag="INVALID_STREAM" ></a>INVALID_STREAM</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w5"></a><!-- doxytag: member="INVALID_STREAM" ref="w11w5" args="" -->INVALID_STREAM</em>&nbsp;</td><td>
An invalid stream ID was specified. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w6" doxytag="MEMORY_ERROR" ></a>MEMORY_ERROR</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w6"></a><!-- doxytag: member="MEMORY_ERROR" ref="w11w6" args="" -->MEMORY_ERROR</em>&nbsp;</td><td>
An error occured during memory allocation. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w7" doxytag="INVALID_PARAMETER" ></a>INVALID_PARAMETER</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w7"></a><!-- doxytag: member="INVALID_PARAMETER" ref="w11w7" args="" -->INVALID_PARAMETER</em>&nbsp;</td><td>
An invalid parameter was specified to a function. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w8" doxytag="DRIVER_ERROR" ></a>DRIVER_ERROR</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w8"></a><!-- doxytag: member="DRIVER_ERROR" ref="w11w8" args="" -->DRIVER_ERROR</em>&nbsp;</td><td>
A system driver error occured. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w9" doxytag="SYSTEM_ERROR" ></a>SYSTEM_ERROR</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w9"></a><!-- doxytag: member="SYSTEM_ERROR" ref="w11w9" args="" -->SYSTEM_ERROR</em>&nbsp;</td><td>
A system error occured. </td></tr>
<tr><td valign=top><em><a class="anchor" name="w11w10" doxytag="THREAD_ERROR" ></a>THREAD_ERROR</em>&nbsp;</td><td>
<tr><td valign="top"><em><a class="anchor" name="w11w10"></a><!-- doxytag: member="THREAD_ERROR" ref="w11w10" args="" -->THREAD_ERROR</em>&nbsp;</td><td>
A thread error occured. </td></tr>
</table>
</dl>
@@ -121,7 +122,7 @@ A thread error occured. </td></tr>
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 207
- 67
doc/html/doxygen.css View File

@@ -1,74 +1,147 @@
BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
font-family: Geneva, Arial, Helvetica, sans-serif;
}
BODY,TD {
font-size: 90%;
}
H1 {
text-align: center;
font-family: Arial, Helvetica, sans-serif;
font-size: 160%;
}
H2 {
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 120%;
}
H3 {
font-size: 100%;
}
CAPTION { font-weight: bold }
DIV.qindex { width: 100%;
background-color: #eeeeff;
border: 4px solid #eeeeff;
text-align: center;
margin-bottom: 2px
}
A.qindex { text-decoration: none; font-weight: bold; color: #0000ee }
A.qindex:visited { text-decoration: none; font-weight: bold; color: #0000ee }
A.qindex:hover { text-decoration: none; background-color: #ddddff }
A.qindexHL { text-decoration: none; font-weight: bold;
background-color: #6666cc;
color: #ffffff
}
A.qindexHL:hover { text-decoration: none; background-color: #6666cc; color: #ffffff }
DIV.qindex {
width: 100%;
background-color: #eeeeff;
border: 1px solid #b0b0b0;
text-align: center;
margin: 2px;
padding: 2px;
line-height: 140%;
}
DIV.nav {
width: 100%;
background-color: #eeeeff;
border: 1px solid #b0b0b0;
text-align: center;
margin: 2px;
padding: 2px;
line-height: 140%;
}
DIV.navtab {
background-color: #eeeeff;
border: 1px solid #b0b0b0;
text-align: center;
margin: 2px;
margin-right: 15px;
padding: 2px;
}
TD.navtab {
font-size: 70%;
}
A.qindex {
text-decoration: none;
font-weight: bold;
color: #1A419D;
}
A.qindex:visited {
text-decoration: none;
font-weight: bold;
color: #1A419D
}
A.qindex:hover {
text-decoration: none;
background-color: #ddddff;
}
A.qindexHL {
text-decoration: none;
font-weight: bold;
background-color: #6666cc;
color: #ffffff;
border: 1px double #9295C2;
}
A.qindexHL:hover {
text-decoration: none;
background-color: #6666cc;
color: #ffffff;
}
A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
A.el { text-decoration: none; font-weight: bold }
A.elRef { font-weight: bold }
A.code { text-decoration: none; font-weight: normal; color: #4444ee }
A.codeRef { font-weight: normal; color: #4444ee }
A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
A.codeRef:link { font-weight: normal; color: #0000FF}
A.codeRef:visited { font-weight: normal; color: #0000FF}
A:hover { text-decoration: none; background-color: #f2f2ff }
DL.el { margin-left: -1cm }
DIV.fragment {
width: 98%;
.fragment {
font-family: Fixed, monospace;
font-size: 95%;
}
PRE.fragment {
border: 1px solid #CCCCCC;
background-color: #f5f5f5;
padding-left: 4px;
margin: 4px;
margin-top: 4px;
margin-bottom: 4px;
margin-left: 2px;
margin-right: 8px;
padding-left: 6px;
padding-right: 6px;
padding-top: 4px;
padding-bottom: 4px;
}
DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
TD.md { background-color: #f2f2ff; font-weight: bold; }
TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }
TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }
DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
TD.md { background-color: #F4F4FB; font-weight: bold; }
TD.mdPrefix {
background-color: #F4F4FB;
color: #606060;
font-size: 80%;
}
TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
DIV.groupHeader {
margin-left: 16px;
margin-top: 12px;
margin-bottom: 6px;
font-weight: bold;
}
DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
BODY {
background: white;
color: black;
margin-right: 20px;
margin-left: 20px;
}
TD.indexkey {
background-color: #eeeeff;
font-weight: bold;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px
}
TD.indexvalue {
background-color: #eeeeff;
font-style: italic;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px
TD.indexkey {
background-color: #eeeeff;
font-weight: bold;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px;
border: 1px solid #CCCCCC;
}
TD.indexvalue {
background-color: #eeeeff;
font-style: italic;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px;
border: 1px solid #CCCCCC;
}
TR.memlist {
background-color: #f0f0f0;
@@ -85,16 +158,16 @@ SPAN.stringliteral { color: #002080 }
SPAN.charliteral { color: #008080 }
.mdTable {
border: 1px solid #868686;
background-color: #f2f2ff;
background-color: #F4F4FB;
}
.mdRow {
padding: 8px 20px;
padding: 8px 10px;
}
.mdescLeft {
font-size: smaller;
font-family: Arial, Helvetica, sans-serif;
padding: 0px 8px 4px 8px;
font-size: 80%;
font-style: italic;
background-color: #FAFAFA;
padding-left: 8px;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
@@ -102,18 +175,15 @@ SPAN.charliteral { color: #008080 }
margin: 0px;
}
.mdescRight {
font-size: smaller;
font-family: Arial, Helvetica, sans-serif;
padding: 0px 8px 4px 8px;
font-size: 80%;
font-style: italic;
background-color: #FAFAFA;
padding-left: 4px;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
border-left: 1px none #E0E0E0;
margin: 0px;
padding-bottom: 0px;
padding-right: 8px;
}
.memItemLeft {
padding: 1px 0px 0px 8px;
@@ -122,38 +192,91 @@ SPAN.charliteral { color: #008080 }
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: solid;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 12px;
font-size: 80%;
}
.memItemRight {
padding: 1px 0px 0px 8px;
padding: 1px 8px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: solid;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memTemplItemLeft {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 13px;
font-size: 80%;
}
.memTemplItemRight {
padding: 1px 8px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memTemplParams {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: solid;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
color: #606060;
background-color: #FAFAFA;
font-size: 80%;
}
.search { color: #0000ee;
.search { color: #003399;
font-weight: bold;
}
FORM.search {
@@ -167,3 +290,20 @@ INPUT.search { font-size: 75%;
}
TD.tiny { font-size: 75%;
}
a {
color: #252E78;
}
a:visited {
color: #3D2185;
}
.dirtab { padding: 4px;
border-collapse: collapse;
border: 1px solid #b0b0b0;
}
TH.dirtab { background: #eeeeff;
font-weight: bold;
}
HR { height: 1px;
border: none;
border-top: 1px solid black;
}

BIN
doc/html/doxygen.png View File

Before After
Width: 110  |  Height: 53  |  Size: 2.3KB Width: 100  |  Height: 45  |  Size: 1.3KB

+ 2
- 2
doc/html/files.html View File

@@ -7,7 +7,7 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<!-- Generated by Doxygen 1.4.4 -->
<h1>RtAudio File List</h1>Here is a list of all documented files with brief descriptions:<table>
<tr><td class="indexkey"><b>RtAudio.h</b> <a href="RtAudio_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
<tr><td class="indexkey"><b>RtError.h</b> <a href="RtError_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
@@ -15,7 +15,7 @@
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 18
- 18
doc/html/functions.html View File

@@ -7,20 +7,20 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<div class="qindex"><a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration&nbsp;values</a></div>
<!-- Generated by Doxygen 1.4.4 -->
<div class="qindex"><a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumerator</a></div>
<div class="qindex"><a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_g">g</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_l">l</a> | <a class="qindex" href="#index_m">m</a> | <a class="qindex" href="#index_n">n</a> | <a class="qindex" href="#index_o">o</a> | <a class="qindex" href="#index_p">p</a> | <a class="qindex" href="#index_r">r</a> | <a class="qindex" href="#index_s">s</a> | <a class="qindex" href="#index_t">t</a> | <a class="qindex" href="#index_u">u</a> | <a class="qindex" href="#index_w">w</a> | <a class="qindex" href="#index_~">~</a></div>

<p>
Here is a list of all documented class members with links to the class documentation for each member:
<p>
Here is a list of all documented class members with links to the class documentation for each member:<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
<li>abortStream()
: <a class="el" href="classRtAudio.html#a13">RtAudio</a></ul>
: <a class="el" href="classRtAudio.html#a15">RtAudio</a></ul>
<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
<li>cancelStreamCallback()
: <a class="el" href="classRtAudio.html#a5">RtAudio</a><li>closeStream()
: <a class="el" href="classRtAudio.html#a10">RtAudio</a></ul>
: <a class="el" href="classRtAudio.html#a7">RtAudio</a><li>closeStream()
: <a class="el" href="classRtAudio.html#a12">RtAudio</a></ul>
<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
<li>DEBUG_WARNING
: <a class="el" href="classRtError.html#w11w1">RtError</a><li>DRIVER_ERROR
@@ -28,11 +28,11 @@ Here is a list of all documented class members with links to the class documenta
: <a class="el" href="structRtAudioDeviceInfo.html#o4">RtAudioDeviceInfo</a></ul>
<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
<li>getDeviceCount()
: <a class="el" href="classRtAudio.html#a6">RtAudio</a><li>getDeviceInfo()
: <a class="el" href="classRtAudio.html#a7">RtAudio</a><li>getMessage()
: <a class="el" href="classRtAudio.html#a8">RtAudio</a><li>getDeviceInfo()
: <a class="el" href="classRtAudio.html#a9">RtAudio</a><li>getMessage()
: <a class="el" href="classRtError.html#a4">RtError</a><li>getMessageString()
: <a class="el" href="classRtError.html#a5">RtError</a><li>getStreamBuffer()
: <a class="el" href="classRtAudio.html#a8">RtAudio</a><li>getType()
: <a class="el" href="classRtAudio.html#a10">RtAudio</a><li>getType()
: <a class="el" href="classRtError.html#a3">RtError</a></ul>
<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
<li>inputChannels
@@ -58,7 +58,7 @@ Here is a list of all documented class members with links to the class documenta
: <a class="el" href="classRtError.html#w11w3">RtError</a></ul>
<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
<li>openStream()
: <a class="el" href="classRtAudio.html#a3">RtAudio</a><li>outputChannels
: <a class="el" href="classRtAudio.html#a5">RtAudio</a><li>outputChannels
: <a class="el" href="structRtAudioDeviceInfo.html#o2">RtAudioDeviceInfo</a></ul>
<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
<li>printMessage()
@@ -66,20 +66,20 @@ Here is a list of all documented class members with links to the class documenta
: <a class="el" href="structRtAudioDeviceInfo.html#o1">RtAudioDeviceInfo</a></ul>
<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
<li>RtAudio()
: <a class="el" href="classRtAudio.html#a1">RtAudio</a><li>RtAudioApi
: <a class="el" href="classRtAudio.html#a2">RtAudio</a><li>RtAudioApi
: <a class="el" href="classRtAudio.html#w8">RtAudio</a><li>RtError()
: <a class="el" href="classRtError.html#a0">RtError</a></ul>
<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
<li>sampleRates
: <a class="el" href="structRtAudioDeviceInfo.html#o6">RtAudioDeviceInfo</a><li>setStreamCallback()
: <a class="el" href="classRtAudio.html#a4">RtAudio</a><li>startStream()
: <a class="el" href="classRtAudio.html#a11">RtAudio</a><li>stopStream()
: <a class="el" href="classRtAudio.html#a12">RtAudio</a><li>SYSTEM_ERROR
: <a class="el" href="classRtAudio.html#a6">RtAudio</a><li>startStream()
: <a class="el" href="classRtAudio.html#a13">RtAudio</a><li>stopStream()
: <a class="el" href="classRtAudio.html#a14">RtAudio</a><li>SYSTEM_ERROR
: <a class="el" href="classRtError.html#w11w9">RtError</a></ul>
<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
<li>THREAD_ERROR
: <a class="el" href="classRtError.html#w11w10">RtError</a><li>tickStream()
: <a class="el" href="classRtAudio.html#a9">RtAudio</a><li>Type
: <a class="el" href="classRtAudio.html#a11">RtAudio</a><li>Type
: <a class="el" href="classRtError.html#w11">RtError</a></ul>
<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
<li>UNSPECIFIED
@@ -91,12 +91,12 @@ Here is a list of all documented class members with links to the class documenta
: <a class="el" href="classRtAudio.html#w8w7">RtAudio</a></ul>
<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
<li>~RtAudio()
: <a class="el" href="classRtAudio.html#a2">RtAudio</a><li>~RtError()
: <a class="el" href="classRtAudio.html#a3">RtAudio</a><li>~RtError()
: <a class="el" href="classRtError.html#a1">RtError</a></ul>
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 3
- 3
doc/html/functions_enum.html View File

@@ -7,8 +7,8 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindexHL" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration&nbsp;values</a></div>
<!-- Generated by Doxygen 1.4.4 -->
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindexHL" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumerator</a></div>

<p>
<ul>
@@ -18,7 +18,7 @@
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 3
- 3
doc/html/functions_eval.html View File

@@ -7,8 +7,8 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindexHL" href="functions_eval.html">Enumeration&nbsp;values</a></div>
<!-- Generated by Doxygen 1.4.4 -->
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindexHL" href="functions_eval.html">Enumerator</a></div>

<p>
<ul>
@@ -34,7 +34,7 @@
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 16
- 16
doc/html/functions_func.html View File

@@ -7,35 +7,35 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration&nbsp;values</a></div>
<!-- Generated by Doxygen 1.4.4 -->
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumerator</a></div>

<p>
<ul>
<li>abortStream()
: <a class="el" href="classRtAudio.html#a13">RtAudio</a><li>cancelStreamCallback()
: <a class="el" href="classRtAudio.html#a5">RtAudio</a><li>closeStream()
: <a class="el" href="classRtAudio.html#a10">RtAudio</a><li>getDeviceCount()
: <a class="el" href="classRtAudio.html#a6">RtAudio</a><li>getDeviceInfo()
: <a class="el" href="classRtAudio.html#a7">RtAudio</a><li>getMessage()
: <a class="el" href="classRtAudio.html#a15">RtAudio</a><li>cancelStreamCallback()
: <a class="el" href="classRtAudio.html#a7">RtAudio</a><li>closeStream()
: <a class="el" href="classRtAudio.html#a12">RtAudio</a><li>getDeviceCount()
: <a class="el" href="classRtAudio.html#a8">RtAudio</a><li>getDeviceInfo()
: <a class="el" href="classRtAudio.html#a9">RtAudio</a><li>getMessage()
: <a class="el" href="classRtError.html#a4">RtError</a><li>getMessageString()
: <a class="el" href="classRtError.html#a5">RtError</a><li>getStreamBuffer()
: <a class="el" href="classRtAudio.html#a8">RtAudio</a><li>getType()
: <a class="el" href="classRtAudio.html#a10">RtAudio</a><li>getType()
: <a class="el" href="classRtError.html#a3">RtError</a><li>openStream()
: <a class="el" href="classRtAudio.html#a3">RtAudio</a><li>printMessage()
: <a class="el" href="classRtAudio.html#a5">RtAudio</a><li>printMessage()
: <a class="el" href="classRtError.html#a2">RtError</a><li>RtAudio()
: <a class="el" href="classRtAudio.html#a1">RtAudio</a><li>RtError()
: <a class="el" href="classRtAudio.html#a2">RtAudio</a><li>RtError()
: <a class="el" href="classRtError.html#a0">RtError</a><li>setStreamCallback()
: <a class="el" href="classRtAudio.html#a4">RtAudio</a><li>startStream()
: <a class="el" href="classRtAudio.html#a11">RtAudio</a><li>stopStream()
: <a class="el" href="classRtAudio.html#a12">RtAudio</a><li>tickStream()
: <a class="el" href="classRtAudio.html#a9">RtAudio</a><li>~RtAudio()
: <a class="el" href="classRtAudio.html#a2">RtAudio</a><li>~RtError()
: <a class="el" href="classRtAudio.html#a6">RtAudio</a><li>startStream()
: <a class="el" href="classRtAudio.html#a13">RtAudio</a><li>stopStream()
: <a class="el" href="classRtAudio.html#a14">RtAudio</a><li>tickStream()
: <a class="el" href="classRtAudio.html#a11">RtAudio</a><li>~RtAudio()
: <a class="el" href="classRtAudio.html#a3">RtAudio</a><li>~RtError()
: <a class="el" href="classRtError.html#a1">RtError</a></ul>
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 3
- 3
doc/html/functions_vars.html View File

@@ -7,8 +7,8 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindexHL" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration&nbsp;values</a></div>
<!-- Generated by Doxygen 1.4.4 -->
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindexHL" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumerator</a></div>

<p>
<ul>
@@ -24,7 +24,7 @@
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 111
- 97
doc/html/index.html View File

@@ -7,10 +7,10 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<!-- Generated by Doxygen 1.4.4 -->
<h1>The <a class="el" href="classRtAudio.html">RtAudio</a> Tutorial </h1>
<p>
<center><a class="el" href="index.html#intro">Introduction</a> &nbsp;&nbsp; <a class="el" href="index.html#changes">What's New (Version 3.0)</a> &nbsp;&nbsp;<a class="el" href="index.html#download">Download</a> &nbsp;&nbsp; <a class="el" href="index.html#start">Getting Started</a> &nbsp;&nbsp; <a class="el" href="index.html#error">Error Handling</a> &nbsp;&nbsp; <a class="el" href="index.html#probing">Probing Device Capabilities</a> &nbsp;&nbsp; <a class="el" href="index.html#settings">Device Settings</a> &nbsp;&nbsp; <a class="el" href="index.html#playbackb">Playback (blocking functionality)</a> &nbsp;&nbsp; <a class="el" href="index.html#playbackc">Playback (callback functionality)</a> &nbsp;&nbsp; <a class="el" href="index.html#recording">Recording</a> &nbsp;&nbsp; <a class="el" href="index.html#duplex">Duplex Mode</a> &nbsp;&nbsp; <a class="el" href="index.html#multi">Using Simultaneous Multiple APIs</a> &nbsp;&nbsp; <a class="el" href="index.html#methods">Summary of Methods</a> &nbsp;&nbsp; <a class="el" href="index.html#compiling">Compiling</a> &nbsp;&nbsp; <a class="el" href="index.html#debug">Debugging</a> &nbsp;&nbsp; <a class="el" href="index.html#apinotes">API Notes</a> &nbsp;&nbsp; <a class="el" href="index.html#acknowledge">Acknowledgements</a> &nbsp;&nbsp; <a class="el" href="index.html#license">License</a></center><h2><a class="anchor" name="intro">
<center><a class="el" href="index.html#intro">Introduction</a> &nbsp;&nbsp; <a class="el" href="index.html#changes">What's New (Version 3.0)</a> &nbsp;&nbsp;<a class="el" href="index.html#download">Download</a> &nbsp;&nbsp; <a class="el" href="index.html#start">Getting Started</a> &nbsp;&nbsp; <a class="el" href="index.html#error">Error Handling</a> &nbsp;&nbsp; <a class="el" href="index.html#probing">Probing Device Capabilities</a> &nbsp;&nbsp; <a class="el" href="index.html#settings">Device Settings</a> &nbsp;&nbsp; <a class="el" href="index.html#playbackb">Playback (blocking functionality)</a> &nbsp;&nbsp; <a class="el" href="index.html#playbackc">Playback (callback functionality)</a> &nbsp;&nbsp; <a class="el" href="index.html#recording">Recording</a> &nbsp;&nbsp; <a class="el" href="index.html#duplex">Duplex Mode</a> &nbsp;&nbsp; <a class="el" href="index.html#multi">Using Simultaneous Multiple APIs</a> &nbsp;&nbsp; <a class="el" href="index.html#methods">Summary of Methods</a> &nbsp;&nbsp; <a class="el" href="index.html#compiling">Compiling</a> &nbsp;&nbsp; <a class="el" href="index.html#debug">Debugging</a> &nbsp;&nbsp; <a class="el" href="index.html#apinotes">API Notes</a> &nbsp;&nbsp; <a class="el" href="index.html#wishlist">Possible Future Changes</a> &nbsp;&nbsp; <a class="el" href="index.html#acknowledge">Acknowledgements</a> &nbsp;&nbsp; <a class="el" href="index.html#license">License</a></center><h2><a class="anchor" name="intro">
Introduction</a></h2>
<a class="el" href="classRtAudio.html">RtAudio</a> is a set of C++ classes which provide a common API (Application Programming Interface) for realtime audio input/output across Linux (native ALSA, JACK, and OSS), Macintosh OS X, SGI, and Windows (DirectSound and ASIO) operating systems. <a class="el" href="classRtAudio.html">RtAudio</a> significantly simplifies the process of interacting with computer audio hardware. It was designed with the following goals:<p>
<ul>
@@ -40,18 +40,18 @@ What's New (Version 3.0)</a></h2>
<a class="el" href="classRtAudio.html">RtAudio</a> now allows simultaneous multi-api support. For example, you can compile <a class="el" href="classRtAudio.html">RtAudio</a> to provide both DirectSound and ASIO support on Windows platforms or ALSA, JACK, and OSS support on Linux platforms. This was accomplished by creating an abstract base class, RtApi, with subclasses for each supported API (RtApiAlsa, RtApiJack, RtApiOss, RtApiDs, RtApiAsio, RtApiCore, and RtApiAl). The class <a class="el" href="classRtAudio.html">RtAudio</a> is now a "controller" which creates an instance of an RtApi subclass based on the user's API choice via an optional <a class="el" href="classRtAudio.html#w8">RtAudio::RtAudioApi</a> instantiation argument. If no API is specified, <a class="el" href="classRtAudio.html">RtAudio</a> attempts to make a "logical" API selection.<p>
Support for the JACK low-latency audio server has been added with this version of <a class="el" href="classRtAudio.html">RtAudio</a>. It is necessary to have the JACK server running before creating an instance of <a class="el" href="classRtAudio.html">RtAudio</a>.<p>
Several API changes have been made in version 3.0 of <a class="el" href="classRtAudio.html">RtAudio</a> in an effort to provide more consistent behavior across all supported audio APIs. The most significant of these changes is that multiple stream support from a single <a class="el" href="classRtAudio.html">RtAudio</a> instance has been discontinued. As a result, stream identifier input arguments are no longer required. Also, the RtAudio::streamWillBlock() function was poorly supported by most APIs and has been deprecated (though the function still exists in those subclasses of RtApi that do allow it to be implemented).<p>
The <a class="el" href="classRtAudio.html#a7">RtAudio::getDeviceInfo()</a> function was modified to return a globally defined <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> structure. This structure is a simplified version of the previous RTAUDIO_DEVICE structure. In addition, the RTAUDIO_FORMAT structure was renamed RtAudioFormat and defined globally within <a class="el" href="RtAudio_8h.html">RtAudio.h</a>. These changes were made for clarity and to better conform with standard C++ programming practices.<p>
The <a class="el" href="classRtError.html">RtError</a> class declaration and definition have been extracted to a separate file (<a class="el" href="RtError_8h.html">RtError.h</a>). This was done in preparation for a new release of the RtMidi class (planned for Summer 2004).<h2><a class="anchor" name="download">
The <a class="el" href="classRtAudio.html#a9">RtAudio::getDeviceInfo()</a> function was modified to return a globally defined <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> structure. This structure is a simplified version of the previous RTAUDIO_DEVICE structure. In addition, the RTAUDIO_FORMAT structure was renamed RtAudioFormat and defined globally within <a class="el" href="RtAudio_8h-source.html">RtAudio.h</a>. These changes were made for clarity and to better conform with standard C++ programming practices.<p>
The <a class="el" href="classRtError.html">RtError</a> class declaration and definition have been extracted to a separate file (<a class="el" href="RtError_8h-source.html">RtError.h</a>). This was done in preparation for a new release of the RtMidi class (planned for Summer 2004).<h2><a class="anchor" name="download">
Download</a></h2>
Latest Release (22 March 2004): <a href="http://music.mcgill.ca/~gary/rtaudio/release/rtaudio-3.0.1.tar.gz">Version 3.0.1 (200 kB tar/gzipped)</a><h2><a class="anchor" name="start">
Latest Release (14 October 2005): <a href="http://music.mcgill.ca/~gary/rtaudio/release/rtaudio-3.0.2.tar.gz">Version 3.0.2</a><h2><a class="anchor" name="start">
Getting Started</a></h2>
With version 3.0, it is now possible to compile multiple API support on a given platform and to specify an API choice during class instantiation. In the examples that follow, no API will be specified (in which case, <a class="el" href="classRtAudio.html">RtAudio</a> attempts to select the most "logical" available API).<p>
The first thing that must be done when using <a class="el" href="classRtAudio.html">RtAudio</a> is to create an instance of the class. The default constructor scans the underlying audio system to verify that at least one device is available. <a class="el" href="classRtAudio.html">RtAudio</a> often uses C++ exceptions to report errors, necessitating try/catch blocks around most member functions. The following code example demonstrates default object construction and destruction:<p>
<div class="fragment"><pre><span class="preprocessor">#include "RtAudio.h"</span>
<div class="fragment"><pre class="fragment"><span class="preprocessor">#include "RtAudio.h"</span>

<span class="keywordtype">int</span> main()
{
<a class="code" href="classRtAudio.html">RtAudio</a> *audio;
<a class="code" href="classRtAudio.html">RtAudio</a> *audio = 0;

<span class="comment">// Default RtAudio constructor</span>
<span class="keywordflow">try</span> {
@@ -59,7 +59,7 @@ The first thing that must be done when using <a class="el" href="classRtAudio.ht
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
<span class="comment">// Handle the exception here</span>
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
}

<span class="comment">// Clean up</span>
@@ -68,39 +68,39 @@ The first thing that must be done when using <a class="el" href="classRtAudio.ht
</pre></div><p>
Obviously, this example doesn't demonstrate any of the real functionality of <a class="el" href="classRtAudio.html">RtAudio</a>. However, all uses of <a class="el" href="classRtAudio.html">RtAudio</a> must begin with a constructor (either default or overloaded varieties) and must end with class destruction. Further, it is necessary that all class methods which can throw a C++ exception be called within a try/catch block.<h2><a class="anchor" name="error">
Error Handling</a></h2>
<a class="el" href="classRtAudio.html">RtAudio</a> uses a C++ exception handler called <a class="el" href="classRtError.html">RtError</a>, which is declared and defined in <a class="el" href="RtError_8h.html">RtError.h</a>. The <a class="el" href="classRtError.html">RtError</a> class is quite simple but it does allow errors to be "caught" by <a class="el" href="classRtError.html#w11">RtError::Type</a>. Almost all <a class="el" href="classRtAudio.html">RtAudio</a> methods can "throw" an <a class="el" href="classRtError.html">RtError</a>, most typically if a driver error occurs or a stream function is called when no stream is open. There are a number of cases within <a class="el" href="classRtAudio.html">RtAudio</a> where warning messages may be displayed but an exception is not thrown. There is a protected <a class="el" href="classRtAudio.html">RtAudio</a> method, error(), which can be modified to globally control how these messages are handled and reported. By default, error messages are not automatically displayed in <a class="el" href="classRtAudio.html">RtAudio</a> unless the preprocessor definition __RTAUDIO_DEBUG__ is defined. Messages associated with caught exceptions can be displayed with, for example, the <a class="el" href="classRtError.html#a2">RtError::printMessage()</a> function.<h2><a class="anchor" name="probing">
<a class="el" href="classRtAudio.html">RtAudio</a> uses a C++ exception handler called <a class="el" href="classRtError.html">RtError</a>, which is declared and defined in <a class="el" href="RtError_8h-source.html">RtError.h</a>. The <a class="el" href="classRtError.html">RtError</a> class is quite simple but it does allow errors to be "caught" by <a class="el" href="classRtError.html#w11">RtError::Type</a>. Almost all <a class="el" href="classRtAudio.html">RtAudio</a> methods can "throw" an <a class="el" href="classRtError.html">RtError</a>, most typically if a driver error occurs or a stream function is called when no stream is open. There are a number of cases within <a class="el" href="classRtAudio.html">RtAudio</a> where warning messages may be displayed but an exception is not thrown. There is a protected <a class="el" href="classRtAudio.html">RtAudio</a> method, error(), which can be modified to globally control how these messages are handled and reported. By default, error messages are not automatically displayed in <a class="el" href="classRtAudio.html">RtAudio</a> unless the preprocessor definition __RTAUDIO_DEBUG__ is defined. Messages associated with caught exceptions can be displayed with, for example, the <a class="el" href="classRtError.html#a2">RtError::printMessage()</a> function.<h2><a class="anchor" name="probing">
Probing Device Capabilities</a></h2>
A programmer may wish to query the available audio device capabilities before deciding which to use. The following example outlines how this can be done.<p>
<div class="fragment"><pre><span class="comment">// probe.cpp</span>
<div class="fragment"><pre class="fragment"><span class="comment">// probe.cpp</span>

<span class="preprocessor">#include &lt;iostream&gt;</span>
<span class="preprocessor">#include "RtAudio.h"</span>

<span class="keywordtype">int</span> main()
{
<a class="code" href="classRtAudio.html">RtAudio</a> *audio;
<a class="code" href="classRtAudio.html">RtAudio</a> *audio = 0;

<span class="comment">// Default RtAudio constructor</span>
<span class="keywordflow">try</span> {
audio = <span class="keyword">new</span> <a class="code" href="classRtAudio.html">RtAudio</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
exit(EXIT_FAILURE);
}

<span class="comment">// Determine the number of devices available</span>
<span class="keywordtype">int</span> devices = audio-&gt;<a class="code" href="classRtAudio.html#a6">getDeviceCount</a>();
<span class="keywordtype">int</span> devices = audio-&gt;<a class="code" href="classRtAudio.html#a8">getDeviceCount</a>();

<span class="comment">// Scan through devices for various capabilities</span>
<a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> info;
<span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=1; i&lt;=devices; i++) {

<span class="keywordflow">try</span> {
info = audio-&gt;<a class="code" href="classRtAudio.html#a7">getDeviceInfo</a>(i);
info = audio-&gt;<a class="code" href="classRtAudio.html#a9">getDeviceInfo</a>(i);
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
<span class="keywordflow">break</span>;
}

@@ -115,20 +115,20 @@ A programmer may wish to query the available audio device capabilities before de
<span class="keywordflow">return</span> 0;
}
</pre></div><p>
The <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> structure is defined in <a class="el" href="RtAudio_8h.html">RtAudio.h</a> and provides a variety of information useful in assessing the capabilities of a device:<p>
<div class="fragment"><pre> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a>{
std::string <a class="code" href="structRtAudioDeviceInfo.html#o0">name</a>; <span class="comment">// Character string device identifier.</span>
<span class="keywordtype">bool</span> <a class="code" href="structRtAudioDeviceInfo.html#o1">probed</a>; <span class="comment">// true if the device capabilities were successfully probed.</span>
<span class="keywordtype">int</span> <a class="code" href="structRtAudioDeviceInfo.html#o2">outputChannels</a>; <span class="comment">// Maximum output channels supported by device.</span>
<span class="keywordtype">int</span> <a class="code" href="structRtAudioDeviceInfo.html#o3">inputChannels</a>; <span class="comment">// Maximum input channels supported by device.</span>
<span class="keywordtype">int</span> <a class="code" href="structRtAudioDeviceInfo.html#o4">duplexChannels</a>; <span class="comment">// Maximum simultaneous input/output channels supported by device.</span>
<span class="keywordtype">bool</span> <a class="code" href="structRtAudioDeviceInfo.html#o5">isDefault</a>; <span class="comment">// true if this is the default output or input device.</span>
std::vector&lt;int&gt; <a class="code" href="structRtAudioDeviceInfo.html#o6">sampleRates</a>; <span class="comment">// Supported sample rates.</span>
RtAudioFormat <a class="code" href="structRtAudioDeviceInfo.html#o7">nativeFormats</a>; <span class="comment">// Bit mask of supported data formats.</span>
The <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> structure is defined in <a class="el" href="RtAudio_8h-source.html">RtAudio.h</a> and provides a variety of information useful in assessing the capabilities of a device:<p>
<div class="fragment"><pre class="fragment"> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a>{
std::string name; <span class="comment">// Character string device identifier.</span>
<span class="keywordtype">bool</span> probed; <span class="comment">// true if the device capabilities were successfully probed.</span>
<span class="keywordtype">int</span> outputChannels; <span class="comment">// Maximum output channels supported by device.</span>
<span class="keywordtype">int</span> inputChannels; <span class="comment">// Maximum input channels supported by device.</span>
<span class="keywordtype">int</span> duplexChannels; <span class="comment">// Maximum simultaneous input/output channels supported by device.</span>
<span class="keywordtype">bool</span> isDefault; <span class="comment">// true if this is the default output or input device.</span>
std::vector&lt;int&gt; sampleRates; <span class="comment">// Supported sample rates.</span>
RtAudioFormat nativeFormats; <span class="comment">// Bit mask of supported data formats.</span>
};
</pre></div><p>
The following data formats are defined and fully supported by <a class="el" href="classRtAudio.html">RtAudio</a>:<p>
<div class="fragment"><pre> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> RtAudioFormat;
<div class="fragment"><pre class="fragment"> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> RtAudioFormat;
<span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT8; <span class="comment">// Signed 8-bit integer</span>
<span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT16; <span class="comment">// Signed 16-bit integer</span>
<span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT24; <span class="comment">// Signed 24-bit integer (upper 3 bytes of 32-bit signed integer.)</span>
@@ -141,7 +141,7 @@ While some audio devices may require a minimum channel value greater than one, <
It should be noted that the capabilities reported by a device driver or underlying audio API are not always accurate and/or may be dependent on a combination of device settings. For this reason, <a class="el" href="classRtAudio.html">RtAudio</a> does not typically rely on the queried values when attempting to open a stream.<h2><a class="anchor" name="settings">
Device Settings</a></h2>
The next step in using <a class="el" href="classRtAudio.html">RtAudio</a> is to open a stream with particular device and parameter settings.<p>
<div class="fragment"><pre><span class="preprocessor">#include "RtAudio.h"</span>
<div class="fragment"><pre class="fragment"><span class="preprocessor">#include "RtAudio.h"</span>

<span class="keywordtype">int</span> main()
{
@@ -150,23 +150,23 @@ The next step in using <a class="el" href="classRtAudio.html">RtAudio</a> is to
<span class="keywordtype">int</span> bufferSize = 256; <span class="comment">// 256 sample frames</span>
<span class="keywordtype">int</span> nBuffers = 4; <span class="comment">// number of internal buffers used by device</span>
<span class="keywordtype">int</span> device = 0; <span class="comment">// 0 indicates the default or first available device</span>
<a class="code" href="classRtAudio.html">RtAudio</a> *audio;
<a class="code" href="classRtAudio.html">RtAudio</a> *audio = 0;

<span class="comment">// Instantiate RtAudio and open a stream within a try/catch block</span>
<span class="keywordflow">try</span> {
audio = <span class="keyword">new</span> <a class="code" href="classRtAudio.html">RtAudio</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
exit(EXIT_FAILURE);
}

<span class="keywordflow">try</span> {
audio-&gt;<a class="code" href="classRtAudio.html#a3">openStream</a>(device, channels, 0, 0, RTAUDIO_FLOAT32,
audio-&gt;<a class="code" href="classRtAudio.html#a4">openStream</a>(device, channels, 0, 0, RTAUDIO_FLOAT32,
sampleRate, &amp;bufferSize, nBuffers);
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
<span class="comment">// Perhaps try other parameters?</span>
}

@@ -176,13 +176,13 @@ The next step in using <a class="el" href="classRtAudio.html">RtAudio</a> is to
<span class="keywordflow">return</span> 0;
}
</pre></div><p>
The <a class="el" href="classRtAudio.html#a3">RtAudio::openStream()</a> method attempts to open a stream with a specified set of parameter values. In this case, we attempt to open a two channel playback stream with the default output device, 32-bit floating point data, a sample rate of 44100 Hz, a frame rate of 256 sample frames per read/write, and 4 internal device buffers. When device = 0, <a class="el" href="classRtAudio.html">RtAudio</a> first attempts to open the default audio device with the given parameters. If that attempt fails, <a class="el" href="classRtAudio.html">RtAudio</a> searches through the remaining available devices in an effort to find a device which will meet the given parameters. If all attempts are unsuccessful, an <a class="el" href="classRtError.html">RtError</a> is thrown. When a non-zero device value is specified, an attempt is made to open that device <em>ONLY</em> (device = 1 specifies the first identified device, as reported by <a class="el" href="classRtAudio.html#a7">RtAudio::getDeviceInfo()</a>).<p>
The <a class="el" href="classRtAudio.html#a4">RtAudio::openStream()</a> method attempts to open a stream with a specified set of parameter values. In this case, we attempt to open a two channel playback stream with the default output device, 32-bit floating point data, a sample rate of 44100 Hz, a frame rate of 256 sample frames per read/write, and 4 internal device buffers. When device = 0, <a class="el" href="classRtAudio.html">RtAudio</a> first attempts to open the default audio device with the given parameters. If that attempt fails, <a class="el" href="classRtAudio.html">RtAudio</a> searches through the remaining available devices in an effort to find a device which will meet the given parameters. If all attempts are unsuccessful, an <a class="el" href="classRtError.html">RtError</a> is thrown. When a non-zero device value is specified, an attempt is made to open that device <em>ONLY</em> (device = 1 specifies the first identified device, as reported by <a class="el" href="classRtAudio.html#a9">RtAudio::getDeviceInfo()</a>).<p>
<a class="el" href="classRtAudio.html">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">RtAudio</a> will automatically perform the necessary data format conversion.<p>
The <em>bufferSize</em> parameter specifies the desired number of sample frames which will be written to and/or read from a device per write/read operation. The <em>nBuffers</em> parameter is used in setting the underlying device buffer parameters. Both the <em>bufferSize</em> and <em>nBuffers</em> parameters can be used to control stream latency though there is no guarantee that the passed values will be those used by a device (the <em>nBuffers</em> parameter is ignored when using the OS X CoreAudio, Linux Jack, and the Windows ASIO APIs). In general, lower values for both parameters will produce less latency but perhaps less robust performance. Both parameters can be specified with values of zero, in which case the smallest allowable values will be used. The <em>bufferSize</em> parameter is passed as a pointer and the actual value used by the stream is set during the device setup procedure. <em>bufferSize</em> values should be a power of two. Optimal and allowable buffer values tend to vary between systems and devices. Check the <a class="el" href="index.html#apinotes">API Notes</a> section for general guidelines.<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">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">RtAudio</a> simply attempts to set the given parameters on a specified device and then checks whether the setup is successful or not.<h2><a class="anchor" name="playbackb">
Playback (blocking functionality)</a></h2>
Once the device is open for playback, there are only a few final steps necessary for realtime audio output. We'll first provide an example (blocking functionality) and then discuss the details.<p>
<div class="fragment"><pre><span class="comment">// playback.cpp</span>
<div class="fragment"><pre class="fragment"><span class="comment">// playback.cpp</span>

<span class="preprocessor">#include "RtAudio.h"</span>

@@ -195,7 +195,7 @@ Once the device is open for playback, there are only a few final steps necessary
<span class="keywordtype">int</span> nBuffers = 4; <span class="comment">// number of internal buffers used by device</span>
<span class="keywordtype">float</span> *buffer;
<span class="keywordtype">int</span> device = 0; <span class="comment">// 0 indicates the default or first available device</span>
<a class="code" href="classRtAudio.html">RtAudio</a> *audio;
<a class="code" href="classRtAudio.html">RtAudio</a> *audio = 0;

<span class="comment">// Open a stream during RtAudio instantiation</span>
<span class="keywordflow">try</span> {
@@ -203,19 +203,19 @@ Once the device is open for playback, there are only a few final steps necessary
sampleRate, &amp;bufferSize, nBuffers);
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
exit(EXIT_FAILURE);
}

<span class="keywordflow">try</span> {
<span class="comment">// Get a pointer to the stream buffer</span>
buffer = (<span class="keywordtype">float</span> *) audio-&gt;<a class="code" href="classRtAudio.html#a8">getStreamBuffer</a>();
buffer = (<span class="keywordtype">float</span> *) audio-&gt;<a class="code" href="classRtAudio.html#a10">getStreamBuffer</a>();

<span class="comment">// Start the stream</span>
audio-&gt;<a class="code" href="classRtAudio.html#a11">startStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a13">startStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
<span class="keywordflow">goto</span> cleanup;
}

@@ -227,10 +227,10 @@ Once the device is open for playback, there are only a few final steps necessary

<span class="comment">// Trigger the output of the data buffer</span>
<span class="keywordflow">try</span> {
audio-&gt;<a class="code" href="classRtAudio.html#a9">tickStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a11">tickStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
<span class="keywordflow">goto</span> cleanup;
}

@@ -239,11 +239,11 @@ Once the device is open for playback, there are only a few final steps necessary

<span class="keywordflow">try</span> {
<span class="comment">// Stop and close the stream</span>
audio-&gt;<a class="code" href="classRtAudio.html#a12">stopStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a10">closeStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a14">stopStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a12">closeStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
}

cleanup:
@@ -252,12 +252,12 @@ Once the device is open for playback, there are only a few final steps necessary
<span class="keywordflow">return</span> 0;
}
</pre></div><p>
The first thing to notice in this example is that we attempt to open a stream during class instantiation with an overloaded constructor. This constructor simply combines the functionality of the default constructor, used earlier, and the <a class="el" href="classRtAudio.html#a3">RtAudio::openStream()</a> method. Again, we have specified a device value of 0, indicating that the default or first available device meeting the given parameters should be used. An attempt is made to open the stream with the specified <em>bufferSize</em> value. However, it is possible that the device will not accept this value, in which case the closest allowable size is used and returned via the pointer value. The constructor can fail if no available devices are found, or a memory allocation or device driver error occurs. Note that you should not call the <a class="el" href="classRtAudio.html">RtAudio</a> destructor if an exception is thrown during instantiation.<p>
Assuming the constructor is successful, it is necessary to get a pointer to the buffer, provided by <a class="el" href="classRtAudio.html">RtAudio</a>, for use in feeding data to/from the opened stream. Note that the user should <em>NOT</em> attempt to deallocate the stream buffer memory ... memory management for the stream buffer will be automatically controlled by <a class="el" href="classRtAudio.html">RtAudio</a>. After starting the stream with <a class="el" href="classRtAudio.html#a11">RtAudio::startStream()</a>, one simply fills that buffer, which is of length equal to the returned <em>bufferSize</em> value, with interleaved audio data (in the specified format) for playback. Finally, a call to the <a class="el" href="classRtAudio.html#a9">RtAudio::tickStream()</a> routine triggers a blocking write call for the stream.<p>
In general, one should call the <a class="el" href="classRtAudio.html#a12">RtAudio::stopStream()</a> and <a class="el" href="classRtAudio.html#a10">RtAudio::closeStream()</a> methods after finishing with a stream. However, both methods will implicitly be called during object destruction if necessary.<h2><a class="anchor" name="playbackc">
The first thing to notice in this example is that we attempt to open a stream during class instantiation with an overloaded constructor. This constructor simply combines the functionality of the default constructor, used earlier, and the <a class="el" href="classRtAudio.html#a4">RtAudio::openStream()</a> method. Again, we have specified a device value of 0, indicating that the default or first available device meeting the given parameters should be used. An attempt is made to open the stream with the specified <em>bufferSize</em> value. However, it is possible that the device will not accept this value, in which case the closest allowable size is used and returned via the pointer value. The constructor can fail if no available devices are found, or a memory allocation or device driver error occurs. Note that you should not call the <a class="el" href="classRtAudio.html">RtAudio</a> destructor if an exception is thrown during instantiation.<p>
Assuming the constructor is successful, it is necessary to get a pointer to the buffer, provided by <a class="el" href="classRtAudio.html">RtAudio</a>, for use in feeding data to/from the opened stream. Note that the user should <em>NOT</em> attempt to deallocate the stream buffer memory ... memory management for the stream buffer will be automatically controlled by <a class="el" href="classRtAudio.html">RtAudio</a>. After starting the stream with <a class="el" href="classRtAudio.html#a13">RtAudio::startStream()</a>, one simply fills that buffer, which is of length equal to the returned <em>bufferSize</em> value, with interleaved audio data (in the specified format) for playback. Finally, a call to the <a class="el" href="classRtAudio.html#a11">RtAudio::tickStream()</a> routine triggers a blocking write call for the stream.<p>
In general, one should call the <a class="el" href="classRtAudio.html#a14">RtAudio::stopStream()</a> and <a class="el" href="classRtAudio.html#a12">RtAudio::closeStream()</a> methods after finishing with a stream. However, both methods will implicitly be called during object destruction if necessary.<h2><a class="anchor" name="playbackc">
Playback (callback functionality)</a></h2>
The primary difference in using <a class="el" href="classRtAudio.html">RtAudio</a> with callback functionality involves the creation of a user-defined callback function. Here is an example which produces a sawtooth waveform for playback.<p>
<div class="fragment"><pre><span class="preprocessor">#include &lt;iostream&gt;</span>
<div class="fragment"><pre class="fragment"><span class="preprocessor">#include &lt;iostream&gt;</span>
<span class="preprocessor">#include "RtAudio.h"</span>

<span class="comment">// Two-channel sawtooth wave generator.</span>
@@ -289,7 +289,7 @@ The primary difference in using <a class="el" href="classRtAudio.html">RtAudio</
<span class="keywordtype">int</span> device = 0; <span class="comment">// 0 indicates the default or first available device</span>
<span class="keywordtype">double</span> data[2];
<span class="keywordtype">char</span> input;
<a class="code" href="classRtAudio.html">RtAudio</a> *audio;
<a class="code" href="classRtAudio.html">RtAudio</a> *audio = 0;

<span class="comment">// Open a stream during RtAudio instantiation</span>
<span class="keywordflow">try</span> {
@@ -297,19 +297,19 @@ The primary difference in using <a class="el" href="classRtAudio.html">RtAudio</
sampleRate, &amp;bufferSize, nBuffers);
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
exit(EXIT_FAILURE);
}

<span class="keywordflow">try</span> {
<span class="comment">// Set the stream callback function</span>
audio-&gt;<a class="code" href="classRtAudio.html#a4">setStreamCallback</a>(&amp;sawtooth, (<span class="keywordtype">void</span> *)data);
audio-&gt;<a class="code" href="classRtAudio.html#a6">setStreamCallback</a>(&amp;sawtooth, (<span class="keywordtype">void</span> *)data);

<span class="comment">// Start the stream</span>
audio-&gt;<a class="code" href="classRtAudio.html#a11">startStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a13">startStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
<span class="keywordflow">goto</span> cleanup;
}

@@ -318,11 +318,11 @@ The primary difference in using <a class="el" href="classRtAudio.html">RtAudio</

<span class="keywordflow">try</span> {
<span class="comment">// Stop and close the stream</span>
audio-&gt;<a class="code" href="classRtAudio.html#a12">stopStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a10">closeStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a14">stopStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a12">closeStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
}

cleanup:
@@ -331,12 +331,12 @@ The primary difference in using <a class="el" href="classRtAudio.html">RtAudio</
<span class="keywordflow">return</span> 0;
}
</pre></div><p>
After opening the device in exactly the same way as the previous example (except with a data format change), we must set our callback function for the stream using <a class="el" href="classRtAudio.html#a4">RtAudio::setStreamCallback()</a>. When the underlying audio API uses blocking calls (OSS, ALSA, SGI, and Windows DirectSound), this method will spawn a new process (or thread) which automatically calls the callback function when more data is needed. Callback-based audio APIs (OS X CoreAudio Linux Jack, and ASIO) implement their own event notification schemes. Note that the callback function is called only when the stream is "running" (between calls to the <a class="el" href="classRtAudio.html#a11">RtAudio::startStream()</a> and <a class="el" href="classRtAudio.html#a12">RtAudio::stopStream()</a> methods). The last argument to <a class="el" href="classRtAudio.html#a4">RtAudio::setStreamCallback()</a> is a pointer to arbitrary data that you wish to access from within your callback function.<p>
In this example, we stop the stream with an explicit call to <a class="el" href="classRtAudio.html#a12">RtAudio::stopStream()</a>. When using callback functionality, it is also possible to stop a stream by returning a non-zero value from the callback function.<p>
Once set with <a class="el" href="classRtAudio.html#a4">RtAudio::setStreamCallback</a>, the callback process exists for the life of the stream (until the stream is closed with <a class="el" href="classRtAudio.html#a10">RtAudio::closeStream()</a> or the <a class="el" href="classRtAudio.html">RtAudio</a> instance is deleted). It is possible to disassociate a callback function and cancel its process for an open stream using the <a class="el" href="classRtAudio.html#a5">RtAudio::cancelStreamCallback()</a> method. The stream can then be used with blocking functionality or a new callback can be associated with it.<h2><a class="anchor" name="recording">
After opening the device in exactly the same way as the previous example (except with a data format change), we must set our callback function for the stream using <a class="el" href="classRtAudio.html#a6">RtAudio::setStreamCallback()</a>. When the underlying audio API uses blocking calls (OSS, ALSA, SGI, and Windows DirectSound), this method will spawn a new process (or thread) which automatically calls the callback function when more data is needed. Callback-based audio APIs (OS X CoreAudio Linux Jack, and ASIO) implement their own event notification schemes. Note that the callback function is called only when the stream is "running" (between calls to the <a class="el" href="classRtAudio.html#a13">RtAudio::startStream()</a> and <a class="el" href="classRtAudio.html#a14">RtAudio::stopStream()</a> methods). The last argument to <a class="el" href="classRtAudio.html#a6">RtAudio::setStreamCallback()</a> is a pointer to arbitrary data that you wish to access from within your callback function.<p>
In this example, we stop the stream with an explicit call to <a class="el" href="classRtAudio.html#a14">RtAudio::stopStream()</a>. When using callback functionality, it is also possible to stop a stream by returning a non-zero value from the callback function.<p>
Once set with <a class="el" href="classRtAudio.html#a6">RtAudio::setStreamCallback</a>, the callback process exists for the life of the stream (until the stream is closed with <a class="el" href="classRtAudio.html#a12">RtAudio::closeStream()</a> or the <a class="el" href="classRtAudio.html">RtAudio</a> instance is deleted). It is possible to disassociate a callback function and cancel its process for an open stream using the <a class="el" href="classRtAudio.html#a7">RtAudio::cancelStreamCallback()</a> method. The stream can then be used with blocking functionality or a new callback can be associated with it.<h2><a class="anchor" name="recording">
Recording</a></h2>
Using <a class="el" href="classRtAudio.html">RtAudio</a> for audio input is almost identical to the way it is used for playback. Here's the blocking playback example rewritten for recording:<p>
<div class="fragment"><pre><span class="comment">// record.cpp</span>
<div class="fragment"><pre class="fragment"><span class="comment">// record.cpp</span>

<span class="preprocessor">#include "RtAudio.h"</span>

@@ -349,7 +349,7 @@ Using <a class="el" href="classRtAudio.html">RtAudio</a> for audio input is almo
<span class="keywordtype">int</span> nBuffers = 4; <span class="comment">// number of internal buffers used by device</span>
<span class="keywordtype">float</span> *buffer;
<span class="keywordtype">int</span> device = 0; <span class="comment">// 0 indicates the default or first available device</span>
<a class="code" href="classRtAudio.html">RtAudio</a> *audio;
<a class="code" href="classRtAudio.html">RtAudio</a> *audio = 0;

<span class="comment">// Instantiate RtAudio and open a stream.</span>
<span class="keywordflow">try</span> {
@@ -357,19 +357,19 @@ Using <a class="el" href="classRtAudio.html">RtAudio</a> for audio input is almo
RTAUDIO_FLOAT32, sampleRate, &amp;bufferSize, nBuffers);
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
exit(EXIT_FAILURE);
}

<span class="keywordflow">try</span> {
<span class="comment">// Get a pointer to the stream buffer</span>
buffer = (<span class="keywordtype">float</span> *) audio-&gt;<a class="code" href="classRtAudio.html#a8">getStreamBuffer</a>();
buffer = (<span class="keywordtype">float</span> *) audio-&gt;<a class="code" href="classRtAudio.html#a10">getStreamBuffer</a>();

<span class="comment">// Start the stream</span>
audio-&gt;<a class="code" href="classRtAudio.html#a11">startStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a13">startStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
<span class="keywordflow">goto</span> cleanup;
}

@@ -379,10 +379,10 @@ Using <a class="el" href="classRtAudio.html">RtAudio</a> for audio input is almo

<span class="comment">// Read a buffer of data</span>
<span class="keywordflow">try</span> {
audio-&gt;<a class="code" href="classRtAudio.html#a9">tickStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a11">tickStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
<span class="keywordflow">goto</span> cleanup;
}

@@ -394,10 +394,10 @@ Using <a class="el" href="classRtAudio.html">RtAudio</a> for audio input is almo

<span class="keywordflow">try</span> {
<span class="comment">// Stop the stream</span>
audio-&gt;<a class="code" href="classRtAudio.html#a12">stopStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a14">stopStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
}

cleanup:
@@ -409,7 +409,7 @@ Using <a class="el" href="classRtAudio.html">RtAudio</a> for audio input is almo
In this example, the stream was opened for recording with a non-zero <em>inputChannels</em> value. The only other difference between this example and that for playback involves the order of data processing in the loop, where it is necessary to first read a buffer of input data before manipulating it.<h2><a class="anchor" name="duplex">
Duplex Mode</a></h2>
Finally, it is easy to use <a class="el" href="classRtAudio.html">RtAudio</a> for simultaneous audio input/output, or duplex operation. In this example, we use a callback function and simply scale the input data before sending it back to the output.<p>
<div class="fragment"><pre><span class="comment">// duplex.cpp</span>
<div class="fragment"><pre class="fragment"><span class="comment">// duplex.cpp</span>

<span class="preprocessor">#include &lt;iostream&gt;</span>
<span class="preprocessor">#include "RtAudio.h"</span>
@@ -438,7 +438,7 @@ Finally, it is easy to use <a class="el" href="classRtAudio.html">RtAudio</a> fo
<span class="keywordtype">int</span> nBuffers = 4; <span class="comment">// number of internal buffers used by device</span>
<span class="keywordtype">int</span> device = 0; <span class="comment">// 0 indicates the default or first available device</span>
<span class="keywordtype">char</span> input;
<a class="code" href="classRtAudio.html">RtAudio</a> *audio;
<a class="code" href="classRtAudio.html">RtAudio</a> *audio = 0;

<span class="comment">// Open a stream during RtAudio instantiation</span>
<span class="keywordflow">try</span> {
@@ -446,19 +446,19 @@ Finally, it is easy to use <a class="el" href="classRtAudio.html">RtAudio</a> fo
sampleRate, &amp;bufferSize, nBuffers);
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
exit(EXIT_FAILURE);
}

<span class="keywordflow">try</span> {
<span class="comment">// Set the stream callback function</span>
audio-&gt;<a class="code" href="classRtAudio.html#a4">setStreamCallback</a>(&amp;scale, NULL);
audio-&gt;<a class="code" href="classRtAudio.html#a6">setStreamCallback</a>(&amp;scale, NULL);

<span class="comment">// Start the stream</span>
audio-&gt;<a class="code" href="classRtAudio.html#a11">startStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a13">startStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
<span class="keywordflow">goto</span> cleanup;
}

@@ -467,11 +467,11 @@ Finally, it is easy to use <a class="el" href="classRtAudio.html">RtAudio</a> fo

<span class="keywordflow">try</span> {
<span class="comment">// Stop and close the stream</span>
audio-&gt;<a class="code" href="classRtAudio.html#a12">stopStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a10">closeStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a14">stopStream</a>();
audio-&gt;<a class="code" href="classRtAudio.html#a12">closeStream</a>();
}
<span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
error.printMessage();
error.<a class="code" href="classRtError.html#a2">printMessage</a>();
}

cleanup:
@@ -489,27 +489,27 @@ Summary of Methods</a></h2>
The following is a short summary of public methods (not including constructors and the destructor) provided by <a class="el" href="classRtAudio.html">RtAudio</a>:<p>
<ul>
<li>
<a class="el" href="classRtAudio.html#a3">RtAudio::openStream()</a>: opens a stream with the specified parameters. </li>
<a class="el" href="classRtAudio.html#a4">RtAudio::openStream()</a>: opens a stream with the specified parameters. </li>
<li>
<a class="el" href="classRtAudio.html#a4">RtAudio::setStreamCallback()</a>: sets a user-defined callback function for the stream. </li>
<a class="el" href="classRtAudio.html#a6">RtAudio::setStreamCallback()</a>: sets a user-defined callback function for the stream. </li>
<li>
<a class="el" href="classRtAudio.html#a5">RtAudio::cancelStreamCallback()</a>: cancels a callback process and function for the stream. </li>
<a class="el" href="classRtAudio.html#a7">RtAudio::cancelStreamCallback()</a>: cancels a callback process and function for the stream. </li>
<li>
<a class="el" href="classRtAudio.html#a6">RtAudio::getDeviceCount()</a>: returns the number of audio devices available. </li>
<a class="el" href="classRtAudio.html#a8">RtAudio::getDeviceCount()</a>: returns the number of audio devices available. </li>
<li>
<a class="el" href="classRtAudio.html#a7">RtAudio::getDeviceInfo()</a>: returns an <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> structure for a specified device. </li>
<a class="el" href="classRtAudio.html#a9">RtAudio::getDeviceInfo()</a>: returns an <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> structure for a specified device. </li>
<li>
<a class="el" href="classRtAudio.html#a8">RtAudio::getStreamBuffer()</a>: returns a pointer to the stream buffer. </li>
<a class="el" href="classRtAudio.html#a10">RtAudio::getStreamBuffer()</a>: returns a pointer to the stream buffer. </li>
<li>
<a class="el" href="classRtAudio.html#a9">RtAudio::tickStream()</a>: triggers processing of input/output data for the stream (blocking). </li>
<a class="el" href="classRtAudio.html#a11">RtAudio::tickStream()</a>: triggers processing of input/output data for the stream (blocking). </li>
<li>
<a class="el" href="classRtAudio.html#a10">RtAudio::closeStream()</a>: closes the stream (implicitly called during object destruction). </li>
<a class="el" href="classRtAudio.html#a12">RtAudio::closeStream()</a>: closes the stream (implicitly called during object destruction). </li>
<li>
<a class="el" href="classRtAudio.html#a11">RtAudio::startStream()</a>: (re)starts the stream, typically after it has been stopped with either stopStream() or abortStream() or after first opening the stream. </li>
<a class="el" href="classRtAudio.html#a13">RtAudio::startStream()</a>: (re)starts the stream, typically after it has been stopped with either stopStream() or abortStream() or after first opening the stream. </li>
<li>
<a class="el" href="classRtAudio.html#a12">RtAudio::stopStream()</a>: stops the stream, allowing any remaining samples in the queue to be played out and/or read in. This does not implicitly call <a class="el" href="classRtAudio.html#a10">RtAudio::closeStream()</a>. </li>
<a class="el" href="classRtAudio.html#a14">RtAudio::stopStream()</a>: stops the stream, allowing any remaining samples in the queue to be played out and/or read in. This does not implicitly call <a class="el" href="classRtAudio.html#a12">RtAudio::closeStream()</a>. </li>
<li>
<a class="el" href="classRtAudio.html#a13">RtAudio::abortStream()</a>: stops the stream, discarding any remaining samples in the queue. This does not implicitly call closeStream(). </li>
<a class="el" href="classRtAudio.html#a15">RtAudio::abortStream()</a>: stops the stream, discarding any remaining samples in the queue. This does not implicitly call closeStream(). </li>
</ul>
<h2><a class="anchor" name="compiling">
Compiling</a></h2>
@@ -533,9 +533,9 @@ In order to compile <a class="el" href="classRtAudio.html">RtAudio</a> for a spe
<td>Windows </td><td>ASIO </td><td>RtApiAsio </td><td>__WINDOWS_ASIO__ </td><td><em>various ASIO header and source files</em> </td><td><em>compiler specific</em> </td></tr>
</table>
<p>
The example compiler statements above could be used to compile the <code>probe.cpp</code> example file, assuming that <code>probe.cpp</code>, <code><a class="el" href="RtAudio_8h.html">RtAudio.h</a></code>, <code><a class="el" href="RtError_8h.html">RtError.h</a></code>, and <code>RtAudio.cpp</code> all exist in the same directory.<h2><a class="anchor" name="debug">
The example compiler statements above could be used to compile the <code>probe.cpp</code> example file, assuming that <code>probe.cpp</code>, <code><a class="el" href="RtAudio_8h-source.html">RtAudio.h</a></code>, <code><a class="el" href="RtError_8h-source.html">RtError.h</a></code>, and <code>RtAudio.cpp</code> all exist in the same directory.<h2><a class="anchor" name="debug">
Debugging</a></h2>
If you are having problems getting <a class="el" href="classRtAudio.html">RtAudio</a> to run on your system, try passing the preprocessor definition <code>__RTAUDIO_DEBUG__</code> to the compiler (or uncomment the definition at the bottom of <a class="el" href="RtAudio_8h.html">RtAudio.h</a>). A variety of warning messages will be displayed which may help in determining the problem. Also try using the programs included in the <code>test</code> directory. The program <code>info</code> displays the queried capabilities of all hardware devices found.<h2><a class="anchor" name="apinotes">
If you are having problems getting <a class="el" href="classRtAudio.html">RtAudio</a> to run on your system, try passing the preprocessor definition <code>__RTAUDIO_DEBUG__</code> to the compiler (or uncomment the definition at the bottom of <a class="el" href="RtAudio_8h-source.html">RtAudio.h</a>). A variety of warning messages will be displayed which may help in determining the problem. Also try using the programs included in the <code>test</code> directory. The program <code>info</code> displays the queried capabilities of all hardware devices found.<h2><a class="anchor" name="apinotes">
API Notes</a></h2>
<a class="el" href="classRtAudio.html">RtAudio</a> is designed to provide a common API across the various supported operating systems and audio libraries. Despite that, some issues should be mentioned with regard to each.<h3><a class="anchor" name="linux">
Linux:</a></h3>
@@ -544,28 +544,42 @@ The ALSA library includes OSS emulation support. That means that you can run pro
The ALSA implementation of <a class="el" href="classRtAudio.html">RtAudio</a> makes no use of the ALSA "plug" interface. All necessary data format conversions, channel compensation, de-interleaving, and byte-swapping is handled by internal <a class="el" href="classRtAudio.html">RtAudio</a> routines.<p>
The Jack API is based on a callback scheme. <a class="el" href="classRtAudio.html">RtAudio</a> provides blocking functionality, in addition to callback functionality, within the context of that behavior. It should be noted, however, that the best performance is achieved when using RtAudio's callback functionality with the Jack API. At the moment, only one <a class="el" href="classRtAudio.html">RtAudio</a> instance can be connected to the Jack server. Because <a class="el" href="classRtAudio.html">RtAudio</a> does not provide a mechanism for allowing the user to specify particular channels (or ports) of a device, it simply opens the first <em>N</em> enumerated Jack ports for input/output.<h3><a class="anchor" name="macosx">
Macintosh OS X (CoreAudio):</a></h3>
The Apple CoreAudio API is based on a callback scheme. <a class="el" href="classRtAudio.html">RtAudio</a> provides blocking functionality, in addition to callback functionality, within the context of that behavior. CoreAudio is designed to use a separate callback procedure for each of its audio devices. A single <a class="el" href="classRtAudio.html">RtAudio</a> duplex stream using two different devices is supported, though it cannot be guaranteed to always behave correctly because we cannot synchronize these two callbacks. This same functionality might be achieved with better synchrony by creating separate instances of <a class="el" href="classRtAudio.html">RtAudio</a> for each device and making use of <a class="el" href="classRtAudio.html">RtAudio</a> blocking calls (i.e. <a class="el" href="classRtAudio.html#a9">RtAudio::tickStream()</a>). The <em>numberOfBuffers</em> parameter to the <a class="el" href="classRtAudio.html#a3">RtAudio::openStream()</a> function has no affect in this implementation.<p>
The Apple CoreAudio API is based on a callback scheme. <a class="el" href="classRtAudio.html">RtAudio</a> provides blocking functionality, in addition to callback functionality, within the context of that behavior. CoreAudio is designed to use a separate callback procedure for each of its audio devices. A single <a class="el" href="classRtAudio.html">RtAudio</a> duplex stream using two different devices is supported, though it cannot be guaranteed to always behave correctly because we cannot synchronize these two callbacks. This same functionality might be achieved with better synchrony by creating separate instances of <a class="el" href="classRtAudio.html">RtAudio</a> for each device and making use of <a class="el" href="classRtAudio.html">RtAudio</a> blocking calls (i.e. <a class="el" href="classRtAudio.html#a11">RtAudio::tickStream()</a>). The <em>numberOfBuffers</em> parameter to the <a class="el" href="classRtAudio.html#a4">RtAudio::openStream()</a> function has no affect in this implementation.<p>
It is not possible to have multiple instances of <a class="el" href="classRtAudio.html">RtAudio</a> accessing the same CoreAudio device.<h3><a class="anchor" name="irix">
Irix (SGI):</a></h3>
The Irix version of <a class="el" href="classRtAudio.html">RtAudio</a> was written and tested on an SGI Indy running Irix version 6.5.4 and the newer "al" audio library. <a class="el" href="classRtAudio.html">RtAudio</a> does not compile under Irix version 6.3, mainly because the C++ compiler is too old. Despite the relatively slow speed of the Indy, <a class="el" href="classRtAudio.html">RtAudio</a> was found to behave quite well and input/output latency was very good. No problems were found with respect to using the pthread library.<h3><a class="anchor" name="windowsds">
Windows (DirectSound):</a></h3>
In order to compile <a class="el" href="classRtAudio.html">RtAudio</a> under Windows for the DirectSound API, you must have the header and source files for DirectSound version 5.0 or higher. As far as I know, there is no DirectSoundCapture support for Windows NT. Audio output latency with DirectSound can be reasonably good (on the order of 20 milliseconds). On the other hand, input audio latency tends to be terrible (100 milliseconds or more). Further, DirectSound drivers tend to crash easily when experimenting with buffer parameters. On my system, I found it necessary to use values around nBuffers = 8 and bufferSize = 512 to avoid crashes. <a class="el" href="classRtAudio.html">RtAudio</a> was originally developed with Visual C++ version 6.0.<h3><a class="anchor" name="windowsasio">
Windows (ASIO):</a></h3>
The Steinberg ASIO audio API is based on a callback scheme. In addition, the API allows only a single device driver to be loaded and accessed at a time. ASIO device drivers must be supplied by audio hardware manufacturers, though ASIO emulation is possible on top of systems with DirectSound drivers. The <em>numberOfBuffers</em> parameter to the <a class="el" href="classRtAudio.html#a3">RtAudio::openStream()</a> function has no affect in this implementation.<p>
A number of ASIO source and header files are required for use with <a class="el" href="classRtAudio.html">RtAudio</a>. Specifically, an <a class="el" href="classRtAudio.html">RtAudio</a> project must include the following files: <code>asio.h,cpp; asiodrivers.h,cpp; asiolist.h,cpp; asiodrvr.h; asiosys.h; ginclude.h; iasiodrv.h</code>. The Visual C++ projects found in <code>/tests/Windows/</code> compile both ASIO and DirectSound support.<h2><a class="anchor" name="acknowledge">
The Steinberg ASIO audio API is based on a callback scheme. In addition, the API allows only a single device driver to be loaded and accessed at a time. ASIO device drivers must be supplied by audio hardware manufacturers, though ASIO emulation is possible on top of systems with DirectSound drivers. The <em>numberOfBuffers</em> parameter to the <a class="el" href="classRtAudio.html#a4">RtAudio::openStream()</a> function has no affect in this implementation.<p>
A number of ASIO source and header files are required for use with <a class="el" href="classRtAudio.html">RtAudio</a>. Specifically, an <a class="el" href="classRtAudio.html">RtAudio</a> project must include the following files: <code>asio.h,cpp; asiodrivers.h,cpp; asiolist.h,cpp; asiodrvr.h; asiosys.h; ginclude.h; iasiodrv.h</code>. The Visual C++ projects found in <code>/tests/Windows/</code> compile both ASIO and DirectSound support.<h2><a class="anchor" name="wishlist">
Possible Future Changes</a></h2>
There are a few issues that still need to be addressed in future versions of <a class="el" href="classRtAudio.html">RtAudio</a>, including:<p>
<ul>
<li>
Provide a mechanism so the user can "pre-fill" audio output buffers to allow precise measurement of an acoustic response; </li>
<li>
Allow the user to read / write non-interleaved data to / from the audio buffer; </li>
<li>
Further support in Windows OS for multi-channel (&gt;2) input / output. This is currently only possible with ASIO interface (in large part due to limitations with the DirectSound API). But perhaps a port to the WinMM API should be investigated? </li>
<li>
Investigate the possibility of allowing the user to select specific channels of a soundcard. For example, if an audio device supports 8 channels and the user wishes to send data out channels 7-8 only, it is currently necessary to open all 8 channels and write the two channels of output data to the correct positions in each audio frame of an interleaved data buffer. </li>
</ul>
<h2><a class="anchor" name="acknowledge">
Acknowledgements</a></h2>
The <a class="el" href="classRtAudio.html">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>
The early 2.0 version of <a class="el" href="classRtAudio.html">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>. The most recent version of <a class="el" href="classRtAudio.html">RtAudio</a> was finished while working as an assistant 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).<h2><a class="anchor" name="license">
Thanks to Robin Davies for a number of bug fixes and improvements to the DirectSound and ASIO implementations in the 3.0.2 release!<p>
The <a class="el" href="classRtAudio.html">RtAudio</a> API incorporates many of the concepts developed in the PortAudio project by Phil Burk and Ross Bencina. Early development also incorporated ideas from Bill Schottstaedt's sndlib. The CCRMA SoundWire group provided valuable feedback during the API proposal stages.<p>
The early 2.0 version of <a class="el" href="classRtAudio.html">RtAudio</a> was slowly developed over the course of many months while in residence at the Institut Universitari de L'Audiovisual (IUA) in Barcelona, Spain and the Laboratory of Acoustics and Audio Signal Processing at the Helsinki University of Technology, Finland. Much subsequent development happened while working at the Center for Computer Research in Music and Acoustics (CCRMA) at Stanford University. The most recent version of <a class="el" href="classRtAudio.html">RtAudio</a> was finished while working as an assistant 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).<h2><a class="anchor" name="license">
License</a></h2>
<a class="el" href="classRtAudio.html">RtAudio</a>: a realtime audio i/o C++ classes<br>
Copyright (c) 2001-2004 Gary P. Scavone<p>
Copyright (c) 2001-2005 Gary P. Scavone<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>
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<p>
Any person wishing to distribute modifications to the Software is requested to send the modifications to the original developer so that they can be incorporated into the canonical version.<p>
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. <HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 3
- 3
doc/html/structRtAudioDeviceInfo-members.html View File

@@ -7,8 +7,8 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>RtAudioDeviceInfo Member List</h1>This is the complete list of members for <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a>, including all inherited members.<table>
<!-- Generated by Doxygen 1.4.4 -->
<h1>RtAudioDeviceInfo Member List</h1>This is the complete list of members for <a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a>, including all inherited members.<p><table>
<tr class="memlist"><td><a class="el" href="structRtAudioDeviceInfo.html#o4">duplexChannels</a></td><td><a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="structRtAudioDeviceInfo.html#o3">inputChannels</a></td><td><a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a></td><td></td></tr>
<tr class="memlist"><td><a class="el" href="structRtAudioDeviceInfo.html#o5">isDefault</a></td><td><a class="el" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a></td><td></td></tr>
@@ -20,7 +20,7 @@
</table><HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



+ 53
- 45
doc/html/structRtAudioDeviceInfo.html View File

@@ -7,48 +7,49 @@
<CENTER>
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>RtAudioDeviceInfo Struct Reference</h1>The public device information structure for returning queried values.
<!-- Generated by Doxygen 1.4.4 -->
<h1>RtAudioDeviceInfo Struct Reference</h1><!-- doxytag: class="RtAudioDeviceInfo" -->The public device information structure for returning queried values.
<a href="#_details">More...</a>
<p>
<code>#include &lt;<a class="el" href="RtAudio_8h-source.html">RtAudio.h</a>&gt;</code>
<p>
<a href="structRtAudioDeviceInfo-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
<a href="structRtAudioDeviceInfo-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan=2><br><h2>Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>std::string&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structRtAudioDeviceInfo.html#o0">name</a></td></tr>
<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">std::string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudioDeviceInfo.html#o0">name</a></td></tr>

<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structRtAudioDeviceInfo.html#o1">probed</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudioDeviceInfo.html#o1">probed</a></td></tr>

<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structRtAudioDeviceInfo.html#o2">outputChannels</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudioDeviceInfo.html#o2">outputChannels</a></td></tr>

<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structRtAudioDeviceInfo.html#o3">inputChannels</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudioDeviceInfo.html#o3">inputChannels</a></td></tr>

<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structRtAudioDeviceInfo.html#o4">duplexChannels</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudioDeviceInfo.html#o4">duplexChannels</a></td></tr>

<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structRtAudioDeviceInfo.html#o5">isDefault</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudioDeviceInfo.html#o5">isDefault</a></td></tr>

<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; int &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structRtAudioDeviceInfo.html#o6">sampleRates</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">std::vector&lt; int &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudioDeviceInfo.html#o6">sampleRates</a></td></tr>

<tr><td class="memItemLeft" nowrap align=right valign=top>RtAudioFormat&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structRtAudioDeviceInfo.html#o7">nativeFormats</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">RtAudioFormat&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudioDeviceInfo.html#o7">nativeFormats</a></td></tr>

</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
The public device information structure for returning queried values.
<p>
<hr><h2>Member Data Documentation</h2>
<a class="anchor" name="o0" doxytag="RtAudioDeviceInfo::name" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="o0"></a><!-- doxytag: member="RtAudioDeviceInfo::name" ref="o0" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> std::string <a class="el" href="structRtAudioDeviceInfo.html#o0">RtAudioDeviceInfo::name</a>
<td class="md" nowrap valign="top">std::string <a class="el" href="structRtAudioDeviceInfo.html#o0">RtAudioDeviceInfo::name</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -59,18 +60,19 @@ The public device information structure for returning queried values.
Character string device identifier. </td>
</tr>
</table>
<a class="anchor" name="o1" doxytag="RtAudioDeviceInfo::probed" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="o1"></a><!-- doxytag: member="RtAudioDeviceInfo::probed" ref="o1" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> bool <a class="el" href="structRtAudioDeviceInfo.html#o1">RtAudioDeviceInfo::probed</a>
<td class="md" nowrap valign="top">bool <a class="el" href="structRtAudioDeviceInfo.html#o1">RtAudioDeviceInfo::probed</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -81,18 +83,19 @@ Character string device identifier. </td>
true if the device capabilities were successfully probed. </td>
</tr>
</table>
<a class="anchor" name="o2" doxytag="RtAudioDeviceInfo::outputChannels" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="o2"></a><!-- doxytag: member="RtAudioDeviceInfo::outputChannels" ref="o2" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int <a class="el" href="structRtAudioDeviceInfo.html#o2">RtAudioDeviceInfo::outputChannels</a>
<td class="md" nowrap valign="top">int <a class="el" href="structRtAudioDeviceInfo.html#o2">RtAudioDeviceInfo::outputChannels</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -103,18 +106,19 @@ true if the device capabilities were successfully probed. </td>
Maximum output channels supported by device. </td>
</tr>
</table>
<a class="anchor" name="o3" doxytag="RtAudioDeviceInfo::inputChannels" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="o3"></a><!-- doxytag: member="RtAudioDeviceInfo::inputChannels" ref="o3" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int <a class="el" href="structRtAudioDeviceInfo.html#o3">RtAudioDeviceInfo::inputChannels</a>
<td class="md" nowrap valign="top">int <a class="el" href="structRtAudioDeviceInfo.html#o3">RtAudioDeviceInfo::inputChannels</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -125,18 +129,19 @@ Maximum output channels supported by device. </td>
Maximum input channels supported by device. </td>
</tr>
</table>
<a class="anchor" name="o4" doxytag="RtAudioDeviceInfo::duplexChannels" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="o4"></a><!-- doxytag: member="RtAudioDeviceInfo::duplexChannels" ref="o4" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int <a class="el" href="structRtAudioDeviceInfo.html#o4">RtAudioDeviceInfo::duplexChannels</a>
<td class="md" nowrap valign="top">int <a class="el" href="structRtAudioDeviceInfo.html#o4">RtAudioDeviceInfo::duplexChannels</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -147,18 +152,19 @@ Maximum input channels supported by device. </td>
Maximum simultaneous input/output channels supported by device. </td>
</tr>
</table>
<a class="anchor" name="o5" doxytag="RtAudioDeviceInfo::isDefault" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="o5"></a><!-- doxytag: member="RtAudioDeviceInfo::isDefault" ref="o5" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> bool <a class="el" href="structRtAudioDeviceInfo.html#o5">RtAudioDeviceInfo::isDefault</a>
<td class="md" nowrap valign="top">bool <a class="el" href="structRtAudioDeviceInfo.html#o5">RtAudioDeviceInfo::isDefault</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -169,18 +175,19 @@ Maximum simultaneous input/output channels supported by device. </td>
true if this is the default output or input device. </td>
</tr>
</table>
<a class="anchor" name="o6" doxytag="RtAudioDeviceInfo::sampleRates" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="o6"></a><!-- doxytag: member="RtAudioDeviceInfo::sampleRates" ref="o6" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> std::vector&lt;int&gt; <a class="el" href="structRtAudioDeviceInfo.html#o6">RtAudioDeviceInfo::sampleRates</a>
<td class="md" nowrap valign="top">std::vector&lt;int&gt; <a class="el" href="structRtAudioDeviceInfo.html#o6">RtAudioDeviceInfo::sampleRates</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -191,18 +198,19 @@ true if this is the default output or input device. </td>
Supported sample rates (queried from list of standard rates). </td>
</tr>
</table>
<a class="anchor" name="o7" doxytag="RtAudioDeviceInfo::nativeFormats" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<a class="anchor" name="o7"></a><!-- doxytag: member="RtAudioDeviceInfo::nativeFormats" ref="o7" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> RtAudioFormat <a class="el" href="structRtAudioDeviceInfo.html#o7">RtAudioDeviceInfo::nativeFormats</a>
<td class="md" nowrap valign="top">RtAudioFormat <a class="el" href="structRtAudioDeviceInfo.html#o7">RtAudioDeviceInfo::nativeFormats</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
@@ -218,7 +226,7 @@ Bit mask of supported data formats. </td>
<HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>&copy;2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
<td>&copy;2001-2005 Gary P. Scavone, McGill University. All Rights Reserved.<br>
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>
</table>



Loading…
Cancel
Save