diff --git a/RtAudio.cpp b/RtAudio.cpp index 2ac2179..f846b43 100644 --- a/RtAudio.cpp +++ b/RtAudio.cpp @@ -76,7 +76,7 @@ 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(__LINUX_ALSA__) || defined(__UNIX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__) // pthread API #define MUTEX_INITIALIZE(A) pthread_mutex_init(A, NULL) #define MUTEX_DESTROY(A) pthread_mutex_destroy(A) @@ -110,8 +110,8 @@ void RtAudio :: getCompiledApi( std::vector &apis ) #if defined(__LINUX_ALSA__) apis.push_back( LINUX_ALSA ); #endif -#if defined(__LINUX_PULSE__) - apis.push_back( LINUX_PULSE ); +#if defined(__UNIX_PULSE__) + apis.push_back( UNIX_PULSE ); #endif #if defined(__LINUX_OSS__) apis.push_back( LINUX_OSS ); @@ -147,8 +147,8 @@ void RtAudio :: openRtApi( RtAudio::Api api ) if ( api == LINUX_ALSA ) rtapi_ = new RtApiAlsa(); #endif -#if defined(__LINUX_PULSE__) - if ( api == LINUX_PULSE ) +#if defined(__UNIX_PULSE__) + if ( api == UNIX_PULSE ) rtapi_ = new RtApiPulse(); #endif #if defined(__LINUX_OSS__) @@ -282,7 +282,7 @@ void RtApi :: openStream( RtAudio::StreamParameters *oParams, return; } - if ( oParams == NULL && iParams == NULL ) { + if ( oParams == NULL && iParams == NULL && getCurrentApi() != RtAudio::RTAUDIO_DUMMY ) { errorText_ = "RtApi::openStream: input and output StreamParameters structures are both NULL!"; error( RtAudioError::INVALID_USE ); return; @@ -1587,6 +1587,8 @@ static void *coreStopStream( void *ptr ) object->stopStream(); pthread_exit( NULL ); + + return NULL; } bool RtApiCore :: callbackEvent( AudioDeviceID deviceId, @@ -1925,7 +1927,7 @@ const char* RtApiCore :: getErrorCode( OSStatus code ) // devices are available (i.e., the JACK server is not running), a // stream cannot be opened. -#include +#include "jackbridge/JackBridge.hpp" #include #include @@ -1944,17 +1946,9 @@ struct JackHandle { :client(0), drainCounter(0), internalDrain(false) { ports[0] = 0; ports[1] = 0; xrun[0] = false; xrun[1] = false; } }; -#if !defined(__RTAUDIO_DEBUG__) -static void jackSilentError( const char * ) {}; -#endif - RtApiJack :: RtApiJack() :shouldAutoconnect_(true) { // Nothing to do here. -#if !defined(__RTAUDIO_DEBUG__) - // Turn off Jack's internal error reporting. - jack_set_error_function( &jackSilentError ); -#endif } RtApiJack :: ~RtApiJack() @@ -1967,13 +1961,13 @@ unsigned int RtApiJack :: getDeviceCount( void ) // See if we can become a jack client. jack_options_t options = (jack_options_t) ( JackNoStartServer ); //JackNullOption; jack_status_t *status = NULL; - jack_client_t *client = jack_client_open( "RtApiJackCount", options, status ); + jack_client_t *client = jackbridge_client_open( "CarlaJackCount", options, status ); if ( client == 0 ) return 0; const char **ports; std::string port, previousPort; unsigned int nChannels = 0, nDevices = 0; - ports = jack_get_ports( client, NULL, NULL, 0 ); + ports = jackbridge_get_ports( client, NULL, NULL, 0 ); if ( ports ) { // Parse the port names up to the first colon (:). size_t iColon = 0; @@ -1988,10 +1982,10 @@ unsigned int RtApiJack :: getDeviceCount( void ) } } } while ( ports[++nChannels] ); - free( ports ); + jackbridge_free( ports ); } - jack_client_close( client ); + jackbridge_client_close( client ); return nDevices; } @@ -2002,7 +1996,7 @@ RtAudio::DeviceInfo RtApiJack :: getDeviceInfo( unsigned int device ) jack_options_t options = (jack_options_t) ( JackNoStartServer ); //JackNullOption jack_status_t *status = NULL; - jack_client_t *client = jack_client_open( "RtApiJackInfo", options, status ); + jack_client_t *client = jackbridge_client_open( "CarlaJackInfo", options, status ); if ( client == 0 ) { errorText_ = "RtApiJack::getDeviceInfo: Jack server not found or connection error!"; error( RtAudioError::WARNING ); @@ -2012,7 +2006,7 @@ RtAudio::DeviceInfo RtApiJack :: getDeviceInfo( unsigned int device ) const char **ports; std::string port, previousPort; unsigned int nPorts = 0, nDevices = 0; - ports = jack_get_ports( client, NULL, NULL, 0 ); + ports = jackbridge_get_ports( client, NULL, NULL, 0 ); if ( ports ) { // Parse the port names up to the first colon (:). size_t iColon = 0; @@ -2028,11 +2022,11 @@ RtAudio::DeviceInfo RtApiJack :: getDeviceInfo( unsigned int device ) } } } while ( ports[++nPorts] ); - free( ports ); + jackbridge_free( ports ); } if ( device >= nDevices ) { - jack_client_close( client ); + jackbridge_client_close( client ); errorText_ = "RtApiJack::getDeviceInfo: device ID is invalid!"; error( RtAudioError::INVALID_USE ); return info; @@ -2041,30 +2035,30 @@ RtAudio::DeviceInfo RtApiJack :: getDeviceInfo( unsigned int device ) // Get the current jack server sample rate. info.sampleRates.clear(); - info.preferredSampleRate = jack_get_sample_rate( client ); + info.preferredSampleRate = jackbridge_get_sample_rate( client ); info.sampleRates.push_back( info.preferredSampleRate ); // Count the available ports containing the client name as device // channels. Jack "input ports" equal RtAudio output channels. unsigned int nChannels = 0; - ports = jack_get_ports( client, info.name.c_str(), NULL, JackPortIsInput ); + ports = jackbridge_get_ports( client, info.name.c_str(), NULL, JackPortIsInput ); if ( ports ) { while ( ports[ nChannels ] ) nChannels++; - free( ports ); + jackbridge_free( ports ); info.outputChannels = nChannels; } // Jack "output ports" equal RtAudio input channels. nChannels = 0; - ports = jack_get_ports( client, info.name.c_str(), NULL, JackPortIsOutput ); + ports = jackbridge_get_ports( client, info.name.c_str(), NULL, JackPortIsOutput ); if ( ports ) { while ( ports[ nChannels ] ) nChannels++; - free( ports ); + jackbridge_free( ports ); info.inputChannels = nChannels; } if ( info.outputChannels == 0 && info.inputChannels == 0 ) { - jack_client_close(client); + jackbridge_client_close(client); errorText_ = "RtApiJack::getDeviceInfo: error determining Jack input/output channels!"; error( RtAudioError::WARNING ); return info; @@ -2083,7 +2077,7 @@ RtAudio::DeviceInfo RtApiJack :: getDeviceInfo( unsigned int device ) if ( device == 0 && info.inputChannels > 0 ) info.isDefaultInput = true; - jack_client_close(client); + jackbridge_client_close(client); info.probed = true; return info; } @@ -2101,7 +2095,7 @@ static int jackCallbackHandler( jack_nframes_t nframes, void *infoPointer ) // This function will be called by a spawned thread when the Jack // server signals that it is shutting down. It is necessary to handle // it this way because the jackShutdown() function must return before -// the jack_deactivate() function (in closeStream()) will return. +// the jackbridge_deactivate() function (in closeStream()) will return. static void *jackCloseStream( void *ptr ) { CallbackInfo *info = (CallbackInfo *) ptr; @@ -2110,6 +2104,8 @@ static void *jackCloseStream( void *ptr ) object->closeStream(); pthread_exit( NULL ); + + return NULL; } static void jackShutdown( void *infoPointer ) { @@ -2151,9 +2147,9 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne jack_options_t jackoptions = (jack_options_t) ( JackNoStartServer ); //JackNullOption; jack_status_t *status = NULL; if ( options && !options->streamName.empty() ) - client = jack_client_open( options->streamName.c_str(), jackoptions, status ); + client = jackbridge_client_open( options->streamName.c_str(), jackoptions, status ); else - client = jack_client_open( "RtApiJack", jackoptions, status ); + client = jackbridge_client_open( "CarlaJack", jackoptions, status ); if ( client == 0 ) { errorText_ = "RtApiJack::probeDeviceOpen: Jack server not found or connection error!"; error( RtAudioError::WARNING ); @@ -2168,7 +2164,7 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne const char **ports; std::string port, previousPort, deviceName; unsigned int nPorts = 0, nDevices = 0; - ports = jack_get_ports( client, NULL, NULL, 0 ); + ports = jackbridge_get_ports( client, NULL, NULL, 0 ); if ( ports ) { // Parse the port names up to the first colon (:). size_t iColon = 0; @@ -2184,7 +2180,7 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne } } } while ( ports[++nPorts] ); - free( ports ); + jackbridge_free( ports ); } if ( device >= nDevices ) { @@ -2197,10 +2193,10 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne unsigned int nChannels = 0; unsigned long flag = JackPortIsInput; if ( mode == INPUT ) flag = JackPortIsOutput; - ports = jack_get_ports( client, deviceName.c_str(), NULL, flag ); + ports = jackbridge_get_ports( client, deviceName.c_str(), NULL, flag ); if ( ports ) { while ( ports[ nChannels ] ) nChannels++; - free( ports ); + jackbridge_free( ports ); } // Compare the jack ports for specified client to the requested number of channels. @@ -2211,29 +2207,26 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne } // Check the jack server sample rate. - unsigned int jackRate = jack_get_sample_rate( client ); + unsigned int jackRate = jackbridge_get_sample_rate( client ); if ( sampleRate != jackRate ) { - jack_client_close( client ); - errorStream_ << "RtApiJack::probeDeviceOpen: the requested sample rate (" << sampleRate << ") is different than the JACK server rate (" << jackRate << ")."; - errorText_ = errorStream_.str(); - return FAILURE; + std::cerr << "RtApiJack::probeDeviceOpen: the requested sample rate (" << sampleRate << ") is different than the JACK server rate (" << jackRate << ")." << std::endl; } stream_.sampleRate = jackRate; // Get the latency of the JACK port. - ports = jack_get_ports( client, deviceName.c_str(), NULL, flag ); + ports = jackbridge_get_ports( client, deviceName.c_str(), NULL, flag ); if ( ports[ firstChannel ] ) { // Added by Ge Wang jack_latency_callback_mode_t cbmode = (mode == INPUT ? JackCaptureLatency : JackPlaybackLatency); // the range (usually the min and max are equal) jack_latency_range_t latrange; latrange.min = latrange.max = 0; // get the latency range - jack_port_get_latency_range( jack_port_by_name( client, ports[firstChannel] ), cbmode, &latrange ); + jackbridge_port_get_latency_range( jackbridge_port_by_name( client, ports[firstChannel] ), cbmode, &latrange ); // be optimistic, use the min! stream_.latency[mode] = latrange.min; - //stream_.latency[mode] = jack_port_get_latency( jack_port_by_name( client, ports[ firstChannel ] ) ); + //stream_.latency[mode] = jack_port_get_latency( jackbridge_port_by_name( client, ports[ firstChannel ] ) ); } - free( ports ); + jackbridge_free( ports ); // The jack server always uses 32-bit floating-point data. stream_.deviceFormat[mode] = RTAUDIO_FLOAT32; @@ -2250,7 +2243,7 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne // Get the buffer size. The buffer size and number of buffers // (periods) is set when the jack server is started. - stream_.bufferSize = (int) jack_get_buffer_size( client ); + stream_.bufferSize = (int) jackbridge_get_buffer_size( client ); *bufferSize = stream_.bufferSize; stream_.nDeviceChannels[mode] = channels; @@ -2333,24 +2326,24 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne stream_.mode = DUPLEX; else { stream_.mode = mode; - jack_set_process_callback( handle->client, jackCallbackHandler, (void *) &stream_.callbackInfo ); - jack_set_xrun_callback( handle->client, jackXrun, (void *) &stream_.apiHandle ); - jack_on_shutdown( handle->client, jackShutdown, (void *) &stream_.callbackInfo ); + jackbridge_set_process_callback( handle->client, jackCallbackHandler, (void *) &stream_.callbackInfo ); + jackbridge_set_xrun_callback( handle->client, jackXrun, (void *) &stream_.apiHandle ); + jackbridge_on_shutdown( handle->client, jackShutdown, (void *) &stream_.callbackInfo ); } // Register our ports. char label[64]; if ( mode == OUTPUT ) { for ( unsigned int i=0; iports[0][i] = jack_port_register( handle->client, (const char *)label, + snprintf( label, 64, "audio-out%d", i+1 ); + handle->ports[0][i] = jackbridge_port_register( handle->client, (const char *)label, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); } } else { for ( unsigned int i=0; iports[1][i] = jack_port_register( handle->client, (const char *)label, + snprintf( label, 64, "audio-in%d", i+1 ); + handle->ports[1][i] = jackbridge_port_register( handle->client, (const char *)label, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0 ); } } @@ -2367,7 +2360,7 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne error: if ( handle ) { pthread_cond_destroy( &handle->condition ); - jack_client_close( handle->client ); + jackbridge_client_close( handle->client ); if ( handle->ports[0] ) free( handle->ports[0] ); if ( handle->ports[1] ) free( handle->ports[1] ); @@ -2403,9 +2396,9 @@ void RtApiJack :: closeStream( void ) if ( handle ) { if ( stream_.state == STREAM_RUNNING ) - jack_deactivate( handle->client ); + jackbridge_deactivate( handle->client ); - jack_client_close( handle->client ); + jackbridge_client_close( handle->client ); } if ( handle ) { @@ -2442,8 +2435,8 @@ void RtApiJack :: startStream( void ) } JackHandle *handle = (JackHandle *) stream_.apiHandle; - int result = jack_activate( handle->client ); - if ( result ) { + bool result = jackbridge_activate( handle->client ); + if ( ! result ) { errorText_ = "RtApiJack::startStream(): unable to activate JACK client!"; goto unlock; } @@ -2452,8 +2445,8 @@ void RtApiJack :: startStream( void ) // Get the list of available ports. if ( shouldAutoconnect_ && (stream_.mode == OUTPUT || stream_.mode == DUPLEX) ) { - result = 1; - ports = jack_get_ports( handle->client, handle->deviceName[0].c_str(), NULL, JackPortIsInput); + result = false; + ports = jackbridge_get_ports( handle->client, handle->deviceName[0].c_str(), NULL, JackPortIsInput); if ( ports == NULL) { errorText_ = "RtApiJack::startStream(): error determining available JACK input ports!"; goto unlock; @@ -2463,21 +2456,21 @@ void RtApiJack :: startStream( void ) // allow the user to select particular channels of a device, we'll // just open the first "nChannels" ports with offset. for ( unsigned int i=0; iclient, jack_port_name( handle->ports[0][i] ), ports[ stream_.channelOffset[0] + i ] ); - if ( result ) { - free( ports ); + result = jackbridge_connect( handle->client, jackbridge_port_name( handle->ports[0][i] ), ports[ stream_.channelOffset[0] + i ] ); + if ( ! result ) { + jackbridge_free( ports ); errorText_ = "RtApiJack::startStream(): error connecting output ports!"; goto unlock; } } - free(ports); + jackbridge_free(ports); } if ( shouldAutoconnect_ && (stream_.mode == INPUT || stream_.mode == DUPLEX) ) { - result = 1; - ports = jack_get_ports( handle->client, handle->deviceName[1].c_str(), NULL, JackPortIsOutput ); + result = false; + ports = jackbridge_get_ports( handle->client, handle->deviceName[1].c_str(), NULL, JackPortIsOutput ); if ( ports == NULL) { errorText_ = "RtApiJack::startStream(): error determining available JACK output ports!"; goto unlock; @@ -2485,16 +2478,16 @@ void RtApiJack :: startStream( void ) // Now make the port connections. See note above. for ( unsigned int i=0; iclient, ports[ stream_.channelOffset[1] + i ], jack_port_name( handle->ports[1][i] ) ); - if ( result ) { - free( ports ); + result = jackbridge_connect( handle->client, ports[ stream_.channelOffset[1] + i ], jackbridge_port_name( handle->ports[1][i] ) ); + if ( ! result ) { + jackbridge_free( ports ); errorText_ = "RtApiJack::startStream(): error connecting input ports!"; goto unlock; } } - free(ports); + jackbridge_free(ports); } handle->drainCounter = 0; @@ -2502,7 +2495,7 @@ void RtApiJack :: startStream( void ) stream_.state = STREAM_RUNNING; unlock: - if ( result == 0 ) return; + if ( result ) return; error( RtAudioError::SYSTEM_ERROR ); } @@ -2524,7 +2517,7 @@ void RtApiJack :: stopStream( void ) } } - jack_deactivate( handle->client ); + jackbridge_deactivate( handle->client ); stream_.state = STREAM_STOPPED; } @@ -2546,7 +2539,7 @@ void RtApiJack :: abortStream( void ) // This function will be called by a spawned thread when the user // callback function signals that the stream should be stopped or // aborted. It is necessary to handle it this way because the -// callbackEvent() function must return before the jack_deactivate() +// callbackEvent() function must return before the jackbridge_deactivate() // function will return. static void *jackStopStream( void *ptr ) { @@ -2555,6 +2548,8 @@ static void *jackStopStream( void *ptr ) object->stopStream(); pthread_exit( NULL ); + + return NULL; } bool RtApiJack :: callbackEvent( unsigned long nframes ) @@ -2621,7 +2616,7 @@ bool RtApiJack :: callbackEvent( unsigned long nframes ) if ( handle->drainCounter > 1 ) { // write zeros to the output stream for ( unsigned int i=0; iports[0][i], (jack_nframes_t) nframes ); + jackbuffer = (jack_default_audio_sample_t *) jackbridge_port_get_buffer( handle->ports[0][i], (jack_nframes_t) nframes ); memset( jackbuffer, 0, bufferBytes ); } @@ -2631,13 +2626,13 @@ bool RtApiJack :: callbackEvent( unsigned long nframes ) convertBuffer( stream_.deviceBuffer, stream_.userBuffer[0], stream_.convertInfo[0] ); for ( unsigned int i=0; iports[0][i], (jack_nframes_t) nframes ); + jackbuffer = (jack_default_audio_sample_t *) jackbridge_port_get_buffer( handle->ports[0][i], (jack_nframes_t) nframes ); memcpy( jackbuffer, &stream_.deviceBuffer[i*bufferBytes], bufferBytes ); } } else { // no buffer conversion for ( unsigned int i=0; iports[0][i], (jack_nframes_t) nframes ); + jackbuffer = (jack_default_audio_sample_t *) jackbridge_port_get_buffer( handle->ports[0][i], (jack_nframes_t) nframes ); memcpy( jackbuffer, &stream_.userBuffer[0][i*bufferBytes], bufferBytes ); } } @@ -2653,14 +2648,14 @@ bool RtApiJack :: callbackEvent( unsigned long nframes ) if ( stream_.doConvertBuffer[1] ) { for ( unsigned int i=0; iports[1][i], (jack_nframes_t) nframes ); + jackbuffer = (jack_default_audio_sample_t *) jackbridge_port_get_buffer( handle->ports[1][i], (jack_nframes_t) nframes ); memcpy( &stream_.deviceBuffer[i*bufferBytes], jackbuffer, bufferBytes ); } convertBuffer( stream_.userBuffer[1], stream_.deviceBuffer, stream_.convertInfo[1] ); } else { // no buffer conversion for ( unsigned int i=0; iports[1][i], (jack_nframes_t) nframes ); + jackbuffer = (jack_default_audio_sample_t *) jackbridge_port_get_buffer( handle->ports[1][i], (jack_nframes_t) nframes ); memcpy( &stream_.userBuffer[1][i*bufferBytes], jackbuffer, bufferBytes ); } } @@ -2691,10 +2686,10 @@ bool RtApiJack :: callbackEvent( unsigned long nframes ) // on information found in // http://www.cs.wustl.edu/~schmidt/win32-cv-1.html. -#include "asiosys.h" -#include "asio.h" -#include "iasiothiscallresolver.h" -#include "asiodrivers.h" +#include "asio.cpp" +#include "asiodrivers.cpp" +#include "asiolist.cpp" +#include "iasiothiscallresolver.cpp" #include static AsioDrivers drivers; @@ -5487,8 +5482,8 @@ bool RtApiDs :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned // two. This is a judgement call and a value of two is probably too // low for capture, but it should work for playback. int nBuffers = 0; - if ( options ) nBuffers = options->numberOfBuffers; if ( options && options->flags & RTAUDIO_MINIMIZE_LATENCY ) nBuffers = 2; + if ( options && options->numberOfBuffers > 0 ) nBuffers = options->numberOfBuffers; if ( nBuffers < 2 ) nBuffers = 3; // Check the lower range of the user-specified buffer size and set @@ -8012,12 +8007,14 @@ static void *alsaCallbackHandler( void *ptr ) } pthread_exit( NULL ); + + return NULL; } //******************** End of __LINUX_ALSA__ *********************// #endif -#if defined(__LINUX_PULSE__) +#if defined(__UNIX_PULSE__) // Code written by Peter Meerwald, pmeerw@pmeerw.net // and Tristan Matthews. @@ -8092,6 +8089,8 @@ static void *pulseaudio_callback( void * user ) } pthread_exit( NULL ); + + return NULL; } void RtApiPulse::closeStream( void ) @@ -8502,7 +8501,7 @@ bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode, return FAILURE; } -//******************** End of __LINUX_PULSE__ *********************// +//******************** End of __UNIX_PULSE__ *********************// #endif #if defined(__LINUX_OSS__) @@ -9446,6 +9445,8 @@ static void *ossCallbackHandler( void *ptr ) } pthread_exit( NULL ); + + return NULL; } //******************** End of __LINUX_OSS__ *********************// diff --git a/RtAudio.h b/RtAudio.h index 34a2534..c28fefc 100644 --- a/RtAudio.h +++ b/RtAudio.h @@ -46,16 +46,7 @@ #define __RTAUDIO_H #define RTAUDIO_VERSION "5.0.0" - -#if defined _WIN32 || defined __CYGWIN__ - #define RTAUDIO_DLL_PUBLIC -#else - #if __GNUC__ >= 4 - #define RTAUDIO_DLL_PUBLIC __attribute__( (visibility( "default" )) ) - #else - #define RTAUDIO_DLL_PUBLIC - #endif -#endif +#define RTAUDIO_DLL_PUBLIC #include #include @@ -278,8 +269,8 @@ class RTAUDIO_DLL_PUBLIC RtAudio enum Api { UNSPECIFIED, /*!< Search for a working compiled API. */ LINUX_ALSA, /*!< The Advanced Linux Sound Architecture API. */ - LINUX_PULSE, /*!< The Linux PulseAudio API. */ LINUX_OSS, /*!< The Linux Open Sound System API. */ + UNIX_PULSE, /*!< The PulseAudio API. */ UNIX_JACK, /*!< The Jack Low-Latency Audio Server API. */ MACOSX_CORE, /*!< Macintosh OS-X Core Audio API. */ WINDOWS_WASAPI, /*!< The Microsoft WASAPI API. */ @@ -416,7 +407,7 @@ class RTAUDIO_DLL_PUBLIC RtAudio ~RtAudio(); //! Returns the audio API specifier for the current instance of RtAudio. - RtAudio::Api getCurrentApi( void ); + RtAudio::Api getCurrentApi( void ) const; //! A public function that queries for the number of audio devices available. /*! @@ -597,7 +588,7 @@ 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__) +#elif defined(__LINUX_ALSA__) || defined(__UNIX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__) // Using pthread library for various flavors of unix. #include @@ -687,7 +678,7 @@ public: RtApi(); virtual ~RtApi(); - virtual RtAudio::Api getCurrentApi( void ) = 0; + virtual RtAudio::Api getCurrentApi( void ) const = 0; virtual unsigned int getDeviceCount( void ) = 0; virtual RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) = 0; virtual unsigned int getDefaultInputDevice( void ); @@ -836,7 +827,7 @@ protected: // // **************************************************************** // -inline RtAudio::Api RtAudio :: getCurrentApi( void ) { return rtapi_->getCurrentApi(); } +inline RtAudio::Api RtAudio :: getCurrentApi( void ) const { return rtapi_->getCurrentApi(); } inline unsigned int RtAudio :: getDeviceCount( void ) { return rtapi_->getDeviceCount(); } inline RtAudio::DeviceInfo RtAudio :: getDeviceInfo( unsigned int device ) { return rtapi_->getDeviceInfo( device ); } inline unsigned int RtAudio :: getDefaultInputDevice( void ) { return rtapi_->getDefaultInputDevice(); } @@ -865,7 +856,7 @@ public: RtApiCore(); ~RtApiCore(); - RtAudio::Api getCurrentApi( void ) { return RtAudio::MACOSX_CORE; } + RtAudio::Api getCurrentApi( void ) const { return RtAudio::MACOSX_CORE; } unsigned int getDeviceCount( void ); RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); unsigned int getDefaultOutputDevice( void ); @@ -903,7 +894,7 @@ public: RtApiJack(); ~RtApiJack(); - RtAudio::Api getCurrentApi( void ) { return RtAudio::UNIX_JACK; } + RtAudio::Api getCurrentApi( void ) const { return RtAudio::UNIX_JACK; } unsigned int getDeviceCount( void ); RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); void closeStream( void ); @@ -938,7 +929,7 @@ public: RtApiAsio(); ~RtApiAsio(); - RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_ASIO; } + RtAudio::Api getCurrentApi( void ) const { return RtAudio::WINDOWS_ASIO; } unsigned int getDeviceCount( void ); RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); void closeStream( void ); @@ -974,7 +965,7 @@ public: RtApiDs(); ~RtApiDs(); - RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_DS; } + RtAudio::Api getCurrentApi( void ) const { return RtAudio::WINDOWS_DS; } unsigned int getDeviceCount( void ); unsigned int getDefaultOutputDevice( void ); unsigned int getDefaultInputDevice( void ); @@ -1015,7 +1006,7 @@ public: RtApiWasapi(); ~RtApiWasapi(); - RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_WASAPI; } + RtAudio::Api getCurrentApi( void ) const { return RtAudio::WINDOWS_WASAPI; } unsigned int getDeviceCount( void ); RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); unsigned int getDefaultOutputDevice( void ); @@ -1050,7 +1041,7 @@ public: RtApiAlsa(); ~RtApiAlsa(); - RtAudio::Api getCurrentApi() { return RtAudio::LINUX_ALSA; } + RtAudio::Api getCurrentApi() const { return RtAudio::LINUX_ALSA; } unsigned int getDeviceCount( void ); RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); void closeStream( void ); @@ -1076,13 +1067,13 @@ public: #endif -#if defined(__LINUX_PULSE__) +#if defined(__UNIX_PULSE__) class RtApiPulse: public RtApi { public: ~RtApiPulse(); - RtAudio::Api getCurrentApi() { return RtAudio::LINUX_PULSE; } + RtAudio::Api getCurrentApi() const { return RtAudio::UNIX_PULSE; } unsigned int getDeviceCount( void ); RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); void closeStream( void ); @@ -1116,7 +1107,7 @@ public: RtApiOss(); ~RtApiOss(); - RtAudio::Api getCurrentApi() { return RtAudio::LINUX_OSS; } + RtAudio::Api getCurrentApi() const { return RtAudio::LINUX_OSS; } unsigned int getDeviceCount( void ); RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); void closeStream( void ); @@ -1147,7 +1138,7 @@ class RtApiDummy: public RtApi public: RtApiDummy() { errorText_ = "RtApiDummy: This class provides no functionality."; error( RtAudioError::WARNING ); } - RtAudio::Api getCurrentApi( void ) { return RtAudio::RTAUDIO_DUMMY; } + RtAudio::Api getCurrentApi( void ) const { return RtAudio::RTAUDIO_DUMMY; } unsigned int getDeviceCount( void ) { return 0; } RtAudio::DeviceInfo getDeviceInfo( unsigned int /*device*/ ) { RtAudio::DeviceInfo info; return info; } void closeStream( void ) {} diff --git a/include/iasiodrv.h b/include/iasiodrv.h index 64d2dbb..860675c 100644 --- a/include/iasiodrv.h +++ b/include/iasiodrv.h @@ -1,3 +1,4 @@ +#pragma once #include "asiosys.h" #include "asio.h"