From febe46b6db9fca343ad5bfb49f9811df02f8b7f8 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin Date: Thu, 24 Nov 2016 13:52:32 -0500 Subject: Adds support for running the analysis on 16 kHz input --- src/analysis.c | 5 ++++- src/opus_encoder.c | 40 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/analysis.c b/src/analysis.c index 91a9cc84..48e3ec8a 100644 --- a/src/analysis.c +++ b/src/analysis.c @@ -180,7 +180,7 @@ void tonality_get_info(TonalityAnalysisState *tonal, AnalysisInfo *info_out, int for (;ipspeech[i]; psum = psum*tonal->music_confidence + (1-psum)*tonal->speech_confidence; - /*printf("%f %f %f %f %f\n", psum, info_out->music_prob, info_out->vad_prob, info_out->activity_probability, info_out->tonality);*/ + printf("%f %f %f %f %f\n", psum, info_out->music_prob, info_out->vad_prob, info_out->activity_probability, info_out->tonality); info_out->music_prob = psum; } @@ -239,6 +239,9 @@ static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt /* len and offset are now at 24 kHz. */ len/= 2; offset /= 2; + } else if (tonal->Fs == 16000) { + len = 3*len/2; + offset = 3*offset/2; } if (tonal->count<4) diff --git a/src/opus_encoder.c b/src/opus_encoder.c index 79f80cda..ed487ae6 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -640,6 +640,9 @@ opus_val32 downmix_float(const void *_x, opus_val32 *sub, opus_val32 S[3], int s { subframe *= 2; offset *= 2; + } else if (Fs == 16000) { + subframe = subframe*2/3; + offset = offset*2/3; } ALLOC(tmp, subframe, opus_val32); @@ -673,8 +676,21 @@ opus_val32 downmix_float(const void *_x, opus_val32 *sub, opus_val32 S[3], int s if (Fs == 48000) { ret = silk_resampler_down2_hp(S, sub, tmp, subframe); - } else /*if (Fs == 12000)*/ { + } else if (Fs == 24000) { OPUS_COPY(sub, tmp, subframe); + } else if (Fs == 16000) { + VARDECL(opus_val32, tmp3x); + ALLOC(tmp3x, 3*subframe, opus_val32); + /* Don't do this at home! This resampler is horrible and it's only (barely) + usable for the purpose of the analysis because we don't care about all + the aliasing between 8 kHz and 12 kHz. */ + for (j=0;jsilk_mode.complexity >= 10 && st->Fs>=24000) + if (st->silk_mode.complexity >= 10 && st->Fs>=16000) #else - if (st->silk_mode.complexity >= 7 && st->Fs>=24000) + if (st->silk_mode.complexity >= 7 && st->Fs>=16000) #endif { if (is_digital_silence(pcm, frame_size, st->channels, lsb_depth)) -- cgit v1.2.1