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>
63 lines
2.3 KiB
C
63 lines
2.3 KiB
C
/*
|
|
* 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
|