summaryrefslogtreecommitdiff
path: root/RtAudio.cpp
diff options
context:
space:
mode:
authorGary Scavone <gary@music.mcgill.ca>2009-01-02 20:49:04 +0000
committerStephen Sinclair <sinclair@music.mcgill.ca>2013-10-11 01:38:23 +0200
commitd035dfe8fe72475651f0f132016726fb1de65529 (patch)
tree01b8af4be013a9c05d72063eb9a47d48b2714aa1 /RtAudio.cpp
parent287e68ea212610c225613876da4e643d43fc2aba (diff)
Bug fix for mono mode in OS-X support (GS).
Diffstat (limited to 'RtAudio.cpp')
-rw-r--r--RtAudio.cpp9
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];
}