comparison vgm.c @ 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 a9449608d0b0
children fc8fd89aeba9
comparison
equal deleted inserted replaced
1995:2ef405b9d3eb 1996:e35b00626b3e
60 } 60 }
61 } 61 }
62 62
63 static void add_wait(vgm_writer *writer, uint32_t cycle) 63 static void add_wait(vgm_writer *writer, uint32_t cycle)
64 { 64 {
65 uint64_t delta = cycle - writer->last_cycle; 65 uint64_t last_sample = (uint64_t)writer->last_cycle * (uint64_t)44100;
66 delta *= (uint64_t)44100; 66 last_sample /= (uint64_t)writer->master_clock;
67 delta /= (uint64_t)writer->master_clock; 67 uint64_t sample = (uint64_t)cycle * (uint64_t)44100;
68 sample /= (uint64_t)writer->master_clock;
69 uint32_t delta = sample - last_sample;
68 70
69 uint32_t mclks_per_sample = writer->master_clock / 44100; 71 writer->last_cycle = cycle;
70 writer->last_cycle += delta * mclks_per_sample;
71 writer->header.num_samples += delta; 72 writer->header.num_samples += delta;
72 wait_commands(writer, delta); 73 wait_commands(writer, delta);
73 } 74 }
74 75
75 void vgm_sn76489_write(vgm_writer *writer, uint32_t cycle, uint8_t value) 76 void vgm_sn76489_write(vgm_writer *writer, uint32_t cycle, uint8_t value)