diff --git a/stepmania/src/RageSoundReader_Resample_Fast.cpp b/stepmania/src/RageSoundReader_Resample_Fast.cpp deleted file mode 100644 index af13f72dbb..0000000000 --- a/stepmania/src/RageSoundReader_Resample_Fast.cpp +++ /dev/null @@ -1,227 +0,0 @@ -#include "global.h" -#include "RageSoundReader_Resample_Fast.h" - -RageSoundReader_Resample_Fast::RageSoundReader_Resample_Fast() -{ - m_pSource = NULL; - m_iInputRate = -1; - m_iOutputRate = -1; - m_iChannels = 2; - Reset(); -} - -void RageSoundReader_Resample_Fast::Reset() -{ - m_bAtEof = false; - memset( m_iPrevSample, 0, sizeof(m_iPrevSample) ); - m_iPos = 0; - m_OutBuf.clear(); -} - -void RageSoundReader_Resample_Fast::Open( SoundReader *pSource ) -{ - m_pSource = pSource; - ASSERT(m_pSource); - - m_iInputRate = m_iOutputRate = m_pSource->GetSampleRate(); - ASSERT( m_pSource->GetNumChannels() < MAX_CHANNELS ); - m_iChannels = m_pSource->GetNumChannels(); -} - - -RageSoundReader_Resample_Fast::~RageSoundReader_Resample_Fast() -{ - delete m_pSource; -} - -void RageSoundReader_Resample_Fast::SetSampleRate( int iRate ) -{ - m_iOutputRate = iRate; -} - -int RageSoundReader_Resample_Fast::GetLength() const -{ - return m_pSource->GetLength(); -} - -int RageSoundReader_Resample_Fast::GetLength_Fast() const -{ - return m_pSource->GetLength_Fast(); -} - -int RageSoundReader_Resample_Fast::SetPosition_Accurate( int ms ) -{ - Reset(); - return m_pSource->SetPosition_Accurate(ms); -} - -int RageSoundReader_Resample_Fast::SetPosition_Fast( int ms ) -{ - Reset(); - return m_pSource->SetPosition_Fast(ms); -} -static const int BUFSIZE = 1024*16; - -int RageSoundReader_Resample_Fast::Read( char *pBuf, unsigned iSize ) -{ - int iBytesRead = 0; - while( iSize ) - { - { - ASSERT( (iSize % sizeof(int16_t)) == 0 ); - - /* If no data is available, and we're m_bAtEof, stop. */ - if( m_OutBuf.size() == 0 && m_bAtEof ) - break; - - /* Fill as much as we have. */ - int iGot = min( m_OutBuf.size()*sizeof(int16_t), size_t(iSize) ); - memcpy( pBuf, &m_OutBuf[0], iGot ); - m_OutBuf.erase( m_OutBuf.begin(), m_OutBuf.begin() + iGot/sizeof(int16_t) ); - - pBuf += iGot; - iSize -= iGot; - iBytesRead += iGot; - - if( iGot ) - continue; - } - - { - static char buf[BUFSIZE]; - int iGot = m_pSource->Read( buf, sizeof(buf) ); - - if( iGot == -1 ) - { - SetError( m_pSource->GetError() ); - return -1; - } - if( iGot == 0 ) - { - ASSERT( !m_bAtEof ); - - /* Write some silence to flush out the real data. If we don't have any sound, - * don't do this, so seeking past end of file doesn't write silence. */ - bool bNeedsFlush = false; - for( int c = 0; c < m_iChannels; ++c ) - if( m_iPrevSample[c] != 0 ) - bNeedsFlush = true; - - if( bNeedsFlush ) - { - const int iSize = m_iChannels*16; - int16_t *pData = new int16_t[iSize]; - memset( pData, 0, iSize * sizeof(int16_t) ); - WriteSamples( pData, iSize * sizeof(int16_t) ); - delete[] pData; - } - - m_bAtEof = true; - } - else - WriteSamples( buf, iGot ); - } - } - - return iBytesRead; -} - -SoundReader *RageSoundReader_Resample_Fast::Copy() const -{ - SoundReader *pNewSource = m_pSource->Copy(); - RageSoundReader_Resample_Fast *pRet = new RageSoundReader_Resample_Fast; - pRet->Open( pNewSource ); - pRet->SetSampleRate( m_iOutputRate ); - return pRet; -} - - - -/* Write data to be converted. */ -void RageSoundReader_Resample_Fast::WriteSamples(const void *data_, int bytes) -{ - ASSERT(!m_bAtEof); - - const int16_t *data = (const int16_t *) data_; - - const unsigned samples = bytes / sizeof(int16_t); - const unsigned frames = samples / m_iChannels; - - if( m_iInputRate == m_iOutputRate ) - { - /* Optimization: */ - m_OutBuf.insert(m_OutBuf.end(), data, data+samples); - return; - } - - /* Lerp. */ - const int FIXED_SHIFT = 14; - const int FIXED_ONE = 1<> FIXED_SHIFT); - iSamplesOutput += m_iChannels; - iPos += iInputSamplesPerOutputSample; - } - - iPos -= FIXED_ONE; - - iPrevSample = pInBuf[iSamplesInput]; - iSamplesInput += m_iChannels; - } - m_iPrevSample[c] = iPrevSample; - - if( c == m_iChannels-1 ) - { - iSize = iSamplesOutput; - m_iPos = iPos; - } - } - - m_OutBuf.erase( m_OutBuf.begin()+iSize, m_OutBuf.end() ); -} - - -/* - * Copyright (c) 2003-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_Resample_Fast.h b/stepmania/src/RageSoundReader_Resample_Fast.h deleted file mode 100644 index 3b1a6442fd..0000000000 --- a/stepmania/src/RageSoundReader_Resample_Fast.h +++ /dev/null @@ -1,78 +0,0 @@ -/* RageSoundReader_Resample_Fast - interface for RageSoundResampler. */ - -#ifndef RAGE_SOUND_READER_RESAMPLE_FAST_H -#define RAGE_SOUND_READER_RESAMPLE_FAST_H - -#include "RageSoundReader.h" -#include "RageSoundReader_Resample.h" - -/* This class changes the sampling rate of a sound. */ -class RageSoundReader_Resample_Fast: public RageSoundReader_Resample -{ -public: - /* We own pSource. */ - void Open( SoundReader *pSource ); - int GetLength() const; - int GetLength_Fast() const; - int SetPosition_Accurate( int ms ); - int SetPosition_Fast( int ms ); - int Read( char *pBuf, unsigned iSize ); - RageSoundReader_Resample_Fast(); - virtual ~RageSoundReader_Resample_Fast(); - SoundReader *Copy() const; - - /* Change the actual sample rate of a sound. */ - void SetSampleRate( int hz ); - - int GetSampleRate() const { return m_iOutputRate; } - unsigned GetNumChannels() const { return m_pSource->GetNumChannels(); } - bool IsStreamingFromDisk() const { return m_pSource->IsStreamingFromDisk(); } - -private: - void Reset(); - bool FillBuf(); - - /* Write data to be converted. */ - void WriteSamples( const void *data, int bytes ); - - SoundReader *m_pSource; - - int m_iInputRate; - int m_iOutputRate; - int m_iChannels; - - enum { MAX_CHANNELS = 15 }; - int16_t m_iPrevSample[MAX_CHANNELS]; - - vector m_OutBuf; - bool m_bAtEof; - int m_iPos; -}; - -#endif - -/* - * Copyright (c) 2003-2005 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. - */ -