From 935fb96d2e241f45211846d65a3fc6e32c36c468 Mon Sep 17 00:00:00 2001
From: Florent Berthaut <florent.berthaut@univ-lille.fr>
Date: Thu, 21 Jul 2022 00:29:52 +0200
Subject: [PATCH] Fixed linux version

---
 .gitattributes              |   1 +
 .gitignore                  |   1 +
 GdpdExample/Main.tscn       |  97 +++--
 GdpdExample/icon.png.import |   1 +
 GdpdExample/patch1.pd       | Bin 665 -> 849 bytes
 GdpdExample/patch2.pd       | Bin 549 -> 773 bytes
 GdpdExample/project.godot   |   1 -
 README.md                   |   7 +-
 SConstruct                  |  10 +-
 src/gdpd.hpp                |   1 +
 src/rtaudio/RtAudio.cpp     | 833 +++++++++++++++++++++++++-----------
 src/rtaudio/RtAudio.h       | 270 ++++++------
 src/rtaudio/RtAudio.os      | Bin 114943 -> 77320 bytes
 13 files changed, 801 insertions(+), 421 deletions(-)
 create mode 100755 .gitattributes

diff --git a/.gitattributes b/.gitattributes
new file mode 100755
index 0000000..77510b2
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*.pd binary
diff --git a/.gitignore b/.gitignore
index ae3c406..71d246e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 *.o
 *.so
 *.os
+*.import
diff --git a/GdpdExample/Main.tscn b/GdpdExample/Main.tscn
index 9c9c91d..8899168 100644
--- a/GdpdExample/Main.tscn
+++ b/GdpdExample/Main.tscn
@@ -3,19 +3,15 @@
 [sub_resource type="GDScript" id=1]
 script/source = "extends Control
 
-var _gdpd
-
-var _patch = 0
+onready var _gdpd = load(\"res://addons/gdpd/bin/gdpd.gdns\").new()
 
 func _ready():
-	_gdpd = load(\"res://addons/gdpd/bin/gdpd.gdns\").new()
 	pass
 	
 func _process(delta):
 	while _gdpd.has_message() :
-		print(\"got msg\")
 		var msg = _gdpd.get_next()
-		print(msg)
+		print(\"got message from pd \", msg)
 
 func _load_patch(pd_patch) :
 	#separate file name from directory
@@ -26,27 +22,44 @@ func _load_patch(pd_patch) :
 	_gdpd.openfile(patch_name, patch_dir)
 
 func _on_Start_pressed() :	
+	#retrieve the list of available input and outputs
 	var inps = _gdpd.get_available_input_devices()
 	var outs = _gdpd.get_available_output_devices()
+	
+	#initialise the first ones
 	_gdpd.init_devices(inps[0], outs[0])
 	
 	#the patch path should be the absolute one
 	_load_patch(ProjectSettings.globalize_path(\"res://patch1.pd\"))
 	_load_patch(ProjectSettings.globalize_path(\"res://patch2.pd\"))
 	
+	#send message to [receive from_godot] with one symbol
 	_gdpd.start_message(1)
-	_gdpd.add_symbol(\"from godot\")
-	_gdpd.finish_list(\"blup\")
-
-	_gdpd.subscribe(\"toBfWeb\")
+	_gdpd.add_symbol(\"hello\")
+	_gdpd.finish_list(\"from_godot\")
 	
-func _on_Stop_pressed():
+	#listen to messages sent with [send to_godot]
+	_gdpd.subscribe(\"to_godot\")
 	
+func _on_Stop_pressed():
 	_gdpd.closefile(\"patch1.pd\")
 	_gdpd.closefile(\"patch2.pd\")
 	_gdpd.stop()
 
+func _on_HSlider_value_changed(value):
+	#send message to [receive from_godot] with three elements
+	_gdpd.start_message(3)
+	_gdpd.add_symbol(\"patch1\")
+	_gdpd.add_symbol(\"pitch\")
+	_gdpd.add_float(value)
+	_gdpd.finish_list(\"from_godot\")
 
+func _on_HSlider2_value_changed(value):
+	_gdpd.start_message(3)
+	_gdpd.add_symbol(\"patch2\")
+	_gdpd.add_symbol(\"pitch\")
+	_gdpd.add_float(value)
+	_gdpd.finish_list(\"from_godot\")
 "
 
 [node name="Control" type="Control"]
@@ -58,28 +71,60 @@ __meta__ = {
 }
 
 [node name="Stop" type="Button" parent="."]
-margin_left = 73.0
-margin_top = 198.0
-margin_right = 176.0
-margin_bottom = 244.0
+margin_left = 213.0
+margin_top = 83.0
+margin_right = 316.0
+margin_bottom = 129.0
 text = "Stop"
 __meta__ = {
 "_edit_use_anchors_": false
 }
 
 [node name="Start" type="Button" parent="."]
-margin_left = 83.0
-margin_top = 93.0
-margin_right = 187.0
-margin_bottom = 144.0
+margin_left = 73.0
+margin_top = 83.0
+margin_right = 177.0
+margin_bottom = 134.0
 text = "Start"
 
-[node name="Load" type="Button" parent="."]
-margin_left = 103.0
-margin_top = 159.0
-margin_right = 145.0
-margin_bottom = 179.0
-text = "Load"
+[node name="HSlider" type="HSlider" parent="."]
+margin_left = 73.0
+margin_top = 193.0
+margin_right = 406.0
+margin_bottom = 209.0
+max_value = 12.0
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Label" type="Label" parent="."]
+margin_left = 73.0
+margin_top = 170.0
+margin_right = 113.0
+margin_bottom = 184.0
+text = "Send pitch to patch1"
+
+[node name="HSlider2" type="HSlider" parent="."]
+margin_left = 73.0
+margin_top = 275.0
+margin_right = 406.0
+margin_bottom = 291.0
+max_value = 12.0
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Label2" type="Label" parent="."]
+margin_left = 73.0
+margin_top = 246.0
+margin_right = 204.0
+margin_bottom = 260.0
+text = "Send pitch to patch2"
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
 [connection signal="pressed" from="Stop" to="." method="_on_Stop_pressed"]
 [connection signal="pressed" from="Start" to="." method="_on_Start_pressed"]
-[connection signal="pressed" from="Load" to="." method="_on_Load_pressed"]
+[connection signal="value_changed" from="HSlider" to="." method="_on_HSlider_value_changed"]
+[connection signal="value_changed" from="HSlider2" to="." method="_on_HSlider2_value_changed"]
diff --git a/GdpdExample/icon.png.import b/GdpdExample/icon.png.import
index 96cbf46..a4c02e6 100644
--- a/GdpdExample/icon.png.import
+++ b/GdpdExample/icon.png.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/GdpdExample/patch1.pd b/GdpdExample/patch1.pd
index 3c3f092e53e168b62056dfd4cffeee438ef2843c..295f29d7515db9dca6c5e2786ea944188d612441 100644
GIT binary patch
literal 849
zcmY%PQ%FwCD@!a^Fi<cyRIoHPQ!p_zRWLNN=2DJO$WO{rFflh)Ff=h%C{`#)K@qex
zQpm|qOi4=2O9zYR7N<iL8=5Jk6c;EMf<-|_7#Wx=7#o-?q$DQSp$HmT7%OPiDH!M>
zsWn$Hw?s7<Y=pUjp@FeNZfZ$UzJj5FfdRrCa|J_FV}+c|;u3|#f`ZgMgeyVznp-Lq
zDWnzU=f<b!r{tHQXfrogC{`%RN0%`$S1>d-RVd0YElE`<NGwUtKysdexq^|AsX}f^
zej36okPZVAs1A@zP^HWapi%{yCCM3JIZ$93nJX9?SwL-2$Vkn}$yWqRmZVmcC>WY3
zm>MV)r{<+7<faxEC#I(=l;kTQJONf@WMHabVxdr!nw*+hmI_x0@-LE7Z~%fFZeXC0
zT2WA>pps^&ZDI<x3od7BsgPfsT&G}Y2npNd{Jgx><Prr#1p@^m1ynI31p^QS8vs*h
z0!l$>>L6l}(1WQnRWML6LsMs_U;y$jswL(M1`3vF3N1hi(OqK*a*Uxdno>iM!woIa
jML|vnX+Uv1NV9^WIl5Yq^DzWL&H|Z@Y5>S#CLsL)wg=%$

literal 665
zcmY%PQ%FwCD@!a^Fj6owvrsTMwoouOHc&7$vgT5bP{>cpQZP0#QLr#lC{`#)K@l@H
zRLIFsOi4=2O9zYR7N>*Nnwl!46c;EMf(1ba7@8U>7#f=>q$DQSp$J--DdZO?*D08o
z7@&w78X72Q)hQV0A<Qr`F;K8Xvk+vqk%^&#p^2eFZfZ$UzJj5F0mLMbTR>V2%`6lO
z5=)XZ3>6>}AU&pLCJKg@h6)8mnRz8pX}J9+mWB#O<_bj$Njaqja8XkOGm!OIbr>02
zDj1oXDikY}<U6H>rzRnEnOZ6snph|lVaR~pW@)UDlUZD%kXTTVnuiEmkPA!=6-pG6
z6d*<==jY|6CYLA}Di|mjLHz*}Gg2@BL9mrDF%ty?1yeM2rV0iM##qH5VGPr2reL68
zj;79B!9c+RP0T{UK*7)iP0$eJ7DIHa4UH8H6fDt|f*fgx?i)i>1w#cxa9jZZ{xGU@

diff --git a/GdpdExample/patch2.pd b/GdpdExample/patch2.pd
index 099314ff1570d8d522778c1d39ceece6d758e04f..e4495276a278f03fd8fe1962354f243a9d8667e1 100644
GIT binary patch
literal 773
zcmY%PQ%FwCD@!a^Ff=w(Ff}$*urxJOFflV#Ff_8}QjSo_Ps&m-HZoQ)G&5HyRwzh8
z6*M$c$jMJkNlMI12TSA@r$bbm7$~F^7bqBlML}j58k;B>8(Ju&BqrCP2pU<MC}`Cw
z80aC?8ks6sq8SV_!U*IjV};z*lA?SCLjwZ?xH%vhb5n(!%;FM-#Dap<JcKhr_8J-(
zDikTC73Jr~r{|~SmmupiGB8vqRw&6wlL2WnGPYF6Ey+)VD+dW0np!Fp<(HPEDikD^
zBxgVZ3FK{%8%zzLq6!(QIXU^L8ZAs<8Z%3hGf?G>%%E~0FQ7;n8JZ}hRumK|sH7Qc
zn^>UAnHwnN7bn*#7@9)DA~`=VFEzPD!BD|K!AJpB%t*li1i=Qt)R`z4C>W!ugNQ*Q
z1E$VY!9c+bO`Vy7fr25rCFTkS3YKUJEkFuQ&;$)Zjxj_x(-7ovLv$B`Y*8>rH^3NV
btSP!E$n_voP`qgfazDsMR8f!*!0rM7JNw8(

literal 549
zcmY%PQ%FwCD@!a^Fj6o!vQRKFHBc}%Fi<cwvgT5bP{>cpQZP0#QLr#lC{`#)K@l@H
zRLIFsOi4=2O9zYR7N>*Nnwl!46c;EMf(1ba7@8U>7#f=>q$DQSp$ZxrC}`Cw80ev@
zwJ=l2FHWvgFf%ZKD>pJRP%tz^vk_#tk%^&#p^2eFZfZ$UzJj3vR1e58U_E9Q3I&NJ
z$r(lpNQN03C>R-ADikY}<U6H>rzRm;W3FIiV6KppSzMx!SWu9fhw!tJiGrb-nL-g3
zO$vsV1_}j5nRz8p%fJRE=jY|6CYLA}Di|ohtcQsiDHwntiaHYo0|jHKGhyl=Vvz8G
uiJ2-GD43wBGgB~7Fh>(JS1?epKohf2Fi<cwKobNBC|IHkf}Cv#b~gYdjf_?R

diff --git a/GdpdExample/project.godot b/GdpdExample/project.godot
index efa5313..1daf325 100644
--- a/GdpdExample/project.godot
+++ b/GdpdExample/project.godot
@@ -10,7 +10,6 @@ config_version=4
 
 _global_script_classes=[  ]
 _global_script_class_icons={
-
 }
 
 [application]
diff --git a/README.md b/README.md
index 09b6664..a9ec809 100644
--- a/README.md
+++ b/README.md
@@ -7,8 +7,9 @@ Godot add-on for loading and processing Pure Data patches
 
 ## Compiling on GNU/Linux
 
-- Open a terminal
-- Type the following commandes :
+- Install the following packages :
+	- scons
+- Open a terminal and type the following commands :
 	- git clone https://gitlab.univ-lille.fr/ivmi/gdpd.git
 	- cd gdpd
 	- ./update.sh linux
@@ -16,7 +17,7 @@ Godot add-on for loading and processing Pure Data patches
 ## Compiling on Windows
 
 - Open the Windows Powershell
-- Type the following commandes :
+- Type the following commands :
 	- git clone https://gitlab.univ-lille.fr/ivmi/gdpd.git
 	- cd gdpd
 	- ./update.sh windows
diff --git a/SConstruct b/SConstruct
index a7fdfe2..a7076dd 100644
--- a/SConstruct
+++ b/SConstruct
@@ -4,7 +4,7 @@ import os, subprocess
 opts = Variables([], ARGUMENTS)
 
 # Gets the standard flags CC, CCX, etc.
-env = DefaultEnvironment()
+env = Environment(ENV = os.environ)
 
 # Define our options
 opts.Add(EnumVariable('target', "Compilation target", 'release', ['d', 'debug', 'r', 'release']))
@@ -61,12 +61,13 @@ if env['platform'] == "osx":
         env.Append(CCFLAGS=['-g', '-O3', '-arch', 'x86_64'])
 
 elif env['platform'] in ('x11', 'linux'):
-    env['CC'] = 'gcc-7'
-    env['CXX'] = 'g++-7'
+    env['CC'] = 'gcc'
+    env['CXX'] = 'g++'
     env['target_path'] += 'x11/'
     cpp_library += '.linux'
     env.Append(CPPDEFINES=['__UNIX_JACK__', 'LIBPD_EXTRA'])
-    env.Append(LINKFLAGS=['-ljack','-pthread'])
+    env.Append(LIBS=['jack', 'pthread'])
+    env.Append(LDPATH=['/usr/lib/x86_64-linux-gnu'])
     if env['target'] in ('debug', 'd'):
         env.Append(CCFLAGS=['-fPIC', '-g3', '-Og'])
         env.Append(CFLAGS=['-std=c11'])
@@ -80,6 +81,7 @@ elif env['platform'] == "windows":
     env['target_path'] += 'win64/'
     cpp_library += '.windows'
     env.Append(ENV=os.environ)
+    env.Append(CPPDEFINES=['NOMINMAX'])
 
     if not env['use_mingw']:
         # MSVC
diff --git a/src/gdpd.hpp b/src/gdpd.hpp
index 3bf3ea1..9069ffe 100644
--- a/src/gdpd.hpp
+++ b/src/gdpd.hpp
@@ -5,6 +5,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <map>
+#include <algorithm>
 
 #include <Godot.hpp>
 #include <AudioStreamPlayer.hpp>
diff --git a/src/rtaudio/RtAudio.cpp b/src/rtaudio/RtAudio.cpp
index 0837d98..40fb6a9 100644
--- a/src/rtaudio/RtAudio.cpp
+++ b/src/rtaudio/RtAudio.cpp
@@ -11,7 +11,7 @@
     RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
 
     RtAudio: realtime audio i/o C++ classes
-    Copyright (c) 2001-2019 Gary P. Scavone
+    Copyright (c) 2001-2021 Gary P. Scavone
 
     Permission is hereby granted, free of charge, to any person
     obtaining a copy of this software and associated documentation files
@@ -39,7 +39,7 @@
 */
 /************************************************************************/
 
-// RtAudio: Version 5.1.0
+// RtAudio: Version 5.2.0
 
 #include "RtAudio.h"
 #include <iostream>
@@ -56,7 +56,7 @@ const unsigned int RtApi::SAMPLE_RATES[] = {
   32000, 44100, 48000, 88200, 96000, 176400, 192000
 };
 
-#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_WASAPI__)
+#if defined(_WIN32) || defined(__CYGWIN__)
   #define MUTEX_INITIALIZE(A) InitializeCriticalSection(A)
   #define MUTEX_DESTROY(A)    DeleteCriticalSection(A)
   #define MUTEX_LOCK(A)       EnterCriticalSection(A)
@@ -64,12 +64,17 @@ const unsigned int RtApi::SAMPLE_RATES[] = {
 
   #include "tchar.h"
 
-  static std::string convertCharPointerToStdString(const char *text)
+  template<typename T> inline
+  std::string convertCharPointerToStdString(const T *text);
+
+  template<> inline
+  std::string convertCharPointerToStdString(const char *text)
   {
     return std::string(text);
   }
 
-  static std::string convertCharPointerToStdString(const wchar_t *text)
+  template<> inline
+  std::string convertCharPointerToStdString(const wchar_t *text)
   {
     int length = WideCharToMultiByte(CP_UTF8, 0, text, -1, NULL, 0, NULL, NULL);
     std::string s( length-1, '\0' );
@@ -77,15 +82,12 @@ const unsigned int RtApi::SAMPLE_RATES[] = {
     return s;
   }
 
-#elif defined(__LINUX_ALSA__) || defined(__LINUX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__)
+#elif defined(__unix__) || defined(__APPLE__)
   // pthread API
   #define MUTEX_INITIALIZE(A) pthread_mutex_init(A, NULL)
   #define MUTEX_DESTROY(A)    pthread_mutex_destroy(A)
   #define MUTEX_LOCK(A)       pthread_mutex_lock(A)
   #define MUTEX_UNLOCK(A)     pthread_mutex_unlock(A)
-#else
-  #define MUTEX_INITIALIZE(A) abs(*A) // dummy definitions
-  #define MUTEX_DESTROY(A)    abs(*A) // dummy definitions
 #endif
 
 // *************************************************** //
@@ -262,7 +264,7 @@ RtAudio :: RtAudio( RtAudio::Api api )
   // It should not be possible to get here because the preprocessor
   // definition __RTAUDIO_DUMMY__ is automatically defined if no
   // API-specific definitions are passed to the compiler. But just in
-  // case something weird happens, we'll thow an error.
+  // case something weird happens, we'll throw an error.
   std::string errorText = "\nRtAudio: no compiled API support found ... critical error!!\n\n";
   throw( RtAudioError( errorText, RtAudioError::UNSPECIFIED ) );
 }
@@ -405,13 +407,27 @@ void RtApi :: openStream( RtAudio::StreamParameters *oParams,
 
 unsigned int RtApi :: getDefaultInputDevice( void )
 {
-  // Should be implemented in subclasses if possible.
+  // Should be reimplemented in subclasses if necessary.
+  unsigned int nDevices = getDeviceCount();
+  for ( unsigned int i = 0; i < nDevices; i++ ) {
+    if ( getDeviceInfo( i ).isDefaultInput ) {
+      return i;
+    }
+  }
+
   return 0;
 }
 
 unsigned int RtApi :: getDefaultOutputDevice( void )
 {
-  // Should be implemented in subclasses if possible.
+  // Should be reimplemented in subclasses if necessary.
+  unsigned int nDevices = getDeviceCount();
+  for ( unsigned int i = 0; i < nDevices; i++ ) {
+    if ( getDeviceInfo( i ).isDefaultOutput ) {
+      return i;
+    }
+  }
+
   return 0;
 }
 
@@ -506,6 +522,8 @@ unsigned int RtApi :: getStreamSampleRate( void )
 
 #if defined(__MACOSX_CORE__)
 
+#include <unistd.h>
+
 // The OS X CoreAudio API is designed to use a separate callback
 // procedure for each of its audio devices.  A single RtAudio duplex
 // stream using two different devices is supported here, though it
@@ -1478,15 +1496,17 @@ void RtApiCore :: closeStream( void )
         errorText_ = "RtApiCore::closeStream(): error removing property listener!";
         error( RtAudioError::WARNING );
       }
-    }
-    if ( stream_.state == STREAM_RUNNING )
-      AudioDeviceStop( handle->id[0], callbackHandler );
+
 #if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 )
-    AudioDeviceDestroyIOProcID( handle->id[0], handle->procId[0] );
-#else
-    // deprecated in favor of AudioDeviceDestroyIOProcID()
-    AudioDeviceRemoveIOProc( handle->id[0], callbackHandler );
+      if ( stream_.state == STREAM_RUNNING )
+        AudioDeviceStop( handle->id[0], handle->procId[0] );
+      AudioDeviceDestroyIOProcID( handle->id[0], handle->procId[0] );
+#else // deprecated behaviour
+      if ( stream_.state == STREAM_RUNNING )
+        AudioDeviceStop( handle->id[0], callbackHandler );
+      AudioDeviceRemoveIOProc( handle->id[0], callbackHandler );
 #endif
+    }
   }
 
   if ( stream_.mode == INPUT || ( stream_.mode == DUPLEX && stream_.device[0] != stream_.device[1] ) ) {
@@ -1501,15 +1521,17 @@ void RtApiCore :: closeStream( void )
         errorText_ = "RtApiCore::closeStream(): error removing property listener!";
         error( RtAudioError::WARNING );
       }
-    }
-    if ( stream_.state == STREAM_RUNNING )
-      AudioDeviceStop( handle->id[1], callbackHandler );
+
 #if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 )
-    AudioDeviceDestroyIOProcID( handle->id[1], handle->procId[1] );
-#else
-    // deprecated in favor of AudioDeviceDestroyIOProcID()
-    AudioDeviceRemoveIOProc( handle->id[1], callbackHandler );
+      if ( stream_.state == STREAM_RUNNING )
+        AudioDeviceStop( handle->id[1], handle->procId[1] );
+      AudioDeviceDestroyIOProcID( handle->id[1], handle->procId[1] );
+#else // deprecated behaviour
+      if ( stream_.state == STREAM_RUNNING )
+        AudioDeviceStop( handle->id[1], callbackHandler );
+      AudioDeviceRemoveIOProc( handle->id[1], callbackHandler );
 #endif
+    }
   }
 
   for ( int i=0; i<2; i++ ) {
@@ -1542,15 +1564,19 @@ void RtApiCore :: startStream( void )
     return;
   }
 
-  #if defined( HAVE_GETTIMEOFDAY )
+#if defined( HAVE_GETTIMEOFDAY )
   gettimeofday( &stream_.lastTickTimestamp, NULL );
-  #endif
+#endif
 
   OSStatus result = noErr;
   CoreHandle *handle = (CoreHandle *) stream_.apiHandle;
   if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) {
 
+#if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 )
+    result = AudioDeviceStart( handle->id[0], handle->procId[0] );
+#else // deprecated behaviour
     result = AudioDeviceStart( handle->id[0], callbackHandler );
+#endif
     if ( result != noErr ) {
       errorStream_ << "RtApiCore::startStream: system error (" << getErrorCode( result ) << ") starting callback procedure on device (" << stream_.device[0] << ").";
       errorText_ = errorStream_.str();
@@ -1561,7 +1587,11 @@ void RtApiCore :: startStream( void )
   if ( stream_.mode == INPUT ||
        ( stream_.mode == DUPLEX && stream_.device[0] != stream_.device[1] ) ) {
 
+#if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 )
+    result = AudioDeviceStart( handle->id[1], handle->procId[1] );
+#else // deprecated behaviour
     result = AudioDeviceStart( handle->id[1], callbackHandler );
+#endif
     if ( result != noErr ) {
       errorStream_ << "RtApiCore::startStream: system error starting input callback procedure on device (" << stream_.device[1] << ").";
       errorText_ = errorStream_.str();
@@ -1596,7 +1626,11 @@ void RtApiCore :: stopStream( void )
       pthread_cond_wait( &handle->condition, &stream_.mutex ); // block until signaled
     }
 
+#if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 )
+    result = AudioDeviceStop( handle->id[0], handle->procId[0] );
+#else // deprecated behaviour
     result = AudioDeviceStop( handle->id[0], callbackHandler );
+#endif
     if ( result != noErr ) {
       errorStream_ << "RtApiCore::stopStream: system error (" << getErrorCode( result ) << ") stopping callback procedure on device (" << stream_.device[0] << ").";
       errorText_ = errorStream_.str();
@@ -1606,7 +1640,11 @@ void RtApiCore :: stopStream( void )
 
   if ( stream_.mode == INPUT || ( stream_.mode == DUPLEX && stream_.device[0] != stream_.device[1] ) ) {
 
+#if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 )
+    result = AudioDeviceStop( handle->id[1], handle->procId[1] );
+#else  // deprecated behaviour
     result = AudioDeviceStop( handle->id[1], callbackHandler );
+#endif
     if ( result != noErr ) {
       errorStream_ << "RtApiCore::stopStream: system error (" << getErrorCode( result ) << ") stopping input callback procedure on device (" << stream_.device[1] << ").";
       errorText_ = errorStream_.str();
@@ -2790,13 +2828,13 @@ static long asioMessages( long selector, long value, void* message, double* opt
 
 RtApiAsio :: RtApiAsio()
 {
-  // ASIO cannot run on a multi-threaded appartment. You can call
-  // CoInitialize beforehand, but it must be for appartment threading
+  // ASIO cannot run on a multi-threaded apartment. You can call
+  // CoInitialize beforehand, but it must be for apartment threading
   // (in which case, CoInitilialize will return S_FALSE here).
   coInitialized_ = false;
   HRESULT hr = CoInitialize( NULL ); 
   if ( FAILED(hr) ) {
-    errorText_ = "RtApiAsio::ASIO requires a single-threaded appartment. Call CoInitializeEx(0,COINIT_APARTMENTTHREADED)";
+    errorText_ = "RtApiAsio::ASIO requires a single-threaded apartment. Call CoInitializeEx(0,COINIT_APARTMENTTHREADED)";
     error( RtAudioError::WARNING );
   }
   coInitialized_ = true;
@@ -2819,6 +2857,18 @@ unsigned int RtApiAsio :: getDeviceCount( void )
   return (unsigned int) drivers.asioGetNumDev();
 }
 
+// We can only load one ASIO driver, so the default output is always the first device.
+unsigned int RtApiAsio :: getDefaultOutputDevice( void )
+{
+  return 0;
+}
+
+// We can only load one ASIO driver, so the default input is always the first device.
+unsigned int RtApiAsio :: getDefaultInputDevice( void )
+{
+  return 0;
+}
+
 RtAudio::DeviceInfo RtApiAsio :: getDeviceInfo( unsigned int device )
 {
   RtAudio::DeviceInfo info;
@@ -3799,6 +3849,17 @@ if ( objectPtr )\
 
 typedef HANDLE ( __stdcall *TAvSetMmThreadCharacteristicsPtr )( LPCWSTR TaskName, LPDWORD TaskIndex );
 
+#ifndef __IAudioClient3_INTERFACE_DEFINED__
+MIDL_INTERFACE( "00000000-0000-0000-0000-000000000000" ) IAudioClient3
+{
+  virtual HRESULT GetSharedModeEnginePeriod( WAVEFORMATEX*, UINT32*, UINT32*, UINT32*, UINT32* ) = 0;
+  virtual HRESULT InitializeSharedAudioStream( DWORD, UINT32, WAVEFORMATEX*, LPCGUID ) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL( IAudioClient3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
+#endif
+#endif
+
 //-----------------------------------------------------------------------------
 
 // WASAPI dictates stream sample rate, format, channel count, and in some cases, buffer size.
@@ -4053,7 +4114,7 @@ public:
     #endif
   }
 
-  void Convert( char* outBuffer, const char* inBuffer, unsigned int inSampleCount, unsigned int& outSampleCount )
+  void Convert( char* outBuffer, const char* inBuffer, unsigned int inSampleCount, unsigned int& outSampleCount, int maxOutSampleCount = -1 )
   {
     unsigned int inputBufferSize = _bytesPerSample * _channelCount * inSampleCount;
     if ( _sampleRatio == 1 )
@@ -4064,7 +4125,15 @@ public:
       return;
     }
 
-    unsigned int outputBufferSize = ( unsigned int ) ceilf( inputBufferSize * _sampleRatio ) + ( _bytesPerSample * _channelCount );
+    unsigned int outputBufferSize = 0;
+    if ( maxOutSampleCount != -1 )
+    {
+      outputBufferSize = _bytesPerSample * _channelCount * maxOutSampleCount;
+    }
+    else
+    {
+      outputBufferSize = ( unsigned int ) ceilf( inputBufferSize * _sampleRatio ) + ( _bytesPerSample * _channelCount );
+    }
 
     IMFMediaBuffer* rInBuffer;
     IMFSample* rInSample;
@@ -4486,34 +4555,6 @@ Exit:
   return info;
 }
 
-//-----------------------------------------------------------------------------
-
-unsigned int RtApiWasapi::getDefaultOutputDevice( void )
-{
-  for ( unsigned int i = 0; i < getDeviceCount(); i++ ) {
-    if ( getDeviceInfo( i ).isDefaultOutput ) {
-      return i;
-    }
-  }
-
-  return 0;
-}
-
-//-----------------------------------------------------------------------------
-
-unsigned int RtApiWasapi::getDefaultInputDevice( void )
-{
-  for ( unsigned int i = 0; i < getDeviceCount(); i++ ) {
-    if ( getDeviceInfo( i ).isDefaultInput ) {
-      return i;
-    }
-  }
-
-  return 0;
-}
-
-//-----------------------------------------------------------------------------
-
 void RtApiWasapi::closeStream( void )
 {
   if ( stream_.state == STREAM_CLOSED ) {
@@ -4600,17 +4641,16 @@ void RtApiWasapi::stopStream( void )
     error( RtAudioError::WARNING );
     return;
   }
+  if ( stream_.state == STREAM_STOPPING ) {
+    errorText_ = "RtApiWasapi::stopStream: The stream is already stopping.";
+    error( RtAudioError::WARNING );
+    return;
+  }
 
   // inform stream thread by setting stream state to STREAM_STOPPING
   stream_.state = STREAM_STOPPING;
 
-  // wait until stream thread is stopped
-  while( stream_.state != STREAM_STOPPED ) {
-    Sleep( 1 );
-  }
-
-  // Wait for the last buffer to play before stopping.
-  Sleep( 1000 * stream_.bufferSize / stream_.sampleRate );
+  WaitForSingleObject( ( void* ) stream_.callbackInfo.thread, INFINITE );
 
   // close thread handle
   if ( stream_.callbackInfo.thread && !CloseHandle( ( void* ) stream_.callbackInfo.thread ) ) {
@@ -4633,14 +4673,16 @@ void RtApiWasapi::abortStream( void )
     error( RtAudioError::WARNING );
     return;
   }
+  if ( stream_.state == STREAM_STOPPING ) {
+    errorText_ = "RtApiWasapi::abortStream: The stream is already stopping.";
+    error( RtAudioError::WARNING );
+    return;
+  }
 
   // inform stream thread by setting stream state to STREAM_STOPPING
   stream_.state = STREAM_STOPPING;
 
-  // wait until stream thread is stopped
-  while ( stream_.state != STREAM_STOPPED ) {
-    Sleep( 1 );
-  }
+  WaitForSingleObject( ( void* ) stream_.callbackInfo.thread, INFINITE );
 
   // close thread handle
   if ( stream_.callbackInfo.thread && !CloseHandle( ( void* ) stream_.callbackInfo.thread ) ) {
@@ -4849,7 +4891,7 @@ bool RtApiWasapi::probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
     stream_.doConvertBuffer[mode] = true;
 
   if ( stream_.doConvertBuffer[mode] )
-    setConvertInfo( mode, 0 );
+    setConvertInfo( mode, firstChannel );
 
   // Allocate necessary internal buffers
   bufferBytes = stream_.nUserChannels[mode] * stream_.bufferSize * formatBytes( stream_.userFormat );
@@ -4941,7 +4983,7 @@ void RtApiWasapi::wasapiThread()
   // declare local stream variables
   RtAudioCallback callback = ( RtAudioCallback ) stream_.callbackInfo.callback;
   BYTE* streamBuffer = NULL;
-  unsigned long captureFlags = 0;
+  DWORD captureFlags = 0;
   unsigned int bufferFrameCount = 0;
   unsigned int numFramesPadding = 0;
   unsigned int convBufferSize = 0;
@@ -4960,7 +5002,7 @@ void RtApiWasapi::wasapiThread()
   RtAudioError::Type errorType = RtAudioError::DRIVER_ERROR;
 
   // Attempt to assign "Pro Audio" characteristic to thread
-  HMODULE AvrtDll = LoadLibrary( (LPCTSTR) "AVRT.dll" );
+  HMODULE AvrtDll = LoadLibraryW( L"AVRT.dll" );
   if ( AvrtDll ) {
     DWORD taskIndex = 0;
     TAvSetMmThreadCharacteristicsPtr AvSetMmThreadCharacteristicsPtr =
@@ -4985,12 +5027,37 @@ void RtApiWasapi::wasapiThread()
     captureSrRatio = ( ( float ) captureFormat->nSamplesPerSec / stream_.sampleRate );
 
     if ( !captureClient ) {
-      hr = captureAudioClient->Initialize( AUDCLNT_SHAREMODE_SHARED,
-                                           loopbackEnabled ? AUDCLNT_STREAMFLAGS_LOOPBACK : AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
-                                           0,
-                                           0,
-                                           captureFormat,
-                                           NULL );
+      IAudioClient3* captureAudioClient3 = nullptr;
+      captureAudioClient->QueryInterface( __uuidof( IAudioClient3 ), ( void** ) &captureAudioClient3 );
+      if ( captureAudioClient3 && !loopbackEnabled )
+      {
+        UINT32 Ignore;
+        UINT32 MinPeriodInFrames;
+        hr = captureAudioClient3->GetSharedModeEnginePeriod( captureFormat,
+                                                             &Ignore,
+                                                             &Ignore,
+                                                             &MinPeriodInFrames,
+                                                             &Ignore );
+        if ( FAILED( hr ) ) {
+          errorText = "RtApiWasapi::wasapiThread: Unable to initialize capture audio client.";
+          goto Exit;
+        }
+        
+        hr = captureAudioClient3->InitializeSharedAudioStream( AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
+                                                               MinPeriodInFrames,
+                                                               captureFormat,
+                                                               NULL );
+      }
+      else
+      {
+        hr = captureAudioClient->Initialize( AUDCLNT_SHAREMODE_SHARED,
+                                             loopbackEnabled ? AUDCLNT_STREAMFLAGS_LOOPBACK : AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
+                                             0,
+                                             0,
+                                             captureFormat,
+                                             NULL );
+      }
+
       if ( FAILED( hr ) ) {
         errorText = "RtApiWasapi::wasapiThread: Unable to initialize capture audio client.";
         goto Exit;
@@ -5071,12 +5138,37 @@ void RtApiWasapi::wasapiThread()
     renderSrRatio = ( ( float ) renderFormat->nSamplesPerSec / stream_.sampleRate );
 
     if ( !renderClient ) {
-      hr = renderAudioClient->Initialize( AUDCLNT_SHAREMODE_SHARED,
-                                          AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
-                                          0,
-                                          0,
-                                          renderFormat,
-                                          NULL );
+      IAudioClient3* renderAudioClient3 = nullptr;
+      renderAudioClient->QueryInterface( __uuidof( IAudioClient3 ), ( void** ) &renderAudioClient3 );
+      if ( renderAudioClient3 )
+      {
+        UINT32 Ignore;
+        UINT32 MinPeriodInFrames;
+        hr = renderAudioClient3->GetSharedModeEnginePeriod( renderFormat,
+                                                            &Ignore,
+                                                            &Ignore,
+                                                            &MinPeriodInFrames,
+                                                            &Ignore );
+        if ( FAILED( hr ) ) {
+          errorText = "RtApiWasapi::wasapiThread: Unable to initialize render audio client.";
+          goto Exit;
+        }
+        
+        hr = renderAudioClient3->InitializeSharedAudioStream( AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
+                                                              MinPeriodInFrames,
+                                                              renderFormat,
+                                                              NULL );
+      }
+      else
+      {
+        hr = renderAudioClient->Initialize( AUDCLNT_SHAREMODE_SHARED,
+                                            AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
+                                            0,
+                                            0,
+                                            renderFormat,
+                                            NULL );
+      }
+
       if ( FAILED( hr ) ) {
         errorText = "RtApiWasapi::wasapiThread: Unable to initialize render audio client.";
         goto Exit;
@@ -5140,18 +5232,18 @@ void RtApiWasapi::wasapiThread()
   if ( stream_.mode == INPUT )
   {
     using namespace std; // for ceilf
-    convBuffSize = ( size_t ) ( ceilf( stream_.bufferSize * captureSrRatio ) ) * stream_.nDeviceChannels[INPUT] * formatBytes( stream_.deviceFormat[INPUT] );
+    convBuffSize = ( unsigned int ) ( ceilf( stream_.bufferSize * captureSrRatio ) ) * stream_.nDeviceChannels[INPUT] * formatBytes( stream_.deviceFormat[INPUT] );
     deviceBuffSize = stream_.bufferSize * stream_.nDeviceChannels[INPUT] * formatBytes( stream_.deviceFormat[INPUT] );
   }
   else if ( stream_.mode == OUTPUT )
   {
-    convBuffSize = ( size_t ) ( ceilf( stream_.bufferSize * renderSrRatio ) ) * stream_.nDeviceChannels[OUTPUT] * formatBytes( stream_.deviceFormat[OUTPUT] );
+    convBuffSize = ( unsigned int ) ( ceilf( stream_.bufferSize * renderSrRatio ) ) * stream_.nDeviceChannels[OUTPUT] * formatBytes( stream_.deviceFormat[OUTPUT] );
     deviceBuffSize = stream_.bufferSize * stream_.nDeviceChannels[OUTPUT] * formatBytes( stream_.deviceFormat[OUTPUT] );
   }
   else if ( stream_.mode == DUPLEX )
   {
-    convBuffSize = std::max( ( size_t ) ( ceilf( stream_.bufferSize * captureSrRatio ) ) * stream_.nDeviceChannels[INPUT] * formatBytes( stream_.deviceFormat[INPUT] ),
-                             ( size_t ) ( ceilf( stream_.bufferSize * renderSrRatio ) ) * stream_.nDeviceChannels[OUTPUT] * formatBytes( stream_.deviceFormat[OUTPUT] ) );
+    convBuffSize = std::max( ( unsigned int ) ( ceilf( stream_.bufferSize * captureSrRatio ) ) * stream_.nDeviceChannels[INPUT] * formatBytes( stream_.deviceFormat[INPUT] ),
+                             ( unsigned int ) ( ceilf( stream_.bufferSize * renderSrRatio ) ) * stream_.nDeviceChannels[OUTPUT] * formatBytes( stream_.deviceFormat[OUTPUT] ) );
     deviceBuffSize = std::max( stream_.bufferSize * stream_.nDeviceChannels[INPUT] * formatBytes( stream_.deviceFormat[INPUT] ),
                                stream_.bufferSize * stream_.nDeviceChannels[OUTPUT] * formatBytes( stream_.deviceFormat[OUTPUT] ) );
   }
@@ -5177,11 +5269,6 @@ void RtApiWasapi::wasapiThread()
       if ( captureAudioClient )
       {
         int samplesToPull = ( unsigned int ) floorf( stream_.bufferSize * captureSrRatio );
-        if ( captureSrRatio != 1 )
-        {
-          // account for remainders
-          samplesToPull--;
-        }
 
         convBufferSize = 0;
         while ( convBufferSize < stream_.bufferSize )
@@ -5203,7 +5290,8 @@ void RtApiWasapi::wasapiThread()
           captureResampler->Convert( stream_.deviceBuffer + deviceBufferOffset,
                                      convBuffer,
                                      samplesToPull,
-                                     convSamples );
+                                     convSamples,
+                                     convBufferSize == 0 ? -1 : stream_.bufferSize - convBufferSize );
 
           convBufferSize += convSamples;
           samplesToPull = 1; // now pull one sample at a time until we have stream_.bufferSize samples
@@ -5471,14 +5559,14 @@ Exit:
 
   CoUninitialize();
 
-  // update stream state
-  stream_.state = STREAM_STOPPED;
-
   if ( !errorText.empty() )
   {
     errorText_ = errorText;
     error( errorType );
   }
+
+  // update stream state
+  stream_.state = STREAM_STOPPED;
 }
 
 //******************** End of __WINDOWS_WASAPI__ *********************//
@@ -6863,7 +6951,7 @@ void RtApiDs :: callbackEvent()
     if ( stream_.mode == DUPLEX ) {
       if ( safeReadPointer < endRead ) {
         if ( duplexPrerollBytes <= 0 ) {
-          // Pre-roll time over. Be more agressive.
+          // Pre-roll time over. Be more aggressive.
           int adjustment = endRead-safeReadPointer;
 
           handle->xrun[1] = true;
@@ -7018,19 +7106,18 @@ static BOOL CALLBACK deviceQueryCallback( LPGUID lpguid,
 
   // If good device, then save its name and guid.
   std::string name = convertCharPointerToStdString( description );
-  //if ( name == "Primary Sound Driver" || name == "Primary Sound Capture Driver" )
-  if ( lpguid == NULL )
-    name = "Default Device";
+
   if ( validDevice ) {
     for ( unsigned int i=0; i<dsDevices.size(); i++ ) {
       if ( dsDevices[i].name == name ) {
-        dsDevices[i].found = true;
-        if ( probeInfo.isInput ) {
-          dsDevices[i].id[1] = lpguid;
+        if ( probeInfo.isInput && dsDevices[i].id[1] == lpguid)
+        {
+          dsDevices[i].found = true;
           dsDevices[i].validId[1] = true;
         }
-        else {
-          dsDevices[i].id[0] = lpguid;
+        else if (dsDevices[i].id[0] == lpguid)
+        {
+          dsDevices[i].found = true;
           dsDevices[i].validId[0] = true;
         }
         return TRUE;
@@ -7126,7 +7213,11 @@ struct AlsaHandle {
   bool runnable;
 
   AlsaHandle()
-    :synchronized(false), runnable(false) { xrun[0] = false; xrun[1] = false; }
+#if _cplusplus >= 201103L
+    :handles{nullptr, nullptr}, synchronized(false), runnable(false) { xrun[0] = false; xrun[1] = false; }
+#else 
+    : synchronized(false), runnable(false) { handles[0] = NULL; handles[1] = NULL; xrun[0] = false; xrun[1] = false; }
+#endif
 };
 
 static void *alsaCallbackHandler( void * ptr );
@@ -7148,6 +7239,13 @@ unsigned int RtApiAlsa :: getDeviceCount( void )
   char name[64];
   snd_ctl_t *handle = 0;
 
+  strcpy(name, "default");
+  result = snd_ctl_open( &handle, "default", 0 );
+  if (result == 0) {
+    nDevices++;
+    snd_ctl_close( handle );
+  }
+
   // Count cards and devices
   card = -1;
   snd_card_next( &card );
@@ -7180,12 +7278,6 @@ unsigned int RtApiAlsa :: getDeviceCount( void )
     snd_card_next( &card );
   }
 
-  result = snd_ctl_open( &handle, "default", 0 );
-  if (result == 0) {
-    nDevices++;
-    snd_ctl_close( handle );
-  }
-
   return nDevices;
 }
 
@@ -7195,13 +7287,21 @@ RtAudio::DeviceInfo RtApiAlsa :: getDeviceInfo( unsigned int device )
   info.probed = false;
 
   unsigned nDevices = 0;
-  int result, subdevice, card;
+  int result=-1, subdevice=-1, card=-1;
   char name[64];
   snd_ctl_t *chandle = 0;
 
+  result = snd_ctl_open( &chandle, "default", SND_CTL_NONBLOCK );
+  if ( result == 0 ) {
+    if ( nDevices++ == device ) {
+      strcpy( name, "default" );
+      goto foundDevice;
+    }
+  }
+  if ( chandle )
+    snd_ctl_close( chandle );
+
   // Count cards and devices
-  card = -1;
-  subdevice = -1;
   snd_card_next( &card );
   while ( card >= 0 ) {
     sprintf( name, "hw:%d", card );
@@ -7235,15 +7335,6 @@ RtAudio::DeviceInfo RtApiAlsa :: getDeviceInfo( unsigned int device )
     snd_card_next( &card );
   }
 
-  result = snd_ctl_open( &chandle, "default", SND_CTL_NONBLOCK );
-  if ( result == 0 ) {
-    if ( nDevices == device ) {
-      strcpy( name, "default" );
-      goto foundDevice;
-    }
-    nDevices++;
-  }
-
   if ( nDevices == 0 ) {
     errorText_ = "RtApiAlsa::getDeviceInfo: no devices found!";
     error( RtAudioError::INVALID_USE );
@@ -7464,11 +7555,13 @@ RtAudio::DeviceInfo RtApiAlsa :: getDeviceInfo( unsigned int device )
   }
 
   // Get the device name
-  char *cardname;
-  result = snd_card_get_name( card, &cardname );
-  if ( result >= 0 ) {
-    sprintf( name, "hw:%s,%d", cardname, subdevice );
-    free( cardname );
+  if (strncmp(name, "default", 7)!=0) {
+    char *cardname;
+    result = snd_card_get_name( card, &cardname );
+    if ( result >= 0 ) {
+      sprintf( name, "hw:%s,%d", cardname, subdevice );
+      free( cardname );
+    }
   }
   info.name = name;
 
@@ -7495,8 +7588,12 @@ bool RtApiAlsa :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
 
 {
 #if defined(__RTAUDIO_DEBUG__)
-  snd_output_t *out;
-  snd_output_stdio_attach(&out, stderr, 0);
+  struct SndOutputTdealloc {
+    SndOutputTdealloc() : _out(NULL) { snd_output_stdio_attach(&_out, stderr, 0); }
+    ~SndOutputTdealloc() { snd_output_close(_out); }
+    operator snd_output_t*() { return _out; }
+    snd_output_t *_out;
+  } out;
 #endif
 
   // I'm not using the "plug" interface ... too much inconsistent behavior.
@@ -7506,9 +7603,23 @@ bool RtApiAlsa :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
   char name[64];
   snd_ctl_t *chandle;
 
-  if ( options && options->flags & RTAUDIO_ALSA_USE_DEFAULT )
-    snprintf(name, sizeof(name), "%s", "default");
+  if ( device == 0
+       || (options && options->flags & RTAUDIO_ALSA_USE_DEFAULT) )
+  {
+    strcpy(name, "default");
+    result = snd_ctl_open( &chandle, "default", SND_CTL_NONBLOCK );
+    if ( result == 0 ) {
+      if ( nDevices == device ) {
+        strcpy( name, "default" );
+        snd_ctl_close( chandle );
+        goto foundDevice;
+      }
+      nDevices++;
+    }
+  }
+
   else {
+    nDevices++;
     // Count cards and devices
     card = -1;
     snd_card_next( &card );
@@ -7536,17 +7647,6 @@ bool RtApiAlsa :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
       snd_card_next( &card );
     }
 
-    result = snd_ctl_open( &chandle, "default", SND_CTL_NONBLOCK );
-    if ( result == 0 ) {
-      if ( nDevices == device ) {
-        strcpy( name, "default" );
-        snd_ctl_close( chandle );
-        goto foundDevice;
-      }
-      nDevices++;
-    }
-    snd_ctl_close( chandle );
-
     if ( nDevices == 0 ) {
       // This should not happen because a check is made before this function is called.
       errorText_ = "RtApiAlsa::probeDeviceOpen: no devices found!";
@@ -8284,7 +8384,7 @@ void RtApiAlsa :: callbackEvent()
     }
 
     if ( result < (int) stream_.bufferSize ) {
-      // Either an error or overrun occured.
+      // Either an error or overrun occurred.
       if ( result == -EPIPE ) {
         snd_pcm_state_t state = snd_pcm_state( handle[1] );
         if ( state == SND_PCM_STATE_XRUN ) {
@@ -8354,7 +8454,7 @@ void RtApiAlsa :: callbackEvent()
     }
 
     if ( result < (int) stream_.bufferSize ) {
-      // Either an error or underrun occured.
+      // Either an error or underrun occurred.
       if ( result == -EPIPE ) {
         snd_pcm_state_t state = snd_pcm_state( handle[0] );
         if ( state == SND_PCM_STATE_XRUN ) {
@@ -8424,10 +8524,27 @@ static void *alsaCallbackHandler( void *ptr )
 
 #include <pulse/error.h>
 #include <pulse/simple.h>
+#include <pulse/pulseaudio.h>
 #include <cstdio>
 
+static pa_mainloop_api *rt_pa_mainloop_api = NULL;
+struct PaDeviceInfo {
+  PaDeviceInfo() : sink_index(-1), source_index(-1) {}
+  int sink_index;
+  int source_index;
+  std::string sink_name;
+  std::string source_name;
+  RtAudio::DeviceInfo info;
+};
+static struct {
+  std::vector<PaDeviceInfo> dev;
+  std::string default_sink_name;
+  std::string default_source_name;
+  int default_rate;
+} rt_pa_info;
+
 static const unsigned int SUPPORTED_SAMPLERATES[] = { 8000, 16000, 22050, 32000,
-                                                      44100, 48000, 96000, 0};
+                                                      44100, 48000, 96000, 192000, 0};
 
 struct rtaudio_pa_format_mapping_t {
   RtAudioFormat rtaudio_format;
@@ -8436,6 +8553,7 @@ struct rtaudio_pa_format_mapping_t {
 
 static const rtaudio_pa_format_mapping_t supported_sampleformats[] = {
   {RTAUDIO_SINT16, PA_SAMPLE_S16LE},
+  {RTAUDIO_SINT24, PA_SAMPLE_S24LE},
   {RTAUDIO_SINT32, PA_SAMPLE_S32LE},
   {RTAUDIO_FLOAT32, PA_SAMPLE_FLOAT32LE},
   {0, PA_SAMPLE_INVALID}};
@@ -8449,35 +8567,219 @@ struct PulseAudioHandle {
   PulseAudioHandle() : s_play(0), s_rec(0), runnable(false) { }
 };
 
+static void rt_pa_mainloop_api_quit(int ret) {
+    rt_pa_mainloop_api->quit(rt_pa_mainloop_api, ret);
+}
+
+static void rt_pa_set_server_info(pa_context *context, const pa_server_info *info, void *data){
+  (void)context;
+  (void)data;
+  pa_sample_spec ss;
+
+  if (!info) {
+    rt_pa_mainloop_api_quit(1);
+    return;
+  }
+
+  ss = info->sample_spec;
+
+  rt_pa_info.default_rate = ss.rate;
+  rt_pa_info.default_sink_name = info->default_sink_name;
+  rt_pa_info.default_source_name = info->default_source_name;
+}
+
+static void rt_pa_set_sink_info(pa_context * /*c*/, const pa_sink_info *i,
+                                int eol, void * /*userdata*/)
+{
+  if (eol) return;
+  PaDeviceInfo inf;
+  inf.info.name = pa_proplist_gets(i->proplist, "device.description");
+  inf.info.probed = true;
+  inf.info.outputChannels = i->sample_spec.channels;
+  inf.info.preferredSampleRate = i->sample_spec.rate;
+  inf.info.isDefaultOutput = (rt_pa_info.default_sink_name == i->name);
+  inf.sink_index = i->index;
+  inf.sink_name = i->name;
+  for ( const unsigned int *sr = SUPPORTED_SAMPLERATES; *sr; ++sr )
+    inf.info.sampleRates.push_back( *sr );
+  for ( const rtaudio_pa_format_mapping_t *fm = supported_sampleformats;
+        fm->rtaudio_format; ++fm )
+    inf.info.nativeFormats |= fm->rtaudio_format;
+  for (size_t i=0; i < rt_pa_info.dev.size(); i++)
+  {
+    /* Attempt to match up sink and source records by device description. */
+    if (rt_pa_info.dev[i].info.name == inf.info.name) {
+      rt_pa_info.dev[i].sink_index = inf.sink_index;
+      rt_pa_info.dev[i].sink_name = inf.sink_name;
+      rt_pa_info.dev[i].info.outputChannels = inf.info.outputChannels;
+      rt_pa_info.dev[i].info.isDefaultOutput = inf.info.isDefaultOutput;
+      /* Assume duplex channels are minimum of input and output channels. */
+      /* Uncomment if we add support for DUPLEX
+      if (rt_pa_info.dev[i].source_index > -1)
+        (inf.info.outputChannels < rt_pa_info.dev[i].info.inputChannels)
+          ? inf.info.outputChannels : rt_pa_info.dev[i].info.inputChannels;
+      */
+      return;
+    }
+  }
+  /* try to ensure device #0 is the default */
+  if (inf.info.isDefaultOutput)
+    rt_pa_info.dev.insert(rt_pa_info.dev.begin(), inf);
+  else
+    rt_pa_info.dev.push_back(inf);
+}
+
+static void rt_pa_set_source_info_and_quit(pa_context * /*c*/, const pa_source_info *i,
+                                           int eol, void * /*userdata*/)
+{
+  if (eol) {
+    rt_pa_mainloop_api_quit(0);
+    return;
+  }
+  PaDeviceInfo inf;
+  inf.info.name = pa_proplist_gets(i->proplist, "device.description");
+  inf.info.probed = true;
+  inf.info.inputChannels = i->sample_spec.channels;
+  inf.info.preferredSampleRate = i->sample_spec.rate;
+  inf.info.isDefaultInput = (rt_pa_info.default_source_name == i->name);
+  inf.source_index = i->index;
+  inf.source_name = i->name;
+  for ( const unsigned int *sr = SUPPORTED_SAMPLERATES; *sr; ++sr )
+    inf.info.sampleRates.push_back( *sr );
+  for ( const rtaudio_pa_format_mapping_t *fm = supported_sampleformats;
+        fm->rtaudio_format; ++fm )
+    inf.info.nativeFormats |= fm->rtaudio_format;
+
+  for (size_t i=0; i < rt_pa_info.dev.size(); i++)
+  {
+    /* Attempt to match up sink and source records by device description. */
+    if (rt_pa_info.dev[i].info.name == inf.info.name) {
+      rt_pa_info.dev[i].source_index = inf.source_index;
+      rt_pa_info.dev[i].source_name = inf.source_name;
+      rt_pa_info.dev[i].info.inputChannels = inf.info.inputChannels;
+      rt_pa_info.dev[i].info.isDefaultInput = inf.info.isDefaultInput;
+      /* Assume duplex channels are minimum of input and output channels. */
+      /* Uncomment if we add support for DUPLEX
+      if (rt_pa_info.dev[i].sink_index > -1) {
+        rt_pa_info.dev[i].info.duplexChannels =
+          (inf.info.inputChannels < rt_pa_info.dev[i].info.outputChannels)
+          ? inf.info.inputChannels : rt_pa_info.dev[i].info.outputChannels;
+      }
+      */
+      return;
+    }
+  }
+  /* try to ensure device #0 is the default */
+  if (inf.info.isDefaultInput)
+    rt_pa_info.dev.insert(rt_pa_info.dev.begin(), inf);
+  else
+    rt_pa_info.dev.push_back(inf);
+}
+
+static void rt_pa_context_state_callback(pa_context *context, void *userdata) {
+  (void)userdata;
+
+  auto state = pa_context_get_state(context);
+  switch (state) {
+    case PA_CONTEXT_CONNECTING:
+    case PA_CONTEXT_AUTHORIZING:
+    case PA_CONTEXT_SETTING_NAME:
+      break;
+
+    case PA_CONTEXT_READY:
+      rt_pa_info.dev.clear();
+      pa_context_get_server_info(context, rt_pa_set_server_info, NULL);
+      pa_context_get_sink_info_list(context, rt_pa_set_sink_info, NULL);
+      pa_context_get_source_info_list(context, rt_pa_set_source_info_and_quit, NULL);
+      break;
+
+    case PA_CONTEXT_TERMINATED:
+      rt_pa_mainloop_api_quit(0);
+      break;
+
+    case PA_CONTEXT_FAILED:
+    default:
+      rt_pa_mainloop_api_quit(1);
+  }
+}
+
 RtApiPulse::~RtApiPulse()
 {
   if ( stream_.state != STREAM_CLOSED )
     closeStream();
 }
 
-unsigned int RtApiPulse::getDeviceCount( void )
+void RtApiPulse::collectDeviceInfo( void )
 {
-  return 1;
-}
+  pa_context *context = NULL;
+  pa_mainloop *m = NULL;
+  char *server = NULL;
+  int ret = 1;
 
-RtAudio::DeviceInfo RtApiPulse::getDeviceInfo( unsigned int /*device*/ )
-{
-  RtAudio::DeviceInfo info;
-  info.probed = true;
-  info.name = "PulseAudio";
-  info.outputChannels = 2;
-  info.inputChannels = 2;
-  info.duplexChannels = 2;
-  info.isDefaultOutput = true;
-  info.isDefaultInput = true;
+  if (!(m = pa_mainloop_new())) {
+    errorStream_ << "RtApiPulse::DeviceInfo pa_mainloop_new() failed.";
+    errorText_ = errorStream_.str();
+    error( RtAudioError::WARNING );
+    goto quit;
+  }
 
-  for ( const unsigned int *sr = SUPPORTED_SAMPLERATES; *sr; ++sr )
-    info.sampleRates.push_back( *sr );
+  rt_pa_mainloop_api = pa_mainloop_get_api(m);
 
-  info.preferredSampleRate = 48000;
-  info.nativeFormats = RTAUDIO_SINT16 | RTAUDIO_SINT32 | RTAUDIO_FLOAT32;
+  if (!(context = pa_context_new_with_proplist(rt_pa_mainloop_api, NULL, NULL))) {
+    errorStream_ << "pa_context_new() failed.";
+    errorText_ = errorStream_.str();
+    error( RtAudioError::WARNING );
+    goto quit;
+  }
 
-  return info;
+  pa_context_set_state_callback(context, rt_pa_context_state_callback, NULL);
+
+  if (pa_context_connect(context, server, PA_CONTEXT_NOFLAGS, NULL) < 0) {
+    errorStream_ << "RtApiPulse::DeviceInfo pa_context_connect() failed: "
+      << pa_strerror(pa_context_errno(context));
+    errorText_ = errorStream_.str();
+    error( RtAudioError::WARNING );
+    goto quit;
+  }
+
+  if (pa_mainloop_run(m, &ret) < 0) {
+    errorStream_ << "pa_mainloop_run() failed.";
+    errorText_ = errorStream_.str();
+    error( RtAudioError::WARNING );
+    goto quit;
+  }
+
+  if (ret != 0) {
+    errorStream_ << "could not get server info.";
+    errorText_ = errorStream_.str();
+    error( RtAudioError::WARNING );
+    goto quit;
+  }
+
+quit:
+  if (context)
+    pa_context_unref(context);
+
+  if (m) {
+    pa_mainloop_free(m);
+  }
+
+  pa_xfree(server);
+}
+
+unsigned int RtApiPulse::getDeviceCount( void )
+{
+  collectDeviceInfo();
+  return rt_pa_info.dev.size();
+}
+
+RtAudio::DeviceInfo RtApiPulse::getDeviceInfo( unsigned int device )
+{
+  if (rt_pa_info.dev.size()==0)
+      collectDeviceInfo();
+  if (device < rt_pa_info.dev.size())
+    return rt_pa_info.dev[device].info;
+  return RtAudio::DeviceInfo();
 }
 
 static void *pulseaudio_callback( void * user )
@@ -8679,15 +8981,18 @@ void RtApiPulse::stopStream( void )
   stream_.state = STREAM_STOPPED;
   MUTEX_LOCK( &stream_.mutex );
 
-  if ( pah && pah->s_play ) {
-    int pa_error;
-    if ( pa_simple_drain( pah->s_play, &pa_error ) < 0 ) {
-      errorStream_ << "RtApiPulse::stopStream: error draining output device, " <<
-        pa_strerror( pa_error ) << ".";
-      errorText_ = errorStream_.str();
-      MUTEX_UNLOCK( &stream_.mutex );
-      error( RtAudioError::SYSTEM_ERROR );
-      return;
+  if ( pah ) {
+    pah->runnable = false;
+    if ( pah->s_play ) {
+      int pa_error;
+      if ( pa_simple_drain( pah->s_play, &pa_error ) < 0 ) {
+        errorStream_ << "RtApiPulse::stopStream: error draining output device, " <<
+          pa_strerror( pa_error ) << ".";
+        errorText_ = errorStream_.str();
+        MUTEX_UNLOCK( &stream_.mutex );
+        error( RtAudioError::SYSTEM_ERROR );
+        return;
+      }
     }
   }
 
@@ -8713,15 +9018,18 @@ void RtApiPulse::abortStream( void )
   stream_.state = STREAM_STOPPED;
   MUTEX_LOCK( &stream_.mutex );
 
-  if ( pah && pah->s_play ) {
-    int pa_error;
-    if ( pa_simple_flush( pah->s_play, &pa_error ) < 0 ) {
-      errorStream_ << "RtApiPulse::abortStream: error flushing output device, " <<
-        pa_strerror( pa_error ) << ".";
-      errorText_ = errorStream_.str();
-      MUTEX_UNLOCK( &stream_.mutex );
-      error( RtAudioError::SYSTEM_ERROR );
-      return;
+  if ( pah ) {
+    pah->runnable = false;
+    if ( pah->s_play ) {
+      int pa_error;
+      if ( pa_simple_flush( pah->s_play, &pa_error ) < 0 ) {
+        errorStream_ << "RtApiPulse::abortStream: error flushing output device, " <<
+          pa_strerror( pa_error ) << ".";
+        errorText_ = errorStream_.str();
+        MUTEX_UNLOCK( &stream_.mutex );
+        error( RtAudioError::SYSTEM_ERROR );
+        return;
+      }
     }
   }
 
@@ -8738,15 +9046,51 @@ bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode,
   unsigned long bufferBytes = 0;
   pa_sample_spec ss;
 
-  if ( device != 0 ) return false;
-  if ( mode != INPUT && mode != OUTPUT ) return false;
-  if ( channels != 1 && channels != 2 ) {
-    errorText_ = "RtApiPulse::probeDeviceOpen: unsupported number of channels.";
+  if ( device >= rt_pa_info.dev.size() ) return false;
+  if ( firstChannel != 0 ) {
+    errorText_ = "PulseAudio does not support channel offset mapping.";
+    return false;
+  }
+
+  /* these may be NULL for default, but we've already got the names */
+  const char *dev_input = NULL;
+  const char *dev_output = NULL;
+  if (!rt_pa_info.dev[device].source_name.empty())
+    dev_input = rt_pa_info.dev[device].source_name.c_str();
+  if (!rt_pa_info.dev[device].sink_name.empty())
+    dev_output = rt_pa_info.dev[device].sink_name.c_str();
+
+  if (mode==INPUT && rt_pa_info.dev[device].info.inputChannels == 0) {
+    errorText_ = "PulseAudio device does not support input.";
+    return false;
+  }
+  if (mode==OUTPUT && rt_pa_info.dev[device].info.outputChannels == 0) {
+    errorText_ = "PulseAudio device does not support output.";
+    return false;
+  }
+  if (mode==DUPLEX && rt_pa_info.dev[device].info.duplexChannels == 0) {
+    /* Note: will always error, DUPLEX not yet supported */
+    errorText_ = "PulseAudio device does not support duplex.";
+    return false;
+  }
+
+  if (mode==INPUT && rt_pa_info.dev[device].info.inputChannels < channels) {
+    errorText_ = "PulseAudio: unsupported number of input channels.";
     return false;
   }
-  ss.channels = channels;
 
-  if ( firstChannel != 0 ) return false;
+  if (mode==OUTPUT && rt_pa_info.dev[device].info.outputChannels < channels) {
+    errorText_ = "PulseAudio: unsupported number of output channels.";
+    return false;
+  }
+
+  if (mode==DUPLEX && rt_pa_info.dev[device].info.duplexChannels < channels) {
+    /* Note: will always error, DUPLEX not yet supported */
+    errorText_ = "PulseAudio: unsupported number of duplex channels.";
+    return false;
+  }
+
+  ss.channels = channels;
 
   bool sr_found = false;
   for ( const unsigned int *sr = SUPPORTED_SAMPLERATES; *sr; ++sr ) {
@@ -8758,8 +9102,8 @@ bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode,
     }
   }
   if ( !sr_found ) {
-    errorText_ = "RtApiPulse::probeDeviceOpen: unsupported sample rate.";
-    return false;
+    stream_.sampleRate = sampleRate;
+    ss.rate = sampleRate;
   }
 
   bool sf_found = 0;
@@ -8783,7 +9127,7 @@ bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode,
   if ( options && options->flags & RTAUDIO_NONINTERLEAVED ) stream_.userInterleaved = false;
   else stream_.userInterleaved = true;
   stream_.deviceInterleaved[mode] = true;
-  stream_.nBuffers = 1;
+  stream_.nBuffers = options ? options->numberOfBuffers : 1;
   stream_.doByteSwap[mode] = false;
   stream_.nUserChannels[mode] = channels;
   stream_.nDeviceChannels[mode] = channels + firstChannel;
@@ -8796,6 +9140,8 @@ bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode,
     stream_.doConvertBuffer[mode] = true;
   if ( stream_.nUserChannels[mode] < stream_.nDeviceChannels[mode] )
     stream_.doConvertBuffer[mode] = true;
+  if ( stream_.userInterleaved != stream_.deviceInterleaved[mode] )
+    stream_.doConvertBuffer[mode] = true;
 
   // Allocate necessary internal buffers.
   bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat );
@@ -8851,24 +9197,47 @@ bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode,
   int error;
   if ( options && !options->streamName.empty() ) streamName = options->streamName;
   switch ( mode ) {
-  case INPUT:
     pa_buffer_attr buffer_attr;
+  case INPUT:
     buffer_attr.fragsize = bufferBytes;
     buffer_attr.maxlength = -1;
 
-    pah->s_rec = pa_simple_new( NULL, streamName.c_str(), PA_STREAM_RECORD, NULL, "Record", &ss, NULL, &buffer_attr, &error );
+    pah->s_rec = pa_simple_new( NULL, streamName.c_str(), PA_STREAM_RECORD,
+                                dev_input, "Record", &ss, NULL, &buffer_attr, &error );
     if ( !pah->s_rec ) {
       errorText_ = "RtApiPulse::probeDeviceOpen: error connecting input to PulseAudio server.";
       goto error;
     }
     break;
-  case OUTPUT:
-    pah->s_play = pa_simple_new( NULL, streamName.c_str(), PA_STREAM_PLAYBACK, NULL, "Playback", &ss, NULL, NULL, &error );
+  case OUTPUT: {
+    pa_buffer_attr * attr_ptr;
+
+    if ( options && options->numberOfBuffers > 0 ) {
+      // pa_buffer_attr::fragsize is recording-only.
+      // Hopefully PortAudio won't access uninitialized fields.
+      buffer_attr.maxlength = bufferBytes * options->numberOfBuffers;
+      buffer_attr.minreq = -1;
+      buffer_attr.prebuf = -1;
+      buffer_attr.tlength = -1;
+      attr_ptr = &buffer_attr;
+    } else {
+      attr_ptr = nullptr;
+    }
+
+    pah->s_play = pa_simple_new( NULL, streamName.c_str(), PA_STREAM_PLAYBACK,
+                                 dev_output, "Playback", &ss, NULL, attr_ptr, &error );
     if ( !pah->s_play ) {
       errorText_ = "RtApiPulse::probeDeviceOpen: error connecting output to PulseAudio server.";
       goto error;
     }
     break;
+  }
+  case DUPLEX:
+    /* Note: We could add DUPLEX by synchronizing multiple streams,
+       but it would mean moving from Simple API to Asynchronous API:
+       https://freedesktop.org/software/pulseaudio/doxygen/streams.html#sync_streams */
+    errorText_ = "RtApiPulse::probeDeviceOpen: duplex not supported for PulseAudio.";
+    goto error;
   default:
     goto error;
   }
@@ -10117,24 +10486,19 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
   // data interleaving/deinterleaving.  24-bit integers are assumed to occupy
   // the lower three bytes of a 32-bit integer.
 
-  // Clear our device buffer when in/out duplex device channels are different
-  if ( outBuffer == stream_.deviceBuffer && stream_.mode == DUPLEX &&
-       ( stream_.nDeviceChannels[0] < stream_.nDeviceChannels[1] ) )
+  // Clear our duplex device output buffer if there are more device outputs than user outputs
+  if ( outBuffer == stream_.deviceBuffer && stream_.mode == DUPLEX && info.outJump > info.inJump )
     memset( outBuffer, 0, stream_.bufferSize * info.outJump * formatBytes( info.outFormat ) );
 
   int j;
   if (info.outFormat == RTAUDIO_FLOAT64) {
-    Float64 scale;
     Float64 *out = (Float64 *)outBuffer;
 
     if (info.inFormat == RTAUDIO_SINT8) {
       signed char *in = (signed char *)inBuffer;
-      scale = 1.0 / 127.5;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Float64) in[info.inOffset[j]];
-          out[info.outOffset[j]] += 0.5;
-          out[info.outOffset[j]] *= scale;
+          out[info.outOffset[j]] = (Float64) in[info.inOffset[j]] / 128.0;
         }
         in += info.inJump;
         out += info.outJump;
@@ -10142,12 +10506,9 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
     }
     else if (info.inFormat == RTAUDIO_SINT16) {
       Int16 *in = (Int16 *)inBuffer;
-      scale = 1.0 / 32767.5;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Float64) in[info.inOffset[j]];
-          out[info.outOffset[j]] += 0.5;
-          out[info.outOffset[j]] *= scale;
+          out[info.outOffset[j]] = (Float64) in[info.inOffset[j]] / 32768.0;
         }
         in += info.inJump;
         out += info.outJump;
@@ -10155,12 +10516,9 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
     }
     else if (info.inFormat == RTAUDIO_SINT24) {
       Int24 *in = (Int24 *)inBuffer;
-      scale = 1.0 / 8388607.5;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Float64) (in[info.inOffset[j]].asInt());
-          out[info.outOffset[j]] += 0.5;
-          out[info.outOffset[j]] *= scale;
+          out[info.outOffset[j]] = (Float64) in[info.inOffset[j]].asInt() / 8388608.0;
         }
         in += info.inJump;
         out += info.outJump;
@@ -10168,12 +10526,9 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
     }
     else if (info.inFormat == RTAUDIO_SINT32) {
       Int32 *in = (Int32 *)inBuffer;
-      scale = 1.0 / 2147483647.5;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Float64) in[info.inOffset[j]];
-          out[info.outOffset[j]] += 0.5;
-          out[info.outOffset[j]] *= scale;
+          out[info.outOffset[j]] = (Float64) in[info.inOffset[j]] / 2147483648.0;
         }
         in += info.inJump;
         out += info.outJump;
@@ -10202,17 +10557,13 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
     }
   }
   else if (info.outFormat == RTAUDIO_FLOAT32) {
-    Float32 scale;
     Float32 *out = (Float32 *)outBuffer;
 
     if (info.inFormat == RTAUDIO_SINT8) {
       signed char *in = (signed char *)inBuffer;
-      scale = (Float32) ( 1.0 / 127.5 );
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Float32) in[info.inOffset[j]];
-          out[info.outOffset[j]] += 0.5;
-          out[info.outOffset[j]] *= scale;
+          out[info.outOffset[j]] = (Float32) in[info.inOffset[j]] / 128.f;
         }
         in += info.inJump;
         out += info.outJump;
@@ -10220,12 +10571,9 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
     }
     else if (info.inFormat == RTAUDIO_SINT16) {
       Int16 *in = (Int16 *)inBuffer;
-      scale = (Float32) ( 1.0 / 32767.5 );
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Float32) in[info.inOffset[j]];
-          out[info.outOffset[j]] += 0.5;
-          out[info.outOffset[j]] *= scale;
+          out[info.outOffset[j]] = (Float32) in[info.inOffset[j]] / 32768.f;
         }
         in += info.inJump;
         out += info.outJump;
@@ -10233,12 +10581,9 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
     }
     else if (info.inFormat == RTAUDIO_SINT24) {
       Int24 *in = (Int24 *)inBuffer;
-      scale = (Float32) ( 1.0 / 8388607.5 );
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Float32) (in[info.inOffset[j]].asInt());
-          out[info.outOffset[j]] += 0.5;
-          out[info.outOffset[j]] *= scale;
+          out[info.outOffset[j]] = (Float32) in[info.inOffset[j]].asInt() / 8388608.f;
         }
         in += info.inJump;
         out += info.outJump;
@@ -10246,12 +10591,9 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
     }
     else if (info.inFormat == RTAUDIO_SINT32) {
       Int32 *in = (Int32 *)inBuffer;
-      scale = (Float32) ( 1.0 / 2147483647.5 );
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Float32) in[info.inOffset[j]];
-          out[info.outOffset[j]] += 0.5;
-          out[info.outOffset[j]] *= scale;
+          out[info.outOffset[j]] = (Float32) in[info.inOffset[j]] / 2147483648.f;
         }
         in += info.inJump;
         out += info.outJump;
@@ -10329,7 +10671,8 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
       Float32 *in = (Float32 *)inBuffer;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Int32) (in[info.inOffset[j]] * 2147483647.5 - 0.5);
+          // Use llround() which returns `long long` which is guaranteed to be at least 64 bits.
+          out[info.outOffset[j]] = (Int32) std::min(std::llround(in[info.inOffset[j]] * 2147483648.f), 2147483647LL);
         }
         in += info.inJump;
         out += info.outJump;
@@ -10339,7 +10682,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
       Float64 *in = (Float64 *)inBuffer;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Int32) (in[info.inOffset[j]] * 2147483647.5 - 0.5);
+          out[info.outOffset[j]] = (Int32) std::min(std::llround(in[info.inOffset[j]] * 2147483648.0), 2147483647LL);
         }
         in += info.inJump;
         out += info.outJump;
@@ -10396,7 +10739,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
       Float32 *in = (Float32 *)inBuffer;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Int32) (in[info.inOffset[j]] * 8388607.5 - 0.5);
+          out[info.outOffset[j]] = (Int32) std::min(std::llround(in[info.inOffset[j]] * 8388608.f), 8388607LL);
         }
         in += info.inJump;
         out += info.outJump;
@@ -10406,7 +10749,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
       Float64 *in = (Float64 *)inBuffer;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Int32) (in[info.inOffset[j]] * 8388607.5 - 0.5);
+          out[info.outOffset[j]] = (Int32) std::min(std::llround(in[info.inOffset[j]] * 8388608.0), 8388607LL);
         }
         in += info.inJump;
         out += info.outJump;
@@ -10461,7 +10804,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
       Float32 *in = (Float32 *)inBuffer;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Int16) (in[info.inOffset[j]] * 32767.5 - 0.5);
+          out[info.outOffset[j]] = (Int16) std::min(std::llround(in[info.inOffset[j]] * 32768.f), 32767LL);
         }
         in += info.inJump;
         out += info.outJump;
@@ -10471,7 +10814,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
       Float64 *in = (Float64 *)inBuffer;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (Int16) (in[info.inOffset[j]] * 32767.5 - 0.5);
+          out[info.outOffset[j]] = (Int16) std::min(std::llround(in[info.inOffset[j]] * 32768.0), 32767LL);
         }
         in += info.inJump;
         out += info.outJump;
@@ -10525,7 +10868,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
       Float32 *in = (Float32 *)inBuffer;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (signed char) (in[info.inOffset[j]] * 127.5 - 0.5);
+          out[info.outOffset[j]] = (signed char) std::min(std::llround(in[info.inOffset[j]] * 128.f), 127LL);
         }
         in += info.inJump;
         out += info.outJump;
@@ -10535,7 +10878,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info
       Float64 *in = (Float64 *)inBuffer;
       for (unsigned int i=0; i<stream_.bufferSize; i++) {
         for (j=0; j<info.channels; j++) {
-          out[info.outOffset[j]] = (signed char) (in[info.inOffset[j]] * 127.5 - 0.5);
+          out[info.outOffset[j]] = (signed char) std::min(std::llround(in[info.inOffset[j]] * 128.0), 127LL);
         }
         in += info.inJump;
         out += info.outJump;
diff --git a/src/rtaudio/RtAudio.h b/src/rtaudio/RtAudio.h
index 17f442b..1aa42e0 100644
--- a/src/rtaudio/RtAudio.h
+++ b/src/rtaudio/RtAudio.h
@@ -11,7 +11,7 @@
     RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
 
     RtAudio: realtime audio i/o C++ classes
-    Copyright (c) 2001-2019 Gary P. Scavone
+    Copyright (c) 2001-2021 Gary P. Scavone
 
     Permission is hereby granted, free of charge, to any person
     obtaining a copy of this software and associated documentation files
@@ -46,7 +46,7 @@
 #ifndef __RTAUDIO_H
 #define __RTAUDIO_H
 
-#define RTAUDIO_VERSION "5.1.0"
+#define RTAUDIO_VERSION "5.2.0"
 
 #if defined _WIN32 || defined __CYGWIN__
   #if defined(RTAUDIO_EXPORT)
@@ -226,12 +226,12 @@ class RTAUDIO_DLL_PUBLIC RtAudioError : public std::runtime_error
     UNSPECIFIED,       /*!< The default, unspecified error type. */
     NO_DEVICES_FOUND,  /*!< No devices found on system. */
     INVALID_DEVICE,    /*!< An invalid device ID was specified. */
-    MEMORY_ERROR,      /*!< An error occured during memory allocation. */
+    MEMORY_ERROR,      /*!< An error occurred during memory allocation. */
     INVALID_PARAMETER, /*!< An invalid parameter was specified to a function. */
     INVALID_USE,       /*!< The function was called incorrectly. */
-    DRIVER_ERROR,      /*!< A system driver error occured. */
-    SYSTEM_ERROR,      /*!< A system error occured. */
-    THREAD_ERROR       /*!< A thread error occured. */
+    DRIVER_ERROR,      /*!< A system driver error occurred. */
+    SYSTEM_ERROR,      /*!< A system error occurred. */
+    THREAD_ERROR       /*!< A thread error occurred. */
   };
 
   //! The constructor.
@@ -299,30 +299,21 @@ class RTAUDIO_DLL_PUBLIC RtAudio
   struct DeviceInfo {
     bool probed;                  /*!< true if the device capabilities were successfully probed. */
     std::string name;             /*!< Character string device identifier. */
-    unsigned int outputChannels;  /*!< Maximum output channels supported by device. */
-    unsigned int inputChannels;   /*!< Maximum input channels supported by device. */
-    unsigned int duplexChannels;  /*!< Maximum simultaneous input/output channels supported by device. */
-    bool isDefaultOutput;         /*!< true if this is the default output device. */
-    bool isDefaultInput;          /*!< true if this is the default input device. */
+    unsigned int outputChannels{};  /*!< Maximum output channels supported by device. */
+    unsigned int inputChannels{};   /*!< Maximum input channels supported by device. */
+    unsigned int duplexChannels{};  /*!< Maximum simultaneous input/output channels supported by device. */
+    bool isDefaultOutput{false};         /*!< true if this is the default output device. */
+    bool isDefaultInput{false};          /*!< true if this is the default input device. */
     std::vector<unsigned int> sampleRates; /*!< Supported sample rates (queried from list of standard rates). */
-    unsigned int preferredSampleRate; /*!< Preferred sample rate, e.g. for WASAPI the system sample rate. */
-    RtAudioFormat nativeFormats;  /*!< Bit mask of supported data formats. */
-
-    // Default constructor.
-    DeviceInfo()
-      :probed(false), outputChannels(0), inputChannels(0), duplexChannels(0),
-       isDefaultOutput(false), isDefaultInput(false), preferredSampleRate(0), nativeFormats(0) {}
+    unsigned int preferredSampleRate{}; /*!< Preferred sample rate, e.g. for WASAPI the system sample rate. */
+    RtAudioFormat nativeFormats{};  /*!< Bit mask of supported data formats. */
   };
 
-  //! The structure for specifying input or ouput stream parameters.
+  //! The structure for specifying input or output stream parameters.
   struct StreamParameters {
-    unsigned int deviceId;     /*!< Device index (0 to getDeviceCount() - 1). */
-    unsigned int nChannels;    /*!< Number of channels. */
-    unsigned int firstChannel; /*!< First channel index on device (default = 0). */
-
-    // Default constructor.
-    StreamParameters()
-      : deviceId(0), nChannels(0), firstChannel(0) {}
+    unsigned int deviceId{};     /*!< Device index (0 to getDeviceCount() - 1). */
+    unsigned int nChannels{};    /*!< Number of channels. */
+    unsigned int firstChannel{}; /*!< First channel index on device (default = 0). */
   };
 
   //! The structure for specifying stream options.
@@ -383,14 +374,10 @@ class RTAUDIO_DLL_PUBLIC RtAudio
     RtAudio with Jack, each instance must have a unique client name.
   */
   struct StreamOptions {
-    RtAudioStreamFlags flags;      /*!< A bit-mask of stream flags (RTAUDIO_NONINTERLEAVED, RTAUDIO_MINIMIZE_LATENCY, RTAUDIO_HOG_DEVICE, RTAUDIO_ALSA_USE_DEFAULT). */
-    unsigned int numberOfBuffers;  /*!< Number of stream buffers. */
+    RtAudioStreamFlags flags{};      /*!< A bit-mask of stream flags (RTAUDIO_NONINTERLEAVED, RTAUDIO_MINIMIZE_LATENCY, RTAUDIO_HOG_DEVICE, RTAUDIO_ALSA_USE_DEFAULT). */
+    unsigned int numberOfBuffers{};  /*!< Number of stream buffers. */
     std::string streamName;        /*!< A stream name (currently used only in Jack). */
-    int priority;                  /*!< Scheduling priority of callback thread (only used with flag RTAUDIO_SCHEDULE_REALTIME). */
-
-    // Default constructor.
-    StreamOptions()
-    : flags(0), numberOfBuffers(0), priority(0) {}
+    int priority{};                  /*!< Scheduling priority of callback thread (only used with flag RTAUDIO_SCHEDULE_REALTIME). */
   };
 
   //! A static function to determine the current RtAudio version.
@@ -527,7 +514,7 @@ class RTAUDIO_DLL_PUBLIC RtAudio
            lowest allowable value is used.  The actual value used is
            returned via the structure argument.  The parameter is API dependent.
     \param errorCallback A client-defined function that will be invoked
-           when an error has occured.
+           when an error has occurred.
   */
   void openStream( RtAudio::StreamParameters *outputParameters,
                    RtAudio::StreamParameters *inputParameters,
@@ -616,7 +603,7 @@ class RTAUDIO_DLL_PUBLIC RtAudio
 };
 
 // Operating system dependent thread functionality.
-#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_WASAPI__)
+#if defined(_WIN32) || defined(__CYGWIN__)
 
   #ifndef NOMINMAX
     #define NOMINMAX
@@ -628,18 +615,22 @@ class RTAUDIO_DLL_PUBLIC RtAudio
   typedef uintptr_t ThreadHandle;
   typedef CRITICAL_SECTION StreamMutex;
 
-#elif defined(__LINUX_ALSA__) || defined(__LINUX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__)
+#else
+
   // Using pthread library for various flavors of unix.
   #include <pthread.h>
 
   typedef pthread_t ThreadHandle;
   typedef pthread_mutex_t StreamMutex;
 
-#else // Setup for "dummy" behavior
+#endif
+
+// Setup for "dummy" behavior if no apis specified.
+#if !(defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_WASAPI__) \
+      || defined(__LINUX_ALSA__) || defined(__LINUX_PULSE__) || defined(__UNIX_JACK__) \
+      || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__))
 
   #define __RTAUDIO_DUMMY__
-  typedef int ThreadHandle;
-  typedef int StreamMutex;
 
 #endif
 
@@ -647,19 +638,15 @@ class RTAUDIO_DLL_PUBLIC RtAudio
 // between the private RtAudio stream structure and global callback
 // handling functions.
 struct CallbackInfo {
-  void *object;    // Used as a "this" pointer.
-  ThreadHandle thread;
-  void *callback;
-  void *userData;
-  void *errorCallback;
-  void *apiInfo;   // void pointer for API specific callback information
-  bool isRunning;
-  bool doRealtime;
-  int priority;
-
-  // Default constructor.
-  CallbackInfo()
-  :object(0), callback(0), userData(0), errorCallback(0), apiInfo(0), isRunning(false), doRealtime(false), priority(0) {}
+  void *object{};    // Used as a "this" pointer.
+  ThreadHandle thread{};
+  void *callback{};
+  void *userData{};
+  void *errorCallback{};
+  void *apiInfo{};   // void pointer for API specific callback information
+  bool isRunning{false};
+  bool doRealtime{false};
+  int priority{};
 };
 
 // **************************************************************** //
@@ -686,9 +673,9 @@ class S24 {
   S24() {}
 
   S24& operator = ( const int& i ) {
-    c3[0] = (i & 0x000000ff);
-    c3[1] = (i & 0x0000ff00) >> 8;
-    c3[2] = (i & 0x00ff0000) >> 16;
+    c3[0] = (unsigned char)(i & 0x000000ff);
+    c3[1] = (unsigned char)((i & 0x0000ff00) >> 8);
+    c3[2] = (unsigned char)((i & 0x00ff0000) >> 16);
     return *this;
   }
 
@@ -895,20 +882,20 @@ public:
 
   RtApiCore();
   ~RtApiCore();
-  RtAudio::Api getCurrentApi( void ) { return RtAudio::MACOSX_CORE; }
-  unsigned int getDeviceCount( void );
-  RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-  unsigned int getDefaultOutputDevice( void );
-  unsigned int getDefaultInputDevice( void );
-  void closeStream( void );
-  void startStream( void );
-  void stopStream( void );
-  void abortStream( void );
+  RtAudio::Api getCurrentApi( void ) override { return RtAudio::MACOSX_CORE; }
+  unsigned int getDeviceCount( void ) override;
+  RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
+  unsigned int getDefaultOutputDevice( void ) override;
+  unsigned int getDefaultInputDevice( void ) override;
+  void closeStream( void ) override;
+  void startStream( void ) override;
+  void stopStream( void ) override;
+  void abortStream( void ) override;
 
   // This function is intended for internal use only.  It must be
   // public because it is called by the internal callback handler,
   // which is not a member of RtAudio.  External use of this function
-  // will most likely produce highly undesireable results!
+  // will most likely produce highly undesirable results!
   bool callbackEvent( AudioDeviceID deviceId,
                       const AudioBufferList *inBufferList,
                       const AudioBufferList *outBufferList );
@@ -918,7 +905,7 @@ public:
   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int *bufferSize,
-                        RtAudio::StreamOptions *options );
+                        RtAudio::StreamOptions *options ) override;
   static const char* getErrorCode( OSStatus code );
 };
 
@@ -932,18 +919,18 @@ public:
 
   RtApiJack();
   ~RtApiJack();
-  RtAudio::Api getCurrentApi( void ) { return RtAudio::UNIX_JACK; }
-  unsigned int getDeviceCount( void );
-  RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-  void closeStream( void );
-  void startStream( void );
-  void stopStream( void );
-  void abortStream( void );
+  RtAudio::Api getCurrentApi( void ) override { return RtAudio::UNIX_JACK; }
+  unsigned int getDeviceCount( void ) override;
+  RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
+  void closeStream( void ) override;
+  void startStream( void ) override;
+  void stopStream( void ) override;
+  void abortStream( void ) override;
 
   // This function is intended for internal use only.  It must be
   // public because it is called by the internal callback handler,
   // which is not a member of RtAudio.  External use of this function
-  // will most likely produce highly undesireable results!
+  // will most likely produce highly undesirable results!
   bool callbackEvent( unsigned long nframes );
 
   private:
@@ -951,7 +938,7 @@ public:
   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int *bufferSize,
-                        RtAudio::StreamOptions *options );
+                        RtAudio::StreamOptions *options ) override;
 
   bool shouldAutoconnect_;
 };
@@ -966,18 +953,20 @@ public:
 
   RtApiAsio();
   ~RtApiAsio();
-  RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_ASIO; }
-  unsigned int getDeviceCount( void );
-  RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-  void closeStream( void );
-  void startStream( void );
-  void stopStream( void );
-  void abortStream( void );
+  RtAudio::Api getCurrentApi( void ) override { return RtAudio::WINDOWS_ASIO; }
+  unsigned int getDeviceCount( void ) override;
+  unsigned int getDefaultOutputDevice( void ) override;
+  unsigned int getDefaultInputDevice( void ) override;
+  RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
+  void closeStream( void ) override;
+  void startStream( void ) override;
+  void stopStream( void ) override;
+  void abortStream( void ) override;
 
   // This function is intended for internal use only.  It must be
   // public because it is called by the internal callback handler,
   // which is not a member of RtAudio.  External use of this function
-  // will most likely produce highly undesireable results!
+  // will most likely produce highly undesirable results!
   bool callbackEvent( long bufferIndex );
 
   private:
@@ -988,7 +977,7 @@ public:
   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int *bufferSize,
-                        RtAudio::StreamOptions *options );
+                        RtAudio::StreamOptions *options ) override;
 };
 
 #endif
@@ -1001,20 +990,20 @@ public:
 
   RtApiDs();
   ~RtApiDs();
-  RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_DS; }
-  unsigned int getDeviceCount( void );
-  unsigned int getDefaultOutputDevice( void );
-  unsigned int getDefaultInputDevice( void );
-  RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-  void closeStream( void );
-  void startStream( void );
-  void stopStream( void );
-  void abortStream( void );
+  RtAudio::Api getCurrentApi( void ) override { return RtAudio::WINDOWS_DS; }
+  unsigned int getDeviceCount( void ) override;
+  unsigned int getDefaultOutputDevice( void ) override;
+  unsigned int getDefaultInputDevice( void ) override;
+  RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
+  void closeStream( void ) override;
+  void startStream( void ) override;
+  void stopStream( void ) override;
+  void abortStream( void ) override;
 
   // This function is intended for internal use only.  It must be
   // public because it is called by the internal callback handler,
   // which is not a member of RtAudio.  External use of this function
-  // will most likely produce highly undesireable results!
+  // will most likely produce highly undesirable results!
   void callbackEvent( void );
 
   private:
@@ -1026,7 +1015,7 @@ public:
   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int *bufferSize,
-                        RtAudio::StreamOptions *options );
+                        RtAudio::StreamOptions *options ) override;
 };
 
 #endif
@@ -1041,15 +1030,13 @@ public:
   RtApiWasapi();
   virtual ~RtApiWasapi();
 
-  RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_WASAPI; }
-  unsigned int getDeviceCount( void );
-  RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-  unsigned int getDefaultOutputDevice( void );
-  unsigned int getDefaultInputDevice( void );
-  void closeStream( void );
-  void startStream( void );
-  void stopStream( void );
-  void abortStream( void );
+  RtAudio::Api getCurrentApi( void ) override { return RtAudio::WINDOWS_WASAPI; }
+  unsigned int getDeviceCount( void ) override;
+  RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
+  void closeStream( void ) override;
+  void startStream( void ) override;
+  void stopStream( void ) override;
+  void abortStream( void ) override;
 
 private:
   bool coInitialized_;
@@ -1058,7 +1045,7 @@ private:
   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int* bufferSize,
-                        RtAudio::StreamOptions* options );
+                        RtAudio::StreamOptions* options ) override;
 
   static DWORD WINAPI runWasapiThread( void* wasapiPtr );
   static DWORD WINAPI stopWasapiThread( void* wasapiPtr );
@@ -1076,18 +1063,18 @@ public:
 
   RtApiAlsa();
   ~RtApiAlsa();
-  RtAudio::Api getCurrentApi() { return RtAudio::LINUX_ALSA; }
-  unsigned int getDeviceCount( void );
-  RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-  void closeStream( void );
-  void startStream( void );
-  void stopStream( void );
-  void abortStream( void );
+  RtAudio::Api getCurrentApi() override { return RtAudio::LINUX_ALSA; }
+  unsigned int getDeviceCount( void ) override;
+  RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
+  void closeStream( void ) override;
+  void startStream( void ) override;
+  void stopStream( void ) override;
+  void abortStream( void ) override;
 
   // This function is intended for internal use only.  It must be
   // public because it is called by the internal callback handler,
   // which is not a member of RtAudio.  External use of this function
-  // will most likely produce highly undesireable results!
+  // will most likely produce highly undesirable results!
   void callbackEvent( void );
 
   private:
@@ -1097,7 +1084,7 @@ public:
   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int *bufferSize,
-                        RtAudio::StreamOptions *options );
+                        RtAudio::StreamOptions *options ) override;
 };
 
 #endif
@@ -1108,28 +1095,27 @@ class RtApiPulse: public RtApi
 {
 public:
   ~RtApiPulse();
-  RtAudio::Api getCurrentApi() { return RtAudio::LINUX_PULSE; }
-  unsigned int getDeviceCount( void );
-  RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-  void closeStream( void );
-  void startStream( void );
-  void stopStream( void );
-  void abortStream( void );
+  RtAudio::Api getCurrentApi() override { return RtAudio::LINUX_PULSE; }
+  unsigned int getDeviceCount( void ) override;
+  RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
+  void closeStream( void ) override;
+  void startStream( void ) override;
+  void stopStream( void ) override;
+  void abortStream( void ) override;
 
   // This function is intended for internal use only.  It must be
   // public because it is called by the internal callback handler,
   // which is not a member of RtAudio.  External use of this function
-  // will most likely produce highly undesireable results!
+  // will most likely produce highly undesirable results!
   void callbackEvent( void );
 
   private:
 
-  std::vector<RtAudio::DeviceInfo> devices_;
-  void saveDeviceInfo( void );
+  void collectDeviceInfo( void );
   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int *bufferSize,
-                        RtAudio::StreamOptions *options );
+                        RtAudio::StreamOptions *options ) override;
 };
 
 #endif
@@ -1142,18 +1128,18 @@ public:
 
   RtApiOss();
   ~RtApiOss();
-  RtAudio::Api getCurrentApi() { return RtAudio::LINUX_OSS; }
-  unsigned int getDeviceCount( void );
-  RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-  void closeStream( void );
-  void startStream( void );
-  void stopStream( void );
-  void abortStream( void );
+  RtAudio::Api getCurrentApi() override { return RtAudio::LINUX_OSS; }
+  unsigned int getDeviceCount( void ) override;
+  RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
+  void closeStream( void ) override;
+  void startStream( void ) override;
+  void stopStream( void ) override;
+  void abortStream( void ) override;
 
   // This function is intended for internal use only.  It must be
   // public because it is called by the internal callback handler,
   // which is not a member of RtAudio.  External use of this function
-  // will most likely produce highly undesireable results!
+  // will most likely produce highly undesirable results!
   void callbackEvent( void );
 
   private:
@@ -1161,7 +1147,7 @@ public:
   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int *bufferSize,
-                        RtAudio::StreamOptions *options );
+                        RtAudio::StreamOptions *options ) override;
 };
 
 #endif
@@ -1173,20 +1159,20 @@ class RtApiDummy: public RtApi
 public:
 
   RtApiDummy() { errorText_ = "RtApiDummy: This class provides no functionality."; error( RtAudioError::WARNING ); }
-  RtAudio::Api getCurrentApi( void ) { return RtAudio::RTAUDIO_DUMMY; }
-  unsigned int getDeviceCount( void ) { return 0; }
-  RtAudio::DeviceInfo getDeviceInfo( unsigned int /*device*/ ) { RtAudio::DeviceInfo info; return info; }
-  void closeStream( void ) {}
-  void startStream( void ) {}
-  void stopStream( void ) {}
-  void abortStream( void ) {}
+  RtAudio::Api getCurrentApi( void ) override { return RtAudio::RTAUDIO_DUMMY; }
+  unsigned int getDeviceCount( void ) override { return 0; }
+  RtAudio::DeviceInfo getDeviceInfo( unsigned int /*device*/ ) override { RtAudio::DeviceInfo info; return info; }
+  void closeStream( void ) override {}
+  void startStream( void ) override {}
+  void stopStream( void ) override {}
+  void abortStream( void ) override {}
 
   private:
 
   bool probeDeviceOpen( unsigned int /*device*/, StreamMode /*mode*/, unsigned int /*channels*/, 
                         unsigned int /*firstChannel*/, unsigned int /*sampleRate*/,
                         RtAudioFormat /*format*/, unsigned int * /*bufferSize*/,
-                        RtAudio::StreamOptions * /*options*/ ) { return false; }
+                        RtAudio::StreamOptions * /*options*/ ) override { return false; }
 };
 
 #endif
diff --git a/src/rtaudio/RtAudio.os b/src/rtaudio/RtAudio.os
index f2dfd26c1a6b2994d015badbc29eeb137ae99ef1..7da86472b3334fa616dd67ddc74050896c89bd0d 100644
GIT binary patch
literal 77320
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
SkjoetCZlzrA);WdU;+TO_*UEi

literal 114943
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
E0ME=p@&Et;

-- 
GitLab