blob: cf42233dbe4e84c9908b920aad63402efb7ccbdf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# Audio Peak Measurement Fix Summary
## Issues Found and Fixed
### Issue #1: Peak Measured at Wrong Time (❌ FIXED)
**Problem:** Peak was measured when audio was written to ring buffer (~400ms before playback), causing visual effects to trigger 400ms early.
**Solution:**
- Added `get_realtime_peak()` to AudioBackend interface
- Implemented real-time peak measurement in audio callback when samples are actually played
- Updated main.cc and test_demo.cc to use `audio_get_realtime_peak()` instead of `synth_get_output_peak()`
**Files Modified:**
- src/audio/audio_backend.h
- src/audio/miniaudio_backend.h/cc
- src/audio/mock_audio_backend.h/cc
- src/audio/wav_dump_backend.h/cc
- src/audio/jittered_audio_backend.h/cc
- src/audio/audio.h/cc
- src/main.cc
- src/test_demo.cc
- src/tests/test_audio_backend.cc
### Issue #2: Peak Decay Too Slow (❌ FIXED)
**Problem:** Peak decay rate of 0.95 per callback meant visual effects stayed bright for ~6 seconds after a drum hit, causing constant flashing.
**Root Cause Analysis:**
- Decay rate: 0.95 per callback
- Callback interval: ~128ms
- Time to decay to 10%: **~5.76 seconds** (45 callbacks)
- Result: Screen stays white for 6+ seconds after each drum hit
**Solution:**
- Changed decay rate from 0.95 to 0.7
- New decay timing:
- 50% intensity: ~256ms (2 callbacks)
- 10% intensity: ~1.15 seconds (9 callbacks)
- Result: Quick flash with smooth fade, proper visual sync
**Decay Comparison:**
```
Old (0.95): ████████████████████████████ (6 seconds to fade)
New (0.7): ████ (1 second to fade)
```
**File Modified:**
- src/audio/miniaudio_backend.cc (line 164)
## Verification
✅ All 27 tests pass
✅ demo64k builds successfully
✅ test_demo builds successfully
✅ Peak decay timing verified mathematically
✅ Audio-visual sync should now be accurate
## Testing Instructions
Run test_demo to verify the fix:
```bash
./build/test_demo
```
Expected behavior:
- Screen should flash white on drum hits (every ~0.5 seconds)
- Flash should fade quickly (~1 second)
- No constant white screen
- Audio and visual should be synchronized
## Known Build Issues (Pre-existing)
The following tests have linker errors (unrelated to peak measurement fix):
- test_effect_base (missing WebGPUTestFixture)
- test_post_process_helper (missing main)
- test_texture_manager (missing main)
- test_demo_effects (missing main)
These appear to be incomplete test implementations and should be addressed separately.
|