diff --git a/stepmania/src/RageSoundReader_Pan.cpp b/stepmania/src/RageSoundReader_Pan.cpp new file mode 100644 index 0000000000..2348032099 --- /dev/null +++ b/stepmania/src/RageSoundReader_Pan.cpp @@ -0,0 +1,78 @@ +#include "global.h" +#include "RageSoundReader_Pan.h" +#include "RageSoundUtil.h" + +RageSoundReader_Pan::RageSoundReader_Pan( RageSoundReader *pSource ): + RageSoundReader_Filter( pSource ) +{ + m_fPan = 0.0; +} + + +int RageSoundReader_Pan::Read( char *pBuf, unsigned iLen ) +{ + /* If the source is mono, it'll be converted to stereo; read half as many frames, + * so we have space. */ + if( m_pSource->GetNumChannels() == 1 ) + iLen /= 2; + + int iRet = m_pSource->Read( pBuf, iLen ); + int iSamples = iRet / sizeof(uint16_t); + + int16_t *pSampleBuf = (int16_t *) pBuf; + if( m_pSource->GetNumChannels() == 1 ) + { + RageSoundUtil::ConvertMonoToStereoInPlace( pSampleBuf, iSamples ); + iRet *= 2; + iSamples *= 2; + } + + int iFrames = iSamples / GetNumChannels(); + + /* This block goes from iStreamFrame to iStreamFrame+iGotFrames. */ + if( GetNumChannels() == 2 && m_fPan != 0.0 ) + RageSoundUtil::Pan( pSampleBuf, iFrames, m_fPan ); + + return iRet; +} + +unsigned RageSoundReader_Pan::GetNumChannels() const +{ + return max( 2u, RageSoundReader_Filter::GetNumChannels() ); +} + +bool RageSoundReader_Pan::SetProperty( const RString &sProperty, float fValue ) +{ + if( sProperty == "Pan" ) + { + m_fPan = fValue; + return true; + } + + return RageSoundReader_Filter::SetProperty( sProperty, fValue ); +} + +/* + * Copyright (c) 2006 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/stepmania/src/RageSoundReader_Pan.h b/stepmania/src/RageSoundReader_Pan.h new file mode 100644 index 0000000000..66e02c8db0 --- /dev/null +++ b/stepmania/src/RageSoundReader_Pan.h @@ -0,0 +1,46 @@ +/* RageSoundReader_Pan - Pan a sound left and right. */ + +#ifndef RAGE_SOUND_READER_PAN_H +#define RAGE_SOUND_READER_PAN_H + +#include "RageSoundReader_Filter.h" + +class RageSoundReader_Pan: public RageSoundReader_Filter +{ +public: + RageSoundReader_Pan( RageSoundReader *pSource ); + RageSoundReader_Pan *Copy() const { return new RageSoundReader_Pan(*this); } + virtual unsigned GetNumChannels() const; + virtual int Read( char *pBuf, unsigned iLen ); + virtual bool SetProperty( const RString &sProperty, float fValue ); + +private: + float m_fPan; +}; + +#endif + +/* + * Copyright (c) 2006 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */