#ifndef LPCNET_PRIVATE_H #define LPCNET_PRIVATE_H #include #include "freq.h" #include "lpcnet.h" #include "plc_data.h" #include "pitchdnn.h" #include "fargan.h" #define PITCH_FRAME_SIZE 320 #define PITCH_BUF_SIZE (PITCH_MAX_PERIOD+PITCH_FRAME_SIZE) #define PLC_MAX_FEC 100 #define MAX_FEATURE_BUFFER_SIZE 4 #define PITCH_IF_MAX_FREQ 30 #define PITCH_IF_FEATURES (3*PITCH_IF_MAX_FREQ - 2) #define CONT_VECTORS 5 #define FEATURES_DELAY 1 struct LPCNetEncState{ PitchDNNState pitchdnn; float analysis_mem[OVERLAP_SIZE]; float mem_preemph; kiss_fft_cpx prev_if[PITCH_IF_MAX_FREQ]; float if_features[PITCH_IF_FEATURES]; float xcorr_features[PITCH_MAX_PERIOD - PITCH_MIN_PERIOD]; float dnn_pitch; float pitch_mem[LPC_ORDER]; float pitch_filt; float exc_buf[PITCH_BUF_SIZE]; float lp_buf[PITCH_BUF_SIZE]; float lp_mem[4]; float lpc[LPC_ORDER]; float features[NB_TOTAL_FEATURES]; float sig_mem[LPC_ORDER]; float burg_cepstrum[2*NB_BANDS]; }; typedef struct { float gru1_state[PLC_GRU1_STATE_SIZE]; float gru2_state[PLC_GRU2_STATE_SIZE]; } PLCNetState; #define PLC_BUF_SIZE ((CONT_VECTORS+10)*FRAME_SIZE) struct LPCNetPLCState { PLCModel model; FARGANState fargan; LPCNetEncState enc; int loaded; int arch; #define LPCNET_PLC_RESET_START fec float fec[PLC_MAX_FEC][NB_FEATURES]; int analysis_gap; int fec_read_pos; int fec_fill_pos; int fec_skip; int analysis_pos; int predict_pos; float pcm[PLC_BUF_SIZE]; int blend; float features[NB_TOTAL_FEATURES]; float cont_features[CONT_VECTORS*NB_FEATURES]; int loss_count; PLCNetState plc_net; PLCNetState plc_bak[2]; }; void preemphasis(float *y, float *mem, const float *x, float coef, int N); void compute_frame_features(LPCNetEncState *st, const float *in, int arch); void lpcnet_reset_signal(LPCNetState *lpcnet); void run_frame_network(LPCNetState *lpcnet, float *gru_a_condition, float *gru_b_condition, float *lpc, const float *features); void run_frame_network_deferred(LPCNetState *lpcnet, const float *features); void run_frame_network_flush(LPCNetState *lpcnet); void lpcnet_synthesize_tail_impl(LPCNetState *lpcnet, opus_int16 *output, int N, int preload); void lpcnet_synthesize_impl(LPCNetState *lpcnet, const float *features, opus_int16 *output, int N, int preload); void lpcnet_synthesize_blend_impl(LPCNetState *lpcnet, const opus_int16 *pcm_in, opus_int16 *output, int N); void run_frame_network(LPCNetState *lpcnet, float *gru_a_condition, float *gru_b_condition, float *lpc, const float *features); #endif