Mercurial > repos > blastem
diff segacd.c @ 2384:03e6ac327ba0
Handle changes to sample rate while content is running
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 21 Nov 2023 20:47:11 -0800 |
parents | f8b5142c06aa |
children | cde4ea2b4929 |
line wrap: on
line diff
--- a/segacd.c Tue Nov 21 20:32:00 2023 -0800 +++ b/segacd.c Tue Nov 21 20:47:11 2023 -0800 @@ -1566,6 +1566,7 @@ }; segacd_context *cd = calloc(sizeof(segacd_context), 1); + cd->speed_percent = 100; uint32_t firmware_size; uint8_t region = force_region; if (!region) { @@ -1843,11 +1844,20 @@ { uint32_t scd_cycle = gen_cycle_to_scd(cd->genesis->ym->current_cycle, cd->genesis); scd_run(cd, scd_cycle); - uint32_t new_clock = ((uint64_t)SCD_MCLKS * (uint64_t)percent) / 100; + cd->speed_percent = percent; + uint32_t new_clock = ((uint64_t)SCD_MCLKS * (uint64_t)cd->speed_percent) / 100; rf5c164_adjust_master_clock(&cd->pcm, new_clock); cdd_fader_set_speed_percent(&cd->fader, percent); } +void segacd_config_updated(segacd_context *cd) +{ + //sample rate may have changed + uint32_t new_clock = ((uint64_t)SCD_MCLKS * (uint64_t)cd->speed_percent) / 100; + rf5c164_adjust_master_clock(&cd->pcm, new_clock); + cdd_fader_set_speed_percent(&cd->fader, cd->speed_percent); +} + static uint8_t *copy_chars(uint8_t *dst, uint8_t *str) { size_t len = strlen(str);