summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/audio/wav_dump_backend.cc48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/audio/wav_dump_backend.cc b/src/audio/wav_dump_backend.cc
index fbbbeaa..f558c39 100644
--- a/src/audio/wav_dump_backend.cc
+++ b/src/audio/wav_dump_backend.cc
@@ -54,32 +54,38 @@ void WavDumpBackend::start() {
float music_time = 0.0f;
float tempo_scale = 1.0f;
float physical_time = 0.0f;
- const float dt = (float)kBufferSize / kSampleRate; // Time per buffer
+ const float buffer_dt = (float)kBufferSize / kSampleRate; // Time per buffer
+ const float update_dt = 1.0f / 60.0f; // Update rate: 60Hz (matches main loop)
for (size_t frame = 0; frame < total_frames; ++frame) {
- // Update tempo scaling (matches main.cc phases)
- if (physical_time < 10.0f) {
- tempo_scale = 1.0f;
- } else if (physical_time < 15.0f) {
- const float progress = (physical_time - 10.0f) / 5.0f;
- tempo_scale = 1.0f + progress * 1.0f; // 1.0 → 2.0
- } else if (physical_time < 20.0f) {
- tempo_scale = 1.0f;
- } else if (physical_time < 25.0f) {
- const float progress = (physical_time - 20.0f) / 5.0f;
- tempo_scale = 1.0f - progress * 0.5f; // 1.0 → 0.5
- } else {
- tempo_scale = 1.0f;
- }
+ // Call tracker_update() multiple times per audio buffer
+ // This matches the main loop update frequency (~60 Hz)
+ const int num_updates = (int)(buffer_dt / update_dt) + 1;
+ for (int update = 0; update < num_updates; ++update) {
+ // Update tempo scaling (matches main.cc phases)
+ if (physical_time < 10.0f) {
+ tempo_scale = 1.0f;
+ } else if (physical_time < 15.0f) {
+ const float progress = (physical_time - 10.0f) / 5.0f;
+ tempo_scale = 1.0f + progress * 1.0f; // 1.0 → 2.0
+ } else if (physical_time < 20.0f) {
+ tempo_scale = 1.0f;
+ } else if (physical_time < 25.0f) {
+ const float progress = (physical_time - 20.0f) / 5.0f;
+ tempo_scale = 1.0f - progress * 0.5f; // 1.0 → 0.5
+ } else {
+ tempo_scale = 1.0f;
+ }
- // Advance music time
- music_time += dt * tempo_scale;
- physical_time += dt;
+ // Advance music time at smaller time steps
+ music_time += update_dt * tempo_scale;
+ physical_time += update_dt;
- // Update tracker to trigger patterns
- tracker_update(music_time);
+ // Update tracker to trigger patterns (high frequency)
+ tracker_update(music_time);
+ }
- // Render audio from synth
+ // Render audio from synth (accumulated triggers from updates above)
synth_render(sample_buffer_.data(), kBufferSize);
// Convert float to int16 and write to WAV