diff --git a/src/client.cpp b/src/client.cpp index 86e26cf8..515bc012 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -835,6 +835,7 @@ void CClient::Init() vecCeltData.Init ( iCeltNumCodedBytes ); vecZeros.Init ( iStereoBlockSizeSam, 0 ); vecsStereoSndCrdTMP.Init ( iStereoBlockSizeSam ); + vecsStereoSndCrdMuteStream.Init ( iStereoBlockSizeSam ); opus_custom_encoder_ctl ( CurOpusEncoder, OPUS_SET_BITRATE ( @@ -883,22 +884,38 @@ void CClient::AudioCallback ( CVector& psData, void* arg ) // process audio data pMyClientObj->ProcessSndCrdAudioData ( psData ); -} - -void CClient::ProcessSndCrdAudioData ( CVector& vecsStereoSndCrd ) -{ /* // TEST do a soundcard jitter measurement static CTimingMeas JitterMeas ( 1000, "test2.dat" ); JitterMeas.Measure(); */ +} + +void CClient::ProcessSndCrdAudioData ( CVector& vecsMultChanAudioSndCrd ) +{ + +// TODO output mapping from stereo to multi channel: We want to change all the different sound interfaces that they +// do not select the input and output channels but we do it here at the client. This has the advantage that, e.g., +// the special add modes supported for Windows (i.e. if 4 input channels available, you can mix channel 1+3 or 1+4) +// can then be used for Mac as well without the need of changing anything in the actual Mac sound interface. +// Since a multichannel signal arrives and must be converted to a stereo signal, we need an additional buffer: vecsStereoSndCrdTMP. +// TEST input channel selection/mixing +//const int iNumInCh = 2; +//for ( int i = 0; i < iNumInCh; i++ ) +//{ +// for ( int j = 0; j < iMonoBlockSizeSam; j++ ) +// { +// vecsStereoSndCrdTMP[2 * j + i] = vecsMultChanAudioSndCrd[iNumInCh * j + i]; +// } +//} +vecsStereoSndCrdTMP = vecsMultChanAudioSndCrd; // TEST just copy the stereo data for now // check if a conversion buffer is required or not if ( bSndCrdConversionBufferRequired ) { // add new sound card block in conversion buffer - SndCrdConversionBufferIn.Put ( vecsStereoSndCrd, vecsStereoSndCrd.Size() ); + SndCrdConversionBufferIn.Put ( vecsStereoSndCrdTMP, vecsStereoSndCrdTMP.Size() ); // process all available blocks of data while ( SndCrdConversionBufferIn.GetAvailData() >= iStereoBlockSizeSam ) @@ -913,14 +930,17 @@ JitterMeas.Measure(); } // get processed sound card block out of the conversion buffer - SndCrdConversionBufferOut.Get ( vecsStereoSndCrd, vecsStereoSndCrd.Size() ); + SndCrdConversionBufferOut.Get ( vecsStereoSndCrdTMP, vecsStereoSndCrdTMP.Size() ); } else { // regular case: no conversion buffer required // process audio data - ProcessAudioDataIntern ( vecsStereoSndCrd ); + ProcessAudioDataIntern ( vecsStereoSndCrdTMP ); } + +// TODO output mapping from stereo to multi channel, see comment above for the input mapping +vecsMultChanAudioSndCrd = vecsStereoSndCrdTMP; // TEST just copy the stereo data for now } void CClient::ProcessAudioDataIntern ( CVector& vecsStereoSndCrd ) @@ -1101,7 +1121,7 @@ void CClient::ProcessAudioDataIntern ( CVector& vecsStereoSndCrd ) // in case of mute stream, store local data if ( bMuteOutStream ) { - vecsStereoSndCrdTMP = vecsStereoSndCrd; + vecsStereoSndCrdMuteStream = vecsStereoSndCrd; } for ( i = 0; i < iSndCrdFrameSizeFactor; i++ ) @@ -1158,7 +1178,7 @@ fflush(pFileDelay); for ( i = 0; i < iStereoBlockSizeSam; i++ ) { vecsStereoSndCrd[i] = Double2Short ( - static_cast ( vecsStereoSndCrd[i] ) + vecsStereoSndCrdTMP[i] ); + static_cast ( vecsStereoSndCrd[i] ) + vecsStereoSndCrdMuteStream[i] ); } } diff --git a/src/client.h b/src/client.h index bcea8094..15837f00 100755 --- a/src/client.h +++ b/src/client.h @@ -304,7 +304,7 @@ protected: static void AudioCallback ( CVector& psData, void* arg ); void Init(); - void ProcessSndCrdAudioData ( CVector& vecsStereoSndCrd ); + void ProcessSndCrdAudioData ( CVector& vecsMultChanAudioSndCrd ); void ProcessAudioDataIntern ( CVector& vecsStereoSndCrd ); int PreparePingMessage(); @@ -359,6 +359,7 @@ protected: CBufferBase SndCrdConversionBufferOut; CVector vecDataConvBuf; CVector vecsStereoSndCrdTMP; + CVector vecsStereoSndCrdMuteStream; CVector vecZeros; bool bFraSiFactPrefSupported; diff --git a/src/util.cpp b/src/util.cpp index f1a23873..225bc594 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -69,7 +69,7 @@ double CStereoSignalLevelMeter::UpdateCurLevel ( double dCurLevel, // TODO Calculate factor from sample rate and frame size (64 or 128 samples frame size). // But tests with 128 and 64 samples frame size have shown that the meter fly back // is ok for both numbers of samples frame size. - dCurLevel *= 0.95; + dCurLevel *= 0.97; } else { diff --git a/windows/sound.cpp b/windows/sound.cpp index d33c0f19..65e9006f 100755 --- a/windows/sound.cpp +++ b/windows/sound.cpp @@ -404,7 +404,7 @@ int CSound::Init ( const int iNewPrefMonoBufferSize ) ASIOSetSampleRate ( SYSTEM_SAMPLE_RATE_HZ ); // create memory for intermediate audio buffer - vecsTmpAudioSndCrdStereo.Init ( iASIOBufferSizeStereo ); + vecsMultChanAudioSndCrd.Init ( iASIOBufferSizeStereo ); // create and activate ASIO buffers (buffer size in samples), // dispose old buffers (if any) @@ -600,8 +600,8 @@ void CSound::bufferSwitch ( long index, ASIOBool ) int iCurSample; // get references to class members - int& iASIOBufferSizeMono = pSound->iASIOBufferSizeMono; - CVector& vecsTmpAudioSndCrdStereo = pSound->vecsTmpAudioSndCrdStereo; + int& iASIOBufferSizeMono = pSound->iASIOBufferSizeMono; + CVector& vecsMultChanAudioSndCrd = pSound->vecsMultChanAudioSndCrd; // perform the processing for input and output pSound->ASIOMutex.lock(); // get mutex lock @@ -625,7 +625,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = pASIOBuf[iCurSample]; + vecsMultChanAudioSndCrd[2 * iCurSample + i] = pASIOBuf[iCurSample]; } if ( iSelAddCH >= 0 ) @@ -635,8 +635,8 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = - Double2Short ( (double) vecsTmpAudioSndCrdStereo[2 * iCurSample + i] + + vecsMultChanAudioSndCrd[2 * iCurSample + i] = + Double2Short ( (double) vecsMultChanAudioSndCrd[2 * iCurSample + i] + (double) pASIOBufAdd[iCurSample] ); } } @@ -650,7 +650,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) memcpy ( &iCurSam, ( (char*) pSound->bufferInfos[iSelCH].buffers[index] ) + iCurSample * 3, 3 ); iCurSam >>= 8; - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = static_cast ( iCurSam ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( iCurSam ); } if ( iSelAddCH >= 0 ) @@ -662,8 +662,8 @@ void CSound::bufferSwitch ( long index, ASIOBool ) memcpy ( &iCurSam, ( (char*) pSound->bufferInfos[iSelAddCH].buffers[index] ) + iCurSample * 3, 3 ); iCurSam >>= 8; - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = - Double2Short ( (double) vecsTmpAudioSndCrdStereo[2 * iCurSample + i] + + vecsMultChanAudioSndCrd[2 * iCurSample + i] = + Double2Short ( (double) vecsMultChanAudioSndCrd[2 * iCurSample + i] + (double) static_cast ( iCurSam ) ); } } @@ -675,7 +675,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( pASIOBuf[iCurSample] >> 16 ); } @@ -686,8 +686,8 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = - Double2Short ( (double) vecsTmpAudioSndCrdStereo[2 * iCurSample + i] + + vecsMultChanAudioSndCrd[2 * iCurSample + i] = + Double2Short ( (double) vecsMultChanAudioSndCrd[2 * iCurSample + i] + (double) static_cast ( pASIOBufAdd[iCurSample] >> 16 ) ); } } @@ -698,7 +698,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] * _MAXSHORT ); } @@ -708,7 +708,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] * _MAXSHORT ); } @@ -718,7 +718,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] & 0xFFFF ); } @@ -728,7 +728,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] & 0x3FFFF ) >> 2 ); } @@ -738,7 +738,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] & 0xFFFFF ) >> 4 ); } @@ -748,7 +748,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] & 0xFFFFFF ) >> 8 ); } @@ -759,7 +759,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // flip bits for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = Flip16Bits ( ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] ) )[iCurSample] ); } @@ -774,7 +774,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) int iCurSam = 0; memcpy ( &iCurSam, ( (char*) pSound->bufferInfos[iSelCH].buffers[index] ) + iCurSample * 3, 3 ); - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = Flip16Bits ( static_cast ( iCurSam ) ); } break; @@ -784,7 +784,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { // flip bits and convert to 16 bit - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( Flip32Bits ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] ) >> 16 ); } @@ -794,7 +794,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( static_cast ( Flip32Bits ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] ) ) * _MAXSHORT ); @@ -805,7 +805,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( static_cast ( Flip64Bits ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] ) ) * _MAXSHORT ); @@ -816,7 +816,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( Flip32Bits ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] ) & 0xFFFF ); } @@ -826,7 +826,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( ( Flip32Bits ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] ) & 0x3FFFF ) >> 2 ); } @@ -836,7 +836,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( ( Flip32Bits ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] ) & 0xFFFFF ) >> 4 ); } @@ -846,7 +846,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // NOT YET TESTED for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] = + vecsMultChanAudioSndCrd[2 * iCurSample + i] = static_cast ( ( Flip32Bits ( static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] ) & 0xFFFFFF ) >> 8 ); } @@ -855,7 +855,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) } // call processing callback function - pSound->ProcessCallback ( vecsTmpAudioSndCrdStereo ); + pSound->ProcessCallback ( vecsMultChanAudioSndCrd ); // PLAYBACK ------------------------------------------------------------ @@ -874,7 +874,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { - pASIOBuf[iCurSample] = vecsTmpAudioSndCrdStereo[2 * iCurSample + i]; + pASIOBuf[iCurSample] = vecsMultChanAudioSndCrd[2 * iCurSample + i]; } break; } @@ -885,7 +885,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert current sample in 24 bit format int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); iCurSam <<= 8; @@ -901,7 +901,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit const int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); pASIOBuf[iCurSample] = ( iCurSam << 16 ); } @@ -913,7 +913,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { const float fCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = fCurSam / _MAXSHORT; @@ -925,7 +925,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { const double fCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = fCurSam / _MAXSHORT; @@ -938,7 +938,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit const int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = iCurSam; @@ -951,7 +951,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit const int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = ( iCurSam << 2 ); @@ -964,7 +964,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit const int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = ( iCurSam << 4 ); @@ -977,7 +977,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit const int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = ( iCurSam << 8 ); @@ -990,7 +990,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { ( (int16_t*) pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = - Flip16Bits ( vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + Flip16Bits ( vecsMultChanAudioSndCrd[2 * iCurSample + i] ); } break; @@ -1001,7 +1001,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) // because the bits are flipped, we do not have to perform the // shift by 8 bits int32_t iCurSam = static_cast ( Flip16Bits ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ) ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ) ); memcpy ( ( (char*) pSound->bufferInfos[iSelCH].buffers[index] ) + iCurSample * 3, &iCurSam, 3 ); } @@ -1013,7 +1013,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit and flip bits int iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = Flip32Bits ( iCurSam << 16 ); @@ -1025,7 +1025,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { const float fCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = static_cast ( Flip32Bits ( static_cast ( @@ -1038,7 +1038,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) for ( iCurSample = 0; iCurSample < iASIOBufferSizeMono; iCurSample++ ) { const double fCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = static_cast ( Flip64Bits ( static_cast ( @@ -1052,7 +1052,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit const int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = Flip32Bits ( iCurSam ); @@ -1065,7 +1065,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit const int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = Flip32Bits ( iCurSam << 2 ); @@ -1078,7 +1078,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit const int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = Flip32Bits ( iCurSam << 4 ); @@ -1091,7 +1091,7 @@ void CSound::bufferSwitch ( long index, ASIOBool ) { // convert to 32 bit const int32_t iCurSam = static_cast ( - vecsTmpAudioSndCrdStereo[2 * iCurSample + i] ); + vecsMultChanAudioSndCrd[2 * iCurSample + i] ); static_cast ( pSound->bufferInfos[iSelCH].buffers[index] )[iCurSample] = Flip32Bits ( iCurSam << 8 ); diff --git a/windows/sound.h b/windows/sound.h index 21881bb9..5f6d96a7 100755 --- a/windows/sound.h +++ b/windows/sound.h @@ -117,7 +117,7 @@ protected: CVector vSelectedInputChannels; CVector vSelectedOutputChannels; - CVector vecsTmpAudioSndCrdStereo; + CVector vecsMultChanAudioSndCrd; QMutex ASIOMutex;