diff --git a/mac/sound.cpp b/mac/sound.cpp index cc0f025b..a291c174 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -885,25 +885,7 @@ if ( iNumInChan == 4 ) if ( outOutputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * iNumOutChan * 4 ) ) { - // Outputs are to individual buffers too, rather than using channels - Float32* pLeftOutData = static_cast ( outOutputData->mBuffers[iSelOutputLeftChannel].mData ); - Float32* pRightOutData = static_cast ( outOutputData->mBuffers[iSelOutputRightChannel].mData ); - - // copy output data - for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) - { - // left - pLeftOutData[i] = - (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; - - // right - pRightOutData[i] = - (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] / _MAXSHORT; - } - - } else if ( outOutputData->mBuffers[0].mDataByteSize == - static_cast ( iCoreAudioBufferSizeMono * iNumOutChan * 4 ) ) { - // Outputs are 2 channels in one buffer + // one buffer with all the channels in interleaved format: // get a pointer to the input data of the correct type Float32* pOutData = static_cast ( outOutputData->mBuffers[0].mData ); @@ -919,6 +901,23 @@ if ( iNumInChan == 4 ) (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] / _MAXSHORT; } } + else if ( outOutputData->mNumberBuffers == (UInt32) iNumOutChan && // we should have a matching number of buffers to channels + outOutputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * 4 ) ) + { + // Outputs are to individual buffers too, rather than using channels + Float32* pLeftOutData = static_cast ( outOutputData->mBuffers[iSelOutputLeftChannel].mData ); + Float32* pRightOutData = static_cast ( outOutputData->mBuffers[iSelOutputRightChannel].mData ); + + // copy output data + for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) + { + // left + pLeftOutData[i] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; + + // right + pRightOutData[i] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] / _MAXSHORT; + } + } } return kAudioHardwareNoError;