summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2016-11-19 03:34:57 -0500
committerJean-Marc Valin <jmvalin@jmvalin.ca>2016-11-23 13:30:22 -0500
commitf3e6eca66bd10b3df393b055699ec943b584f652 (patch)
treea74143a0b18b19913d7e3bf2776d2bd6df0af051
parent4251e34e2812d8207d8986b5bbf93b51b2a07ed0 (diff)
downloadopus-f3e6eca66bd10b3df393b055699ec943b584f652.tar.gz
Make tonality analysis react faster on a new tone
-rw-r--r--src/analysis.c12
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