Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.xiph.org/xiph/opus.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@amazon.com>2023-10-11 10:33:27 +0300
committerJean-Marc Valin <jmvalin@amazon.com>2023-10-11 10:33:27 +0300
commit1a9c927465ce06ce51d4dbf82b424123d74f612d (patch)
treeafc59ef6184cfe46058db967ee454ae731d01619
parent366b42fed2f686915164decad4b09b5398dd053a (diff)
compiles
-rw-r--r--dnn/fargan.c18
-rw-r--r--dnn/lpcnet_demo.c26
-rw-r--r--lpcnet_headers.mk2
-rw-r--r--lpcnet_sources.mk2
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 \