summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2017-05-11 07:51:28 -0700
committerMichael Pavone <pavone@retrodev.com>2017-05-11 07:51:28 -0700
commitfa813fc755c00d298abd83d7e63690bed5b38fe6 (patch)
tree83e561232dba5eca147ee4d2b85206a0eaf2bb5c
parentc3c18ab355b4b42f7a5689c35e8cf6de60706bd0 (diff)
Fix resampling code to deal with case in which output frequency is greater than the input frequency. Probably could stand to be improved, but at least it doesn't cause the emulator to deadlock
-rw-r--r--psg.c2
-rw-r--r--ym2612.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/psg.c b/psg.c
index 86c612d..48d220b 100644
--- a/psg.c
+++ b/psg.c
@@ -135,7 +135,7 @@ void psg_run(psg_context * context, uint32_t cycles)
context->accum = tmp >> 16;
context->buffer_fraction += context->buffer_inc;
- if (context->buffer_fraction >= BUFFER_INC_RES) {
+ while (context->buffer_fraction >= BUFFER_INC_RES) {
context->buffer_fraction -= BUFFER_INC_RES;
int32_t tmp = context->last_sample * ((context->buffer_fraction << 16) / context->buffer_inc);
tmp += context->accum * (0x10000 - ((context->buffer_fraction << 16) / context->buffer_inc));
diff --git a/ym2612.c b/ym2612.c
index 634d1e5..7049740 100644
--- a/ym2612.c
+++ b/ym2612.c
@@ -635,7 +635,7 @@ void ym_run(ym2612_context * context, uint32_t to_cycle)
left = tmp >> 16;
tmp = right * context->lowpass_alpha + context->last_right * (0x10000 - context->lowpass_alpha);
right = tmp >> 16;
- if (context->buffer_fraction > BUFFER_INC_RES) {
+ while (context->buffer_fraction > BUFFER_INC_RES) {
context->buffer_fraction -= BUFFER_INC_RES;
int64_t tmp = context->last_left * ((context->buffer_fraction << 16) / context->buffer_inc);