summaryrefslogtreecommitdiff
path: root/src/main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cc')
-rw-r--r--src/main.cc60
1 files changed, 35 insertions, 25 deletions
diff --git a/src/main.cc b/src/main.cc
index 51060ce..a4cc67d 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -233,49 +233,59 @@ int main(int argc, char** argv) {
gpu_resize(last_width, last_height);
}
- const double physical_time =
- platform_state.time + seek_time; // Offset logic time
+ // Graphics frame time - derived from platform's clock
+ const double current_physical_time = platform_state.time + seek_time;
+ // Audio playback time - master clock for audio events
+ const float current_audio_time = audio_get_playback_time();
+ // Delta time for audio processing, based on audio clock
+ const float audio_dt = current_audio_time - g_last_audio_time;
+ g_last_audio_time = current_audio_time;
// Auto-exit when demo finishes (if duration is specified)
- if (demo_duration > 0.0f && physical_time >= demo_duration) {
+ if (demo_duration > 0.0f && current_physical_time >= demo_duration) {
#if !defined(STRIP_ALL)
- printf("Demo finished at %.2f seconds. Exiting...\n", physical_time);
+ printf("Demo finished at %.2f seconds. Exiting...\n", current_physical_time);
#endif
break;
}
- // Calculate stable audio dt for jitter-free tracker updates
- const float audio_time = audio_get_playback_time();
- const float audio_dt = audio_time - g_last_audio_time;
- g_last_audio_time = audio_time;
-
- fill_audio_buffer(audio_dt, physical_time);
+ // This fill_audio_buffer call is crucial for audio system to process
+ // events based on the *current audio time* and *graphics physical time* context
+ fill_audio_buffer(audio_dt, current_physical_time);
+ // --- Graphics Update ---
const float aspect_ratio = platform_state.aspect_ratio;
- // Adjusted multiplier for visuals (preventing constant 1.0 saturation)
- // Use real-time peak for proper audio-visual synchronization
+ // Peak value derived from audio, but used for visual effect intensity
const float raw_peak = audio_get_realtime_peak();
const float visual_peak = fminf(raw_peak * 8.0f, 1.0f);
- // Calculate beat information for synchronization
- // MASTER CLOCK: Use audio playback time for perfect visual sync
- const float sync_time = audio_get_playback_time();
- const float beat_time = sync_time * g_tracker_score.bpm / 60.0f;
+ // Beat calculation should use audio time to align with audio events.
+ // The graphics loop time (current_physical_time) is used for frame rate.
+ const float beat_time = current_audio_time * g_tracker_score.bpm / 60.0f;
const int beat_number = (int)beat_time;
const float beat = fmodf(beat_time, 1.0f); // Fractional part (0.0 to 1.0)
-#if !defined(STRIP_ALL)
// Print beat/time info periodically for identifying sync points
- static float last_print_time = -1.0f;
- if (sync_time - last_print_time >= 0.5f) { // Print every 0.5 seconds
- printf("[T=%.2f, MusicT=%.2f, Beat=%d, Frac=%.2f, Peak=%.2f]\n",
- sync_time, g_music_time, beat_number, beat, visual_peak);
- last_print_time = sync_time;
+ // Use graphics time for the print interval to avoid excessive output if audio clock is slow
+ static float last_graphics_print_time = -1.0f;
+ if (current_physical_time - last_graphics_print_time >= 0.5f) { // Print every 0.5 seconds
+ if (tempo_test_enabled) {
+ printf(
+ "[GraphicsT=%.2f, AudioT=%.2f, MusicT=%.2f, Beat=%d, Frac=%.2f, Peak=%.2f, Tempo=%.2fx]\n",
+ current_physical_time, current_audio_time, g_music_time, beat_number, beat,
+ visual_peak, g_tempo_scale);
+ } else {
+ printf("[GraphicsT=%.2f, AudioT=%.2f, Beat=%d, Frac=%.2f, Peak=%.2f]\n",
+ current_physical_time, current_audio_time, beat_number, beat, visual_peak);
+ }
+ last_graphics_print_time = current_physical_time;
}
-#endif /* !defined(STRIP_ALL) */
- gpu_draw(visual_peak, aspect_ratio, sync_time, beat);
+ // Draw graphics using the graphics frame time and synchronized audio events
+ gpu_draw(visual_peak, aspect_ratio, graphics_frame_time, beat);
+
+ // Update audio systems (tracker, synth, etc.) based on audio time progression
audio_update();
}
@@ -283,4 +293,4 @@ int main(int argc, char** argv) {
gpu_shutdown();
platform_shutdown(&platform_state);
return 0;
-}
+} \ No newline at end of file