From 9530cff9a61953227fd07e853f805795023f6b7b Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 28 Feb 2004 02:35:18 +0000 Subject: [PATCH] better balance --- stepmania/src/RageSound.cpp | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/stepmania/src/RageSound.cpp b/stepmania/src/RageSound.cpp index c6176b33b8..e58f804134 100644 --- a/stepmania/src/RageSound.cpp +++ b/stepmania/src/RageSound.cpp @@ -472,15 +472,33 @@ int RageSound::GetPCM( char *buffer, int size, int64_t frameno ) if( m_Param.m_Balance != 0 ) { Sint16 *p = (Sint16 *) buffer; - const float fLeft = SCALE( m_Param.m_Balance, -1, 1, 1, 0 ); - const float fRight = SCALE( m_Param.m_Balance, -1, 1, 0, 1 ); - const int iLeft = int(fLeft*256); - const int iRight = int(fRight*256); + + float fBalance = m_Param.m_Balance; + bool bSwap = fBalance < 0; + if( bSwap ) + fBalance = -fBalance; + + float fLeftFactors[2] ={ 1-fBalance, 0 }; + float fRightFactors[2] = + { + SCALE( fBalance, 0, 1, 0.5f, 0 ), + SCALE( fBalance, 0, 1, 0.5f, 1 ) + }; + + if( bSwap ) + { + swap( fLeftFactors[0], fRightFactors[0] ); + swap( fLeftFactors[1], fRightFactors[1] ); + } + RAGE_ASSERT_M( channels == 2, ssprintf("%i", channels) ); for( int samp = 0; samp < got_frames; ++samp ) { - *(p++) = short( (*p * iLeft) >> 8 ); - *(p++) = short( (*p * iRight) >> 8 ); + Sint16 l = Sint16(p[0]*fLeftFactors[0] + p[1]*fLeftFactors[1]); + Sint16 r = Sint16(p[0]*fRightFactors[0] + p[1]*fRightFactors[1]); + p[0] = l; + p[1] = r; + p+=2; } }