diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-08 11:13:53 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-08 11:13:53 +0100 |
| commit | 392d03c0c05f24be3210a04d9a50cd9714d1e265 (patch) | |
| tree | 3c4985879bdf614536020f2061c299ecf442677f /src/tests | |
| parent | d2d20763ac61f59187d261bb7d6dedcab525bc54 (diff) | |
refactor(audio): Finalize audio sync, update docs, and clean up test artifacts
- Implemented sample-accurate audio-visual synchronization by using the hardware audio clock as the master time source.
- Ensured tracker updates and visual rendering are slaved to the stable audio clock.
- Corrected to accept and use delta time for sample-accurate event scheduling.
- Updated all relevant tests (, , , , ) to use the new delta time parameter.
- Added function.
- Marked Task #71 as completed in .
- Updated to reflect the audio system's current status.
- Created a handoff document: .
- Removed temporary peak log files (, ).
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/test_jittered_audio.cc | 4 | ||||
| -rw-r--r-- | src/tests/test_tracker.cc | 8 | ||||
| -rw-r--r-- | src/tests/test_tracker_timing.cc | 20 | ||||
| -rw-r--r-- | src/tests/test_variable_tempo.cc | 24 | ||||
| -rw-r--r-- | src/tests/test_wav_dump.cc | 2 |
5 files changed, 29 insertions, 29 deletions
diff --git a/src/tests/test_jittered_audio.cc b/src/tests/test_jittered_audio.cc index 8afb8c0..cad0da4 100644 --- a/src/tests/test_jittered_audio.cc +++ b/src/tests/test_jittered_audio.cc @@ -45,7 +45,7 @@ void test_jittered_audio_basic() { music_time += dt; // Normal tempo // Update tracker and fill buffer - tracker_update(music_time); + tracker_update(music_time, dt); audio_render_ahead(music_time, dt); // Sleep to simulate frame time @@ -113,7 +113,7 @@ void test_jittered_audio_with_acceleration() { music_time += dt * tempo_scale; // Update tracker and fill buffer - tracker_update(music_time); + tracker_update(music_time, dt * tempo_scale); audio_render_ahead(music_time, dt); // Sleep to simulate frame time diff --git a/src/tests/test_tracker.cc b/src/tests/test_tracker.cc index 8265903..6be2a8d 100644 --- a/src/tests/test_tracker.cc +++ b/src/tests/test_tracker.cc @@ -37,13 +37,13 @@ void test_tracker_pattern_triggering() { // drums_basic: // 0.00, ASSET_KICK_1 // 0.00, NOTE_A4 - engine.update(0.0f); + engine.update(0.0f, 0.0f); // Expect 2 voices: kick + note assert(engine.get_active_voice_count() == 2); // Test 2: At music_time = 0.25f (beat 0.5 @ 120 BPM), snare event triggers // 0.25, ASSET_SNARE_1 - engine.update(0.25f); + engine.update(0.25f, 0.0f); // Expect at least 2 voices (snare + maybe others) // Exact count depends on sample duration (kick/note might have finished) int voices = engine.get_active_voice_count(); @@ -51,12 +51,12 @@ void test_tracker_pattern_triggering() { // Test 3: At music_time = 0.5f (beat 1.0), kick event triggers // 0.50, ASSET_KICK_1 - engine.update(0.5f); + engine.update(0.5f, 0.0f); // Expect at least 3 voices (new kick + others) assert(engine.get_active_voice_count() >= 3); // Test 4: Advance to 2.0f - new patterns trigger at time 2.0f - engine.update(2.0f); + engine.update(2.0f, 0.0f); // Many events have triggered by now assert(engine.get_active_voice_count() > 5); diff --git a/src/tests/test_tracker_timing.cc b/src/tests/test_tracker_timing.cc index 5c0e9bf..a279c8e 100644 --- a/src/tests/test_tracker_timing.cc +++ b/src/tests/test_tracker_timing.cc @@ -66,7 +66,7 @@ void test_basic_event_recording() { engine.init(); // Trigger at t=0.0 (should trigger initial patterns) - engine.update(0.0f); + engine.update(0.0f, 0.0f); const auto& events = backend.get_events(); printf(" Events triggered at t=0.0: %zu\n", events.size()); @@ -93,17 +93,17 @@ void test_progressive_triggering() { engine.init(); // Update at t=0 - engine.update(0.0f); + engine.update(0.0f, 0.0f); const size_t events_at_0 = backend.get_events().size(); printf(" Events at t=0.0: %zu\n", events_at_0); // Update at t=1.0 - engine.update(1.0f); + engine.update(1.0f, 0.0f); const size_t events_at_1 = backend.get_events().size(); printf(" Events at t=1.0: %zu\n", events_at_1); // Update at t=2.0 - engine.update(2.0f); + engine.update(2.0f, 0.0f); const size_t events_at_2 = backend.get_events().size(); printf(" Events at t=2.0: %zu\n", events_at_2); @@ -126,7 +126,7 @@ void test_simultaneous_triggers() { // Clear and update to first trigger point backend.clear_events(); - engine.update(0.0f); + engine.update(0.0f, 0.0f); const auto& events = backend.get_events(); if (events.size() == 0) { @@ -174,7 +174,7 @@ void test_timing_monotonicity() { // Update through several time points for (float t = 0.0f; t <= 5.0f; t += 0.5f) { - engine.update(t); + engine.update(t, 0.5f); } const auto& events = backend.get_events(); @@ -207,7 +207,7 @@ void test_seek_simulation() { float t = 0.0f; const float step = 0.1f; while (t <= seek_target) { - engine.update(t); + engine.update(t, step); // Simulate audio rendering float dummy_buffer[512 * 2]; engine.render(dummy_buffer, 512); @@ -244,7 +244,7 @@ void test_timestamp_clustering() { // Update through the first 4 seconds for (float t = 0.0f; t <= 4.0f; t += 0.1f) { - engine.update(t); + engine.update(t, 0.1f); } const auto& events = backend.get_events(); @@ -277,7 +277,7 @@ void test_render_integration() { engine.init(); // Trigger some patterns - engine.update(0.0f); + engine.update(0.0f, 0.0f); const size_t events_before = backend.get_events().size(); // Render 1 second of silent audio @@ -289,7 +289,7 @@ void test_render_integration() { assert(backend_time >= 0.9f && backend_time <= 1.1f); // Trigger more patterns after time advance - engine.update(1.0f); + engine.update(1.0f, 0.0f); const size_t events_after = backend.get_events().size(); printf(" Events before: %zu, after: %zu\n", events_before, events_after); diff --git a/src/tests/test_variable_tempo.cc b/src/tests/test_variable_tempo.cc index e27e7d6..4fc81e3 100644 --- a/src/tests/test_variable_tempo.cc +++ b/src/tests/test_variable_tempo.cc @@ -44,7 +44,7 @@ void test_basic_tempo_scaling() { for (int i = 0; i < 10; ++i) { float dt = 0.1f; // 100ms physical steps music_time += dt * tempo_scale; - engine.update(music_time); + engine.update(music_time, dt * tempo_scale); } // After 1 second physical time at 1.0x tempo: @@ -64,7 +64,7 @@ void test_basic_tempo_scaling() { for (int i = 0; i < 10; ++i) { float dt = 0.1f; music_time += dt * tempo_scale; - engine.update(music_time); + engine.update(music_time, dt * tempo_scale); } // After 1 second physical time at 2.0x tempo: @@ -84,7 +84,7 @@ void test_basic_tempo_scaling() { for (int i = 0; i < 10; ++i) { float dt = 0.1f; music_time += dt * tempo_scale; - engine.update(music_time); + engine.update(music_time, dt * tempo_scale); } // After 1 second physical time at 0.5x tempo: @@ -123,7 +123,7 @@ void test_2x_speedup_reset_trick() { tempo_scale = fminf(tempo_scale, 2.0f); music_time += dt * tempo_scale; - engine.update(music_time); + engine.update(music_time, dt * tempo_scale); } printf(" After 5s physical: tempo=%.2fx, music_time=%.3f\n", tempo_scale, @@ -142,7 +142,7 @@ void test_2x_speedup_reset_trick() { for (int i = 0; i < 20; ++i) { physical_time += dt; music_time += dt * tempo_scale; - engine.update(music_time); + engine.update(music_time, dt * tempo_scale); } printf(" After reset + 2s: tempo=%.2fx, music_time=%.3f\n", tempo_scale, @@ -183,7 +183,7 @@ void test_2x_slowdown_reset_trick() { tempo_scale = fmaxf(tempo_scale, 0.5f); music_time += dt * tempo_scale; - engine.update(music_time); + engine.update(music_time, dt * tempo_scale); } printf(" After 5s physical: tempo=%.2fx, music_time=%.3f\n", tempo_scale, @@ -201,7 +201,7 @@ void test_2x_slowdown_reset_trick() { for (int i = 0; i < 20; ++i) { physical_time += dt; music_time += dt * tempo_scale; - engine.update(music_time); + engine.update(music_time, dt * tempo_scale); } printf(" After reset + 2s: tempo=%.2fx, music_time=%.3f\n", tempo_scale, @@ -235,7 +235,7 @@ void test_pattern_density_swap() { printf(" Phase 1: Sparse pattern, normal tempo\n"); for (float t = 0.0f; t < 3.0f; t += 0.1f) { music_time += 0.1f * tempo_scale; - engine.update(music_time); + engine.update(music_time, 0.1f * tempo_scale); } const size_t sparse_events = backend.get_events().size(); printf(" Events during sparse phase: %zu\n", sparse_events); @@ -245,7 +245,7 @@ void test_pattern_density_swap() { tempo_scale = 2.0f; for (float t = 0.0f; t < 2.0f; t += 0.1f) { music_time += 0.1f * tempo_scale; - engine.update(music_time); + engine.update(music_time, 0.1f * tempo_scale); } const size_t events_at_2x = backend.get_events().size() - sparse_events; printf(" Additional events during 2.0x: %zu\n", events_at_2x); @@ -260,7 +260,7 @@ void test_pattern_density_swap() { const size_t events_before_reset_phase = backend.get_events().size(); for (float t = 0.0f; t < 2.0f; t += 0.1f) { music_time += 0.1f * tempo_scale; - engine.update(music_time); + engine.update(music_time, 0.1f * tempo_scale); } const size_t events_after_reset = backend.get_events().size(); @@ -304,7 +304,7 @@ void test_continuous_acceleration() { tempo_scale = fmaxf(min_tempo, fminf(max_tempo, tempo_scale)); music_time += dt * tempo_scale; - engine.update(music_time); + engine.update(music_time, dt * tempo_scale); // Log at key points if (i % 50 == 0) { @@ -354,7 +354,7 @@ void test_oscillating_tempo() { float tempo_scale = 1.0f + 0.2f * sinf(physical_time * 2.0f); music_time += dt * tempo_scale; - engine.update(music_time); + engine.update(music_time, dt * tempo_scale); if (i % 25 == 0) { printf(" t=%.2fs: tempo=%.3fx, music_time=%.3f\n", physical_time, diff --git a/src/tests/test_wav_dump.cc b/src/tests/test_wav_dump.cc index 880c8cd..eb14652 100644 --- a/src/tests/test_wav_dump.cc +++ b/src/tests/test_wav_dump.cc @@ -59,7 +59,7 @@ void test_wav_format_matches_live_audio() { float music_time = 0.0f; for (float t = 0.0f; t < duration; t += update_dt) { // Update audio engine (triggers patterns) - engine.update(music_time); + engine.update(music_time, update_dt); music_time += update_dt; // Render audio ahead |
