diff options
author | Jean-Marc Valin <jmvalin@amazon.com> | 2023-10-11 10:33:27 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@amazon.com> | 2023-10-11 10:33:27 +0300 |
commit | 1a9c927465ce06ce51d4dbf82b424123d74f612d (patch) | |
tree | afc59ef6184cfe46058db967ee454ae731d01619 | |
parent | 366b42fed2f686915164decad4b09b5398dd053a (diff) |
compiles
-rw-r--r-- | dnn/fargan.c | 18 | ||||
-rw-r--r-- | dnn/lpcnet_demo.c | 26 | ||||
-rw-r--r-- | lpcnet_headers.mk | 2 | ||||
-rw-r--r-- | lpcnet_sources.mk | 2 |
4 files changed, 37 insertions, 11 deletions
diff --git a/dnn/fargan.c b/dnn/fargan.c index 4a325dac..584a1805 100644 --- a/dnn/fargan.c +++ b/dnn/fargan.c @@ -81,7 +81,6 @@ static void run_fargan_subframe(FARGANState *st, float *pcm, const float *cond, float gru1_in[SIG_NET_FWC0_CONV_OUT_SIZE+2*FARGAN_SUBFRAME_SIZE]; float gru2_in[SIG_NET_GRU1_OUT_SIZE+2*FARGAN_SUBFRAME_SIZE]; float gru3_in[SIG_NET_GRU2_OUT_SIZE+2*FARGAN_SUBFRAME_SIZE]; - float pembed[FARGAN_FRAME_SIZE/2]; float pred[FARGAN_SUBFRAME_SIZE+4]; float prev[FARGAN_SUBFRAME_SIZE]; float pitch_gate[4]; @@ -89,8 +88,9 @@ static void run_fargan_subframe(FARGANState *st, float *pcm, const float *cond, float gain_1; float skip_cat[10000]; float skip_out[SIG_NET_SKIP_DENSE_OUT_SIZE]; - FARGAN *model; + + celt_assert(st->cont_initialized); model = &st->model; compute_generic_dense(&model->sig_net_cond_gain_dense, &gain, cond, ACTIVATION_LINEAR); @@ -125,7 +125,7 @@ static void run_fargan_subframe(FARGANState *st, float *pcm, const float *cond, compute_generic_gru(&model->sig_net_gru2_input, &model->sig_net_gru2_recurrent, st->gru2_state, gru2_in); compute_glu(&model->sig_net_gru2_glu_gate, gru3_in, st->gru2_state); - for (i=0;i<FARGAN_SUBFRAME_SIZE;i++) gru3_in[SIG_NET_GRU1_OUT_SIZE+i] = pitch_gate[2]*pred[i+2]; + for (i=0;i<FARGAN_SUBFRAME_SIZE;i++) gru3_in[SIG_NET_GRU2_OUT_SIZE+i] = pitch_gate[2]*pred[i+2]; OPUS_COPY(&gru3_in[SIG_NET_GRU2_OUT_SIZE+FARGAN_SUBFRAME_SIZE], prev, FARGAN_SUBFRAME_SIZE); compute_generic_gru(&model->sig_net_gru3_input, &model->sig_net_gru3_recurrent, st->gru3_state, gru3_in); compute_glu(&model->sig_net_gru3_glu_gate, &skip_cat[SIG_NET_GRU1_OUT_SIZE+SIG_NET_GRU2_OUT_SIZE], st->gru3_state); @@ -149,18 +149,14 @@ static void run_fargan_subframe(FARGANState *st, float *pcm, const float *cond, void fargan_cont(FARGANState *st, const float *pcm0, const float *features0) { int i; - float norm2, norm_1; - float new_pcm[FARGAN_FRAME_SIZE]; - FARGAN *model; float cond[COND_NET_FCONV2_OUT_SIZE]; float x0[FARGAN_CONT_SAMPLES]; float dummy[FARGAN_SUBFRAME_SIZE]; - int period; - model = &st->model; + int period=0; /* Pre-load features. */ for (i=0;i<5;i++) { - float *features = &features0[i*NB_FEATURES]; + const float *features = &features0[i*NB_FEATURES]; st->last_period = period; period = (int)floor(.5+256./pow(2.f,((1./60.)*((features[NB_BANDS]+1.5)*60)))); compute_fargan_cond(st, cond, features, period); @@ -171,11 +167,11 @@ void fargan_cont(FARGANState *st, const float *pcm0, const float *features0) x0[i] = pcm0[i] - FARGAN_DEEMPHASIS*pcm0[i-1]; } - OPUS_COPY(st->pitch_buf[PITCH_MAX_PERIOD-FARGAN_FRAME_SIZE], x0, FARGAN_FRAME_SIZE); + OPUS_COPY(&st->pitch_buf[PITCH_MAX_PERIOD-FARGAN_FRAME_SIZE], x0, FARGAN_FRAME_SIZE); for (i=0;i<FARGAN_NB_SUBFRAMES;i++) { run_fargan_subframe(st, dummy, &cond[i*FARGAN_COND_SIZE], st->last_period); - OPUS_COPY(&st->pitch_buf[PITCH_MAX_PERIOD-FARGAN_SUBFRAME_SIZE], x0[FARGAN_FRAME_SIZE+i*FARGAN_SUBFRAME_SIZE], FARGAN_SUBFRAME_SIZE); + OPUS_COPY(&st->pitch_buf[PITCH_MAX_PERIOD-FARGAN_SUBFRAME_SIZE], &x0[FARGAN_FRAME_SIZE+i*FARGAN_SUBFRAME_SIZE], FARGAN_SUBFRAME_SIZE); } st->cont_initialized = 1; } diff --git a/dnn/lpcnet_demo.c b/dnn/lpcnet_demo.c index 6b58dd27..b0dcf41c 100644 --- a/dnn/lpcnet_demo.c +++ b/dnn/lpcnet_demo.c @@ -37,6 +37,7 @@ #include "freq.h" #include "os_support.h" #include "fwgan.h" +#include "fargan.h" #ifdef USE_WEIGHTS_FILE # if __unix__ @@ -86,6 +87,7 @@ void free_blob(unsigned char *blob, int len) { #define MODE_PLC 4 #define MODE_ADDLPC 5 #define MODE_FWGAN_SYNTHESIS 6 +#define MODE_FARGAN_SYNTHESIS 7 void usage(void) { fprintf(stderr, "usage: lpcnet_demo -features <input.pcm> <features.f32>\n"); @@ -115,6 +117,7 @@ int main(int argc, char **argv) { if (strcmp(argv[1], "-features") == 0) mode=MODE_FEATURES; else if (strcmp(argv[1], "-synthesis") == 0) mode=MODE_SYNTHESIS; else if (strcmp(argv[1], "-fwgan-synthesis") == 0) mode=MODE_FWGAN_SYNTHESIS; + else if (strcmp(argv[1], "-fargan-synthesis") == 0) mode=MODE_FARGAN_SYNTHESIS; else if (strcmp(argv[1], "-plc") == 0) { mode=MODE_PLC; plc_options = argv[2]; @@ -210,6 +213,29 @@ int main(int argc, char **argv) { for (i=0;i<LPCNET_FRAME_SIZE;i++) pcm[i] = (int)floor(.5 + MIN32(32767, MAX32(-32767, 32768.f*fpcm[i]))); fwrite(pcm, sizeof(pcm[0]), LPCNET_FRAME_SIZE, fout); } + } else if (mode == MODE_FARGAN_SYNTHESIS) { + FARGANState fargan; + size_t ret; + float in_features[NB_FEATURES*5]={0}; + float zeros[320] = {0}; + fargan_init(&fargan); +#ifdef USE_WEIGHTS_FILE + fargan_load_model(fwgan, data, len); +#endif + //ret = fread(in_features, sizeof(in_features[0]), NB_TOTAL_FEATURES, fin); + fargan_cont(&fargan, zeros, in_features); + while (1) { + int i; + float features[NB_FEATURES]; + float fpcm[LPCNET_FRAME_SIZE]; + opus_int16 pcm[LPCNET_FRAME_SIZE]; + ret = fread(in_features, sizeof(features[0]), NB_TOTAL_FEATURES, fin); + if (feof(fin) || ret != NB_TOTAL_FEATURES) break; + OPUS_COPY(features, in_features, NB_FEATURES); + fargan_synthesize(&fargan, fpcm, features); + for (i=0;i<LPCNET_FRAME_SIZE;i++) pcm[i] = (int)floor(.5 + MIN32(32767, MAX32(-32767, 32768.f*fpcm[i]))); + fwrite(pcm, sizeof(pcm[0]), LPCNET_FRAME_SIZE, fout); + } } else if (mode == MODE_PLC) { opus_int16 pcm[FRAME_SIZE]; int count=0; diff --git a/lpcnet_headers.mk b/lpcnet_headers.mk index 17879210..c7ee0873 100644 --- a/lpcnet_headers.mk +++ b/lpcnet_headers.mk @@ -8,6 +8,8 @@ dnn/lpcnet.h \ dnn/burg.h \ dnn/common.h \ dnn/freq.h \ +dnn/fargan.h \ +dnn/fargan_data.h \ dnn/fwgan.h \ dnn/fwgan_data.h \ dnn/kiss99.h \ diff --git a/lpcnet_sources.mk b/lpcnet_sources.mk index bb0ec5f1..8f5d1758 100644 --- a/lpcnet_sources.mk +++ b/lpcnet_sources.mk @@ -1,6 +1,8 @@ LPCNET_SOURCES = \ dnn/burg.c \ dnn/freq.c \ +dnn/fargan.c \ +dnn/fargan_data.c \ dnn/fwgan.c \ dnn/fwgan_data.c \ dnn/kiss99.c \ |