diff --git a/stepmania/src/RageSoundReader_PostBuffering.cpp b/stepmania/src/RageSoundReader_PostBuffering.cpp new file mode 100644 index 0000000000..ad429da1f6 --- /dev/null +++ b/stepmania/src/RageSoundReader_PostBuffering.cpp @@ -0,0 +1,64 @@ +#include "global.h" +#include "RageSoundReader_PostBuffering.h" +#include "RageSoundUtil.h" + +/* + * This filter is normally inserted after extended buffering, implementing + * properties that do not seek the sound, allowing these properties to be + * changed with low latency. + */ + +RageSoundReader_PostBuffering::RageSoundReader_PostBuffering( RageSoundReader *pSource ): + RageSoundReader_Filter( pSource ) +{ + m_fVolume = 1.0f; +} + + +int RageSoundReader_PostBuffering::Read( char *pBuf, int iFrames ) +{ + iFrames = m_pSource->Read( pBuf, iFrames ); + if( iFrames < 0 ) + return iFrames; + + if( m_fVolume != 1.0f ) + RageSoundUtil::Attenuate( (int16_t *) pBuf, iFrames * this->GetNumChannels(), m_fVolume ); + + return iFrames; +} + +bool RageSoundReader_PostBuffering::SetProperty( const RString &sProperty, float fValue ) +{ + if( sProperty == "Volume" ) + { + m_fVolume = fValue; + return true; + } + + return RageSoundReader_Filter::SetProperty( sProperty, fValue ); +} + +/* + * Copyright (c) 2007 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_PostBuffering.h b/stepmania/src/RageSoundReader_PostBuffering.h new file mode 100644 index 0000000000..3d4af0457e --- /dev/null +++ b/stepmania/src/RageSoundReader_PostBuffering.h @@ -0,0 +1,45 @@ +/* RageSoundReader_PostBuffering - Apply low-latency effects. */ + +#ifndef RAGE_SOUND_READER_POST_BUFFERING_H +#define RAGE_SOUND_READER_POST_BUFFERING_H + +#include "RageSoundReader_Filter.h" + +class RageSoundReader_PostBuffering: public RageSoundReader_Filter +{ +public: + RageSoundReader_PostBuffering( RageSoundReader *pSource ); + RageSoundReader_PostBuffering *Copy() const { return new RageSoundReader_PostBuffering(*this); } + virtual int Read( char *pBuf, int iFrames ); + virtual bool SetProperty( const RString &sProperty, float fValue ); + +private: + float m_fVolume; +}; + +#endif + +/* + * Copyright (c) 2007 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. + */