Bundle libOpenMPT as a dynamic framework, which should be safe once again, now that there is only one version to bundle. Also, now it is using the versions of libvorbisfile and libmpg123 that are bundled with the player, instead of compiling minimp3 and stbvorbis. Signed-off-by: Christopher Snowhill <kode54@gmail.com>
92 lines
2.9 KiB
C++
92 lines
2.9 KiB
C++
/*
|
|
* 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
|