diff options
| author | Gary Scavone <gary@music.mcgill.ca> | 2009-01-02 20:49:04 +0000 |
|---|---|---|
| committer | Stephen Sinclair <sinclair@music.mcgill.ca> | 2013-10-11 01:38:23 +0200 |
| commit | d035dfe8fe72475651f0f132016726fb1de65529 (patch) | |
| tree | 01b8af4be013a9c05d72063eb9a47d48b2714aa1 /RtAudio.cpp | |
| parent | 287e68ea212610c225613876da4e643d43fc2aba (diff) | |
Bug fix for mono mode in OS-X support (GS).
Diffstat (limited to 'RtAudio.cpp')
| -rw-r--r-- | RtAudio.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/RtAudio.cpp b/RtAudio.cpp index 9b186cc..b16535b 100644 --- a/RtAudio.cpp +++ b/RtAudio.cpp @@ -1098,6 +1098,7 @@ bool RtApiCore :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne stream_.doConvertBuffer[mode] = true; std::cout << "doConvert = " << stream_.doConvertBuffer[mode] << ", userInterleaved = " << stream_.userInterleaved << ", deviceInterleaved = " << stream_.deviceInterleaved[mode] << std::endl; + std::cout << "nUserChannels = " << stream_.nUserChannels[mode] << ", nDeviceChannels = " << stream_.nDeviceChannels[mode] << std::endl; // Allocate our CoreHandle structure for the stream. CoreHandle *handle = 0; @@ -1467,7 +1468,7 @@ bool RtApiCore :: callbackEvent( AudioDeviceID deviceId, UInt32 bufferBytes = outBufferList->mBuffers[handle->iStream[0]].mDataByteSize; for ( unsigned int i=0; i<stream_.nUserChannels[0]; i++ ) { memcpy( outBufferList->mBuffers[handle->iStream[0]+i].mData, - &inBuffer[i*bufferBytes], bufferBytes ); + (void *)&inBuffer[i*stream_.bufferSize], bufferBytes ); } } else { // fill multiple multi-channel streams with interleaved data @@ -1477,7 +1478,7 @@ bool RtApiCore :: callbackEvent( AudioDeviceID deviceId, bool inInterleaved = ( stream_.userInterleaved ) ? true : false; UInt32 inChannels = stream_.nUserChannels[0]; if ( stream_.doConvertBuffer[0] ) { - inInterleaved = true; // device buffer will always be interleaved for nStreams > 1 + inInterleaved = true; // device buffer will always be interleaved for nStreams > 1 and not mono mode inChannels = stream_.nDeviceChannels[0]; } @@ -1555,7 +1556,7 @@ bool RtApiCore :: callbackEvent( AudioDeviceID deviceId, if ( stream_.deviceInterleaved[1] == false ) { // mono mode UInt32 bufferBytes = inBufferList->mBuffers[handle->iStream[1]].mDataByteSize; for ( unsigned int i=0; i<stream_.nUserChannels[1]; i++ ) { - memcpy( &outBuffer[i*bufferBytes], + memcpy( (void *)&outBuffer[i*stream_.bufferSize], inBufferList->mBuffers[handle->iStream[1]+i].mData, bufferBytes ); } } @@ -1566,7 +1567,7 @@ bool RtApiCore :: callbackEvent( AudioDeviceID deviceId, bool outInterleaved = ( stream_.userInterleaved ) ? true : false; UInt32 outChannels = stream_.nUserChannels[1]; if ( stream_.doConvertBuffer[1] ) { - outInterleaved = true; // device buffer will always be interleaved for nStreams > 1 + outInterleaved = true; // device buffer will always be interleaved for nStreams > 1 and not mono mode outChannels = stream_.nDeviceChannels[1]; } |
