# HG changeset patch # User Michael Pavone # Date 1494514288 25200 # Node ID 4d16c09210fd97aadb6878a808333b63b6680f9d # Parent 03cb4dd2499fd10e8436b17ef9236cac35c42961 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 diff -r 03cb4dd2499f -r 4d16c09210fd psg.c --- a/psg.c Wed May 10 22:06:59 2017 -0700 +++ b/psg.c Thu May 11 07:51:28 2017 -0700 @@ -135,7 +135,7 @@ 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 -r 03cb4dd2499f -r 4d16c09210fd ym2612.c --- a/ym2612.c Wed May 10 22:06:59 2017 -0700 +++ b/ym2612.c Thu May 11 07:51:28 2017 -0700 @@ -635,7 +635,7 @@ 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);