forked from dolphin-emu/dolphin
		
	
		
			
	
	
		
			93 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// 
							 | 
						||
| 
								 | 
							
								/// Linear interpolation routine.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// Author        : Copyright (c) Olli Parviainen
							 | 
						||
| 
								 | 
							
								/// Author e-mail : oparviai 'at' iki.fi
							 | 
						||
| 
								 | 
							
								/// SoundTouch WWW: http://www.surina.net/soundtouch
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// $Id: InterpolateLinear.h 179 2014-01-06 18:41:42Z oparviai $
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// License :
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  SoundTouch audio processing library
							 | 
						||
| 
								 | 
							
								//  Copyright (c) Olli Parviainen
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  This library is free software; you can redistribute it and/or
							 | 
						||
| 
								 | 
							
								//  modify it under the terms of the GNU Lesser General Public
							 | 
						||
| 
								 | 
							
								//  License as published by the Free Software Foundation; either
							 | 
						||
| 
								 | 
							
								//  version 2.1 of the License, or (at your option) any later version.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  This library is distributed in the hope that it will be useful,
							 | 
						||
| 
								 | 
							
								//  but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						||
| 
								 | 
							
								//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
							 | 
						||
| 
								 | 
							
								//  Lesser General Public License for more details.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  You should have received a copy of the GNU Lesser General Public
							 | 
						||
| 
								 | 
							
								//  License along with this library; if not, write to the Free Software
							 | 
						||
| 
								 | 
							
								//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef _InterpolateLinear_H_
							 | 
						||
| 
								 | 
							
								#define _InterpolateLinear_H_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "RateTransposer.h"
							 | 
						||
| 
								 | 
							
								#include "STTypes.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace soundtouch
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Linear transposer class that uses integer arithmetics
							 | 
						||
| 
								 | 
							
								class InterpolateLinearInteger : public TransposerBase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    int iFract;
							 | 
						||
| 
								 | 
							
								    int iRate;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual void resetRegisters();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual int transposeMono(SAMPLETYPE *dest, 
							 | 
						||
| 
								 | 
							
								                       const SAMPLETYPE *src, 
							 | 
						||
| 
								 | 
							
								                       int &srcSamples);
							 | 
						||
| 
								 | 
							
								    virtual int transposeStereo(SAMPLETYPE *dest, 
							 | 
						||
| 
								 | 
							
								                         const SAMPLETYPE *src, 
							 | 
						||
| 
								 | 
							
								                         int &srcSamples);
							 | 
						||
| 
								 | 
							
								    virtual int transposeMulti(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples);
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    InterpolateLinearInteger();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Sets new target rate. Normal rate = 1.0, smaller values represent slower 
							 | 
						||
| 
								 | 
							
								    /// rate, larger faster rates.
							 | 
						||
| 
								 | 
							
								    virtual void setRate(float newRate);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Linear transposer class that uses floating point arithmetics
							 | 
						||
| 
								 | 
							
								class InterpolateLinearFloat : public TransposerBase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    float fract;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual void resetRegisters();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual int transposeMono(SAMPLETYPE *dest, 
							 | 
						||
| 
								 | 
							
								                       const SAMPLETYPE *src, 
							 | 
						||
| 
								 | 
							
								                       int &srcSamples);
							 | 
						||
| 
								 | 
							
								    virtual int transposeStereo(SAMPLETYPE *dest, 
							 | 
						||
| 
								 | 
							
								                         const SAMPLETYPE *src, 
							 | 
						||
| 
								 | 
							
								                         int &srcSamples);
							 | 
						||
| 
								 | 
							
								    virtual int transposeMulti(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    InterpolateLinearFloat();
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |