#include "stdafx.h"
#include "Mixer.h"
#include "Snd_defs.h"
#include "ModChannel.h"
#include "MixFuncTable.h"
#ifdef MPT_INTMIXER
#include "IntMixer.h"
#else
#include "FloatMixer.h"
#endif
OPENMPT_NAMESPACE_BEGIN
namespace MixFuncTable
{
#ifdef MPT_INTMIXER
typedef Int8MToIntS I8M;
typedef Int16MToIntS I16M;
typedef Int8SToIntS I8S;
typedef Int16SToIntS I16S;
#else
typedef Int8MToFloatS I8M;
typedef Int16MToFloatS I16M;
typedef Int8SToFloatS I8S;
typedef Int16SToFloatS I16S;
#endif
#define BuildMixFuncTableRamp(resampling, filter, ramp) \
SampleLoop<I8M, resampling<I8M>, filter<I8M>, MixMono ## ramp<I8M> >, \
SampleLoop<I16M, resampling<I16M>, filter<I16M>, MixMono ## ramp<I16M> >, \
SampleLoop<I8S, resampling<I8S>, filter<I8S>, MixStereo ## ramp<I8S> >, \
SampleLoop<I16S, resampling<I16S>, filter<I16S>, MixStereo ## ramp<I16S> >
#define BuildMixFuncTableFilter(resampling, filter) \
BuildMixFuncTableRamp(resampling, filter, NoRamp), \
BuildMixFuncTableRamp(resampling, filter, Ramp)
#define BuildMixFuncTable(resampling) \
BuildMixFuncTableFilter(resampling, NoFilter), \
BuildMixFuncTableFilter(resampling, ResonantFilter)
const MixFuncInterface Functions[6 * 16] =
{
BuildMixFuncTable(NoInterpolation), BuildMixFuncTable(LinearInterpolation), BuildMixFuncTable(FastSincInterpolation), BuildMixFuncTable(PolyphaseInterpolation), BuildMixFuncTable(FIRFilterInterpolation), BuildMixFuncTable(AmigaBlepInterpolation), };
#undef BuildMixFuncTableRamp
#undef BuildMixFuncTableFilter
#undef BuildMixFuncTable
ResamplingIndex ResamplingModeToMixFlags(ResamplingMode resamplingMode)
{
switch(resamplingMode)
{
case SRCMODE_NEAREST: return ndxNoInterpolation;
case SRCMODE_LINEAR: return ndxLinear;
case SRCMODE_CUBIC: return ndxFastSinc;
case SRCMODE_SINC8LP: return ndxKaiser;
case SRCMODE_SINC8: return ndxFIRFilter;
case SRCMODE_AMIGA: return ndxAmigaBlep;
default: MPT_ASSERT_NOTREACHED();
}
return ndxNoInterpolation;
}
}
OPENMPT_NAMESPACE_END