mirror of
https://github.com/xiph/opus.git
synced 2025-06-04 01:27:42 +00:00
Tonality and pitch tuning
Tuned the tonality estimator to trigger on signals where only part of the spectrum is tonal. Also tuned the pitch detector not to be confused by short-term correlation.
This commit is contained in:
parent
ac2e623d25
commit
0892c169c6
3 changed files with 21 additions and 12 deletions
|
@ -74,7 +74,7 @@ static const float tweight[NB_TBANDS+1] = {
|
|||
.3, .4, .5, .6, .7, .8, .9, 1., 1., 1., 1., 1., 1., 1., .8, .7, .6, .5
|
||||
};
|
||||
|
||||
#define NB_TONAL_SKIP_BANDS 0
|
||||
#define NB_TONAL_SKIP_BANDS 9
|
||||
|
||||
typedef struct {
|
||||
float angle[240];
|
||||
|
@ -265,8 +265,7 @@ void tonality_analysis(TonalityAnalysisState *tonal, AnalysisInfo *info, CELTEnc
|
|||
frame_stationarity += stationarity;
|
||||
/*band_tonality[b] = tE/(1e-15+E)*/;
|
||||
band_tonality[b] = MAX16(tE/(EPSILON+E), stationarity*tonal->prev_band_tonality[b]);
|
||||
//printf("%f ", band_tonality[b]);
|
||||
#if 1
|
||||
#if 0
|
||||
if (b>=NB_TONAL_SKIP_BANDS)
|
||||
{
|
||||
frame_tonality += tweight[b]*band_tonality[b];
|
||||
|
@ -277,7 +276,7 @@ void tonality_analysis(TonalityAnalysisState *tonal, AnalysisInfo *info, CELTEnc
|
|||
if (b>=NB_TBANDS-NB_TONAL_SKIP_BANDS)
|
||||
frame_tonality -= band_tonality[b-NB_TBANDS+NB_TONAL_SKIP_BANDS];
|
||||
#endif
|
||||
max_frame_tonality = MAX16(max_frame_tonality, frame_tonality);
|
||||
max_frame_tonality = MAX16(max_frame_tonality, (1+.03*(b-NB_TBANDS))*frame_tonality);
|
||||
slope += band_tonality[b]*(b-8);
|
||||
/*printf("%f %f ", band_tonality[b], stationarity);*/
|
||||
if (band_tonality[b] > info->boost_amount[1] && b>=7 && b < NB_TBANDS-1)
|
||||
|
@ -295,7 +294,7 @@ void tonality_analysis(TonalityAnalysisState *tonal, AnalysisInfo *info, CELTEnc
|
|||
}
|
||||
tonal->prev_band_tonality[b] = band_tonality[b];
|
||||
}
|
||||
//printf("\n");
|
||||
|
||||
frame_loudness = 20*log10(frame_loudness);
|
||||
tonal->Etracker = MAX32(tonal->Etracker-.03, frame_loudness);
|
||||
tonal->lowECount *= (1-alphaE);
|
||||
|
@ -320,7 +319,7 @@ void tonality_analysis(TonalityAnalysisState *tonal, AnalysisInfo *info, CELTEnc
|
|||
#else
|
||||
info->activity = .5*(1+frame_noisiness-frame_stationarity);
|
||||
#endif
|
||||
frame_tonality = (max_frame_tonality/(tw_sum));
|
||||
frame_tonality = (max_frame_tonality/(NB_TBANDS-NB_TONAL_SKIP_BANDS));
|
||||
frame_tonality = MAX16(frame_tonality, tonal->prev_tonality*.8);
|
||||
tonal->prev_tonality = frame_tonality;
|
||||
info->boost_amount[0] -= frame_tonality+.2;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue