Updated playptmod and modplay
parent
08c0ac22c4
commit
8f1d76bd92
|
@ -2210,6 +2210,8 @@ static void MainPlayer(PLAYER *p) /* periodically called from mixer */
|
||||||
|
|
||||||
resampler_dup_inplace(p->resampler[SPARE_OFFSET + ChNr], p->resampler[ChNr]);
|
resampler_dup_inplace(p->resampler[SPARE_OFFSET + ChNr], p->resampler[ChNr]);
|
||||||
resampler_dup_inplace(p->resampler[TOTAL_VOICES + SPARE_OFFSET + ChNr], p->resampler[TOTAL_VOICES + ChNr]);
|
resampler_dup_inplace(p->resampler[TOTAL_VOICES + SPARE_OFFSET + ChNr], p->resampler[TOTAL_VOICES + ChNr]);
|
||||||
|
resampler_clear(p->resampler[ChNr]);
|
||||||
|
resampler_clear(p->resampler[TOTAL_VOICES + ChNr]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -3744,6 +3746,7 @@ void ft2play_RenderFixed32(void *_p, int32_t *buffer, int32_t count, int8_t dept
|
||||||
float sample;
|
float sample;
|
||||||
assert(sizeof(int32_t) == sizeof(float));
|
assert(sizeof(int32_t) == sizeof(float));
|
||||||
ft2play_RenderFloat(_p, fbuffer, count);
|
ft2play_RenderFloat(_p, fbuffer, count);
|
||||||
|
if (buffer)
|
||||||
for (i = 0; i < count * 2; ++i)
|
for (i = 0; i < count * 2; ++i)
|
||||||
{
|
{
|
||||||
sample = fbuffer[i] * scale;
|
sample = fbuffer[i] * scale;
|
||||||
|
@ -3759,6 +3762,9 @@ void ft2play_RenderFixed16(void *_p, int16_t *buffer, int32_t count, int8_t dept
|
||||||
float scale = (float)(1 << (depth - 1));
|
float scale = (float)(1 << (depth - 1));
|
||||||
float sample;
|
float sample;
|
||||||
float fbuffer[1024];
|
float fbuffer[1024];
|
||||||
|
if (!buffer)
|
||||||
|
ft2play_RenderFloat(_p, 0, count);
|
||||||
|
else
|
||||||
while (count)
|
while (count)
|
||||||
{
|
{
|
||||||
SamplesTodo = (count < 512) ? count : 512;
|
SamplesTodo = (count < 512) ? count : 512;
|
||||||
|
|
|
@ -1048,6 +1048,8 @@ static inline void doamiga(PLAYER *p, uint8_t ch)
|
||||||
setvol(p, ch, 32, 0);
|
setvol(p, ch, 32, 0);
|
||||||
resampler_dup_inplace(p->resampler[ch + 32], p->resampler[ch]);
|
resampler_dup_inplace(p->resampler[ch + 32], p->resampler[ch]);
|
||||||
resampler_dup_inplace(p->resampler[ch + 32 + 64], p->resampler[ch + 64]);
|
resampler_dup_inplace(p->resampler[ch + 32 + 64], p->resampler[ch + 64]);
|
||||||
|
resampler_clear(p->resampler[ch]);
|
||||||
|
resampler_clear(p->resampler[ch + 64]);
|
||||||
if (p->chn[ch].vol != 255)
|
if (p->chn[ch].vol != 255)
|
||||||
{
|
{
|
||||||
if (p->chn[ch].vol <= 64)
|
if (p->chn[ch].vol <= 64)
|
||||||
|
@ -3845,6 +3847,7 @@ void st3play_RenderFixed32(void *_p, int32_t *buffer, int32_t count, int8_t dept
|
||||||
float sample;
|
float sample;
|
||||||
assert(sizeof(int32_t) == sizeof(float));
|
assert(sizeof(int32_t) == sizeof(float));
|
||||||
st3play_RenderFloat(_p, fbuffer, count);
|
st3play_RenderFloat(_p, fbuffer, count);
|
||||||
|
if (buffer)
|
||||||
for (i = 0; i < count * 2; ++i)
|
for (i = 0; i < count * 2; ++i)
|
||||||
{
|
{
|
||||||
sample = fbuffer[i] * scale;
|
sample = fbuffer[i] * scale;
|
||||||
|
@ -3860,6 +3863,9 @@ void st3play_RenderFixed16(void *_p, int16_t *buffer, int32_t count, int8_t dept
|
||||||
float scale = (float)(1 << (depth - 1));
|
float scale = (float)(1 << (depth - 1));
|
||||||
float sample;
|
float sample;
|
||||||
float fbuffer[1024];
|
float fbuffer[1024];
|
||||||
|
if (!buffer)
|
||||||
|
st3play_RenderFloat(_p, 0, count);
|
||||||
|
else
|
||||||
while (count)
|
while (count)
|
||||||
{
|
{
|
||||||
SamplesTodo = (count < 512) ? count : 512;
|
SamplesTodo = (count < 512) ? count : 512;
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
/*
|
/*
|
||||||
** - playptmod v1.15b - 29th of September 2014 -
|
** - playptmod v1.16 - 23rd of January 2015 -
|
||||||
** This is the foobar2000 version, with code by kode54
|
** This is the foobar2000 version, with added code by kode54
|
||||||
|
**
|
||||||
|
** Changelog from 1.15b:
|
||||||
|
** - Glissando (3xx/5xy) should not continue after its slide was done,
|
||||||
|
** but this only applies to MODs playing in ProTracker mode.
|
||||||
**
|
**
|
||||||
** Changelog from 1.15a:
|
** Changelog from 1.15a:
|
||||||
** - Added a hack to find out what 8xx pan is used (7-bit/8-bit)
|
** - Added a hack to find out what 8xx pan is used (7-bit/8-bit)
|
||||||
|
@ -131,6 +135,7 @@ typedef struct
|
||||||
unsigned char invertLoopDelay;
|
unsigned char invertLoopDelay;
|
||||||
unsigned char invertLoopSpeed;
|
unsigned char invertLoopSpeed;
|
||||||
unsigned char chanIndex;
|
unsigned char chanIndex;
|
||||||
|
unsigned char doGlissando;
|
||||||
short period;
|
short period;
|
||||||
short tempPeriod;
|
short tempPeriod;
|
||||||
int noNote;
|
int noNote;
|
||||||
|
@ -1861,22 +1866,30 @@ static void handleGlissando(player *p, mod_channel *ch)
|
||||||
char h;
|
char h;
|
||||||
|
|
||||||
short *tablePointer;
|
short *tablePointer;
|
||||||
|
|
||||||
|
// quirk for glissando in PT mode
|
||||||
|
if ((p->minPeriod == PT_MIN_PERIOD) && !ch->doGlissando)
|
||||||
|
return;
|
||||||
|
|
||||||
if (p->tempPeriod > 0)
|
if (p->tempPeriod > 0)
|
||||||
{
|
{
|
||||||
if (ch->period < ch->tempPeriod)
|
if (ch->period < ch->tempPeriod)
|
||||||
{
|
{
|
||||||
ch->period += ch->glissandoSpeed;
|
ch->period += ch->glissandoSpeed;
|
||||||
|
if (ch->period >= ch->tempPeriod)
|
||||||
if (ch->period > ch->tempPeriod)
|
{
|
||||||
ch->period = ch->tempPeriod;
|
ch->period = ch->tempPeriod;
|
||||||
|
ch->doGlissando = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ch->period -= ch->glissandoSpeed;
|
ch->period -= ch->glissandoSpeed;
|
||||||
|
if (ch->period <= ch->tempPeriod)
|
||||||
if (ch->period < ch->tempPeriod)
|
{
|
||||||
ch->period = ch->tempPeriod;
|
ch->period = ch->tempPeriod;
|
||||||
|
ch->doGlissando = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ch->glissandoControl != 0)
|
if (ch->glissandoControl != 0)
|
||||||
|
@ -2488,6 +2501,17 @@ static void fetchPatternData(player *p, mod_channel *ch)
|
||||||
ch->tempPeriod = (p->minPeriod == PT_MIN_PERIOD) ? rawAmigaPeriods[(ch->fineTune * 37) + tempNote] : extendedRawPeriods[(ch->fineTune * 85) + tempNote];
|
ch->tempPeriod = (p->minPeriod == PT_MIN_PERIOD) ? rawAmigaPeriods[(ch->fineTune * 37) + tempNote] : extendedRawPeriods[(ch->fineTune * 85) + tempNote];
|
||||||
ch->flags |= FLAG_NOTE;
|
ch->flags |= FLAG_NOTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 3xx/5xy quirk for PT MODs
|
||||||
|
if (p->minPeriod == PT_MIN_PERIOD)
|
||||||
|
{
|
||||||
|
if ((ch->command == 0x03) || (ch->command == 0x05))
|
||||||
|
{
|
||||||
|
ch->doGlissando = true;
|
||||||
|
if (!ch->period || (ch->period == ch->tempPeriod))
|
||||||
|
ch->doGlissando = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue