duke3d/audiolib/mvreverb.c

64 lines
1.3 KiB
C
Executable File

#include "multivoc.h"
#include "_multivc.h"
void MV_16BitReverb( const char *src, char *dest, const VOLUME16 *volume, int count )
{
int i;
short *pdest = (short *)dest;
for (i = 0; i < count; i++) {
#if PLATFORM_BIGENDIAN
int sl = src[i*2+1];
int sh = src[i*2+0] ^ 0x80;
#else
int sl = src[i*2+0];
int sh = src[i*2+1] ^ 0x80;
#endif
sl = (*volume)[sl] >> 8;
sh = (*volume)[sh];
pdest[i] = (short)(sl + sh + 0x80);
}
}
void MV_8BitReverb( const signed char *src, signed char *dest, const VOLUME16 *volume, int count )
{
int i;
for (i = 0; i < count; i++) {
unsigned char s = (unsigned char) src[i];
s = (*volume)[s] & 0xff;
dest[i] = (char)(s + 0x80);
}
}
void MV_16BitReverbFast( const char *src, char *dest, int count, int shift )
{
int i;
short *pdest = (short *)dest;
const short *psrc = (const short *)src;
for (i = 0; i < count; i++) {
pdest[i] = psrc[i] >> shift;
}
}
void MV_8BitReverbFast( const signed char *src, signed char *dest, int count, int shift )
{
int i;
unsigned char sh = 0x80 - (0x80 >> shift);
for (i = 0; i < count; i++) {
unsigned char a = ((unsigned char) src[i]) >> shift;
unsigned char c = (((unsigned char) src[i]) ^ 0x80) >> 7;
dest[i] = (signed char) (a + sh + c);
}
}