add RageSoundReader_Pan

This commit is contained in:
Glenn Maynard
2006-12-09 22:37:57 +00:00
parent 381fc45cfd
commit 77401ed8d3
2 changed files with 124 additions and 0 deletions
+78
View File
@@ -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.
*/
+46
View File
@@ -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.
*/