Mercurial > repos > blastem
diff render_audio.c @ 2081:cfd53c94fffb
Initial stab at RF5C164 emulation
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 03 Feb 2022 23:15:42 -0800 |
parents | e4671a39d155 |
children | 46ee354f29bd |
line wrap: on
line diff
--- a/render_audio.c Wed Feb 02 01:10:07 2022 -0800 +++ b/render_audio.c Thu Feb 03 23:15:42 2022 -0800 @@ -139,7 +139,7 @@ void render_audio_adjust_clock(audio_source *src, uint64_t master_clock, uint64_t sample_divider) { - src->buffer_inc = ((BUFFER_INC_RES * (uint64_t)sample_rate) / master_clock) * sample_divider; + src->buffer_inc = ((BUFFER_INC_RES * sample_divider * (uint64_t)sample_rate) / master_clock); } void render_audio_adjust_speed(float adjust_ratio) @@ -150,13 +150,14 @@ } } -audio_source *render_audio_source(uint64_t master_clock, uint64_t sample_divider, uint8_t channels) +audio_source *render_audio_source(const char *name, uint64_t master_clock, uint64_t sample_divider, uint8_t channels) { audio_source *ret = NULL; uint32_t alloc_size = render_is_audio_sync() ? channels * buffer_samples : nearest_pow2(render_min_buffered() * 4 * channels); render_lock_audio(); if (num_audio_sources < 8) { ret = calloc(1, sizeof(audio_source)); + ret->name = name; ret->back = malloc(alloc_size * sizeof(int16_t)); ret->front = render_is_audio_sync() ? malloc(alloc_size * sizeof(int16_t)) : ret->back; ret->front_populated = 0; @@ -183,7 +184,7 @@ ret->gain_mult = 1.0f; } render_audio_created(ret); - + return ret; } @@ -211,7 +212,7 @@ break; } } - + render_unlock_audio(); if (found) { render_source_paused(src, remaining_sources); @@ -250,7 +251,7 @@ render_pause_source(src); num_inactive_audio_sources--; } - + free(src->front); if (render_is_audio_sync()) { free(src->back); @@ -283,7 +284,7 @@ { src->buffer_fraction -= BUFFER_INC_RES; interp_sample(src, src->last_left, value); - + if (((src->buffer_pos - base) & src->mask) >= sync_samples) { render_do_audio_ready(src); } @@ -301,10 +302,10 @@ while (src->buffer_fraction > BUFFER_INC_RES) { src->buffer_fraction -= BUFFER_INC_RES; - + interp_sample(src, src->last_left, left); interp_sample(src, src->last_right, right); - + if (((src->buffer_pos - base) & src->mask)/2 >= sync_samples) { render_do_audio_ready(src); } @@ -382,4 +383,4 @@ { update_source(inactive_audio_sources[i], rc, sync_changed); } -} \ No newline at end of file +}