From fd45fba905b580cd001637c3b9459e44323f6f0c Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin Date: Mon, 7 Feb 2022 04:01:36 -0500 Subject: [PATCH] Reduce look-ahead to 5 ms --- dnn/lpcnet_plc.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/dnn/lpcnet_plc.c b/dnn/lpcnet_plc.c index 0a5add2c..5dbd46a3 100644 --- a/dnn/lpcnet_plc.c +++ b/dnn/lpcnet_plc.c @@ -217,35 +217,23 @@ LPCNET_EXPORT int lpcnet_plc_update(LPCNetPLCState *st, short *pcm) { RNN_COPY(zeros, plc_features, 2*NB_BANDS); zeros[2*NB_BANDS+NB_FEATURES] = 1; compute_plc_pred(&st->plc_net, st->features, zeros); - lpcnet_synthesize_tail_impl(&st->lpcnet, st->pcm, FRAME_SIZE-TRAINING_OFFSET, 0); lpcnet_synthesize_impl(&st->lpcnet, st->features, &st->pcm[FRAME_SIZE-TRAINING_OFFSET], TRAINING_OFFSET, 0); copy = st->lpcnet; - if (0) { - lpcnet_synthesize_tail_impl(&st->lpcnet, tmp, FRAME_SIZE-TRAINING_OFFSET, 0); - for (i=0;ilpcnet, rev, FRAME_SIZE, FRAME_SIZE); - //for(i=0;ilpcnet, rev, FRAME_SIZE, 0); - //for(i=0;ipcm[i]); - for (i=0;ilpcnet, rev, TRAINING_OFFSET, 0); + for (i=0;ipcm[FRAME_SIZE-1-i] = (int)floor(.5 + w*st->pcm[FRAME_SIZE-1-i] + (1-w)*rev[i]); } - //for(i=0;ipcm[i]); - //printf("\n"); } st->lpcnet = copy; + lpcnet_synthesize_tail_impl(&st->lpcnet, pcm, FRAME_SIZE-TRAINING_OFFSET, FRAME_SIZE-TRAINING_OFFSET); for (i=0;ipcm[i]; preemphasis(x, &st->enc.mem_preemph, x, PREEMPHASIS, FRAME_SIZE); @@ -261,10 +249,11 @@ LPCNET_EXPORT int lpcnet_plc_update(LPCNetPLCState *st, short *pcm) { RNN_COPY(&plc_features[2*NB_BANDS], st->enc.features[0], NB_FEATURES); plc_features[2*NB_BANDS+NB_FEATURES] = 1; compute_plc_pred(&st->plc_net, st->features, plc_features); - lpcnet_synthesize_tail_impl(&st->lpcnet, st->pcm, FRAME_SIZE-TRAINING_OFFSET, FRAME_SIZE-TRAINING_OFFSET); lpcnet_synthesize_impl(&st->lpcnet, st->enc.features[0], &st->pcm[FRAME_SIZE-TRAINING_OFFSET], TRAINING_OFFSET, TRAINING_OFFSET); + lpcnet_synthesize_tail_impl(&st->lpcnet, pcm, FRAME_SIZE-TRAINING_OFFSET, FRAME_SIZE-TRAINING_OFFSET); } - RNN_COPY(pcm, st->pcm, FRAME_SIZE); + RNN_COPY(&pcm[FRAME_SIZE-TRAINING_OFFSET], pcm, TRAINING_OFFSET); + RNN_COPY(pcm, &st->pcm[TRAINING_OFFSET], FRAME_SIZE-TRAINING_OFFSET); RNN_COPY(st->pcm, pcm_save, FRAME_SIZE); st->loss_count = 0; return 0; @@ -283,18 +272,20 @@ LPCNET_EXPORT int lpcnet_plc_conceal(LPCNetPLCState *st, short *pcm) { if (st->loss_count > 4) st->features[NB_FEATURES-1] = MAX16(-.5, st->features[NB_FEATURES-1]-.1*(st->loss_count-4)); if (st->loss_count == 0) { - RNN_COPY(pcm, st->pcm, FRAME_SIZE); - lpcnet_synthesize_tail_impl(&st->lpcnet, st->pcm, FRAME_SIZE-TRAINING_OFFSET, FRAME_SIZE-TRAINING_OFFSET); + RNN_COPY(pcm, &st->pcm[FRAME_SIZE-TRAINING_OFFSET], TRAINING_OFFSET); lpcnet_synthesize_impl(&st->lpcnet, st->features, &st->pcm[FRAME_SIZE-TRAINING_OFFSET], TRAINING_OFFSET, TRAINING_OFFSET); + lpcnet_synthesize_tail_impl(&st->lpcnet, &pcm[TRAINING_OFFSET], FRAME_SIZE-TRAINING_OFFSET, 0); } else { - lpcnet_synthesize_tail_impl(&st->lpcnet, pcm, FRAME_SIZE-TRAINING_OFFSET, 0); - lpcnet_synthesize_impl(&st->lpcnet, st->features, &pcm[FRAME_SIZE-TRAINING_OFFSET], TRAINING_OFFSET, 0); + lpcnet_synthesize_impl(&st->lpcnet, st->features, pcm, TRAINING_OFFSET, 0); + lpcnet_synthesize_tail_impl(&st->lpcnet, &pcm[TRAINING_OFFSET], FRAME_SIZE-TRAINING_OFFSET, 0); - for (i=0;ipcm[FRAME_SIZE-TRAINING_OFFSET], pcm, TRAINING_OFFSET); + for (i=0;ipcm[i]; preemphasis(x, &st->enc.mem_preemph, x, PREEMPHASIS, FRAME_SIZE); compute_frame_features(&st->enc, x); process_single_frame(&st->enc, NULL); } + RNN_COPY(st->pcm, &pcm[TRAINING_OFFSET], FRAME_SIZE-TRAINING_OFFSET); st->loss_count++;