Release 4.0.3 tarball 4.0.3
authorGary Scavone <gary@music.mcgill.ca>
Thu, 10 Oct 2013 23:52:05 +0000 (01:52 +0200)
committerStephen Sinclair <sinclair@music.mcgill.ca>
Thu, 10 Oct 2013 23:52:05 +0000 (01:52 +0200)
configure
doc/html/RtAudio_8h-source.html
doc/html/apinotes.html
doc/html/compiling.html
doc/html/index.html
doc/html/probe.html

index b9561b52ef484b7fdc43307ba446a094f1986f0d..936dc9045d7d66f0bfce91fbe3715c1d15ab27e9 100755 (executable)
--- a/configure
+++ b/configure
@@ -311,7 +311,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS GXX CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX RANLIB ac_ct_RANLIB AR CPP EGREP debug cflags object_path warn build build_cpu build_vendor build_os host host_cpu host_vendor host_os sound_api audio_apis frameworks LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS GXX CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX RANLIB ac_ct_RANLIB AR CPP EGREP debug cflags object_path warn build build_cpu build_vendor build_os host host_cpu host_vendor host_os sound_api audio_apis frameworks objects LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -866,6 +866,8 @@ Optional Packages:
   --with-oss = choose OSS API support (linux only)
   --with-jack = choose JACK server support (unix only)
   --with-core = choose CoreAudio API support (mac only)
+  --with-asio = choose ASIO API support (windoze only)
+  --with-ds = choose DirectSound API support (windoze only)
 
 Some influential environment variables:
   CC          C compiler command
@@ -2747,90 +2749,8 @@ echo "$as_me: error: \"Could not find ar - needed to create a library\"" >&2;}
    { (exit 1); exit 1; }; };
 fi
 
-# Checks for libraries.
-
-
-echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
-echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
-if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* 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 pthread_create ();
-int
-main ()
-{
-pthread_create ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
-  { (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); }; } &&
-        { 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_pthread_pthread_create=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_pthread_pthread_create=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
-echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
-if test $ac_cv_lib_pthread_pthread_create = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPTHREAD 1
-_ACEOF
-
-  LIBS="-lpthread $LIBS"
-
-else
-  { { echo "$as_me:$LINENO: error: RtAudio requires the pthread library!" >&5
-echo "$as_me: error: RtAudio requires the pthread library!" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-
-
-
 # Checks for header files.
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3792,6 +3712,84 @@ echo "${ECHO_T}using OSS" >&6
     audio_apis=-D__LINUX_OSS__
 
     cflags=$cflags" -lossaudio"
+
+echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* 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 pthread_create ();
+int
+main ()
+{
+pthread_create ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (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); }; } &&
+        { 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_pthread_pthread_create=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
+if test $ac_cv_lib_pthread_pthread_create = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPTHREAD 1
+_ACEOF
+
+  LIBS="-lpthread $LIBS"
+
+else
+  { { echo "$as_me:$LINENO: error: RtAudio requires the pthread library!" >&5
+echo "$as_me: error: RtAudio requires the pthread library!" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
   ;;
 
   *-*-linux*)
@@ -3967,7 +3965,7 @@ fi
     audio_apis="-D__UNIX_JACK__"
   fi
 
-  # Look for Alsa flag
+  # Look for ALSA flag
 
 # Check whether --with-alsa or --without-alsa was given.
 if test "${with_alsa+set}" = set; then
@@ -4071,30 +4069,100 @@ fi;
     audio_apis="-D__LINUX_OSS__ $audio_apis"
   fi
 
-  # If no audio api flags specified, use OSS
+  # If no audio api flags specified, use ALSA
   if test $sound_api = _NO_API_; then
-    sound_api=-D__LINUX_OSS__
+    echo "$as_me:$LINENO: result: using ALSA" >&5
+echo "${ECHO_T}using ALSA" >&6
+    audio_apis=-D__LINUX_ALSA__
 
-    echo "$as_me:$LINENO: result: using OSS" >&5
-echo "${ECHO_T}using OSS" >&6
-    audio_apis=-D__LINUX_OSS__
 
-  fi
-  ;;
+echo "$as_me:$LINENO: checking for snd_pcm_open in -lasound" >&5
+echo $ECHO_N "checking for snd_pcm_open in -lasound... $ECHO_C" >&6
+if test "${ac_cv_lib_asound_snd_pcm_open+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lasound  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
-  *-sgi*)
-  audio_apis="-D__IRIX_AL__ -LANG:std -w"
+/* 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 snd_pcm_open ();
+int
+main ()
+{
+snd_pcm_open ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (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); }; } &&
+        { 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_asound_snd_pcm_open=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_asound_snd_pcm_open=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_pcm_open" >&5
+echo "${ECHO_T}$ac_cv_lib_asound_snd_pcm_open" >&6
+if test $ac_cv_lib_asound_snd_pcm_open = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBASOUND 1
+_ACEOF
+
+  LIBS="-lasound $LIBS"
+
+else
+  { { echo "$as_me:$LINENO: error: ALSA support requires the asound library!" >&5
+echo "$as_me: error: ALSA support requires the asound library!" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+  fi
 
-  echo "$as_me:$LINENO: result: using IRIX AL" >&5
-echo "${ECHO_T}using IRIX AL" >&6
 
-echo "$as_me:$LINENO: checking for alOpenPort in -laudio" >&5
-echo $ECHO_N "checking for alOpenPort in -laudio... $ECHO_C" >&6
-if test "${ac_cv_lib_audio_alOpenPort+set}" = set; then
+echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-laudio  $LIBS"
+LIBS="-lpthread  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -4108,11 +4176,11 @@ 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 alOpenPort ();
+char pthread_create ();
 int
 main ()
 {
-alOpenPort ();
+pthread_create ();
   ;
   return 0;
 }
@@ -4139,29 +4207,29 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_lib_audio_alOpenPort=yes
+  ac_cv_lib_pthread_pthread_create=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_cv_lib_audio_alOpenPort=no
+ac_cv_lib_pthread_pthread_create=no
 fi
 rm -f conftest.err conftest.$ac_objext \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_audio_alOpenPort" >&5
-echo "${ECHO_T}$ac_cv_lib_audio_alOpenPort" >&6
-if test $ac_cv_lib_audio_alOpenPort = yes; then
+echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
+if test $ac_cv_lib_pthread_pthread_create = yes; then
   cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBAUDIO 1
+#define HAVE_LIBPTHREAD 1
 _ACEOF
 
-  LIBS="-laudio $LIBS"
+  LIBS="-lpthread $LIBS"
 
 else
-  { { echo "$as_me:$LINENO: error: IRIX audio support requires the audio library!" >&5
-echo "$as_me: error: IRIX audio support requires the audio library!" >&2;}
+  { { echo "$as_me:$LINENO: error: RtAudio requires the pthread library!" >&5
+echo "$as_me: error: RtAudio requires the pthread library!" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
@@ -4577,6 +4645,129 @@ fi
     frameworks="-framework CoreAudio -framework CoreFoundation"
 
   fi
+
+
+echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* 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 pthread_create ();
+int
+main ()
+{
+pthread_create ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (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); }; } &&
+        { 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_pthread_pthread_create=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
+if test $ac_cv_lib_pthread_pthread_create = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPTHREAD 1
+_ACEOF
+
+  LIBS="-lpthread $LIBS"
+
+else
+  { { echo "$as_me:$LINENO: error: RtAudio requires the pthread library!" >&5
+echo "$as_me: error: RtAudio requires the pthread library!" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+  ;;
+
+  *-mingw32*)
+  sound_api=_NO_API_
+
+
+# Check whether --with-asio or --without-asio was given.
+if test "${with_asio+set}" = set; then
+  withval="$with_asio"
+  sound_api=-D__WINDOWS_ASIO__
+ echo "$as_me:$LINENO: result: using ASIO" >&5
+echo "${ECHO_T}using ASIO" >&6
+fi;
+  if test $sound_api = -D__WINDOWS_ASIO__; then
+    audio_apis="-D__WINDOWS_ASIO__"
+    objects="asio.o asiodrivers.o asiolist.o iasiothiscallresolver.o"
+
+  fi
+
+  # Look for DirectSound flag
+
+# Check whether --with-ds or --without-ds was given.
+if test "${with_ds+set}" = set; then
+  withval="$with_ds"
+  sound_api=-D__WINDOWS_DS__
+ echo "$as_me:$LINENO: result: using DirectSound" >&5
+echo "${ECHO_T}using DirectSound" >&6
+fi;
+  if test $sound_api = -D__WINDOWS_DS__; then
+    audio_apis="-D__WINDOWS_DS__ $audio_apis"
+    LIBS="-ldsound -lwinmm $LIBS"
+  fi
+
+  # If no audio api flags specified, use DirectSound
+  if test $sound_api = _NO_API_; then
+    sound_api=-D__WINDOWS_DS__
+
+    echo "$as_me:$LINENO: result: using DirectSound" >&5
+echo "${ECHO_T}using DirectSound" >&6
+    audio_apis="-D__WINDOWS_DS__"
+    LIBS="-ldsound -lwinmm $LIBS"
+  fi
+
+  LIBS="-lole32 $LIBS"
   ;;
 
   *)
@@ -5306,6 +5497,7 @@ s,@host_os@,$host_os,;t t
 s,@sound_api@,$sound_api,;t t
 s,@audio_apis@,$audio_apis,;t t
 s,@frameworks@,$frameworks,;t t
+s,@objects@,$objects,;t t
 s,@LIBOBJS@,$LIBOBJS,;t t
 s,@LTLIBOBJS@,$LTLIBOBJS,;t t
 CEOF
index 87f9fe0910e5d4e095ad0eb9adebbb12b0b89404..081a6e9d0745f5f687a25e3052e4efd3aa1f8d2d 100644 (file)
@@ -12,7 +12,7 @@
 <h1>RtAudio.h</h1><a href="RtAudio_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/************************************************************************/</span>
 <a name="l00039"></a>00039 <span class="comment">/************************************************************************/</span>
 <a name="l00040"></a>00040 
-<a name="l00045"></a>00045 <span class="comment">// RtAudio: Version 4.0</span>
+<a name="l00045"></a>00045 <span class="comment">// RtAudio: Version 4.0.3</span>
 <a name="l00046"></a>00046 
 <a name="l00047"></a>00047 <span class="preprocessor">#ifndef __RTAUDIO_H</span>
 <a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define __RTAUDIO_H</span>
 <a name="l00679"></a>00679 <span class="comment">//</span>
 <a name="l00680"></a>00680 <span class="comment">// **************************************************************** //</span>
 <a name="l00681"></a>00681 
-<a name="l00682"></a><a class="code" href="classRtAudio.html#a2">00682</a> <span class="keyword">inline</span> <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> <a class="code" href="classRtAudio.html#a2">RtAudio :: getCurrentApi</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getCurrentApi(); };
-<a name="l00683"></a><a class="code" href="classRtAudio.html#a3">00683</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a3">RtAudio :: getDeviceCount</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceCount(); };
-<a name="l00684"></a><a class="code" href="classRtAudio.html#a4">00684</a> <span class="keyword">inline</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> <a class="code" href="classRtAudio.html#a4">RtAudio :: getDeviceInfo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceInfo( device ); };
-<a name="l00685"></a><a class="code" href="classRtAudio.html#a6">00685</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a6">RtAudio :: getDefaultInputDevice</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDefaultInputDevice(); };
-<a name="l00686"></a><a class="code" href="classRtAudio.html#a5">00686</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a5">RtAudio :: getDefaultOutputDevice</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDefaultOutputDevice(); };
-<a name="l00687"></a><a class="code" href="classRtAudio.html#a8">00687</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a8">RtAudio :: closeStream</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;closeStream(); };
-<a name="l00688"></a><a class="code" href="classRtAudio.html#a9">00688</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a9">RtAudio :: startStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;startStream(); };
-<a name="l00689"></a><a class="code" href="classRtAudio.html#a10">00689</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a10">RtAudio :: stopStream</a>( <span class="keywordtype">void</span> )  { <span class="keywordflow">return</span> rtapi_-&gt;stopStream(); };
-<a name="l00690"></a><a class="code" href="classRtAudio.html#a11">00690</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a11">RtAudio :: abortStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;abortStream(); };
-<a name="l00691"></a><a class="code" href="classRtAudio.html#a12">00691</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a12">RtAudio :: isStreamOpen</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;isStreamOpen(); };
-<a name="l00692"></a><a class="code" href="classRtAudio.html#a13">00692</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a13">RtAudio :: isStreamRunning</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;isStreamRunning(); };
-<a name="l00693"></a><a class="code" href="classRtAudio.html#a15">00693</a> <span class="keyword">inline</span> <span class="keywordtype">long</span> <a class="code" href="classRtAudio.html#a15">RtAudio :: getStreamLatency</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamLatency(); };
-<a name="l00694"></a><a class="code" href="classRtAudio.html#a14">00694</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="classRtAudio.html#a14">RtAudio :: getStreamTime</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamTime(); };
-<a name="l00695"></a><a class="code" href="classRtAudio.html#a16">00695</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a16">RtAudio :: showWarnings</a>( <span class="keywordtype">bool</span> value ) <span class="keywordflow">throw</span>() { rtapi_-&gt;showWarnings( value ); };
+<a name="l00682"></a><a class="code" href="classRtAudio.html#a2">00682</a> <span class="keyword">inline</span> <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> <a class="code" href="classRtAudio.html#a2">RtAudio :: getCurrentApi</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getCurrentApi(); }
+<a name="l00683"></a><a class="code" href="classRtAudio.html#a3">00683</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a3">RtAudio :: getDeviceCount</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceCount(); }
+<a name="l00684"></a><a class="code" href="classRtAudio.html#a4">00684</a> <span class="keyword">inline</span> <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> <a class="code" href="classRtAudio.html#a4">RtAudio :: getDeviceInfo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceInfo( device ); }
+<a name="l00685"></a><a class="code" href="classRtAudio.html#a6">00685</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a6">RtAudio :: getDefaultInputDevice</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDefaultInputDevice(); }
+<a name="l00686"></a><a class="code" href="classRtAudio.html#a5">00686</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a5">RtAudio :: getDefaultOutputDevice</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;getDefaultOutputDevice(); }
+<a name="l00687"></a><a class="code" href="classRtAudio.html#a8">00687</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a8">RtAudio :: closeStream</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;closeStream(); }
+<a name="l00688"></a><a class="code" href="classRtAudio.html#a9">00688</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a9">RtAudio :: startStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;startStream(); }
+<a name="l00689"></a><a class="code" href="classRtAudio.html#a10">00689</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a10">RtAudio :: stopStream</a>( <span class="keywordtype">void</span> )  { <span class="keywordflow">return</span> rtapi_-&gt;stopStream(); }
+<a name="l00690"></a><a class="code" href="classRtAudio.html#a11">00690</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a11">RtAudio :: abortStream</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;abortStream(); }
+<a name="l00691"></a><a class="code" href="classRtAudio.html#a12">00691</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a12">RtAudio :: isStreamOpen</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;isStreamOpen(); }
+<a name="l00692"></a><a class="code" href="classRtAudio.html#a13">00692</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classRtAudio.html#a13">RtAudio :: isStreamRunning</a>( <span class="keywordtype">void</span> ) throw() { <span class="keywordflow">return</span> rtapi_-&gt;isStreamRunning(); }
+<a name="l00693"></a><a class="code" href="classRtAudio.html#a15">00693</a> <span class="keyword">inline</span> <span class="keywordtype">long</span> <a class="code" href="classRtAudio.html#a15">RtAudio :: getStreamLatency</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamLatency(); }
+<a name="l00694"></a><a class="code" href="classRtAudio.html#a14">00694</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="classRtAudio.html#a14">RtAudio :: getStreamTime</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> rtapi_-&gt;getStreamTime(); }
+<a name="l00695"></a><a class="code" href="classRtAudio.html#a16">00695</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a16">RtAudio :: showWarnings</a>( <span class="keywordtype">bool</span> value ) <span class="keywordflow">throw</span>() { rtapi_-&gt;showWarnings( value ); }
 <a name="l00696"></a>00696 
 <a name="l00697"></a>00697 <span class="comment">// RtApi Subclass prototypes.</span>
 <a name="l00698"></a>00698 
 <a name="l00794"></a>00794 
 <a name="l00795"></a>00795   <span class="keyword">private</span>:
 <a name="l00796"></a>00796 
-<a name="l00797"></a>00797   <span class="keywordtype">bool</span> coInitialized_;
-<a name="l00798"></a>00798   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
-<a name="l00799"></a>00799                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00800"></a>00800                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00801"></a>00801                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options );
-<a name="l00802"></a>00802 };
-<a name="l00803"></a>00803 
-<a name="l00804"></a>00804 <span class="preprocessor">#endif</span>
-<a name="l00805"></a>00805 <span class="preprocessor"></span>
-<a name="l00806"></a>00806 <span class="preprocessor">#if defined(__WINDOWS_DS__)</span>
+<a name="l00797"></a>00797   std::vector&lt;RtAudio::DeviceInfo&gt; devices_;
+<a name="l00798"></a>00798   <span class="keywordtype">void</span> saveDeviceInfo( <span class="keywordtype">void</span> );
+<a name="l00799"></a>00799   <span class="keywordtype">bool</span> coInitialized_;
+<a name="l00800"></a>00800   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
+<a name="l00801"></a>00801                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00802"></a>00802                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00803"></a>00803                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options );
+<a name="l00804"></a>00804 };
+<a name="l00805"></a>00805 
+<a name="l00806"></a>00806 <span class="preprocessor">#endif</span>
 <a name="l00807"></a>00807 <span class="preprocessor"></span>
-<a name="l00808"></a>00808 <span class="keyword">class </span>RtApiDs: <span class="keyword">public</span> RtApi
-<a name="l00809"></a>00809 {
-<a name="l00810"></a>00810 <span class="keyword">public</span>:
-<a name="l00811"></a>00811 
-<a name="l00812"></a>00812   RtApiDs();
-<a name="l00813"></a>00813   ~RtApiDs();
-<a name="l00814"></a>00814   <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#w8w6">RtAudio::WINDOWS_DS</a>; };
-<a name="l00815"></a>00815   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
-<a name="l00816"></a>00816   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultOutputDevice( <span class="keywordtype">void</span> );
-<a name="l00817"></a>00817   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultInputDevice( <span class="keywordtype">void</span> );
-<a name="l00818"></a>00818   <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
-<a name="l00819"></a>00819   <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
-<a name="l00820"></a>00820   <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
-<a name="l00821"></a>00821   <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
-<a name="l00822"></a>00822   <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
-<a name="l00823"></a>00823   <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
-<a name="l00824"></a>00824 
-<a name="l00825"></a>00825   <span class="comment">// This function is intended for internal use only.  It must be</span>
-<a name="l00826"></a>00826   <span class="comment">// public because it is called by the internal callback handler,</span>
-<a name="l00827"></a>00827   <span class="comment">// which is not a member of RtAudio.  External use of this function</span>
-<a name="l00828"></a>00828   <span class="comment">// will most likely produce highly undesireable results!</span>
-<a name="l00829"></a>00829   <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
-<a name="l00830"></a>00830 
-<a name="l00831"></a>00831   <span class="keyword">private</span>:
+<a name="l00808"></a>00808 <span class="preprocessor">#if defined(__WINDOWS_DS__)</span>
+<a name="l00809"></a>00809 <span class="preprocessor"></span>
+<a name="l00810"></a>00810 <span class="keyword">class </span>RtApiDs: <span class="keyword">public</span> RtApi
+<a name="l00811"></a>00811 {
+<a name="l00812"></a>00812 <span class="keyword">public</span>:
+<a name="l00813"></a>00813 
+<a name="l00814"></a>00814   RtApiDs();
+<a name="l00815"></a>00815   ~RtApiDs();
+<a name="l00816"></a>00816   <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#w8w6">RtAudio::WINDOWS_DS</a>; };
+<a name="l00817"></a>00817   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
+<a name="l00818"></a>00818   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultOutputDevice( <span class="keywordtype">void</span> );
+<a name="l00819"></a>00819   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDefaultInputDevice( <span class="keywordtype">void</span> );
+<a name="l00820"></a>00820   <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00821"></a>00821   <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
+<a name="l00822"></a>00822   <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
+<a name="l00823"></a>00823   <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
+<a name="l00824"></a>00824   <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
+<a name="l00825"></a>00825   <span class="keywordtype">long</span> getStreamLatency( <span class="keywordtype">void</span> );
+<a name="l00826"></a>00826 
+<a name="l00827"></a>00827   <span class="comment">// This function is intended for internal use only.  It must be</span>
+<a name="l00828"></a>00828   <span class="comment">// public because it is called by the internal callback handler,</span>
+<a name="l00829"></a>00829   <span class="comment">// which is not a member of RtAudio.  External use of this function</span>
+<a name="l00830"></a>00830   <span class="comment">// will most likely produce highly undesireable results!</span>
+<a name="l00831"></a>00831   <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
 <a name="l00832"></a>00832 
-<a name="l00833"></a>00833   <span class="keywordtype">bool</span> coInitialized_;
-<a name="l00834"></a>00834   <span class="keywordtype">bool</span> buffersRolling;
-<a name="l00835"></a>00835   <span class="keywordtype">long</span> duplexPrerollBytes;
-<a name="l00836"></a>00836   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
-<a name="l00837"></a>00837                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00838"></a>00838                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00839"></a>00839                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options );
-<a name="l00840"></a>00840 };
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842 <span class="preprocessor">#endif</span>
-<a name="l00843"></a>00843 <span class="preprocessor"></span>
-<a name="l00844"></a>00844 <span class="preprocessor">#if defined(__LINUX_ALSA__)</span>
+<a name="l00833"></a>00833   <span class="keyword">private</span>:
+<a name="l00834"></a>00834 
+<a name="l00835"></a>00835   <span class="keywordtype">bool</span> coInitialized_;
+<a name="l00836"></a>00836   <span class="keywordtype">bool</span> buffersRolling;
+<a name="l00837"></a>00837   <span class="keywordtype">long</span> duplexPrerollBytes;
+<a name="l00838"></a>00838   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
+<a name="l00839"></a>00839                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00840"></a>00840                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00841"></a>00841                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options );
+<a name="l00842"></a>00842 };
+<a name="l00843"></a>00843 
+<a name="l00844"></a>00844 <span class="preprocessor">#endif</span>
 <a name="l00845"></a>00845 <span class="preprocessor"></span>
-<a name="l00846"></a>00846 <span class="keyword">class </span>RtApiAlsa: <span class="keyword">public</span> RtApi
-<a name="l00847"></a>00847 {
-<a name="l00848"></a>00848 <span class="keyword">public</span>:
-<a name="l00849"></a>00849 
-<a name="l00850"></a>00850   RtApiAlsa();
-<a name="l00851"></a>00851   ~RtApiAlsa();
-<a name="l00852"></a>00852   <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> getCurrentApi() { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#w8w1">RtAudio::LINUX_ALSA</a>; };
-<a name="l00853"></a>00853   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
-<a name="l00854"></a>00854   <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
-<a name="l00855"></a>00855   <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
-<a name="l00856"></a>00856   <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
-<a name="l00857"></a>00857   <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
-<a name="l00858"></a>00858   <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860   <span class="comment">// This function is intended for internal use only.  It must be</span>
-<a name="l00861"></a>00861   <span class="comment">// public because it is called by the internal callback handler,</span>
-<a name="l00862"></a>00862   <span class="comment">// which is not a member of RtAudio.  External use of this function</span>
-<a name="l00863"></a>00863   <span class="comment">// will most likely produce highly undesireable results!</span>
-<a name="l00864"></a>00864   <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
-<a name="l00865"></a>00865 
-<a name="l00866"></a>00866   <span class="keyword">private</span>:
+<a name="l00846"></a>00846 <span class="preprocessor">#if defined(__LINUX_ALSA__)</span>
+<a name="l00847"></a>00847 <span class="preprocessor"></span>
+<a name="l00848"></a>00848 <span class="keyword">class </span>RtApiAlsa: <span class="keyword">public</span> RtApi
+<a name="l00849"></a>00849 {
+<a name="l00850"></a>00850 <span class="keyword">public</span>:
+<a name="l00851"></a>00851 
+<a name="l00852"></a>00852   RtApiAlsa();
+<a name="l00853"></a>00853   ~RtApiAlsa();
+<a name="l00854"></a>00854   <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> getCurrentApi() { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#w8w1">RtAudio::LINUX_ALSA</a>; };
+<a name="l00855"></a>00855   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
+<a name="l00856"></a>00856   <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00857"></a>00857   <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
+<a name="l00858"></a>00858   <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
+<a name="l00859"></a>00859   <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
+<a name="l00860"></a>00860   <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
+<a name="l00861"></a>00861 
+<a name="l00862"></a>00862   <span class="comment">// This function is intended for internal use only.  It must be</span>
+<a name="l00863"></a>00863   <span class="comment">// public because it is called by the internal callback handler,</span>
+<a name="l00864"></a>00864   <span class="comment">// which is not a member of RtAudio.  External use of this function</span>
+<a name="l00865"></a>00865   <span class="comment">// will most likely produce highly undesireable results!</span>
+<a name="l00866"></a>00866   <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
 <a name="l00867"></a>00867 
-<a name="l00868"></a>00868   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
-<a name="l00869"></a>00869                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00870"></a>00870                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00871"></a>00871                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options );
-<a name="l00872"></a>00872 };
-<a name="l00873"></a>00873 
-<a name="l00874"></a>00874 <span class="preprocessor">#endif</span>
-<a name="l00875"></a>00875 <span class="preprocessor"></span>
-<a name="l00876"></a>00876 <span class="preprocessor">#if defined(__LINUX_OSS__)</span>
+<a name="l00868"></a>00868   <span class="keyword">private</span>:
+<a name="l00869"></a>00869 
+<a name="l00870"></a>00870   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
+<a name="l00871"></a>00871                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00872"></a>00872                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00873"></a>00873                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options );
+<a name="l00874"></a>00874 };
+<a name="l00875"></a>00875 
+<a name="l00876"></a>00876 <span class="preprocessor">#endif</span>
 <a name="l00877"></a>00877 <span class="preprocessor"></span>
-<a name="l00878"></a>00878 <span class="keyword">class </span>RtApiOss: <span class="keyword">public</span> RtApi
-<a name="l00879"></a>00879 {
-<a name="l00880"></a>00880 <span class="keyword">public</span>:
-<a name="l00881"></a>00881 
-<a name="l00882"></a>00882   RtApiOss();
-<a name="l00883"></a>00883   ~RtApiOss();
-<a name="l00884"></a>00884   <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> getCurrentApi() { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#w8w2">RtAudio::LINUX_OSS</a>; };
-<a name="l00885"></a>00885   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
-<a name="l00886"></a>00886   <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
-<a name="l00887"></a>00887   <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
-<a name="l00888"></a>00888   <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
-<a name="l00889"></a>00889   <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
-<a name="l00890"></a>00890   <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
-<a name="l00891"></a>00891 
-<a name="l00892"></a>00892   <span class="comment">// This function is intended for internal use only.  It must be</span>
-<a name="l00893"></a>00893   <span class="comment">// public because it is called by the internal callback handler,</span>
-<a name="l00894"></a>00894   <span class="comment">// which is not a member of RtAudio.  External use of this function</span>
-<a name="l00895"></a>00895   <span class="comment">// will most likely produce highly undesireable results!</span>
-<a name="l00896"></a>00896   <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
-<a name="l00897"></a>00897 
-<a name="l00898"></a>00898   <span class="keyword">private</span>:
+<a name="l00878"></a>00878 <span class="preprocessor">#if defined(__LINUX_OSS__)</span>
+<a name="l00879"></a>00879 <span class="preprocessor"></span>
+<a name="l00880"></a>00880 <span class="keyword">class </span>RtApiOss: <span class="keyword">public</span> RtApi
+<a name="l00881"></a>00881 {
+<a name="l00882"></a>00882 <span class="keyword">public</span>:
+<a name="l00883"></a>00883 
+<a name="l00884"></a>00884   RtApiOss();
+<a name="l00885"></a>00885   ~RtApiOss();
+<a name="l00886"></a>00886   <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> getCurrentApi() { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#w8w2">RtAudio::LINUX_OSS</a>; };
+<a name="l00887"></a>00887   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> );
+<a name="l00888"></a>00888   <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device );
+<a name="l00889"></a>00889   <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> );
+<a name="l00890"></a>00890   <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> );
+<a name="l00891"></a>00891   <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> );
+<a name="l00892"></a>00892   <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> );
+<a name="l00893"></a>00893 
+<a name="l00894"></a>00894   <span class="comment">// This function is intended for internal use only.  It must be</span>
+<a name="l00895"></a>00895   <span class="comment">// public because it is called by the internal callback handler,</span>
+<a name="l00896"></a>00896   <span class="comment">// which is not a member of RtAudio.  External use of this function</span>
+<a name="l00897"></a>00897   <span class="comment">// will most likely produce highly undesireable results!</span>
+<a name="l00898"></a>00898   <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">void</span> );
 <a name="l00899"></a>00899 
-<a name="l00900"></a>00900   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
-<a name="l00901"></a>00901                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00902"></a>00902                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00903"></a>00903                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options );
-<a name="l00904"></a>00904 };
-<a name="l00905"></a>00905 
-<a name="l00906"></a>00906 <span class="preprocessor">#endif</span>
-<a name="l00907"></a>00907 <span class="preprocessor"></span>
-<a name="l00908"></a>00908 <span class="preprocessor">#if defined(__RTAUDIO_DUMMY__)</span>
+<a name="l00900"></a>00900   <span class="keyword">private</span>:
+<a name="l00901"></a>00901 
+<a name="l00902"></a>00902   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
+<a name="l00903"></a>00903                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00904"></a>00904                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00905"></a>00905                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options );
+<a name="l00906"></a>00906 };
+<a name="l00907"></a>00907 
+<a name="l00908"></a>00908 <span class="preprocessor">#endif</span>
 <a name="l00909"></a>00909 <span class="preprocessor"></span>
-<a name="l00910"></a>00910 <span class="keyword">class </span>RtApiDummy: <span class="keyword">public</span> RtApi
-<a name="l00911"></a>00911 {
-<a name="l00912"></a>00912 <span class="keyword">public</span>:
-<a name="l00913"></a>00913 
-<a name="l00914"></a>00914   RtApiDummy() { errorText_ = <span class="stringliteral">"RtApiDummy: This class provides no functionality."</span>; error( <a class="code" href="classRtError.html#w11w0">RtError::WARNING</a> ); };
-<a name="l00915"></a>00915   <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#w8w7">RtAudio::RTAUDIO_DUMMY</a>; };
-<a name="l00916"></a>00916   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> 0; };
-<a name="l00917"></a>00917   <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) { <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> info; <span class="keywordflow">return</span> info; };
-<a name="l00918"></a>00918   <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> ) {};
-<a name="l00919"></a>00919   <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> ) {};
-<a name="l00920"></a>00920   <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> ) {};
-<a name="l00921"></a>00921   <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> ) {};
-<a name="l00922"></a>00922 
-<a name="l00923"></a>00923   <span class="keyword">private</span>:
+<a name="l00910"></a>00910 <span class="preprocessor">#if defined(__RTAUDIO_DUMMY__)</span>
+<a name="l00911"></a>00911 <span class="preprocessor"></span>
+<a name="l00912"></a>00912 <span class="keyword">class </span>RtApiDummy: <span class="keyword">public</span> RtApi
+<a name="l00913"></a>00913 {
+<a name="l00914"></a>00914 <span class="keyword">public</span>:
+<a name="l00915"></a>00915 
+<a name="l00916"></a>00916   RtApiDummy() { errorText_ = <span class="stringliteral">"RtApiDummy: This class provides no functionality."</span>; error( <a class="code" href="classRtError.html#w11w0">RtError::WARNING</a> ); };
+<a name="l00917"></a>00917   <a class="code" href="classRtAudio.html#w8">RtAudio::Api</a> getCurrentApi( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> <a class="code" href="classRtAudio.html#w8w7">RtAudio::RTAUDIO_DUMMY</a>; };
+<a name="l00918"></a>00918   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getDeviceCount( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> 0; };
+<a name="l00919"></a>00919   <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> getDeviceInfo( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device ) { <a class="code" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a> info; <span class="keywordflow">return</span> info; };
+<a name="l00920"></a>00920   <span class="keywordtype">void</span> closeStream( <span class="keywordtype">void</span> ) {};
+<a name="l00921"></a>00921   <span class="keywordtype">void</span> startStream( <span class="keywordtype">void</span> ) {};
+<a name="l00922"></a>00922   <span class="keywordtype">void</span> stopStream( <span class="keywordtype">void</span> ) {};
+<a name="l00923"></a>00923   <span class="keywordtype">void</span> abortStream( <span class="keywordtype">void</span> ) {};
 <a name="l00924"></a>00924 
-<a name="l00925"></a>00925   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
-<a name="l00926"></a>00926                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
-<a name="l00927"></a>00927                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
-<a name="l00928"></a>00928                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; };
-<a name="l00929"></a>00929 };
-<a name="l00930"></a>00930 
-<a name="l00931"></a>00931 <span class="preprocessor">#endif</span>
-<a name="l00932"></a>00932 <span class="preprocessor"></span>
+<a name="l00925"></a>00925   <span class="keyword">private</span>:
+<a name="l00926"></a>00926 
+<a name="l00927"></a>00927   <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels, 
+<a name="l00928"></a>00928                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate,
+<a name="l00929"></a>00929                         <a class="code" href="RtAudio_8h.html#a1">RtAudioFormat</a> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bufferSize,
+<a name="l00930"></a>00930                         <a class="code" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a> *options ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; };
+<a name="l00931"></a>00931 };
+<a name="l00932"></a>00932 
 <a name="l00933"></a>00933 <span class="preprocessor">#endif</span>
 <a name="l00934"></a>00934 <span class="preprocessor"></span>
-<a name="l00935"></a>00935 <span class="comment">// Indentation settings for Vim and Emacs</span>
-<a name="l00936"></a>00936 <span class="comment">//</span>
-<a name="l00937"></a>00937 <span class="comment">// Local Variables:</span>
-<a name="l00938"></a>00938 <span class="comment">// c-basic-offset: 2</span>
-<a name="l00939"></a>00939 <span class="comment">// indent-tabs-mode: nil</span>
-<a name="l00940"></a>00940 <span class="comment">// End:</span>
-<a name="l00941"></a>00941 <span class="comment">//</span>
-<a name="l00942"></a>00942 <span class="comment">// vim: et sts=2 sw=2</span>
+<a name="l00935"></a>00935 <span class="preprocessor">#endif</span>
+<a name="l00936"></a>00936 <span class="preprocessor"></span>
+<a name="l00937"></a>00937 <span class="comment">// Indentation settings for Vim and Emacs</span>
+<a name="l00938"></a>00938 <span class="comment">//</span>
+<a name="l00939"></a>00939 <span class="comment">// Local Variables:</span>
+<a name="l00940"></a>00940 <span class="comment">// c-basic-offset: 2</span>
+<a name="l00941"></a>00941 <span class="comment">// indent-tabs-mode: nil</span>
+<a name="l00942"></a>00942 <span class="comment">// End:</span>
+<a name="l00943"></a>00943 <span class="comment">//</span>
+<a name="l00944"></a>00944 <span class="comment">// vim: et sts=2 sw=2</span>
 </pre></div><HR>
 
 <table><tr><td><img src="../images/mcgill.gif" width=165></td>
index 983f0630be55860e6a87aba0ac05c40e8ac6ca8c..5692bfe8d82a1a435e7934b81a273740e0b705bf 100644 (file)
@@ -20,9 +20,11 @@ The Apple CoreAudio API is designed to use a separate callback procedure for eac
 It is not possible to have multiple instances of <a class="el" href="classRtAudio.html">RtAudio</a> accessing the same CoreAudio device.<p>
 The <a class="el" href="classRtAudio.html">RtAudio</a> Jack support can be compiled on Macintosh OS-X systems, as well as in Linux.<h2><a class="anchor" name="windowsds">
 Windows (DirectSound):</a></h2>
+The <code>configure</code> script provides support for the MinGW compiler. DirectSound support is specified with the "--with-ds" flag.<p>
 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, especially since <a class="el" href="classRtAudio.html">RtAudio</a> version 3.0.2. Input audio latency still tends to be bad but better since version 3.0.2. <a class="el" href="classRtAudio.html">RtAudio</a> was originally developed with Visual C++ version 6.0 but has been tested with .NET.<p>
 The DirectSound version of <a class="el" href="classRtAudio.html">RtAudio</a> can be compiled with or without the UNICODE preprocessor definition.<h2><a class="anchor" name="windowsasio">
 Windows (ASIO):</a></h2>
+ASIO support using MinGW and the <code>configure</code> script is specified with the "--with-asio" flag.<p>
 The Steinberg ASIO audio 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#a7">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; iasiothiscallresolver.h,cpp</code>. The Visual C++ projects found in <code>/tests/Windows/</code> compile both ASIO and DirectSound support.<p>
 The Steinberg provided <code>asiolist</code> class does not compile when the preprocessor definition UNICODE is defined. Note that this could be an issue when using <a class="el" href="classRtAudio.html">RtAudio</a> with Qt, though Qt programs appear to compile without the UNICODE definition (try <code>DEFINES -= UNICODE</code> in your .pro file). <a class="el" href="classRtAudio.html">RtAudio</a> with ASIO support has been tested using the MinGW compiler under Windows XP, as well as in the Visual Studio environment. <HR>
index 9346457b36933d22a386e49f0c03c2e55f3b20dd..b83348fa67e8ad90a47bb0e854874bb825104dcf 100644 (file)
 <!-- Generated by Doxygen 1.4.4 -->
 <h1><a class="anchor" name="compiling">Debugging &amp; Compiling</a></h1><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, make sure to pass a value of <em>true</em> to the <a class="el" href="classRtAudio.html#a16">RtAudio::showWarnings()</a> function (this is the default setting). A variety of warning messages will be displayed which may help in determining the problem. Also, try using the programs included in the <code>tests</code> directory. The program <code>probe</code> displays the queried capabilities of all hardware devices found for all APIs compiled. When using the ALSA API, further information can be displayed by defining the preprocessor definition __RTAUDIO_DEBUG__.<h2><a class="anchor" name="compile">
+If you are having problems getting <a class="el" href="classRtAudio.html">RtAudio</a> to run on your system, make sure to pass a value of <em>true</em> to the <a class="el" href="classRtAudio.html#a16">RtAudio::showWarnings()</a> function (this is the default setting). A variety of warning messages will be displayed which may help in determining the problem. Also, try using the programs included in the <code>tests</code> directory. The program <code>audioprobe</code> displays the queried capabilities of all hardware devices found for all APIs compiled. When using the ALSA API, further information can be displayed by defining the preprocessor definition __RTAUDIO_DEBUG__.<h2><a class="anchor" name="compile">
 Compiling</a></h2>
 In order to compile <a class="el" href="classRtAudio.html">RtAudio</a> for a specific OS and audio API, it is necessary to supply the appropriate preprocessor definition and library within the compiler statement: <p>
 <table border="2" cols="5" width="100%" cellspacing="3" cellpadding="3">
 <tr bgcolor="beige">
 <td width="5%"><b>OS:</b> </td><td width="5%"><b>Audio API:</b> </td><td width="5%"><b>C++ Class:</b> </td><td width="5%"><b>Preprocessor Definition:</b> </td><td width="5%"><b>Library or Framework:</b> </td><td><b>Example Compiler Statement:</b>  </td></tr>
 <tr>
-<td>Linux </td><td>ALSA </td><td>RtApiAlsa </td><td>__LINUX_ALSA__ </td><td><code>asound, pthread</code> </td><td><code>g++ -Wall -D__LINUX_ALSA__ -o probe probe.cpp RtAudio.cpp -lasound -lpthread</code>  </td></tr>
+<td>Linux </td><td>ALSA </td><td>RtApiAlsa </td><td>__LINUX_ALSA__ </td><td><code>asound, pthread</code> </td><td><code>g++ -Wall -D__LINUX_ALSA__ -o audioprobe audioprobe.cpp RtAudio.cpp -lasound -lpthread</code>  </td></tr>
 <tr>
-<td>Linux </td><td>OSS </td><td>RtApiOss </td><td>__LINUX_OSS__ </td><td><code>pthread</code> </td><td><code>g++ -Wall -D__LINUX_OSS__ -o probe probe.cpp RtAudio.cpp -lpthread</code>  </td></tr>
+<td>Linux </td><td>OSS </td><td>RtApiOss </td><td>__LINUX_OSS__ </td><td><code>pthread</code> </td><td><code>g++ -Wall -D__LINUX_OSS__ -o audioprobe audioprobe.cpp RtAudio.cpp -lpthread</code>  </td></tr>
 <tr>
-<td>Linux or Macintosh OS-X </td><td>Jack Audio Server </td><td>RtApiJack </td><td>__UNIX_JACK__ </td><td><code>jack, pthread</code> </td><td><code>g++ -Wall -D__UNIX_JACK__ -o probe probe.cpp RtAudio.cpp `pkg-config --cflags --libs jack` -lpthread</code> <p>
+<td>Linux or Macintosh OS-X </td><td>Jack Audio Server </td><td>RtApiJack </td><td>__UNIX_JACK__ </td><td><code>jack, pthread</code> </td><td><code>g++ -Wall -D__UNIX_JACK__ -o audioprobe audioprobe.cpp RtAudio.cpp `pkg-config --cflags --libs jack` -lpthread</code> <p>
 </td></tr>
 <tr>
-<td>Macintosh OS-X </td><td>CoreAudio </td><td>RtApiCore </td><td>__MACOSX_CORE__ </td><td><code>pthread, CoreAudio</code> </td><td><code>g++ -Wall -D__MACOSX_CORE__ -o probe probe.cpp RtAudio.cpp -framework CoreAudio -lpthread</code>  </td></tr>
+<td>Macintosh OS-X </td><td>CoreAudio </td><td>RtApiCore </td><td>__MACOSX_CORE__ </td><td><code>pthread, CoreAudio</code> </td><td><code>g++ -Wall -D__MACOSX_CORE__ -o audioprobe audioprobe.cpp RtAudio.cpp -framework CoreAudio -lpthread</code>  </td></tr>
 <tr>
 <td>Windows </td><td>Direct Sound </td><td>RtApiDs </td><td>__WINDOWS_DS__ </td><td><code>dsound.lib (ver. 5.0 or higher), multithreaded</code> </td><td><em>compiler specific</em>  </td></tr>
 <tr>
 <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-source.html">RtError.h</a></code>, and <code>RtAudio.cpp</code> all exist in the same directory. <HR>
+The example compiler statements above could be used to compile the <code>audioprobe.cpp</code> example file, assuming that <code>audioprobe.cpp</code>, <code><a class="el" href="RtAudio_8h.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. <HR>
 
 <table><tr><td><img src="../images/mcgill.gif" width=165></td>
   <td>&copy;2001-2007 Gary P. Scavone, McGill University. All Rights Reserved.<br>Maintained by <a href="http://www.music.mcgill.ca/~gary/">Gary P. Scavone</a>.</td></tr>
index d973fcd18c10b81d544bac54050dca8d13498a7c..b8207650b86ce73e73372be5f8c8920644d7e6ce 100644 (file)
@@ -11,7 +11,7 @@
 <!-- Generated by Doxygen 1.4.4 -->
 <h1>The <a class="el" href="classRtAudio.html">RtAudio</a> Home Page </h1>
 <p>
-<h3 align="center">4.0 </h3><a class="el" href="classRtAudio.html">RtAudio</a> is a set of C++ classes that provide a common API (Application Programming Interface) for realtime audio input/output across Linux, Macintosh OS-X and Windows (DirectSound and ASIO) operating systems. <a class="el" href="classRtAudio.html">RtAudio</a> significantly simplifies the process of interacting with computer audio hardware. It was designed with the following objectives:<p>
+<h3 align="center">4.0.3 </h3><a class="el" href="classRtAudio.html">RtAudio</a> is a set of C++ classes that provide a common API (Application Programming Interface) for realtime audio input/output across Linux, Macintosh OS-X and Windows (DirectSound and ASIO) operating systems. <a class="el" href="classRtAudio.html">RtAudio</a> significantly simplifies the process of interacting with computer audio hardware. It was designed with the following objectives:<p>
 <ul>
 <li>
 object-oriented C++ design </li>
@@ -33,12 +33,12 @@ automatic internal conversion for data format, channel number compensation, (de)
 <p>
 <a class="el" href="classRtAudio.html">RtAudio</a> incorporates the concept of audio streams, which represent audio output (playback) and/or input (recording). Available audio devices and their capabilities can be enumerated and then specified when opening a stream. Where applicable, multiple API support can be compiled and a particular API specified when creating an <a class="el" href="classRtAudio.html">RtAudio</a> instance. See the <a class="el" href="apinotes.html">API Notes</a> section for information specific to each of the supported audio APIs.<h2><a class="anchor" name="whatsnew">
 What's New (Version 4.0)</a></h2>
-<a class="el" href="classRtAudio.html">RtAudio</a> V4 represents a significant rewrite of the code and includes a number of API and functionality changes form previous versions. A partial list of the changes includes:<ul>
+<a class="el" href="classRtAudio.html">RtAudio</a> V4 represents a significant rewrite of the code and includes a number of API and functionality changes from previous versions. A partial list of the changes includes:<ul>
 <li>new support for non-interleaved user data</li><li>additional input/output parameter specifications, including channel offset</li><li>new support for dynamic connection of devices</li><li>new support for stream time</li><li>revised callback arguments, including separate input and output buffer arguments</li><li>revised C++ exception handling</li><li>updated support for OSS version 4.0</li><li>discontinued support of blocking functionality</li><li>discontinued support of SGI</li></ul>
 <p>
-Devices are now re-enumerated every time the <a class="el" href="classRtAudio.html#a3">RtAudio::getDeviceCount()</a>, <a class="el" href="classRtAudio.html#a4">RtAudio::getDeviceInfo()</a>, and <a class="el" href="classRtAudio.html#a7">RtAudio::openStream()</a> functions are called. This allows for the proper identification of hot-pluggable (USB, Firewire, ...) devices while a given <a class="el" href="classRtAudio.html">RtAudio</a> instance exists.<h2><a class="anchor" name="download">
+Devices are now re-enumerated every time the <a class="el" href="classRtAudio.html#a3">RtAudio::getDeviceCount()</a>, <a class="el" href="classRtAudio.html#a4">RtAudio::getDeviceInfo()</a>, and <a class="el" href="classRtAudio.html#a7">RtAudio::openStream()</a> functions are called. This allows for the proper identification of hot-pluggable (USB, Firewire, ...) devices that are connected after an <a class="el" href="classRtAudio.html">RtAudio</a> instance is created.<h2><a class="anchor" name="download">
 Download</a></h2>
-Latest Release (21 August 2007): <a href="http://music.mcgill.ca/~gary/rtaudio/release/rtaudio-4.0.2.tar.gz">Version 4.0.2</a><h2><a class="anchor" name="documentation">
+Latest Release (7 December 2007): <a href="http://music.mcgill.ca/~gary/rtaudio/release/rtaudio-4.0.3.tar.gz">Version 4.0.3</a><h2><a class="anchor" name="documentation">
 Documentation Links</a></h2>
 <ol type=1>
 <li><a class="el" href="errors.html">Error Handling</a></li><li><a class="el" href="probe.html">Probing Device Capabilities</a></li><li><a class="el" href="settings.html">Device Settings</a></li><li><a class="el" href="playback.html">Playback</a></li><li><a class="el" href="recording.html">Recording</a></li><li><a class="el" href="duplex.html">Duplex Mode</a></li><li><a class="el" href="multi.html">Using Simultaneous Multiple APIs</a></li><li><a class="el" href="compiling.html">Debugging &amp; Compiling</a></li><li><a class="el" href="apinotes.html">API Notes</a></li><li><a class="el" href="acknowledge.html">Acknowledgements</a></li><li><a class="el" href="license.html">License</a></li><li><a href="bugs.html">Bug Tracker</a></li><li><a href="updates.html">Possible Updates</a></li><li><a href="http://sourceforge.net/projects/rtaudio">RtAudio at SourceForge</a> </li></ol>
index 245a7c31927846fc106dda4f540f4169783052f2..a8d6befb09abbb46a8556e52f1088acc38f4fab9 100644 (file)
@@ -10,7 +10,7 @@
 <HR>
 <!-- Generated by Doxygen 1.4.4 -->
 <h1><a class="anchor" name="probe">Probing Device Capabilities</a></h1>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 class="fragment"><span class="comment">// probe.cpp</span>
+<div class="fragment"><pre class="fragment"><span class="comment">// audioprobe.cpp</span>
 
 <span class="preprocessor">#include &lt;iostream&gt;</span>
 <span class="preprocessor">#include "<a class="code" href="RtAudio_8h.html">RtAudio.h</a>"</span>