ft2-clone

Fasttracker 2 clone
Log | Files | Refs | README | LICENSE

commit a6835eeb1a67ffad59c30a01a515ddd9dc2e83af
parent fc5ed17074d77e0c09d821c816521889dae41fbc
Author: Olav Sørensen <olav.sorensen@live.no>
Date:   Tue, 16 Jan 2024 13:57:22 +0100

Remove mono mixers (was wasteful)

Diffstat:
Msrc/ft2_audio.c | 28+++++-----------------------
Dsrc/mixer/ft2_center_mix.c | 3479-------------------------------------------------------------------------------
Dsrc/mixer/ft2_center_mix.h | 76----------------------------------------------------------------------------
Msrc/mixer/ft2_mix.c | 89++-----------------------------------------------------------------------------
Msrc/mixer/ft2_mix_macros.h | 151+++----------------------------------------------------------------------------
5 files changed, 12 insertions(+), 3811 deletions(-)

diff --git 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 @@ static void doChannelMixing(int32_t bufferPosition, int32_t samplesToMix) { 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); } } diff --git a/src/mixer/ft2_center_mix.c b/src/mixer/ft2_center_mix.c @@ -1,3479 +0,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 -} diff --git a/src/mixer/ft2_center_mix.h b/src/mixer/ft2_center_mix.h @@ -1,76 +0,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); diff --git 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 @@ static void mix16bRampBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t nu const mixFunc mixFuncTab[] = { - /* - ** --------------------------------- - ** stereo mixing (this file) - ** --------------------------------- - */ - // no volume ramping // 8-bit @@ -3575,83 +3568,5 @@ const mixFunc mixFuncTab[] = (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 }; diff --git 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,37 +74,24 @@ 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); \ *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,26 +171,12 @@ *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) \ *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,52 +292,24 @@ *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) \ *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) \ *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) \ *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 */ /* ----------------------------------------------------------------------- */ @@ -493,24 +370,6 @@ 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 */ \ - return; \ - } \ - } \ - else \ - { \ - if (samplesToMix > v->volumeRampLength) \ - samplesToMix = v->volumeRampLength; \ - \ - v->volumeRampLength -= samplesToMix; \ - } - #define HANDLE_SAMPLE_END \ position = (int32_t)(smpPtr - base); \ if (position >= v->sampleEnd) \