changeset 1996:e35b00626b3e

Update cycle to VGM sample conversion based on ValleyBell's suggestion
author Michael Pavone <pavone@retrodev.com>
date Thu, 18 Jun 2020 00:28:53 -0700
parents 2ef405b9d3eb
children e08c489d5602
files vgm.c
diffstat 1 files changed, 6 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/vgm.c	Thu Jun 18 00:23:46 2020 -0700
+++ b/vgm.c	Thu Jun 18 00:28:53 2020 -0700
@@ -62,12 +62,13 @@
 
 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);
 }