From 8d8693dc61667c7a62e96c246eba0a5443a3468c Mon Sep 17 00:00:00 2001 From: pkv Date: Sat, 7 Sep 2019 21:27:45 +0200 Subject: [PATCH] Remove unused folders --- deps/bin/rtaudio.dll | Bin 16384 -> 0 bytes deps/bin/rtaudio_static.lib | Bin 298420 -> 0 bytes deps/include/rtaudio/RtAudio.h | 1167 -------------------------------- deps/rtaudio | 1 - 4 files changed, 1168 deletions(-) delete mode 100644 deps/bin/rtaudio.dll delete mode 100644 deps/bin/rtaudio_static.lib delete mode 100644 deps/include/rtaudio/RtAudio.h delete mode 160000 deps/rtaudio diff --git a/deps/bin/rtaudio.dll b/deps/bin/rtaudio.dll deleted file mode 100644 index ed942381b9f818c3f84a662e335ad649a343337e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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

8xejYkDyn|)#I8SnsT~)qE^D5pXY}d7 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%0AB+EA=fv4*QyPv5t>hNqHd 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 -#include -#include -#include - -/*! \typedef typedef unsigned long RtAudioFormat; - \brief RtAudio data format type. - - Support for signed integers and floats. Audio data fed to/from an - RtAudio stream is assumed to ALWAYS be in host byte order. The - internal routines will automatically take care of any necessary - byte-swapping between the host format and the soundcard. Thus, - endian-ness is not a concern in the following format definitions. - - - \e RTAUDIO_SINT8: 8-bit signed integer. - - \e RTAUDIO_SINT16: 16-bit signed integer. - - \e RTAUDIO_SINT24: 24-bit signed integer. - - \e RTAUDIO_SINT32: 32-bit signed integer. - - \e RTAUDIO_FLOAT32: Normalized between plus/minus 1.0. - - \e RTAUDIO_FLOAT64: Normalized between plus/minus 1.0. -*/ -typedef unsigned long RtAudioFormat; -static const RtAudioFormat RTAUDIO_SINT8 = 0x1; // 8-bit signed integer. -static const RtAudioFormat RTAUDIO_SINT16 = 0x2; // 16-bit signed integer. -static const RtAudioFormat RTAUDIO_SINT24 = 0x4; // 24-bit signed integer. -static const RtAudioFormat RTAUDIO_SINT32 = 0x8; // 32-bit signed integer. -static const RtAudioFormat RTAUDIO_FLOAT32 = 0x10; // Normalized between plus/minus 1.0. -static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/minus 1.0. - -/*! \typedef typedef unsigned long RtAudioStreamFlags; - \brief RtAudio stream option flags. - - The following flags can be OR'ed together to allow a client to - make changes to the default stream behavior: - - - \e RTAUDIO_NONINTERLEAVED: Use non-interleaved buffers (default = interleaved). - - \e RTAUDIO_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency. - - \e RTAUDIO_HOG_DEVICE: Attempt grab device for exclusive use. - - \e RTAUDIO_ALSA_USE_DEFAULT: Use the "default" PCM device (ALSA only). - - \e RTAUDIO_JACK_DONT_CONNECT: Do not automatically connect ports (JACK only). - - By default, RtAudio streams pass and receive audio data from the - client in an interleaved format. By passing the - RTAUDIO_NONINTERLEAVED flag to the openStream() function, audio - data will instead be presented in non-interleaved buffers. In - this case, each buffer argument in the RtAudioCallback function - will point to a single array of data, with \c nFrames samples for - each channel concatenated back-to-back. For example, the first - sample of data for the second channel would be located at index \c - nFrames (assuming the \c buffer pointer was recast to the correct - data type for the stream). - - Certain audio APIs offer a number of parameters that influence the - I/O latency of a stream. By default, RtAudio will attempt to set - these parameters internally for robust (glitch-free) performance - (though some APIs, like Windows Direct Sound, make this difficult). - By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() - function, internal stream settings will be influenced in an attempt - to minimize stream latency, though possibly at the expense of stream - performance. - - If the RTAUDIO_HOG_DEVICE flag is set, RtAudio will attempt to - open the input and/or output stream device(s) for exclusive use. - Note that this is not possible with all supported audio APIs. - - If the RTAUDIO_SCHEDULE_REALTIME flag is set, RtAudio will attempt - to select realtime scheduling (round-robin) for the callback thread. - - If the RTAUDIO_ALSA_USE_DEFAULT flag is set, RtAudio will attempt to - open the "default" PCM device when using the ALSA API. Note that this - will override any specified input or output device id. - - If the RTAUDIO_JACK_DONT_CONNECT flag is set, RtAudio will not attempt - to automatically connect the ports of the client to the audio device. -*/ -typedef unsigned int RtAudioStreamFlags; -static const RtAudioStreamFlags RTAUDIO_NONINTERLEAVED = 0x1; // Use non-interleaved buffers (default = interleaved). -static const RtAudioStreamFlags RTAUDIO_MINIMIZE_LATENCY = 0x2; // Attempt to set stream parameters for lowest possible latency. -static const RtAudioStreamFlags RTAUDIO_HOG_DEVICE = 0x4; // Attempt grab device and prevent use by others. -static const RtAudioStreamFlags RTAUDIO_SCHEDULE_REALTIME = 0x8; // Try to select realtime scheduling for callback thread. -static const RtAudioStreamFlags RTAUDIO_ALSA_USE_DEFAULT = 0x10; // Use the "default" PCM device (ALSA only). -static const RtAudioStreamFlags RTAUDIO_JACK_DONT_CONNECT = 0x20; // Do not automatically connect ports (JACK only). - -/*! \typedef typedef unsigned long RtAudioStreamStatus; - \brief RtAudio stream status (over- or underflow) flags. - - Notification of a stream over- or underflow is indicated by a - non-zero stream \c status argument in the RtAudioCallback function. - The stream status can be one of the following two options, - depending on whether the stream is open for output and/or input: - - - \e RTAUDIO_INPUT_OVERFLOW: Input data was discarded because of an overflow condition at the driver. - - \e RTAUDIO_OUTPUT_UNDERFLOW: The output buffer ran low, likely producing a break in the output sound. -*/ -typedef unsigned int RtAudioStreamStatus; -static const RtAudioStreamStatus RTAUDIO_INPUT_OVERFLOW = 0x1; // Input data was discarded because of an overflow condition at the driver. -static const RtAudioStreamStatus RTAUDIO_OUTPUT_UNDERFLOW = 0x2; // The output buffer ran low, likely causing a gap in the output sound. - -//! RtAudio callback function prototype. -/*! - All RtAudio clients must create a function of type RtAudioCallback - to read and/or write data from/to the audio stream. When the - underlying audio system is ready for new input or output data, this - function will be invoked. - - \param outputBuffer For output (or duplex) streams, the client - should write \c nFrames of audio sample frames into this - buffer. This argument should be recast to the datatype - specified when the stream was opened. For input-only - streams, this argument will be NULL. - - \param inputBuffer For input (or duplex) streams, this buffer will - hold \c nFrames of input audio sample frames. This - argument should be recast to the datatype specified when the - stream was opened. For output-only streams, this argument - will be NULL. - - \param nFrames The number of sample frames of input or output - data in the buffers. The actual buffer size in bytes is - dependent on the data type and number of channels in use. - - \param streamTime The number of seconds that have elapsed since the - stream was started. - - \param status If non-zero, this argument indicates a data overflow - or underflow condition for the stream. The particular - condition can be determined by comparison with the - RtAudioStreamStatus flags. - - \param userData A pointer to optional data provided by the client - when opening the stream (default = NULL). - - To continue normal stream operation, the RtAudioCallback function - should return a value of zero. To stop the stream and drain the - output buffer, the function should return a value of one. To abort - the stream immediately, the client should return a value of two. - */ -typedef int (*RtAudioCallback)( void *outputBuffer, void *inputBuffer, - unsigned int nFrames, - double streamTime, - RtAudioStreamStatus status, - void *userData ); - -/************************************************************************/ -/*! \class RtAudioError - \brief Exception handling class for RtAudio. - - The RtAudioError class is quite simple but it does allow errors to be - "caught" by RtAudioError::Type. See the RtAudio documentation to know - which methods can throw an RtAudioError. -*/ -/************************************************************************/ - -class RtAudioError : public std::runtime_error -{ - public: - //! Defined RtAudioError types. - enum Type { - WARNING, /*!< A non-critical error. */ - DEBUG_WARNING, /*!< A non-critical error which might be useful for debugging. */ - 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. */ - 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. */ - }; - - //! The constructor. - RtAudioError( const std::string& message, - Type type = RtAudioError::UNSPECIFIED ) - : std::runtime_error(message), type_(type) {} - - //! Prints thrown error message to stderr. - virtual void printMessage( void ) const - { std::cerr << '\n' << what() << "\n\n"; } - - //! Returns the thrown error message type. - virtual const Type& getType(void) const { return type_; } - - //! Returns the thrown error message string. - virtual const std::string getMessage(void) const - { return std::string(what()); } - - protected: - Type type_; -}; - -//! RtAudio error callback function prototype. -/*! - \param type Type of error. - \param errorText Error description. - */ -typedef void (*RtAudioErrorCallback)( RtAudioError::Type type, const std::string &errorText ); - -// **************************************************************** // -// -// RtAudio class declaration. -// -// RtAudio is a "controller" used to select an available audio i/o -// interface. It presents a common API for the user to call but all -// functionality is implemented by the class RtApi and its -// subclasses. RtAudio creates an instance of an RtApi subclass -// based on the user's API choice. If no choice is made, RtAudio -// attempts to make a "logical" API selection. -// -// **************************************************************** // - -class RtApi; - -class RtAudio -{ - public: - - //! Audio API specifier arguments. - 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_JACK, /*!< The Jack Low-Latency Audio Server API. */ - MACOSX_CORE, /*!< Macintosh OS-X Core Audio API. */ - WINDOWS_WASAPI, /*!< The Microsoft WASAPI API. */ - WINDOWS_ASIO, /*!< The Steinberg Audio Stream I/O API. */ - WINDOWS_DS, /*!< The Microsoft Direct Sound API. */ - RTAUDIO_DUMMY /*!< A compilable but non-functional API. */ - }; - - //! The public device information structure for returning queried values. - 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. */ - std::vector sampleRates; /*!< Supported sample rates (queried from list of standard rates). */ - unsigned int preferredSampleRate; /*!< Preferred sample rate, eg. 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) {} - }; - - //! The structure for specifying input or ouput 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) {} - }; - - //! The structure for specifying stream options. - /*! - The following flags can be OR'ed together to allow a client to - make changes to the default stream behavior: - - - \e RTAUDIO_NONINTERLEAVED: Use non-interleaved buffers (default = interleaved). - - \e RTAUDIO_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency. - - \e RTAUDIO_HOG_DEVICE: Attempt grab device for exclusive use. - - \e RTAUDIO_SCHEDULE_REALTIME: Attempt to select realtime scheduling for callback thread. - - \e RTAUDIO_ALSA_USE_DEFAULT: Use the "default" PCM device (ALSA only). - - By default, RtAudio streams pass and receive audio data from the - client in an interleaved format. By passing the - RTAUDIO_NONINTERLEAVED flag to the openStream() function, audio - data will instead be presented in non-interleaved buffers. In - this case, each buffer argument in the RtAudioCallback function - will point to a single array of data, with \c nFrames samples for - each channel concatenated back-to-back. For example, the first - sample of data for the second channel would be located at index \c - nFrames (assuming the \c buffer pointer was recast to the correct - data type for the stream). - - Certain audio APIs offer a number of parameters that influence the - I/O latency of a stream. By default, RtAudio will attempt to set - these parameters internally for robust (glitch-free) performance - (though some APIs, like Windows Direct Sound, make this difficult). - By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() - function, internal stream settings will be influenced in an attempt - to minimize stream latency, though possibly at the expense of stream - performance. - - If the RTAUDIO_HOG_DEVICE flag is set, RtAudio will attempt to - open the input and/or output stream device(s) for exclusive use. - Note that this is not possible with all supported audio APIs. - - If the RTAUDIO_SCHEDULE_REALTIME flag is set, RtAudio will attempt - to select realtime scheduling (round-robin) for the callback thread. - The \c priority parameter will only be used if the RTAUDIO_SCHEDULE_REALTIME - flag is set. It defines the thread's realtime priority. - - If the RTAUDIO_ALSA_USE_DEFAULT flag is set, RtAudio will attempt to - open the "default" PCM device when using the ALSA API. Note that this - will override any specified input or output device id. - - The \c numberOfBuffers parameter can be used to control stream - latency in the Windows DirectSound, Linux OSS, and Linux Alsa APIs - only. A value of two is usually the smallest allowed. Larger - numbers can potentially result in more robust stream performance, - though likely at the cost of stream latency. The value set by the - user is replaced during execution of the RtAudio::openStream() - function by the value actually used by the system. - - The \c streamName parameter can be used to set the client name - when using the Jack API. By default, the client name is set to - RtApiJack. However, if you wish to create multiple instances of - 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. */ - 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) {} - }; - - //! A static function to determine the current RtAudio version. - static std::string getVersion( void ); - - //! A static function to determine the available compiled audio APIs. - /*! - The values returned in the std::vector can be compared against - the enumerated list values. Note that there can be more than one - API compiled for certain operating systems. - */ - static void getCompiledApi( std::vector &apis ); - - //! The class constructor. - /*! - The constructor performs minor initialization tasks. An exception - can be thrown if no API support is compiled. - - If no API argument is specified and multiple API support has been - compiled, the default order of use is JACK, ALSA, OSS (Linux - systems) and ASIO, DS (Windows systems). - */ - RtAudio( RtAudio::Api api=UNSPECIFIED ); - - //! The destructor. - /*! - If a stream is running or open, it will be stopped and closed - automatically. - */ - ~RtAudio(); - - //! Returns the audio API specifier for the current instance of RtAudio. - RtAudio::Api getCurrentApi( void ); - - //! A public function that queries for the number of audio devices available. - /*! - This function performs a system query of available devices each time it - is called, thus supporting devices connected \e after instantiation. If - a system error occurs during processing, a warning will be issued. - */ - unsigned int getDeviceCount( void ); - - //! Return an RtAudio::DeviceInfo structure for a specified device number. - /*! - - Any device integer between 0 and getDeviceCount() - 1 is valid. - If an invalid argument is provided, an RtAudioError (type = INVALID_USE) - will be thrown. If a device is busy or otherwise unavailable, the - structure member "probed" will have a value of "false" and all - other members are undefined. If the specified device is the - current default input or output device, the corresponding - "isDefault" member will have a value of "true". - */ - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); - - //! A function that returns the index of the default output device. - /*! - If the underlying audio API does not provide a "default - device", or if no devices are available, the return value will be - 0. Note that this is a valid device identifier and it is the - client's responsibility to verify that a device is available - before attempting to open a stream. - */ - unsigned int getDefaultOutputDevice( void ); - - //! A function that returns the index of the default input device. - /*! - If the underlying audio API does not provide a "default - device", or if no devices are available, the return value will be - 0. Note that this is a valid device identifier and it is the - client's responsibility to verify that a device is available - before attempting to open a stream. - */ - unsigned int getDefaultInputDevice( void ); - - //! A public function for opening a stream with the specified parameters. - /*! - An RtAudioError (type = SYSTEM_ERROR) is thrown if a stream cannot be - opened with the specified parameters or an error occurs during - processing. An RtAudioError (type = INVALID_USE) is thrown if any - invalid device ID or channel number parameters are specified. - - \param outputParameters Specifies output stream parameters to use - when opening a stream, including a device ID, number of channels, - and starting channel number. For input-only streams, this - argument should be NULL. The device ID is an index value between - 0 and getDeviceCount() - 1. - \param inputParameters Specifies input stream parameters to use - when opening a stream, including a device ID, number of channels, - and starting channel number. For output-only streams, this - argument should be NULL. The device ID is an index value between - 0 and getDeviceCount() - 1. - \param format An RtAudioFormat specifying the desired sample data format. - \param sampleRate The desired sample rate (sample frames per second). - \param *bufferFrames A pointer to a value indicating the desired - internal buffer size in sample frames. The actual value - used by the device is returned via the same pointer. A - value of zero can be specified, in which case the lowest - allowable value is determined. - \param callback A client-defined function that will be invoked - when input data is available and/or output data is needed. - \param userData An optional pointer to data that can be accessed - from within the callback function. - \param options An optional pointer to a structure containing various - global stream options, including a list of OR'ed RtAudioStreamFlags - and a suggested number of stream buffers that can be used to - control stream latency. More buffers typically result in more - robust performance, though at a cost of greater latency. If a - value of zero is specified, a system-specific median value is - chosen. If the RTAUDIO_MINIMIZE_LATENCY flag bit is set, the - 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. - */ - void openStream( RtAudio::StreamParameters *outputParameters, - RtAudio::StreamParameters *inputParameters, - RtAudioFormat format, unsigned int sampleRate, - unsigned int *bufferFrames, RtAudioCallback callback, - void *userData = NULL, RtAudio::StreamOptions *options = NULL, RtAudioErrorCallback errorCallback = NULL ); - - //! A function that closes a stream and frees any associated stream memory. - /*! - If a stream is not open, this function issues a warning and - returns (no exception is thrown). - */ - void closeStream( void ); - - //! A function that starts a stream. - /*! - An RtAudioError (type = SYSTEM_ERROR) is thrown if an error occurs - during processing. An RtAudioError (type = INVALID_USE) is thrown if a - stream is not open. A warning is issued if the stream is already - running. - */ - void startStream( void ); - - //! Stop a stream, allowing any samples remaining in the output queue to be played. - /*! - An RtAudioError (type = SYSTEM_ERROR) is thrown if an error occurs - during processing. An RtAudioError (type = INVALID_USE) is thrown if a - stream is not open. A warning is issued if the stream is already - stopped. - */ - void stopStream( void ); - - //! Stop a stream, discarding any samples remaining in the input/output queue. - /*! - An RtAudioError (type = SYSTEM_ERROR) is thrown if an error occurs - during processing. An RtAudioError (type = INVALID_USE) is thrown if a - stream is not open. A warning is issued if the stream is already - stopped. - */ - void abortStream( void ); - - //! Returns true if a stream is open and false if not. - bool isStreamOpen( void ) const; - - //! Returns true if the stream is running and false if it is stopped or not open. - bool isStreamRunning( void ) const; - - //! Returns the number of elapsed seconds since the stream was started. - /*! - If a stream is not open, an RtAudioError (type = INVALID_USE) will be thrown. - */ - double getStreamTime( void ); - - //! Set the stream time to a time in seconds greater than or equal to 0.0. - /*! - If a stream is not open, an RtAudioError (type = INVALID_USE) will be thrown. - */ - void setStreamTime( double time ); - - //! Returns the internal stream latency in sample frames. - /*! - The stream latency refers to delay in audio input and/or output - caused by internal buffering by the audio system and/or hardware. - For duplex streams, the returned value will represent the sum of - the input and output latencies. If a stream is not open, an - RtAudioError (type = INVALID_USE) will be thrown. If the API does not - report latency, the return value will be zero. - */ - long getStreamLatency( void ); - - //! Returns actual sample rate in use by the stream. - /*! - On some systems, the sample rate used may be slightly different - than that specified in the stream parameters. If a stream is not - open, an RtAudioError (type = INVALID_USE) will be thrown. - */ - unsigned int getStreamSampleRate( void ); - - //! Specify whether warning messages should be printed to stderr. - void showWarnings( bool value = true ); - - protected: - - void openRtApi( RtAudio::Api api ); - RtApi *rtapi_; -}; - -// Operating system dependent thread functionality. -#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_WASAPI__) - - #ifndef NOMINMAX - #define NOMINMAX - #endif - #include - #include - - typedef uintptr_t ThreadHandle; - typedef CRITICAL_SECTION StreamMutex; - -#elif defined(__LINUX_ALSA__) || defined(__LINUX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__) - // Using pthread library for various flavors of unix. - #include - - typedef pthread_t ThreadHandle; - typedef pthread_mutex_t StreamMutex; - -#else // Setup for "dummy" behavior - - #define __RTAUDIO_DUMMY__ - typedef int ThreadHandle; - typedef int StreamMutex; - -#endif - -// This global structure type is used to pass callback information -// 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) {} -}; - -// **************************************************************** // -// -// RtApi class declaration. -// -// Subclasses of RtApi contain all API- and OS-specific code necessary -// to fully implement the RtAudio API. -// -// Note that RtApi is an abstract base class and cannot be -// explicitly instantiated. The class RtAudio will create an -// instance of an RtApi subclass (RtApiOss, RtApiAlsa, -// RtApiJack, RtApiCore, RtApiDs, or RtApiAsio). -// -// **************************************************************** // - -#pragma pack(push, 1) -class S24 { - - protected: - unsigned char c3[3]; - - public: - S24() {} - - S24& operator = ( const int& i ) { - c3[0] = (i & 0x000000ff); - c3[1] = (i & 0x0000ff00) >> 8; - c3[2] = (i & 0x00ff0000) >> 16; - return *this; - } - - S24( const S24& v ) { *this = v; } - S24( const double& d ) { *this = (int) d; } - S24( const float& f ) { *this = (int) f; } - S24( const signed short& s ) { *this = (int) s; } - S24( const char& c ) { *this = (int) c; } - - int asInt() { - int i = c3[0] | (c3[1] << 8) | (c3[2] << 16); - if (i & 0x800000) i |= ~0xffffff; - return i; - } -}; -#pragma pack(pop) - -#if defined( HAVE_GETTIMEOFDAY ) - #include -#endif - -#include - -class RtApi -{ -public: - - RtApi(); - virtual ~RtApi(); - virtual RtAudio::Api getCurrentApi( void ) = 0; - virtual unsigned int getDeviceCount( void ) = 0; - virtual RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) = 0; - virtual unsigned int getDefaultInputDevice( void ); - virtual unsigned int getDefaultOutputDevice( void ); - void openStream( RtAudio::StreamParameters *outputParameters, - RtAudio::StreamParameters *inputParameters, - RtAudioFormat format, unsigned int sampleRate, - unsigned int *bufferFrames, RtAudioCallback callback, - void *userData, RtAudio::StreamOptions *options, - RtAudioErrorCallback errorCallback ); - virtual void closeStream( void ); - virtual void startStream( void ) = 0; - virtual void stopStream( void ) = 0; - virtual void abortStream( void ) = 0; - long getStreamLatency( void ); - unsigned int getStreamSampleRate( void ); - virtual double getStreamTime( void ); - virtual void setStreamTime( double time ); - bool isStreamOpen( void ) const { return stream_.state != STREAM_CLOSED; } - bool isStreamRunning( void ) const { return stream_.state == STREAM_RUNNING; } - void showWarnings( bool value ) { showWarnings_ = value; } - - -protected: - - static const unsigned int MAX_SAMPLE_RATES; - static const unsigned int SAMPLE_RATES[]; - - enum { FAILURE, SUCCESS }; - - enum StreamState { - STREAM_STOPPED, - STREAM_STOPPING, - STREAM_RUNNING, - STREAM_CLOSED = -50 - }; - - enum StreamMode { - OUTPUT, - INPUT, - DUPLEX, - UNINITIALIZED = -75 - }; - - // A protected structure used for buffer conversion. - struct ConvertInfo { - int channels; - int inJump, outJump; - RtAudioFormat inFormat, outFormat; - std::vector inOffset; - std::vector outOffset; - }; - - // A protected structure for audio streams. - struct RtApiStream { - unsigned int device[2]; // Playback and record, respectively. - void *apiHandle; // void pointer for API specific stream handle information - StreamMode mode; // OUTPUT, INPUT, or DUPLEX. - StreamState state; // STOPPED, RUNNING, or CLOSED - char *userBuffer[2]; // Playback and record, respectively. - char *deviceBuffer; - bool doConvertBuffer[2]; // Playback and record, respectively. - bool userInterleaved; - bool deviceInterleaved[2]; // Playback and record, respectively. - bool doByteSwap[2]; // Playback and record, respectively. - unsigned int sampleRate; - unsigned int bufferSize; - unsigned int nBuffers; - unsigned int nUserChannels[2]; // Playback and record, respectively. - unsigned int nDeviceChannels[2]; // Playback and record channels, respectively. - unsigned int channelOffset[2]; // Playback and record, respectively. - unsigned long latency[2]; // Playback and record, respectively. - RtAudioFormat userFormat; - RtAudioFormat deviceFormat[2]; // Playback and record, respectively. - StreamMutex mutex; - CallbackInfo callbackInfo; - ConvertInfo convertInfo[2]; - double streamTime; // Number of elapsed seconds since the stream started. - -#if defined(HAVE_GETTIMEOFDAY) - struct timeval lastTickTimestamp; -#endif - - RtApiStream() - :apiHandle(0), deviceBuffer(0) { device[0] = 11111; device[1] = 11111; } - }; - - typedef S24 Int24; - typedef signed short Int16; - typedef signed int Int32; - typedef float Float32; - typedef double Float64; - - std::ostringstream errorStream_; - std::string errorText_; - bool showWarnings_; - RtApiStream stream_; - bool firstErrorOccurred_; - - /*! - Protected, api-specific method that attempts to open a device - with the given parameters. This function MUST be implemented by - all subclasses. If an error is encountered during the probe, a - "warning" message is reported and FAILURE is returned. A - successful probe is indicated by a return value of SUCCESS. - */ - virtual bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); - - //! A protected function used to increment the stream time. - void tickStreamTime( void ); - - //! Protected common method to clear an RtApiStream structure. - void clearStreamInfo(); - - /*! - Protected common method that throws an RtAudioError (type = - INVALID_USE) if a stream is not open. - */ - void verifyStream( void ); - - //! Protected common error method to allow global control over error handling. - void error( RtAudioError::Type type ); - - /*! - Protected method used to perform format, channel number, and/or interleaving - conversions between the user and device buffers. - */ - void convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info ); - - //! Protected common method used to perform byte-swapping on buffers. - void byteSwapBuffer( char *buffer, unsigned int samples, RtAudioFormat format ); - - //! Protected common method that returns the number of bytes for a given format. - unsigned int formatBytes( RtAudioFormat format ); - - //! Protected common method that sets up the parameters for buffer conversion. - void setConvertInfo( StreamMode mode, unsigned int firstChannel ); -}; - -// **************************************************************** // -// -// Inline RtAudio definitions. -// -// **************************************************************** // - -inline RtAudio::Api RtAudio :: getCurrentApi( void ) { 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(); } -inline unsigned int RtAudio :: getDefaultOutputDevice( void ) { return rtapi_->getDefaultOutputDevice(); } -inline void RtAudio :: closeStream( void ) { return rtapi_->closeStream(); } -inline void RtAudio :: startStream( void ) { return rtapi_->startStream(); } -inline void RtAudio :: stopStream( void ) { return rtapi_->stopStream(); } -inline void RtAudio :: abortStream( void ) { return rtapi_->abortStream(); } -inline bool RtAudio :: isStreamOpen( void ) const { return rtapi_->isStreamOpen(); } -inline bool RtAudio :: isStreamRunning( void ) const { return rtapi_->isStreamRunning(); } -inline long RtAudio :: getStreamLatency( void ) { return rtapi_->getStreamLatency(); } -inline unsigned int RtAudio :: getStreamSampleRate( void ) { return rtapi_->getStreamSampleRate(); } -inline double RtAudio :: getStreamTime( void ) { return rtapi_->getStreamTime(); } -inline void RtAudio :: setStreamTime( double time ) { return rtapi_->setStreamTime( time ); } -inline void RtAudio :: showWarnings( bool value ) { rtapi_->showWarnings( value ); } - -// RtApi Subclass prototypes. - -#if defined(__MACOSX_CORE__) - -#include - -class RtApiCore: public RtApi -{ -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 ); - long getStreamLatency( void ); - - // 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! - bool callbackEvent( AudioDeviceID deviceId, - const AudioBufferList *inBufferList, - const AudioBufferList *outBufferList ); - - 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 ); - static const char* getErrorCode( OSStatus code ); -}; - -#endif - -#if defined(__UNIX_JACK__) - -class RtApiJack: public RtApi -{ -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 ); - long getStreamLatency( void ); - - // 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! - bool callbackEvent( unsigned long nframes ); - - 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 ); - - bool shouldAutoconnect_; -}; - -#endif - -#if defined(__WINDOWS_ASIO__) - -class RtApiAsio: public RtApi -{ -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 ); - long getStreamLatency( void ); - - // 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! - bool callbackEvent( long bufferIndex ); - - private: - - std::vector devices_; - void saveDeviceInfo( void ); - bool coInitialized_; - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); -}; - -#endif - -#if defined(__WINDOWS_DS__) - -class RtApiDs: public RtApi -{ -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 ); - long getStreamLatency( void ); - - // 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! - void callbackEvent( void ); - - private: - - bool coInitialized_; - bool buffersRolling; - long duplexPrerollBytes; - std::vector dsDevices; - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); -}; - -#endif - -#if defined(__WINDOWS_WASAPI__) - -struct IMMDeviceEnumerator; - -class RtApiWasapi : public RtApi -{ -public: - RtApiWasapi(); - ~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 ); - -private: - bool coInitialized_; - IMMDeviceEnumerator* deviceEnumerator_; - - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int* bufferSize, - RtAudio::StreamOptions* options ); - - static DWORD WINAPI runWasapiThread( void* wasapiPtr ); - static DWORD WINAPI stopWasapiThread( void* wasapiPtr ); - static DWORD WINAPI abortWasapiThread( void* wasapiPtr ); - void wasapiThread(); -}; - -#endif - -#if defined(__LINUX_ALSA__) - -class RtApiAlsa: public RtApi -{ -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 ); - - // 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! - void callbackEvent( void ); - - private: - - std::vector devices_; - void saveDeviceInfo( 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 ); -}; - -#endif - -#if defined(__LINUX_PULSE__) - -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 ); - - // 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! - void callbackEvent( void ); - - private: - - std::vector devices_; - void saveDeviceInfo( 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 ); -}; - -#endif - -#if defined(__LINUX_OSS__) - -class RtApiOss: public RtApi -{ -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 ); - - // 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! - void callbackEvent( void ); - - 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 ); -}; - -#endif - -#if defined(__RTAUDIO_DUMMY__) - -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 ) {} - - 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; } -}; - -#endif - -#endif - -// Indentation settings for Vim and Emacs -// -// Local Variables: -// c-basic-offset: 2 -// indent-tabs-mode: nil -// End: -// -// vim: et sts=2 sw=2 diff --git a/deps/rtaudio b/deps/rtaudio deleted file mode 160000 index ce13dfb..0000000 --- a/deps/rtaudio +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ce13dfbf30fd1ab4e7f7eff8886a80f144c75e5d