shithub: opus

Download patch

ref: 8e3ce6e839536a7ba785bbb0d4891fc7b93da948
parent: b2847687e08bfd3f1e03c132a42f14c90af58616
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Wed Feb 9 09:14:23 EST 2022

Add no-blending version

--- a/dnn/lpcnet_plc.c
+++ b/dnn/lpcnet_plc.c
@@ -44,6 +44,7 @@
   st->skip_analysis = 0;
   st->blend = 0;
   st->loss_count = 0;
+  st->enable_blending = 1;
 }
 
 LPCNET_EXPORT LPCNetPLCState *lpcnet_plc_create() {
@@ -87,11 +88,16 @@
       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_impl(&st->lpcnet, &st->features[0], tmp, FRAME_SIZE-TRAINING_OFFSET, 0);
-      for (i=0;i<FRAME_SIZE-TRAINING_OFFSET;i++) {
-        float w;
-        w = .5 - .5*cos(M_PI*i/(FRAME_SIZE-TRAINING_OFFSET));
-        pcm[i] = (int)floor(.5 + w*pcm[i] + (1-w)*tmp[i]);
+      if (st->enable_blending) {
+        lpcnet_synthesize_impl(&st->lpcnet, &st->features[0], tmp, FRAME_SIZE-TRAINING_OFFSET, 0);
+        for (i=0;i<FRAME_SIZE-TRAINING_OFFSET;i++) {
+          float w;
+          w = .5 - .5*cos(M_PI*i/(FRAME_SIZE-TRAINING_OFFSET));
+          pcm[i] = (int)floor(.5 + w*pcm[i] + (1-w)*tmp[i]);
+        }
+      } else {
+        RNN_COPY(tmp, pcm, FRAME_SIZE-TRAINING_OFFSET);
+        lpcnet_synthesize_tail_impl(&st->lpcnet, tmp, FRAME_SIZE-TRAINING_OFFSET, FRAME_SIZE-TRAINING_OFFSET);
       }
       st->blend = 0;
       RNN_COPY(st->pcm, &pcm[FRAME_SIZE-TRAINING_OFFSET], TRAINING_OFFSET);
--- a/dnn/lpcnet_private.h
+++ b/dnn/lpcnet_private.h
@@ -78,6 +78,7 @@
   float features[NB_TOTAL_FEATURES];
   int loss_count;
   PLCNetState plc_net;
+  int enable_blending;
 };
 
 extern float ceps_codebook1[];
--