diff options
Diffstat (limited to 'src/audio/gen.cc')
| -rw-r--r-- | src/audio/gen.cc | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/audio/gen.cc b/src/audio/gen.cc index 5604457..74b468c 100644 --- a/src/audio/gen.cc +++ b/src/audio/gen.cc @@ -72,7 +72,14 @@ std::vector<float> generate_note_spectrogram(const NoteParams& params, // Scale up to compensate for orthonormal normalization // Old non-orthonormal DCT had no sqrt scaling, so output was ~sqrt(N/2) larger // Scale factor: sqrt(DCT_SIZE / 2) = sqrt(256) = 16 - const float scale_factor = sqrtf(DCT_SIZE / 2.0f); + // + // HOWEVER: After removing synthesis windowing (commit f998bfc), audio is louder. + // The old synthesis incorrectly applied Hamming window to spectrum (reducing energy by 0.63x). + // New synthesis is correct (no window), but procedural notes with 16x scaling are too loud. + // + // Analysis applies Hamming window (0.63x energy). With 16x scaling: 0.63 × 16 ≈ 10x. + // Divide by 2.5 to match the relative loudness increase: 16 / 2.5 = 6.4 + const float scale_factor = sqrtf(DCT_SIZE / 2.0f) / 2.5f; // Copy to buffer with scaling for (int i = 0; i < DCT_SIZE; ++i) { |
