#endif\r
}\r
\r
-RtAudio :: RtAudio( RtAudio::Api api ) throw()\r
+RtAudio :: RtAudio( RtAudio::Api api )\r
{\r
rtapi_ = 0;\r
\r
\r
#if defined(__WINDOWS_WASAPI__) // Windows WASAPI API\r
\r
-#include "RtWasapi.inl"\r
#include <audioclient.h>\r
#include <avrt.h>\r
#include <functiondiscoverykeys.h>\r
//=============================================================================\r
\r
#define EXIT_ON_ERROR( hr, errorType, errorText )\\r
-if( FAILED( hr ) )\\r
+if ( FAILED( hr ) )\\r
{\\r
errorText_ = __FUNCTION__ ": " errorText;\\r
error( errorType );\\r
}\r
\r
#define SAFE_RELEASE( objectPtr )\\r
-if( objectPtr )\\r
+if ( objectPtr )\\r
{\\r
objectPtr->Release();\\r
objectPtr = NULL;\\r
// attempt to push a buffer into the ring buffer at the current "in" index\r
bool pushBuffer( char* buffer, unsigned int bufferSize, RtAudioFormat format )\r
{\r
- if( !buffer || // incoming buffer is NULL\r
- bufferSize == 0 || // incoming buffer has no data\r
- bufferSize > bufferSize_ ) // incoming buffer too large\r
+ if ( !buffer || // incoming buffer is NULL\r
+ bufferSize == 0 || // incoming buffer has no data\r
+ bufferSize > bufferSize_ ) // incoming buffer too large\r
{\r
return false;\r
}\r
\r
unsigned int relOutIndex = outIndex_;\r
unsigned int inIndexEnd = inIndex_ + bufferSize;\r
- if( relOutIndex < inIndex_ && inIndexEnd >= bufferSize_ )\r
- {\r
+ if ( relOutIndex < inIndex_ && inIndexEnd >= bufferSize_ ) {\r
relOutIndex += bufferSize_;\r
}\r
\r
// "in" index can end on the "out" index but cannot begin at it\r
- if( inIndex_ <= relOutIndex && inIndexEnd > relOutIndex )\r
- {\r
+ if ( inIndex_ <= relOutIndex && inIndexEnd > relOutIndex ) {\r
return false; // not enough space between "in" index and "out" index\r
}\r
\r
// attempt to pull a buffer from the ring buffer from the current "out" index\r
bool pullBuffer( char* buffer, unsigned int bufferSize, RtAudioFormat format )\r
{\r
- if( !buffer || // incoming buffer is NULL\r
- bufferSize == 0 || // incoming buffer has no data\r
- bufferSize > bufferSize_ ) // incoming buffer too large\r
+ if ( !buffer || // incoming buffer is NULL\r
+ bufferSize == 0 || // incoming buffer has no data\r
+ bufferSize > bufferSize_ ) // incoming buffer too large\r
{\r
return false;\r
}\r
\r
unsigned int relInIndex = inIndex_;\r
unsigned int outIndexEnd = outIndex_ + bufferSize;\r
- if( relInIndex < outIndex_ && outIndexEnd >= bufferSize_ )\r
- {\r
+ if ( relInIndex < outIndex_ && outIndexEnd >= bufferSize_ ) {\r
relInIndex += bufferSize_;\r
}\r
\r
// "out" index can begin at and end on the "in" index\r
- if( outIndex_ < relInIndex && outIndexEnd > relInIndex )\r
- {\r
+ if ( outIndex_ < relInIndex && outIndexEnd > relInIndex ) {\r
return false; // not enough space between "out" index and "in" index\r
}\r
\r
outSampleCount = ( unsigned int ) ( inSampleCount * sampleRatio );\r
\r
// frame-by-frame, copy each relative input sample into it's corresponding output sample\r
- for( unsigned int outSample = 0; outSample < outSampleCount; outSample++ )\r
+ for ( unsigned int outSample = 0; outSample < outSampleCount; outSample++ )\r
{\r
unsigned int inSample = ( unsigned int ) inSampleFraction;\r
\r
- switch( format )\r
+ switch ( format )\r
{\r
case RTAUDIO_SINT8:\r
memcpy( &( ( char* ) outBuffer )[ outSample * outChannelCount ], &( ( char* ) inBuffer )[ inSample * inChannelCount ], commonChannelCount * sizeof( char ) );\r
// WASAPI can run either apartment or multi-threaded\r
HRESULT hr = CoInitialize( NULL );\r
\r
- if( !FAILED( hr ) )\r
+ if ( !FAILED( hr ) )\r
coInitialized_ = true;\r
\r
// instantiate device enumerator\r
CLSCTX_ALL, __uuidof( IMMDeviceEnumerator ),\r
( void** ) &deviceEnumerator_ );\r
\r
- if( FAILED( hr ) ) {\r
+ if ( FAILED( hr ) ) {\r
errorText_ = "RtApiWasapi::RtApiWasapi: Unable to instantiate device enumerator";\r
error( RtAudioError::DRIVER_ERROR );\r
}\r
RtApiWasapi::~RtApiWasapi()\r
{\r
// if this object previously called CoInitialize()\r
- if( coInitialized_ )\r
- {\r
+ if ( coInitialized_ ) {\r
CoUninitialize();\r
}\r
\r
- if( stream_.state != STREAM_CLOSED )\r
- {\r
+ if ( stream_.state != STREAM_CLOSED ) {\r
closeStream();\r
}\r
\r
EXIT_ON_ERROR( -1, RtAudioError::INVALID_USE, "Invalid device index" );\r
\r
// determine whether index falls within capture or render devices\r
- if ( device < captureDeviceCount ) {\r
- hr = captureDevices->Item( device, &devicePtr );\r
+ //if ( device < captureDeviceCount ) {\r
+ if ( device >= renderDeviceCount ) {\r
+ //hr = captureDevices->Item( device, &devicePtr );\r
+ hr = captureDevices->Item( device - renderDeviceCount, &devicePtr );\r
EXIT_ON_ERROR( hr, RtAudioError::DRIVER_ERROR, "Unable to retrieve capture device handle" );\r
\r
isCaptureDevice = true;\r
}\r
else {\r
- hr = renderDevices->Item( device - captureDeviceCount, &devicePtr );\r
+ //hr = renderDevices->Item( device - captureDeviceCount, &devicePtr );\r
+ hr = renderDevices->Item( device, &devicePtr );\r
EXIT_ON_ERROR( hr, RtAudioError::DRIVER_ERROR, "Unable to retrieve render device handle" );\r
\r
isCaptureDevice = false;\r
EXIT_ON_ERROR( -1, RtAudioError::INVALID_USE, "Invalid device index" );\r
\r
// determine whether index falls within capture or render devices\r
- if ( device < captureDeviceCount ) {\r
+ //if ( device < captureDeviceCount ) {\r
+ if ( device >= renderDeviceCount ) {\r
if ( mode != INPUT )\r
EXIT_ON_ERROR( -1, RtAudioError::INVALID_USE, "Capture device selected as output device" );\r
\r
// retrieve captureAudioClient from devicePtr\r
IAudioClient*& captureAudioClient = ( ( WasapiHandle* ) stream_.apiHandle )->captureAudioClient;\r
\r
- hr = captureDevices->Item( device, &devicePtr );\r
+ //hr = captureDevices->Item( device, &devicePtr );\r
+ hr = captureDevices->Item( device - renderDeviceCount, &devicePtr );\r
EXIT_ON_ERROR( hr, RtAudioError::DRIVER_ERROR, "Unable to retrieve capture device handle" );\r
\r
hr = devicePtr->Activate( __uuidof( IAudioClient ), CLSCTX_ALL,\r
// retrieve renderAudioClient from devicePtr\r
IAudioClient*& renderAudioClient = ( ( WasapiHandle* ) stream_.apiHandle )->renderAudioClient;\r
\r
- hr = renderDevices->Item( device - captureDeviceCount, &devicePtr );\r
+ //hr = renderDevices->Item( device - captureDeviceCount, &devicePtr );\r
+ hr = renderDevices->Item( device, &devicePtr );\r
EXIT_ON_ERROR( hr, RtAudioError::DRIVER_ERROR, "Unable to retrieve render device handle" );\r
\r
hr = devicePtr->Activate( __uuidof( IAudioClient ), CLSCTX_ALL,\r
CoTaskMemFree( captureFormat );\r
CoTaskMemFree( renderFormat );\r
\r
- delete convBuffer;\r
+ //delete convBuffer;\r
+ free ( convBuffer );\r
\r
CoUninitialize();\r
\r