fracstep = stepscale*256;
if ((fracstep & 255) == 0) // skipping points on perfect multiple
{
- samplefrac >> 8;
srcsample = 0;
+ fracstep >>= 8;
if (sc->width == 2)
{
short *out = (void *)sc->data, *in = (void *)data;
}
else
{
+ int sample;
if (sc->width == 2)
{
short *out = (void *)sc->data, *in = (void *)data;
{
srcsample = (samplefrac >> 7) & ~1;
samplefrac += fracstep;
- *out++ = (short) ((int) ((LittleShort (in[srcsample ]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+2]) * (samplefrac & 255)) >> 8));
- *out++ = (short) ((int) ((LittleShort (in[srcsample+1]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+3]) * (samplefrac & 255)) >> 8));
+ sample = (LittleShort (in[srcsample ]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+2]) * (samplefrac & 255)) >> 8;
+ *out++ = (short) sample;
+ sample = (LittleShort (in[srcsample+1]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+3]) * (samplefrac & 255)) >> 8;
+ *out++ = (short) sample;
}
}
else
{
srcsample = samplefrac >> 8;
samplefrac += fracstep;
- *out++ = (short) ((int) ((LittleShort (in[srcsample] ) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+1]) * (samplefrac & 255)) >> 8));
+ sample = (LittleShort (in[srcsample ]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+1]) * (samplefrac & 255)) >> 8;
+ *out++ = (short) sample;
}
}
}
{
srcsample = (samplefrac >> 7) & ~1;
samplefrac += fracstep;
- *out++ = (signed char) ((int) (((((unsigned char) in[srcsample ] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+2] - 128) * (samplefrac & 255))) >> 8));
- *out++ = (signed char) ((int) (((((unsigned char) in[srcsample+1] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+3] - 128) * (samplefrac & 255))) >> 8));
+ sample = ((((unsigned char) in[srcsample ] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+2] - 128) * (samplefrac & 255))) >> 8;
+ *out++ = (signed char) sample;
+ sample = ((((unsigned char) in[srcsample+1] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+3] - 128) * (samplefrac & 255))) >> 8;
+ *out++ = (signed char) sample;
}
}
else
{
srcsample = samplefrac >> 8;
samplefrac += fracstep;
- *out++ = (signed char) ((int) (((((unsigned char) in[srcsample ] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+1] - 128) * (samplefrac & 255))) >> 8));
+ sample = ((((unsigned char) in[srcsample ] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+1] - 128) * (samplefrac & 255))) >> 8;
+ *out++ = (signed char) sample;
}
}
}
int len;
float stepscale;
sfxcache_t *sc;
- byte stackbuf[1*1024]; // avoid dirtying the cache heap
// see if still in memory
sc = Cache_Check (&s->cache);
// Con_Printf ("loading %s\n",namebuffer);
- data = COM_LoadStackFile(namebuffer, stackbuf, sizeof(stackbuf), false);
+ data = COM_LoadMallocFile(namebuffer, false);
if (!data)
{
if (info.channels < 1 || info.channels > 2)
{
Con_Printf ("%s has an unsupported number of channels (%i)\n",s->name, info.channels);
+ qfree(data);
return NULL;
}
/*
sc = Cache_Alloc ( &s->cache, len + sizeof(sfxcache_t), s->name);
if (!sc)
+ {
+ qfree(data);
return NULL;
+ }
sc->length = info.samples;
sc->loopstart = info.loopstart;
ResampleSfx (s, sc->speed, data + info.dataofs);
+ qfree(data);
return sc;
}