view jmix_c.in.c @ 0:32250b436bca

Initial re-import.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 28 Sep 2012 01:54:23 +0300
parents
children
line wrap: on
line source

/*
 * miniJSS - Mixing routines in C
 * Programmed and designed by Matti 'ccr' Hamalainen
 * (C) Copyright 2006-2007 Tecnic Software productions (TNSP)
 */

#define JMIXER_INTERPOLATE
//#define JMIXER_DEBUG fprintf(stderr, "[%.8x:%.8x / %.8x]: %d\n", FP_GETH(tmpPos), FP_GETL(tmpPos), endPos, sp[FP_GETH(tmpPos)]);
#define JMIXER_DEBUG

/* Mono / Linear Interpolation
 */
#define JMIXER_INIT         const Sint32 vol = (chn->chVolume * mixer->globalVol) / 256;
#ifdef JMIXER_INTERPOLATE
#define JMIXER_FUNC_16      tr = (((Sint32) sp[FP_GETH(tmpPos)]) * vol + tr) / (256 * 2); *(ap++) += tr;
#define JMIXER_FUNC_8       tr = ((*volTab8)[vol][sp[FP_GETH(tmpPos)]] + tr) / 2; *(ap++) += tr;
#else
#define JMIXER_FUNC_16      *(ap++) += (((Sint32) sp[FP_GETH(tmpPos)]) * vol) / 256;
#define JMIXER_FUNC_8       *(ap++) += (*volTab8)[vol][sp[FP_GETH(tmpPos)]];
#endif

#define JMIXER_NAME         jvmMix_Mono_C_FW
#define JMIXER_NEXT         FP_ADD(tmpPos, tmpDelta);
#define JMIXER_ENDCOND      (FP_GETH(tmpPos) < endPos)
#include "jmix_c.h"

#define JMIXER_NAME         jvmMix_Mono_C_BW
#define JMIXER_NEXT         FP_SUB(tmpPos, tmpDelta);
#define JMIXER_ENDCOND      (FP_GETH(tmpPos) > endPos)
#include "jmix_c.h"

#undef JMIXER_INIT
#undef JMIXER_FUNC_16
#undef JMIXER_FUNC_8


/* Stereo / Linear Interpolation
 */
#define JMIXER_INIT         const Sint32    vol_l = (chn->chVolume * mixer->globalVol) / 256, \
                            vol_r = (chn->chVolume * mixer->globalVol) / 256;
#ifdef JMIXER_INTERPOLATE
#define JMIXER_FUNC_16      tl = (((Sint32) sp[FP_GETH(tmpPos)]) * vol_l + tl) / (256 * 2); *(ap++) += tl; \
                            tr = (((Sint32) sp[FP_GETH(tmpPos)]) * vol_r + tr) / (256 * 2); *(ap++) += tr;
#define JMIXER_FUNC_8       tl = ((*volTab8)[vol_l][sp[FP_GETH(tmpPos)]] + tl) / 2; *(ap++) += tl; \
                            tr = ((*volTab8)[vol_r][sp[FP_GETH(tmpPos)]] + tr) / 2; *(ap++) += tr;
#else
#define JMIXER_FUNC_16      *(ap++) += (((Sint32) sp[FP_GETH(tmpPos)]) * vol_l) / 256; \
                            *(ap++) += (((Sint32) sp[FP_GETH(tmpPos)]) * vol_r) / 256;
#define JMIXER_FUNC_8       *(ap++) += (*volTab8)[vol_l][sp[FP_GETH(tmpPos)]]; \
                            *(ap++) += (*volTab8)[vol_r][sp[FP_GETH(tmpPos)]];
#endif

#define JMIXER_NAME         jvmMix_Stereo_C_FW
#define JMIXER_NEXT         FP_ADD(tmpPos, tmpDelta);
#define JMIXER_ENDCOND      (FP_GETH(tmpPos) < endPos)
#include "jmix_c.h"

#define JMIXER_NAME         jvmMix_Stereo_C_BW
#define JMIXER_NEXT         FP_SUB(tmpPos, tmpDelta);
#define JMIXER_ENDCOND      (FP_GETH(tmpPos) > endPos)
#include "jmix_c.h"

#undef JMIXER_INIT
#undef JMIXER_FUNC_16
#undef JMIXER_FUNC_8


/* Post processing functions
 */
#define JMIXER_NAME jvmPostProcess_U8_C
#define JMIXER_TYPE Uint8
#define JMIXER_FUNCTION                                     \
    if (t < JVM_LIMIT_16_NEG) t = JVM_LIMIT_16_NEG; else    \
    if (t > JVM_LIMIT_16_POS) t = JVM_LIMIT_16_POS;         \
    *(sp++) = (t + JVM_ADD_16) >> 8;
#include "jmix_post.h"


#define JMIXER_NAME jvmPostProcess_S8_C
#define JMIXER_TYPE Sint8
#define JMIXER_FUNCTION                                     \
    if (t < JVM_LIMIT_16_NEG) t = JVM_LIMIT_16_NEG; else    \
    if (t > JVM_LIMIT_16_POS) t = JVM_LIMIT_16_POS;         \
    *(sp++) = t >> 8;
#include "jmix_post.h"


#define JMIXER_NAME jvmPostProcess_U16_C
#define JMIXER_TYPE Uint16
#define JMIXER_FUNCTION                                     \
    if (t < JVM_LIMIT_16_NEG) t = JVM_LIMIT_16_NEG; else    \
    if (t > JVM_LIMIT_16_POS) t = JVM_LIMIT_16_POS;         \
    *(sp++) = t + JVM_ADD_16;
#include "jmix_post.h"


#define JMIXER_NAME jvmPostProcess_S16_C
#define JMIXER_TYPE Sint16
#define JMIXER_FUNCTION                                     \
    if (t < JVM_LIMIT_16_NEG) t = JVM_LIMIT_16_NEG; else    \
    if (t > JVM_LIMIT_16_POS) t = JVM_LIMIT_16_POS;         \
    *(sp++) = t;
#include "jmix_post.h"