ref: a6835eeb1a67ffad59c30a01a515ddd9dc2e83af
parent: fc5ed17074d77e0c09d821c816521889dae41fbc
author: Olav Sørensen <olav.sorensen@live.no>
date: Tue Jan 16 08:57:49 EST 2024
Remove mono mixers (was wasteful)
--- a/src/ft2_audio.c
+++ b/src/ft2_audio.c
@@ -15,7 +15,6 @@
#include "ft2_tables.h"
#include "ft2_structs.h"
#include "mixer/ft2_mix.h"
-#include "mixer/ft2_center_mix.h"
#include "mixer/ft2_silence_mix.h"
// hide POSIX warnings
@@ -462,32 +461,15 @@
{
if (v->active)
{
- bool centerMixFlag;
-
const bool volRampFlag = (v->volumeRampLength > 0);
- if (volRampFlag)
- {
- centerMixFlag = (v->fTargetVolumeL == v->fTargetVolumeR) && (v->fVolumeLDelta == v->fVolumeRDelta);
- }
- else // no volume ramping active
- {
- if (v->fCurrVolumeL == 0.0f && v->fCurrVolumeR == 0.0f)
- {
- silenceMixRoutine(v, samplesToMix);
- continue;
- }
-
- centerMixFlag = (v->fCurrVolumeL == v->fCurrVolumeR);
- }
-
- mixFuncTab[((int32_t)centerMixFlag * (3*5*2*2)) + ((int32_t)volRampFlag * (3*5*2)) + v->mixFuncOffset](v, bufferPosition, samplesToMix);
+ if (!volRampFlag && v->fCurrVolumeL == 0.0f && v->fCurrVolumeR == 0.0f)
+ silenceMixRoutine(v, samplesToMix);
+ else
+ mixFuncTab[((int32_t)volRampFlag * (3*5*2)) + v->mixFuncOffset](v, bufferPosition, samplesToMix);
}
if (r->active) // volume ramp fadeout-voice
- {
- const bool centerMixFlag = (r->fTargetVolumeL == r->fTargetVolumeR) && (r->fVolumeLDelta == r->fVolumeRDelta);
- mixFuncTab[((int32_t)centerMixFlag * (3*5*2*2)) + (3*5*2) + r->mixFuncOffset](r, bufferPosition, samplesToMix);
- }
+ mixFuncTab[(3*5*2) + r->mixFuncOffset](r, bufferPosition, samplesToMix);
}
}
--- a/src/mixer/ft2_center_mix.c
+++ /dev/null
@@ -1,3479 +1,0 @@
-#include <stdint.h>
-#include <stdbool.h>
-#include "ft2_mix_macros.h"
-#include "../ft2_cpu.h"
-
-/* Check out ft2_mix.c for comments on how this works.
-** These are duplicates for center-mixing (slightly faster when it can be used).
-*/
-
-/* ----------------------------------------------------------------------- */
-/* 8-BIT CENTER MIXING ROUTINES */
-/* ----------------------------------------------------------------------- */
-
-void centerMix8bNoLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- INC_POS
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bBidiLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8_BIDI
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO
- INC_POS_BIDI
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bNoLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bBidiLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8_BIDI
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- }
- }
-
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bNoLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bBidiLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8_BIDI
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bNoLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bBidiLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8_BIDI
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- }
- }
-
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE8_BIDI
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- }
- }
-
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampNoLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampBidiLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8_BIDI
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampNoLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampBidiLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8_BIDI
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampNoLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampBidiLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8_BIDI
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampNoLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampBidiLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8_BIDI
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix8bRampBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int8_t *base, *revBase, *smpPtr;
- int8_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE8_BIDI
- PREPARE_TAP_FIX8
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-/* ----------------------------------------------------------------------- */
-/* 16-BIT CENTER MIXING ROUTINES */
-/* ----------------------------------------------------------------------- */
-
-void centerMix16bNoLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- INC_POS
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bBidiLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16_BIDI
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO
- INC_POS_BIDI
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bNoLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bBidiLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16_BIDI
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP
- INC_POS_BIDI
- }
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bNoLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bBidiLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16_BIDI
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_LINTRP
- INC_POS_BIDI
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bNoLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bBidiLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16_BIDI
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP
- INC_POS_BIDI
- }
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO
- GET_MIXER_VARS
- SET_BASE16_BIDI
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP
- INC_POS_BIDI
- }
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampNoLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampBidiLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16_BIDI
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampNoLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampBidiLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16_BIDI
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S8INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampNoLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampBidiLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16_BIDI
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_LINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampNoLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampBidiLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16_BIDI
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_S16INTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
-
- HANDLE_SAMPLE_END
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS
- }
- }
-
- WRAP_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
-
-void centerMix16bRampBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
-{
- const int16_t *base, *revBase, *smpPtr;
- int16_t *smpTapPtr;
- float fSample, *fMixBufferL, *fMixBufferR;
- int32_t position;
- float fVolumeLDelta, fVolumeL;
- uint32_t i, samplesToMix, samplesLeft;
- uintCPUWord_t positionFrac, tmpDelta;
-
- GET_VOL_MONO_RAMP
- GET_MIXER_VARS_MONO_RAMP
- SET_BASE16_BIDI
- PREPARE_TAP_FIX16
-
- samplesLeft = numSamples;
- while (samplesLeft > 0)
- {
- LIMIT_MIX_NUM
- LIMIT_MIX_NUM_MONO_RAMP
- samplesLeft -= samplesToMix;
-
- START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- else
- {
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_CINTRP
- VOLUME_RAMPING_MONO
- INC_POS_BIDI
- }
- }
- END_BIDI
-
- WRAP_BIDI_LOOP
- }
-
- SET_VOL_BACK_MONO
- SET_BACK_MIXER_POS
-}
--- a/src/mixer/ft2_center_mix.h
+++ /dev/null
@@ -1,76 +1,0 @@
-#pragma once
-
-#include <stdint.h>
-#include "../ft2_audio.h"
-
-// no volume ramping
-
-// 8-bit
-void centerMix8bNoLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bBidiLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bNoLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bBidiLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bNoLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bBidiLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bNoLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bBidiLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-
-// 16-bit
-void centerMix16bNoLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bBidiLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bNoLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bBidiLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bNoLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bBidiLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bNoLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bBidiLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-
-// volume ramping
-
-// 8-bit
-void centerMix8bRampNoLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampBidiLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampNoLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampBidiLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampNoLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampBidiLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampNoLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampBidiLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix8bRampBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-
-// 16bit
-void centerMix16bRampNoLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampBidiLoop(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampNoLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampBidiLoopS8Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampNoLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampBidiLoopLIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampNoLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampBidiLoopS16Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
-void centerMix16bRampBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples);
--- a/src/mixer/ft2_mix.c
+++ b/src/mixer/ft2_mix.c
@@ -2,7 +2,6 @@
#include <stdbool.h>
#include "ft2_mix.h"
#include "ft2_mix_macros.h"
-#include "ft2_center_mix.h"
#include "../ft2_cpu.h"
/*
@@ -17,7 +16,7 @@
**
** This file has separate routines for EVERY possible sampling variation:
** Interpolation none/sinc/linear/cubic, volumeramp on/off, 8-bit, 16-bit, no loop, loop, bidi.
-** (36 mixing routines in total + another 36 for center-mixing)
+** (48 mixing routines in total)
**
** Every voice has a function pointer set to the according mixing routine on
** sample trigger (from replayer, but set in audio thread), using a function
@@ -3499,12 +3498,6 @@
const mixFunc mixFuncTab[] =
{
- /*
- ** ---------------------------------
- ** stereo mixing (this file)
- ** ---------------------------------
- */
-
// no volume ramping
// 8-bit
@@ -3575,83 +3568,5 @@
(mixFunc)mix16bRampBidiLoopS16Intrp,
(mixFunc)mix16bRampNoLoopCIntrp,
(mixFunc)mix16bRampLoopCIntrp,
- (mixFunc)mix16bRampBidiLoopCIntrp,
-
- /*
- ** ---------------------------------
- ** center mixing (ft2_center_mix.c)
- ** ---------------------------------
- */
-
- // no volume ramping
-
- // 8-bit
- (mixFunc)centerMix8bNoLoop,
- (mixFunc)centerMix8bLoop,
- (mixFunc)centerMix8bBidiLoop,
- (mixFunc)centerMix8bNoLoopS8Intrp,
- (mixFunc)centerMix8bLoopS8Intrp,
- (mixFunc)centerMix8bBidiLoopS8Intrp,
- (mixFunc)centerMix8bNoLoopLIntrp,
- (mixFunc)centerMix8bLoopLIntrp,
- (mixFunc)centerMix8bBidiLoopLIntrp,
- (mixFunc)centerMix8bNoLoopS16Intrp,
- (mixFunc)centerMix8bLoopS16Intrp,
- (mixFunc)centerMix8bBidiLoopS16Intrp,
- (mixFunc)centerMix8bNoLoopCIntrp,
- (mixFunc)centerMix8bLoopCIntrp,
- (mixFunc)centerMix8bBidiLoopCIntrp,
-
- // 16-bit
- (mixFunc)centerMix16bNoLoop,
- (mixFunc)centerMix16bLoop,
- (mixFunc)centerMix16bBidiLoop,
- (mixFunc)centerMix16bNoLoopS8Intrp,
- (mixFunc)centerMix16bLoopS8Intrp,
- (mixFunc)centerMix16bBidiLoopS8Intrp,
- (mixFunc)centerMix16bNoLoopLIntrp,
- (mixFunc)centerMix16bLoopLIntrp,
- (mixFunc)centerMix16bBidiLoopLIntrp,
- (mixFunc)centerMix16bNoLoopS16Intrp,
- (mixFunc)centerMix16bLoopS16Intrp,
- (mixFunc)centerMix16bBidiLoopS16Intrp,
- (mixFunc)centerMix16bNoLoopCIntrp,
- (mixFunc)centerMix16bLoopCIntrp,
- (mixFunc)centerMix16bBidiLoopCIntrp,
-
- // volume ramping
-
- // 8-bit
- (mixFunc)centerMix8bRampNoLoop,
- (mixFunc)centerMix8bRampLoop,
- (mixFunc)centerMix8bRampBidiLoop,
- (mixFunc)centerMix8bRampNoLoopS8Intrp,
- (mixFunc)centerMix8bRampLoopS8Intrp,
- (mixFunc)centerMix8bRampBidiLoopS8Intrp,
- (mixFunc)centerMix8bRampNoLoopLIntrp,
- (mixFunc)centerMix8bRampLoopLIntrp,
- (mixFunc)centerMix8bRampBidiLoopLIntrp,
- (mixFunc)centerMix8bRampNoLoopS16Intrp,
- (mixFunc)centerMix8bRampLoopS16Intrp,
- (mixFunc)centerMix8bRampBidiLoopS16Intrp,
- (mixFunc)centerMix8bRampNoLoopCIntrp,
- (mixFunc)centerMix8bRampLoopCIntrp,
- (mixFunc)centerMix8bRampBidiLoopCIntrp,
-
- // 16-bit
- (mixFunc)centerMix16bRampNoLoop,
- (mixFunc)centerMix16bRampLoop,
- (mixFunc)centerMix16bRampBidiLoop,
- (mixFunc)centerMix16bRampNoLoopS8Intrp,
- (mixFunc)centerMix16bRampLoopS8Intrp,
- (mixFunc)centerMix16bRampBidiLoopS8Intrp,
- (mixFunc)centerMix16bRampNoLoopLIntrp,
- (mixFunc)centerMix16bRampLoopLIntrp,
- (mixFunc)centerMix16bRampBidiLoopLIntrp,
- (mixFunc)centerMix16bRampNoLoopS16Intrp,
- (mixFunc)centerMix16bRampLoopS16Intrp,
- (mixFunc)centerMix16bRampBidiLoopS16Intrp,
- (mixFunc)centerMix16bRampNoLoopCIntrp,
- (mixFunc)centerMix16bRampLoopCIntrp,
- (mixFunc)centerMix16bRampBidiLoopCIntrp
+ (mixFunc)mix16bRampBidiLoopCIntrp
};
--- a/src/mixer/ft2_mix_macros.h
+++ b/src/mixer/ft2_mix_macros.h
@@ -11,24 +11,14 @@
const float fVolumeL = v->fCurrVolumeL; \
const float fVolumeR = v->fCurrVolumeR;
-#define GET_VOL_MONO \
- const float fVolumeL = v->fCurrVolumeL;
-
#define GET_VOL_RAMP \
fVolumeL = v->fCurrVolumeL; \
fVolumeR = v->fCurrVolumeR;
-#define GET_VOL_MONO_RAMP \
- fVolumeL = v->fCurrVolumeL;
-
#define SET_VOL_BACK \
v->fCurrVolumeL = fVolumeL; \
v->fCurrVolumeR = fVolumeR;
-#define SET_VOL_BACK_MONO \
- v->fCurrVolumeL = fVolumeL; \
- v->fCurrVolumeR = fVolumeL;
-
#define GET_MIXER_VARS \
const uintCPUWord_t delta = v->delta; \
fMixBufferL = audio.fMixBufferL + bufferPos; \
@@ -45,14 +35,6 @@
position = v->position; \
positionFrac = v->positionFrac;
-#define GET_MIXER_VARS_MONO_RAMP \
- const uintCPUWord_t delta = v->delta; \
- fMixBufferL = audio.fMixBufferL + bufferPos; \
- fMixBufferR = audio.fMixBufferR + bufferPos; \
- fVolumeLDelta = v->fVolumeLDelta; \
- position = v->position; \
- positionFrac = v->positionFrac;
-
#define PREPARE_TAP_FIX8 \
const int8_t *loopStartPtr = &v->base8[v->loopStart]; \
const int8_t *leftEdgePtr = loopStartPtr+MAX_LEFT_TAPS;
@@ -92,16 +74,13 @@
v->positionFrac = positionFrac; \
v->position = position;
-/* ----------------------------------------------------------------------- */
-/* SAMPLE RENDERING MACROS */
-/* ----------------------------------------------------------------------- */
-
#define VOLUME_RAMPING \
fVolumeL += fVolumeLDelta; \
fVolumeR += fVolumeRDelta;
-#define VOLUME_RAMPING_MONO \
- fVolumeL += fVolumeLDelta;
+/* ----------------------------------------------------------------------- */
+/* NO INTERPOLATION */
+/* ----------------------------------------------------------------------- */
#define RENDER_8BIT_SMP \
fSample = *smpPtr * (1.0f / 128.0f); \
@@ -108,21 +87,11 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_MONO \
- fSample = (*smpPtr * (1.0f / 128.0f)) * fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_16BIT_SMP \
fSample = *smpPtr * (1.0f / 32768.0f); \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_MONO \
- fSample = (*smpPtr * (1.0f / 32768.0f)) * fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
/* ----------------------------------------------------------------------- */
/* LINEAR INTERPOLATION */
/* ----------------------------------------------------------------------- */
@@ -143,23 +112,11 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_MONO_LINTRP \
- LINEAR_INTERPOLATION(smpPtr, positionFrac, 128) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_16BIT_SMP_LINTRP \
LINEAR_INTERPOLATION(smpPtr, positionFrac, 32768) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_MONO_LINTRP \
- LINEAR_INTERPOLATION(smpPtr, positionFrac, 32768) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
/* ----------------------------------------------------------------------- */
/* CUBIC SPLINE INTERPOLATION */
/* ----------------------------------------------------------------------- */
@@ -171,7 +128,6 @@
** samples are stored according to loop mode (or no loop).
**
** There is also a second special case for the left edge (negative taps) after the sample has looped once.
-**
*/
#if CUBIC_FSHIFT>=0
@@ -199,26 +155,14 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_MONO_CINTRP \
- CUBIC_SPLINE_INTERPOLATION(smpPtr, positionFrac, 128) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_16BIT_SMP_CINTRP \
CUBIC_SPLINE_INTERPOLATION(smpPtr, positionFrac, 32768) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_MONO_CINTRP \
- CUBIC_SPLINE_INTERPOLATION(smpPtr, positionFrac, 32768) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
/* Special left-edge case mixers to get proper tap data after one loop cycle.
-** These are only used with cubic interpolation on looped samples.
+** These are only used on looped samples.
*/
#define RENDER_8BIT_SMP_CINTRP_TAP_FIX \
@@ -227,13 +171,6 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX \
- smpTapPtr = (smpPtr <= leftEdgePtr) ? (int8_t *)&v->leftEdgeTaps8[(int32_t)(smpPtr-loopStartPtr)] : (int8_t *)smpPtr; \
- CUBIC_SPLINE_INTERPOLATION(smpTapPtr, positionFrac, 128) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_16BIT_SMP_CINTRP_TAP_FIX \
smpTapPtr = (smpPtr <= leftEdgePtr) ? (int16_t *)&v->leftEdgeTaps16[(int32_t)(smpPtr-loopStartPtr)] : (int16_t *)smpPtr; \
CUBIC_SPLINE_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
@@ -240,13 +177,6 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX \
- smpTapPtr = (smpPtr <= leftEdgePtr) ? (int16_t *)&v->leftEdgeTaps16[(int32_t)(smpPtr-loopStartPtr)] : (int16_t *)smpPtr; \
- CUBIC_SPLINE_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
/* ----------------------------------------------------------------------- */
/* WINDOWED-SINC INTERPOLATION */
/* ----------------------------------------------------------------------- */
@@ -258,7 +188,6 @@
** samples are stored according to loop mode (or no loop).
**
** There is also a second special case for the left edge (negative taps) after the sample has looped once.
-**
*/
#if SINC8_FSHIFT>=0
@@ -338,47 +267,23 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_MONO_S8INTRP \
- WINDOWED_SINC8_INTERPOLATION(smpPtr, positionFrac, 128) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_16BIT_SMP_S8INTRP \
WINDOWED_SINC8_INTERPOLATION(smpPtr, positionFrac, 32768) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_MONO_S8INTRP \
- WINDOWED_SINC8_INTERPOLATION(smpPtr, positionFrac, 32768) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_8BIT_SMP_S16INTRP \
WINDOWED_SINC16_INTERPOLATION(smpPtr, positionFrac, 128) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_MONO_S16INTRP \
- WINDOWED_SINC16_INTERPOLATION(smpPtr, positionFrac, 128) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_16BIT_SMP_S16INTRP \
WINDOWED_SINC16_INTERPOLATION(smpPtr, positionFrac, 32768) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_MONO_S16INTRP \
- WINDOWED_SINC16_INTERPOLATION(smpPtr, positionFrac, 32768) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
/* Special left-edge case mixers to get proper tap data after one loop cycle.
-** These are only used with sinc interpolation on looped samples.
+** These are only used on looped samples.
*/
#define RENDER_8BIT_SMP_S8INTRP_TAP_FIX \
@@ -387,13 +292,6 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_MONO_S8INTRP_TAP_FIX \
- smpTapPtr = (smpPtr <= leftEdgePtr) ? (int8_t *)&v->leftEdgeTaps8[(int32_t)(smpPtr-loopStartPtr)] : (int8_t *)smpPtr; \
- WINDOWED_SINC8_INTERPOLATION(smpTapPtr, positionFrac, 128) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_16BIT_SMP_S8INTRP_TAP_FIX \
smpTapPtr = (smpPtr <= leftEdgePtr) ? (int16_t *)&v->leftEdgeTaps16[(int32_t)(smpPtr-loopStartPtr)] : (int16_t *)smpPtr; \
WINDOWED_SINC8_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
@@ -400,13 +298,6 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_MONO_S8INTRP_TAP_FIX \
- smpTapPtr = (smpPtr <= leftEdgePtr) ? (int16_t *)&v->leftEdgeTaps16[(int32_t)(smpPtr-loopStartPtr)] : (int16_t *)smpPtr; \
- WINDOWED_SINC8_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_8BIT_SMP_S16INTRP_TAP_FIX \
smpTapPtr = (smpPtr <= leftEdgePtr) ? (int8_t *)&v->leftEdgeTaps8[(int32_t)(smpPtr-loopStartPtr)] : (int8_t *)smpPtr; \
WINDOWED_SINC16_INTERPOLATION(smpTapPtr, positionFrac, 128) \
@@ -413,13 +304,6 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_MONO_S16INTRP_TAP_FIX \
- smpTapPtr = (smpPtr <= leftEdgePtr) ? (int8_t *)&v->leftEdgeTaps8[(int32_t)(smpPtr-loopStartPtr)] : (int8_t *)smpPtr; \
- WINDOWED_SINC16_INTERPOLATION(smpTapPtr, positionFrac, 128) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
#define RENDER_16BIT_SMP_S16INTRP_TAP_FIX \
smpTapPtr = (smpPtr <= leftEdgePtr) ? (int16_t *)&v->leftEdgeTaps16[(int32_t)(smpPtr-loopStartPtr)] : (int16_t *)smpPtr; \
WINDOWED_SINC16_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
@@ -426,13 +310,6 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_MONO_S16INTRP_TAP_FIX \
- smpTapPtr = (smpPtr <= leftEdgePtr) ? (int16_t *)&v->leftEdgeTaps16[(int32_t)(smpPtr-loopStartPtr)] : (int16_t *)smpPtr; \
- WINDOWED_SINC16_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
- fSample *= fVolumeL; \
- *fMixBufferL++ += fSample; \
- *fMixBufferR++ += fSample;
-
/* ----------------------------------------------------------------------- */
/* SAMPLES-TO-MIX LIMITING MACROS */
/* ----------------------------------------------------------------------- */
@@ -479,24 +356,6 @@
fVolumeLDelta = 0.0f; \
fVolumeRDelta = 0.0f; \
\
- if (v->isFadeOutVoice) \
- { \
- v->active = false; /* volume ramp fadeout-voice is done, shut it down */ \
- return; \
- } \
- } \
- else \
- { \
- if (samplesToMix > v->volumeRampLength) \
- samplesToMix = v->volumeRampLength; \
- \
- v->volumeRampLength -= samplesToMix; \
- }
-
-#define LIMIT_MIX_NUM_MONO_RAMP \
- if (v->volumeRampLength == 0) \
- { \
- fVolumeLDelta = 0.0f; \
if (v->isFadeOutVoice) \
{ \
v->active = false; /* volume ramp fadeout-voice is done, shut it down */ \