Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
|
@ -0,0 +1,92 @@
|
|||
/*
|
||||
* MixFuncTable.cpp
|
||||
* ----------------
|
||||
* Purpose: Table containing all mixer functions.
|
||||
* Notes : The Visual Studio project settings for this file have been adjusted
|
||||
* to force function inlining, so that the mixer has a somewhat acceptable
|
||||
* performance in debug mode. If you need to debug anything here, be sure
|
||||
* to disable those optimizations if needed.
|
||||
* Authors: OpenMPT Devs
|
||||
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||||
*/
|
||||
|
||||
|
||||
#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 // MPT_INTMIXER
|
||||
|
||||
OPENMPT_NAMESPACE_BEGIN
|
||||
|
||||
namespace MixFuncTable
|
||||
{
|
||||
#ifdef MPT_INTMIXER
|
||||
using I8M = Int8MToIntS;
|
||||
using I16M = Int16MToIntS;
|
||||
using I8S = Int8SToIntS;
|
||||
using I16S = Int16SToIntS;
|
||||
#else
|
||||
using I8M = Int8MToFloatS;
|
||||
using I16M = Int16MToFloatS;
|
||||
using I8S = Int8SToFloatS;
|
||||
using I16S = Int16SToFloatS;
|
||||
#endif // MPT_INTMIXER
|
||||
|
||||
// Build mix function table for given resampling, filter and ramping settings: One function each for 8-Bit / 16-Bit Mono / Stereo
|
||||
#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> >
|
||||
|
||||
// Build mix function table for given resampling, filter settings: With and without ramping
|
||||
#define BuildMixFuncTableFilter(resampling, filter) \
|
||||
BuildMixFuncTableRamp(resampling, filter, NoRamp), \
|
||||
BuildMixFuncTableRamp(resampling, filter, Ramp)
|
||||
|
||||
// Build mix function table for given resampling settings: With and without filter
|
||||
#define BuildMixFuncTable(resampling) \
|
||||
BuildMixFuncTableFilter(resampling, NoFilter), \
|
||||
BuildMixFuncTableFilter(resampling, ResonantFilter)
|
||||
|
||||
const MixFuncInterface Functions[6 * 16] =
|
||||
{
|
||||
BuildMixFuncTable(NoInterpolation), // No SRC
|
||||
BuildMixFuncTable(LinearInterpolation), // Linear SRC
|
||||
BuildMixFuncTable(FastSincInterpolation), // Fast Sinc (Cubic Spline) SRC
|
||||
BuildMixFuncTable(PolyphaseInterpolation), // Kaiser SRC
|
||||
BuildMixFuncTable(FIRFilterInterpolation), // FIR SRC
|
||||
BuildMixFuncTable(AmigaBlepInterpolation), // Amiga emulation
|
||||
};
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
} // namespace MixFuncTable
|
||||
|
||||
OPENMPT_NAMESPACE_END
|
Loading…
Add table
Add a link
Reference in a new issue