shithub: opus

Download patch

ref: 5179896be9e159da697aad2cb7714e4903772cb2
parent: b0e1a2eb95c684114431501cc1bb57fc3fb49842
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Thu Aug 3 11:13:10 EDT 2023

FWGAN refactoring

--- a/dnn/fwgan.c
+++ b/dnn/fwgan.c
@@ -78,6 +78,17 @@
   }
 }
 
+static void compute_wlpc(float lpc[LPC_ORDER], const float *features) {
+  float lpc_weight;
+  int i;
+  lpc_from_cepstrum(lpc, features);
+  lpc_weight = 1.f;
+  for (i=0;i<LPC_ORDER;i++) {
+    lpc_weight *= FWGAN_GAMMA;
+    lpc[i] *= lpc_weight;
+  }
+}
+
 static void run_fwgan_upsampler(FWGANState *st, float *cond, const float *features)
 {
   FWGAN *model;
@@ -228,16 +239,13 @@
   /* FIXME: perform arch detection. */
 }
 
-void fwgan_synthesize(FWGANState *st, float *pcm, const float *features)
+static void fwgan_synthesize_impl(FWGANState *st, float *pcm, const float *lpc, const float *features)
 {
   int subframe;
-  float lpc[LPC_ORDER];
   float cond[BFCC_WITH_CORR_UPSAMPLER_FC_OUT_SIZE];
   double w0;
   int period;
-  float lpc_weight;
   float fwgan_features[NB_FEATURES-1];
-  int i;
   celt_assert(st->cont_initialized);
   OPUS_COPY(fwgan_features, features, NB_FEATURES-2);
   fwgan_features[NB_FEATURES-2] = features[NB_FEATURES-1]+.5;
@@ -244,12 +252,6 @@
 
   period = (int)floor(.1 + 50*features[NB_BANDS]+100);
   w0 = 2*M_PI/period;
-  lpc_from_cepstrum(lpc, features);
-  lpc_weight = 1.f;
-  for (i=0;i<LPC_ORDER;i++) {
-    lpc_weight *= FWGAN_GAMMA;
-    lpc[i] *= lpc_weight;
-  }
   run_fwgan_upsampler(st, cond, fwgan_features);
   for (subframe=0;subframe<NB_SUBFRAMES;subframe++) {
     float *sub_cond;
@@ -260,4 +262,11 @@
     fwgan_lpc_syn(&pcm[subframe*SUBFRAME_SIZE], st->syn_mem, lpc, st->last_lpc);
   }
   fwgan_deemphasis(pcm, &st->deemph_mem);
+}
+
+void fwgan_synthesize(FWGANState *st, float *pcm, const float *features)
+{
+  float lpc[LPC_ORDER];
+  compute_wlpc(lpc, features);
+  fwgan_synthesize_impl(st, pcm, lpc, features);
 }
--