summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2020-06-18 00:28:53 -0700
committerMichael Pavone <pavone@retrodev.com>2020-06-18 00:28:53 -0700
commited0cc3b27b4079170975bd85bc6a1a29fa7f6f4c (patch)
tree9290c952b114ab509bf061db4e3aa145498574b1
parent79b11b11f72e40b1298084646bb77290739e8e42 (diff)
Update cycle to VGM sample conversion based on ValleyBell's suggestion
-rw-r--r--vgm.c11
1 files 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);
}