comparison ym2612.c @ 1356:4d16c09210fd

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
author Michael Pavone <pavone@retrodev.com>
date Thu, 11 May 2017 07:51:28 -0700
parents 1b3fe6e03e7b
children 4e5797b3935a
comparison
equal deleted inserted replaced
1355:03cb4dd2499f 1356:4d16c09210fd
633 } 633 }
634 int32_t tmp = left * context->lowpass_alpha + context->last_left * (0x10000 - context->lowpass_alpha); 634 int32_t tmp = left * context->lowpass_alpha + context->last_left * (0x10000 - context->lowpass_alpha);
635 left = tmp >> 16; 635 left = tmp >> 16;
636 tmp = right * context->lowpass_alpha + context->last_right * (0x10000 - context->lowpass_alpha); 636 tmp = right * context->lowpass_alpha + context->last_right * (0x10000 - context->lowpass_alpha);
637 right = tmp >> 16; 637 right = tmp >> 16;
638 if (context->buffer_fraction > BUFFER_INC_RES) { 638 while (context->buffer_fraction > BUFFER_INC_RES) {
639 context->buffer_fraction -= BUFFER_INC_RES; 639 context->buffer_fraction -= BUFFER_INC_RES;
640 640
641 int64_t tmp = context->last_left * ((context->buffer_fraction << 16) / context->buffer_inc); 641 int64_t tmp = context->last_left * ((context->buffer_fraction << 16) / context->buffer_inc);
642 tmp += left * (0x10000 - ((context->buffer_fraction << 16) / context->buffer_inc)); 642 tmp += left * (0x10000 - ((context->buffer_fraction << 16) / context->buffer_inc));
643 context->audio_buffer[context->buffer_pos] = tmp >> 16; 643 context->audio_buffer[context->buffer_pos] = tmp >> 16;