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);
}
--
⑨