diff --git a/src/common.h b/src/common.h index 5005bff..1e24a28 100644 --- a/src/common.h +++ b/src/common.h @@ -9,6 +9,8 @@ #define RNN_INLINE inline #define OPUS_INLINE inline +float lpc_from_cepstrum(float *lpc, const float *cepstrum); + /** RNNoise wrapper for malloc(). To do your own dynamic allocation, all you need t o do is replace this function and rnnoise_free */ diff --git a/src/denoise.c b/src/denoise.c index 24f4e35..304fb1d 100644 --- a/src/denoise.c +++ b/src/denoise.c @@ -222,6 +222,19 @@ static void dct(float *out, const float *in) { } } +static void idct(float *out, const float *in) { + int i; + check_init(); + for (i=0;iold_lpc[FEATURES_DELAY-1], LPC_ORDER*sizeof(lpc[0])); memmove(lpcnet->old_lpc[1], lpcnet->old_lpc[0], (FEATURES_DELAY-1)*LPC_ORDER*sizeof(lpc[0])); - memcpy(lpcnet->old_lpc[0], new_lpc, LPC_ORDER*sizeof(lpc[0])); + lpc_from_cepstrum(lpcnet->old_lpc[0], features); if (lpcnet->frame_count <= FEATURES_DELAY) { RNN_CLEAR(output, N); @@ -208,14 +208,12 @@ int main(int argc, char **argv) { while (1) { float in_features[NB_TOTAL_FEATURES]; float features[NB_FEATURES]; - float lpc[LPC_ORDER]; short pcm[FRAME_SIZE]; fread(in_features, sizeof(features[0]), NB_TOTAL_FEATURES, fin); RNN_COPY(features, in_features, NB_FEATURES); RNN_CLEAR(&features[18], 18); - RNN_COPY(lpc, &in_features[NB_TOTAL_FEATURES-LPC_ORDER], LPC_ORDER); if (feof(fin)) break; - lpcnet_synthesize(net, pcm, features, lpc, FRAME_SIZE); + lpcnet_synthesize(net, pcm, features, FRAME_SIZE); fwrite(pcm, sizeof(pcm[0]), FRAME_SIZE, fout); } fclose(fin); diff --git a/src/lpcnet.h b/src/lpcnet.h index 9e81dea..f864e4b 100644 --- a/src/lpcnet.h +++ b/src/lpcnet.h @@ -33,6 +33,6 @@ LPCNetState *lpcnet_create(); void lpcnet_destroy(LPCNetState *lpcnet); -void lpcnet_synthesize(LPCNetState *lpcnet, short *output, const float *features, const float *new_lpc, int N); +void lpcnet_synthesize(LPCNetState *lpcnet, short *output, const float *features, int N); #endif