diff options
author | Jean-Marc Valin <jmvalin@amazon.com> | 2023-08-03 22:13:10 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@amazon.com> | 2023-08-03 22:13:44 +0300 |
commit | 5179896be9e159da697aad2cb7714e4903772cb2 (patch) | |
tree | 784d072677c170897a7ee34c0c0f777ceeb06366 | |
parent | b0e1a2eb95c684114431501cc1bb57fc3fb49842 (diff) |
FWGAN refactoring
-rw-r--r-- | dnn/fwgan.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/dnn/fwgan.c b/dnn/fwgan.c index 9c3afc71..65d87775 100644 --- a/dnn/fwgan.c +++ b/dnn/fwgan.c @@ -78,6 +78,17 @@ static void pitch_embeddings(float *pembed, float *phase, double w0) { } } +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,28 +239,19 @@ void fwgan_init(FWGANState *st) /* 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; 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; @@ -261,3 +263,10 @@ void fwgan_synthesize(FWGANState *st, float *pcm, const float *features) } 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); +} |