diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-11-19 11:34:57 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-11-19 11:34:57 +0300 |
commit | d50e80d525e8a6d81c7949fde237722f02582f04 (patch) | |
tree | 21912b22565e821efb4cf511dff68c4d8d414a24 | |
parent | 930c4f71b24172a11c428b9ad7c736efa82bcd35 (diff) |
Make tonality analysis react faster on a new tone
-rw-r--r-- | src/analysis.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/analysis.c b/src/analysis.c index 1c12aa24..a5b480ad 100644 --- a/src/analysis.c +++ b/src/analysis.c @@ -226,6 +226,7 @@ static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt int remaining; AnalysisInfo *info; float hp_ener; + float tonality2[240]; SAVE_STACK; tonal->last_transition++; @@ -311,14 +312,19 @@ static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt mod2 *= mod2; mod2 *= mod2; - avg_mod = .25f*(.0*d2A[i]+1.5f*mod1+2.5*mod2); + avg_mod = .25f*(d2A[i]+mod1+2*mod2); tonality[i] = 1.f/(1.f+40.f*16.f*pi4*avg_mod)-.015f; + tonality2[i] = 1.f/(1.f+40.f*16.f*pi4*mod2)-.015f; A[i] = angle2; dA[i] = d_angle2; d2A[i] = mod2; } - + for (i=2;i<N2-1;i++) + { + float tt = MIN32(tonality2[i], MAX32(tonality2[i-1], tonality2[i+1])); + tonality[i] = .9*MAX32(tonality[i], tt-.1); + } frame_tonality = 0; max_frame_tonality = 0; /*tw_sum = 0;*/ @@ -349,7 +355,7 @@ static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt binE *= 5.55e-17f; #endif E += binE; - tE += binE*tonality[i]; + tE += binE*MAX32(0, tonality[i]); nE += binE*2.f*(.5f-noisiness[i]); } #ifndef FIXED_POINT |