From ed0cc3b27b4079170975bd85bc6a1a29fa7f6f4c Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Thu, 18 Jun 2020 00:28:53 -0700 Subject: Update cycle to VGM sample conversion based on ValleyBell's suggestion --- vgm.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/vgm.c b/vgm.c index b652ad0..de47903 100644 --- a/vgm.c +++ b/vgm.c @@ -62,12 +62,13 @@ static void wait_commands(vgm_writer *writer, uint32_t delta) static void add_wait(vgm_writer *writer, uint32_t cycle) { - uint64_t delta = cycle - writer->last_cycle; - delta *= (uint64_t)44100; - delta /= (uint64_t)writer->master_clock; + uint64_t last_sample = (uint64_t)writer->last_cycle * (uint64_t)44100; + last_sample /= (uint64_t)writer->master_clock; + uint64_t sample = (uint64_t)cycle * (uint64_t)44100; + sample /= (uint64_t)writer->master_clock; + uint32_t delta = sample - last_sample; - uint32_t mclks_per_sample = writer->master_clock / 44100; - writer->last_cycle += delta * mclks_per_sample; + writer->last_cycle = cycle; writer->header.num_samples += delta; wait_commands(writer, delta); } -- cgit v1.2.3