diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-11-19 03:34:57 -0500 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-11-23 13:30:22 -0500 |
commit | f3e6eca66bd10b3df393b055699ec943b584f652 (patch) | |
tree | a74143a0b18b19913d7e3bf2776d2bd6df0af051 | |
parent | 4251e34e2812d8207d8986b5bbf93b51b2a07ed0 (diff) | |
download | opus-f3e6eca66bd10b3df393b055699ec943b584f652.tar.gz |
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 |