diff options
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/soundlib/Mixer.h')
-rw-r--r-- | Src/external_dependencies/openmpt-trunk/soundlib/Mixer.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/soundlib/Mixer.h b/Src/external_dependencies/openmpt-trunk/soundlib/Mixer.h new file mode 100644 index 00000000..c18043d9 --- /dev/null +++ b/Src/external_dependencies/openmpt-trunk/soundlib/Mixer.h @@ -0,0 +1,63 @@ +/* + * Mixer.h + * ------- + * Purpose: Basic mixer constants + * Notes : (currently none) + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#pragma once + +#include "openmpt/all/BuildSettings.hpp" + +#include "openmpt/soundbase/MixSample.hpp" + +OPENMPT_NAMESPACE_BEGIN + +#define MPT_INTMIXER + +#ifdef MPT_INTMIXER +using mixsample_t = MixSampleIntTraits::sample_type; +enum { MIXING_FILTER_PRECISION = MixSampleIntTraits::filter_precision_bits }; // Fixed point resonant filter bits +#else +using mixsample_t = MixSampleFloat; +#endif +enum { MIXING_ATTENUATION = MixSampleIntTraits::mix_headroom_bits }; +enum { MIXING_FRACTIONAL_BITS = MixSampleIntTraits::mix_fractional_bits }; + +inline constexpr float MIXING_SCALEF = MixSampleIntTraits::mix_scale<float>; + +#ifdef MPT_INTMIXER +static_assert(sizeof(mixsample_t) == 4); +static_assert(MIXING_FILTER_PRECISION == 24); +static_assert(MIXING_ATTENUATION == 4); +static_assert(MIXING_FRACTIONAL_BITS == 27); +static_assert(MixSampleIntTraits::mix_clip_max == int32(0x7FFFFFF)); +static_assert(MixSampleIntTraits::mix_clip_min == (0 - int32(0x7FFFFFF))); +static_assert(MIXING_SCALEF == 134217728.0f); +#else +static_assert(sizeof(mixsample_t) == 4); +#endif + +#define MIXBUFFERSIZE 512 +#define NUMMIXINPUTBUFFERS 4 + +#define VOLUMERAMPPRECISION 12 // Fractional bits in volume ramp variables + +// The absolute maximum number of sampling points any interpolation algorithm is going to look at in any direction from the current sampling point +// Currently, the maximum is 4 sampling points forwards and 3 sampling points backwards (Polyphase / FIR algorithms). +// Hence, this value must be at least 4. +inline constexpr uint8 InterpolationMaxLookahead = 4; +// While we could directly use the previous value in various places such as the interpolation wrap-around handling at loop points, +// choosing a higher value (e.g. 16) will reduce CPU usage when using many extremely short (length < 16) samples. +inline constexpr uint8 InterpolationLookaheadBufferSize = 16; + +static_assert(InterpolationLookaheadBufferSize >= InterpolationMaxLookahead); + +// Maximum size of a sampling point of a sample, in bytes. +// The biggest sampling point size is currently 16-bit stereo = 2 * 2 bytes. +inline constexpr uint8 MaxSamplingPointSize = 4; + +OPENMPT_NAMESPACE_END |