Updated modplay
This commit is contained in:
parent
ce2303ef24
commit
b8763c6cad
4 changed files with 721 additions and 633 deletions
|
@ -2167,7 +2167,8 @@ static void MainPlayer(PLAYER *p) /* periodically called from mixer */
|
||||||
|
|
||||||
if (oldSongPos != p->Song.SongPos)
|
if (oldSongPos != p->Song.SongPos)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < playedRowsCount; ++i)
|
size_t i;
|
||||||
|
for (i = 0; i < playedRowsCount; ++i)
|
||||||
bit_array_set(p->playedRows, oldSongPos * 1024 + p->playedRowsPatLoop[i]);
|
bit_array_set(p->playedRows, oldSongPos * 1024 + p->playedRowsPatLoop[i]);
|
||||||
memset(p->playedRowsPatLoop, 0xFF, playedRowsCount * 2);
|
memset(p->playedRowsPatLoop, 0xFF, playedRowsCount * 2);
|
||||||
playedRowsCount = 0;
|
playedRowsCount = 0;
|
||||||
|
@ -3032,7 +3033,7 @@ static inline void mix8b(PLAYER *p, uint32_t ch, uint32_t samples)
|
||||||
{
|
{
|
||||||
samplePosition = v->samplePosition;
|
samplePosition = v->samplePosition;
|
||||||
|
|
||||||
while (interpolating && (resampler_get_free_count(resampler) ||
|
while (interpolating > 0 && (resampler_get_free_count(resampler) ||
|
||||||
!resampler_get_sample_count(resampler)))
|
!resampler_get_sample_count(resampler)))
|
||||||
{
|
{
|
||||||
resampler_write_sample_fixed(resampler, sampleData[samplePosition], 8);
|
resampler_write_sample_fixed(resampler, sampleData[samplePosition], 8);
|
||||||
|
@ -3071,11 +3072,18 @@ static inline void mix8b(PLAYER *p, uint32_t ch, uint32_t samples)
|
||||||
}
|
}
|
||||||
else if ((samplePosition < 0) || (samplePosition >= sampleLength))
|
else if ((samplePosition < 0) || (samplePosition >= sampleLength))
|
||||||
{
|
{
|
||||||
interpolating = 0;
|
interpolating = -resampler_get_padding_size();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (interpolating < 0 && (resampler_get_free_count(resampler) ||
|
||||||
|
!resampler_get_sample_count(resampler)))
|
||||||
|
{
|
||||||
|
resampler_write_sample_fixed(resampler, 0, 8);
|
||||||
|
++interpolating;
|
||||||
|
}
|
||||||
|
|
||||||
v->samplePosition = samplePosition;
|
v->samplePosition = samplePosition;
|
||||||
v->loopingForward = loopingForward;
|
v->loopingForward = loopingForward;
|
||||||
v->interpolating = (int8_t)interpolating;
|
v->interpolating = (int8_t)interpolating;
|
||||||
|
@ -3196,7 +3204,7 @@ static inline void mix8bstereo(PLAYER *p, uint32_t ch, uint32_t samples)
|
||||||
{
|
{
|
||||||
samplePosition = v->samplePosition;
|
samplePosition = v->samplePosition;
|
||||||
|
|
||||||
while (interpolating && (resampler_get_free_count(resampler[0]) ||
|
while (interpolating > 0 && (resampler_get_free_count(resampler[0]) ||
|
||||||
(!resampler_get_sample_count(resampler[0]) &&
|
(!resampler_get_sample_count(resampler[0]) &&
|
||||||
!resampler_get_sample_count(resampler[1]))))
|
!resampler_get_sample_count(resampler[1]))))
|
||||||
{
|
{
|
||||||
|
@ -3237,11 +3245,20 @@ static inline void mix8bstereo(PLAYER *p, uint32_t ch, uint32_t samples)
|
||||||
}
|
}
|
||||||
else if ((samplePosition < 0) || (samplePosition >= sampleLength))
|
else if ((samplePosition < 0) || (samplePosition >= sampleLength))
|
||||||
{
|
{
|
||||||
interpolating = 0;
|
interpolating = -resampler_get_padding_size();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (interpolating < 0 && (resampler_get_free_count(resampler[0]) ||
|
||||||
|
(!resampler_get_sample_count(resampler[0]) &&
|
||||||
|
!resampler_get_sample_count(resampler[1]))))
|
||||||
|
{
|
||||||
|
resampler_write_sample_fixed(resampler[0], 0, 8);
|
||||||
|
resampler_write_sample_fixed(resampler[1], 0, 8);
|
||||||
|
++interpolating;
|
||||||
|
}
|
||||||
|
|
||||||
v->samplePosition = samplePosition;
|
v->samplePosition = samplePosition;
|
||||||
v->loopingForward = loopingForward;
|
v->loopingForward = loopingForward;
|
||||||
v->interpolating = (int8_t)interpolating;
|
v->interpolating = (int8_t)interpolating;
|
||||||
|
@ -3366,7 +3383,7 @@ static inline void mix16b(PLAYER *p, uint32_t ch, uint32_t samples)
|
||||||
{
|
{
|
||||||
samplePosition = v->samplePosition;
|
samplePosition = v->samplePosition;
|
||||||
|
|
||||||
while (interpolating && (resampler_get_free_count(resampler) ||
|
while (interpolating > 0 && (resampler_get_free_count(resampler) ||
|
||||||
!resampler_get_sample_count(resampler)))
|
!resampler_get_sample_count(resampler)))
|
||||||
{
|
{
|
||||||
resampler_write_sample_fixed(resampler, sampleData[samplePosition], 16);
|
resampler_write_sample_fixed(resampler, sampleData[samplePosition], 16);
|
||||||
|
@ -3405,11 +3422,18 @@ static inline void mix16b(PLAYER *p, uint32_t ch, uint32_t samples)
|
||||||
}
|
}
|
||||||
else if ((samplePosition < 0) || (samplePosition >= sampleLength))
|
else if ((samplePosition < 0) || (samplePosition >= sampleLength))
|
||||||
{
|
{
|
||||||
interpolating = 0;
|
interpolating = -resampler_get_padding_size();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (interpolating < 0 && (resampler_get_free_count(resampler) ||
|
||||||
|
!resampler_get_sample_count(resampler)))
|
||||||
|
{
|
||||||
|
resampler_write_sample_fixed(resampler, 0, 16);
|
||||||
|
++interpolating;
|
||||||
|
}
|
||||||
|
|
||||||
v->samplePosition = samplePosition;
|
v->samplePosition = samplePosition;
|
||||||
v->loopingForward = loopingForward;
|
v->loopingForward = loopingForward;
|
||||||
v->interpolating = (int8_t)interpolating;
|
v->interpolating = (int8_t)interpolating;
|
||||||
|
@ -3530,7 +3554,7 @@ static inline void mix16bstereo(PLAYER *p, uint32_t ch, uint32_t samples)
|
||||||
{
|
{
|
||||||
samplePosition = v->samplePosition;
|
samplePosition = v->samplePosition;
|
||||||
|
|
||||||
while (interpolating && (resampler_get_free_count(resampler[0]) ||
|
while (interpolating > 0 && (resampler_get_free_count(resampler[0]) ||
|
||||||
(!resampler_get_sample_count(resampler[0]) &&
|
(!resampler_get_sample_count(resampler[0]) &&
|
||||||
!resampler_get_sample_count(resampler[1]))))
|
!resampler_get_sample_count(resampler[1]))))
|
||||||
{
|
{
|
||||||
|
@ -3571,11 +3595,20 @@ static inline void mix16bstereo(PLAYER *p, uint32_t ch, uint32_t samples)
|
||||||
}
|
}
|
||||||
else if ((samplePosition < 0) || (samplePosition >= sampleLength))
|
else if ((samplePosition < 0) || (samplePosition >= sampleLength))
|
||||||
{
|
{
|
||||||
interpolating = 0;
|
interpolating = -resampler_get_padding_size();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (interpolating < 0 && (resampler_get_free_count(resampler[0]) ||
|
||||||
|
(!resampler_get_sample_count(resampler[0]) &&
|
||||||
|
!resampler_get_sample_count(resampler[1]))))
|
||||||
|
{
|
||||||
|
resampler_write_sample_fixed(resampler[0], 0, 16);
|
||||||
|
resampler_write_sample_fixed(resampler[1], 0, 16);
|
||||||
|
++interpolating;
|
||||||
|
}
|
||||||
|
|
||||||
v->samplePosition = samplePosition;
|
v->samplePosition = samplePosition;
|
||||||
v->loopingForward = loopingForward;
|
v->loopingForward = loopingForward;
|
||||||
v->interpolating = (int8_t)interpolating;
|
v->interpolating = (int8_t)interpolating;
|
||||||
|
|
|
@ -303,6 +303,11 @@ static int resampler_output_delay(resampler *r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int resampler_get_padding_size()
|
||||||
|
{
|
||||||
|
return SINC_WIDTH - 1;
|
||||||
|
}
|
||||||
|
|
||||||
int resampler_ready(void *_r)
|
int resampler_ready(void *_r)
|
||||||
{
|
{
|
||||||
resampler * r = ( resampler * ) _r;
|
resampler * r = ( resampler * ) _r;
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
#define RESAMPLER_DECORATE modplay
|
#define RESAMPLER_DECORATE modplay
|
||||||
|
|
||||||
// Ugglay
|
|
||||||
#ifdef RESAMPLER_DECORATE
|
#ifdef RESAMPLER_DECORATE
|
||||||
#define PASTE(a,b) a ## b
|
#define PASTE(a,b) a ## b
|
||||||
#define EVALUATE(a,b) PASTE(a,b)
|
#define EVALUATE(a,b) PASTE(a,b)
|
||||||
|
@ -14,6 +13,7 @@
|
||||||
#define resampler_dup_inplace EVALUATE(RESAMPLER_DECORATE,_resampler_dup_inplace)
|
#define resampler_dup_inplace EVALUATE(RESAMPLER_DECORATE,_resampler_dup_inplace)
|
||||||
#define resampler_set_quality EVALUATE(RESAMPLER_DECORATE,_resampler_set_quality)
|
#define resampler_set_quality EVALUATE(RESAMPLER_DECORATE,_resampler_set_quality)
|
||||||
#define resampler_get_free_count EVALUATE(RESAMPLER_DECORATE,_resampler_get_free_count)
|
#define resampler_get_free_count EVALUATE(RESAMPLER_DECORATE,_resampler_get_free_count)
|
||||||
|
#define resampler_get_padding_size EVALUATE(RESAMPLER_DECORATE,_resampler_get_padding_size)
|
||||||
#define resampler_write_sample EVALUATE(RESAMPLER_DECORATE,_resampler_write_sample)
|
#define resampler_write_sample EVALUATE(RESAMPLER_DECORATE,_resampler_write_sample)
|
||||||
#define resampler_write_sample_fixed EVALUATE(RESAMPLER_DECORATE,_resampler_write_sample_fixed)
|
#define resampler_write_sample_fixed EVALUATE(RESAMPLER_DECORATE,_resampler_write_sample_fixed)
|
||||||
#define resampler_set_rate EVALUATE(RESAMPLER_DECORATE,_resampler_set_rate)
|
#define resampler_set_rate EVALUATE(RESAMPLER_DECORATE,_resampler_set_rate)
|
||||||
|
@ -47,6 +47,7 @@ enum
|
||||||
void resampler_set_quality(void *, int quality);
|
void resampler_set_quality(void *, int quality);
|
||||||
|
|
||||||
int resampler_get_free_count(void *);
|
int resampler_get_free_count(void *);
|
||||||
|
int resampler_get_padding_size();
|
||||||
void resampler_write_sample(void *, short sample);
|
void resampler_write_sample(void *, short sample);
|
||||||
void resampler_write_sample_fixed(void *, int sample, unsigned char depth);
|
void resampler_write_sample_fixed(void *, int sample, unsigned char depth);
|
||||||
void resampler_set_rate( void *, double new_factor );
|
void resampler_set_rate( void *, double new_factor );
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue