Files
wdsp/third_party/rnnoise/src/rnnoise_data.c
T
Uladzimir Karpenka 89c8a0e2b5 first commit
2026-06-01 15:58:45 +03:00

240 lines
16 KiB
C

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "rnnoise_data.h"
//
// DL1YCF:
// all the NN data is now contained in files that can be
// compiled separately, namely rnnoise_data_x.c with
// x = 1,2,3,4,5,6.
// These files include rnnoise_data_x.h which is a split-up
// of data originally contained HERE as static data
//
// So we define the types here and mark them as available.
// This data is then referenced in rnnoise_arrays[] that is
// constructed at the bottom of this file.
//
#define WEIGHTS_conv1_weights_float_DEFINED
#define WEIGHTS_conv1_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_conv1_bias_DEFINED
#define WEIGHTS_conv1_bias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_conv2_weights_int8_DEFINED
#define WEIGHTS_conv2_weights_int8_TYPE WEIGHT_TYPE_int8
#define WEIGHTS_conv2_weights_float_DEFINED
#define WEIGHTS_conv2_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_conv2_subias_DEFINED
#define WEIGHTS_conv2_subias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_conv2_scale_DEFINED
#define WEIGHTS_conv2_scale_TYPE WEIGHT_TYPE_float
#define WEIGHTS_conv2_bias_DEFINED
#define WEIGHTS_conv2_bias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru1_input_weights_int8_DEFINED
#define WEIGHTS_gru1_input_weights_int8_TYPE WEIGHT_TYPE_int8
#define WEIGHTS_gru1_input_weights_float_DEFINED
#define WEIGHTS_gru1_input_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru1_input_weights_idx_DEFINED
#define WEIGHTS_gru1_input_weights_idx_TYPE WEIGHT_TYPE_int
#define WEIGHTS_gru1_input_subias_DEFINED
#define WEIGHTS_gru1_input_subias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru1_input_scale_DEFINED
#define WEIGHTS_gru1_input_scale_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru1_input_bias_DEFINED
#define WEIGHTS_gru1_input_bias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru1_recurrent_weights_diag_DEFINED
#define WEIGHTS_gru1_recurrent_weights_diag_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru1_recurrent_weights_int8_DEFINED
#define WEIGHTS_gru1_recurrent_weights_int8_TYPE WEIGHT_TYPE_int8
#define WEIGHTS_gru1_recurrent_weights_float_DEFINED
#define WEIGHTS_gru1_recurrent_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru1_recurrent_weights_idx_DEFINED
#define WEIGHTS_gru1_recurrent_weights_idx_TYPE WEIGHT_TYPE_int
#define WEIGHTS_gru1_recurrent_subias_DEFINED
#define WEIGHTS_gru1_recurrent_subias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru1_recurrent_scale_DEFINED
#define WEIGHTS_gru1_recurrent_scale_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru1_recurrent_bias_DEFINED
#define WEIGHTS_gru1_recurrent_bias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru2_input_weights_int8_DEFINED
#define WEIGHTS_gru2_input_weights_int8_TYPE WEIGHT_TYPE_int8
#define WEIGHTS_gru2_input_weights_float_DEFINED
#define WEIGHTS_gru2_input_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru2_input_weights_idx_DEFINED
#define WEIGHTS_gru2_input_weights_idx_TYPE WEIGHT_TYPE_int
#define WEIGHTS_gru2_input_subias_DEFINED
#define WEIGHTS_gru2_input_subias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru2_input_scale_DEFINED
#define WEIGHTS_gru2_input_scale_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru2_input_bias_DEFINED
#define WEIGHTS_gru2_input_bias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru2_recurrent_weights_diag_DEFINED
#define WEIGHTS_gru2_recurrent_weights_diag_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru2_recurrent_weights_int8_DEFINED
#define WEIGHTS_gru2_recurrent_weights_int8_TYPE WEIGHT_TYPE_int8
#define WEIGHTS_gru2_recurrent_weights_float_DEFINED
#define WEIGHTS_gru2_recurrent_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru2_recurrent_weights_idx_DEFINED
#define WEIGHTS_gru2_recurrent_weights_idx_TYPE WEIGHT_TYPE_int
#define WEIGHTS_gru2_recurrent_subias_DEFINED
#define WEIGHTS_gru2_recurrent_subias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru2_recurrent_scale_DEFINED
#define WEIGHTS_gru2_recurrent_scale_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru2_recurrent_bias_DEFINED
#define WEIGHTS_gru2_recurrent_bias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru3_input_weights_int8_DEFINED
#define WEIGHTS_gru3_input_weights_int8_TYPE WEIGHT_TYPE_int8
#define WEIGHTS_gru3_input_weights_float_DEFINED
#define WEIGHTS_gru3_input_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru3_input_weights_idx_DEFINED
#define WEIGHTS_gru3_input_weights_idx_TYPE WEIGHT_TYPE_int
#define WEIGHTS_gru3_input_subias_DEFINED
#define WEIGHTS_gru3_input_subias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru3_input_scale_DEFINED
#define WEIGHTS_gru3_input_scale_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru3_input_bias_DEFINED
#define WEIGHTS_gru3_input_bias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru3_recurrent_weights_diag_DEFINED
#define WEIGHTS_gru3_recurrent_weights_diag_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru3_recurrent_weights_int8_DEFINED
#define WEIGHTS_gru3_recurrent_weights_int8_TYPE WEIGHT_TYPE_int8
#define WEIGHTS_gru3_recurrent_weights_float_DEFINED
#define WEIGHTS_gru3_recurrent_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru3_recurrent_weights_idx_DEFINED
#define WEIGHTS_gru3_recurrent_weights_idx_TYPE WEIGHT_TYPE_int
#define WEIGHTS_gru3_recurrent_subias_DEFINED
#define WEIGHTS_gru3_recurrent_subias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru3_recurrent_scale_DEFINED
#define WEIGHTS_gru3_recurrent_scale_TYPE WEIGHT_TYPE_float
#define WEIGHTS_gru3_recurrent_bias_DEFINED
#define WEIGHTS_gru3_recurrent_bias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_dense_out_weights_float_DEFINED
#define WEIGHTS_dense_out_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_dense_out_bias_DEFINED
#define WEIGHTS_dense_out_bias_TYPE WEIGHT_TYPE_float
#define WEIGHTS_vad_dense_weights_float_DEFINED
#define WEIGHTS_vad_dense_weights_float_TYPE WEIGHT_TYPE_float
#define WEIGHTS_vad_dense_bias_DEFINED
#define WEIGHTS_vad_dense_bias_TYPE WEIGHT_TYPE_float
extern float conv1_weights_float[24960];
extern float conv1_bias[128];
extern opus_int8 conv2_weights_int8[147456];
extern float conv2_weights_float[147456];
extern float conv2_subias[384];
extern float conv2_scale[384];
extern float conv2_bias[384];
extern opus_int8 gru1_input_weights_int8[442368];
extern float gru1_input_weights_float[442368];
extern int gru1_input_weights_idx[13968];
extern float gru1_input_subias[1152];
extern float gru1_input_scale[1152];
extern float gru1_input_bias[1152];
extern float gru1_recurrent_weights_diag[1152];
extern opus_int8 gru1_recurrent_weights_int8[442368];
extern float gru1_recurrent_weights_float[442368];
extern int gru1_recurrent_weights_idx[13968];
extern float gru1_recurrent_subias[1152];
extern float gru1_recurrent_scale[1152];
extern float gru1_recurrent_bias[1152];
extern opus_int8 gru2_input_weights_int8[442368];
extern float gru2_input_weights_float[442368];
extern int gru2_input_weights_idx[13968];
extern float gru2_input_subias[1152];
extern float gru2_input_scale[1152];
extern float gru2_input_bias[1152];
extern float gru2_recurrent_weights_diag[1152];
extern opus_int8 gru2_recurrent_weights_int8[442368];
extern float gru2_recurrent_weights_float[442368];
extern int gru2_recurrent_weights_idx[13968];
extern float gru2_recurrent_subias[1152];
extern float gru2_recurrent_scale[1152];
extern float gru2_recurrent_bias[1152];
extern opus_int8 gru3_input_weights_int8[442368];
extern float gru3_input_weights_float[442368];
extern int gru3_input_weights_idx[13968];
extern float gru3_input_subias[1152];
extern float gru3_input_scale[1152];
extern float gru3_input_bias[1152];
extern float gru3_recurrent_weights_diag[1152];
extern opus_int8 gru3_recurrent_weights_int8[442368];
extern float gru3_recurrent_weights_float[442368];
extern int gru3_recurrent_weights_idx[13968];
extern float gru3_recurrent_subias[1152];
extern float gru3_recurrent_scale[1152];
extern float gru3_recurrent_bias[1152];
extern float dense_out_weights_float[49152];
extern float dense_out_bias[32];
extern float vad_dense_weights_float[1536];
extern float vad_dense_bias[1];
const WeightArray rnnoise_arrays[] = {
{"conv1_weights_float", WEIGHTS_conv1_weights_float_TYPE, sizeof(conv1_weights_float), conv1_weights_float},
{"conv1_bias", WEIGHTS_conv1_bias_TYPE, sizeof(conv1_bias), conv1_bias},
{"conv2_weights_int8", WEIGHTS_conv2_weights_int8_TYPE, sizeof(conv2_weights_int8), conv2_weights_int8},
{"conv2_weights_float", WEIGHTS_conv2_weights_float_TYPE, sizeof(conv2_weights_float), conv2_weights_float},
{"conv2_subias", WEIGHTS_conv2_subias_TYPE, sizeof(conv2_subias), conv2_subias},
{"conv2_scale", WEIGHTS_conv2_scale_TYPE, sizeof(conv2_scale), conv2_scale},
{"conv2_bias", WEIGHTS_conv2_bias_TYPE, sizeof(conv2_bias), conv2_bias},
{"gru1_input_weights_int8", WEIGHTS_gru1_input_weights_int8_TYPE, sizeof(gru1_input_weights_int8), gru1_input_weights_int8},
{"gru1_input_weights_float", WEIGHTS_gru1_input_weights_float_TYPE, sizeof(gru1_input_weights_float), gru1_input_weights_float},
{"gru1_input_weights_idx", WEIGHTS_gru1_input_weights_idx_TYPE, sizeof(gru1_input_weights_idx), gru1_input_weights_idx},
{"gru1_input_subias", WEIGHTS_gru1_input_subias_TYPE, sizeof(gru1_input_subias), gru1_input_subias},
{"gru1_input_scale", WEIGHTS_gru1_input_scale_TYPE, sizeof(gru1_input_scale), gru1_input_scale},
{"gru1_input_bias", WEIGHTS_gru1_input_bias_TYPE, sizeof(gru1_input_bias), gru1_input_bias},
{"gru1_recurrent_weights_diag", WEIGHTS_gru1_recurrent_weights_diag_TYPE, sizeof(gru1_recurrent_weights_diag), gru1_recurrent_weights_diag},
{"gru1_recurrent_weights_int8", WEIGHTS_gru1_recurrent_weights_int8_TYPE, sizeof(gru1_recurrent_weights_int8), gru1_recurrent_weights_int8},
{"gru1_recurrent_weights_float", WEIGHTS_gru1_recurrent_weights_float_TYPE, sizeof(gru1_recurrent_weights_float), gru1_recurrent_weights_float},
{"gru1_recurrent_weights_idx", WEIGHTS_gru1_recurrent_weights_idx_TYPE, sizeof(gru1_recurrent_weights_idx), gru1_recurrent_weights_idx},
{"gru1_recurrent_subias", WEIGHTS_gru1_recurrent_subias_TYPE, sizeof(gru1_recurrent_subias), gru1_recurrent_subias},
{"gru1_recurrent_scale", WEIGHTS_gru1_recurrent_scale_TYPE, sizeof(gru1_recurrent_scale), gru1_recurrent_scale},
{"gru1_recurrent_bias", WEIGHTS_gru1_recurrent_bias_TYPE, sizeof(gru1_recurrent_bias), gru1_recurrent_bias},
{"gru2_input_weights_int8", WEIGHTS_gru2_input_weights_int8_TYPE, sizeof(gru2_input_weights_int8), gru2_input_weights_int8},
{"gru2_input_weights_float", WEIGHTS_gru2_input_weights_float_TYPE, sizeof(gru2_input_weights_float), gru2_input_weights_float},
{"gru2_input_weights_idx", WEIGHTS_gru2_input_weights_idx_TYPE, sizeof(gru2_input_weights_idx), gru2_input_weights_idx},
{"gru2_input_subias", WEIGHTS_gru2_input_subias_TYPE, sizeof(gru2_input_subias), gru2_input_subias},
{"gru2_input_scale", WEIGHTS_gru2_input_scale_TYPE, sizeof(gru2_input_scale), gru2_input_scale},
{"gru2_input_bias", WEIGHTS_gru2_input_bias_TYPE, sizeof(gru2_input_bias), gru2_input_bias},
{"gru2_recurrent_weights_diag", WEIGHTS_gru2_recurrent_weights_diag_TYPE, sizeof(gru2_recurrent_weights_diag), gru2_recurrent_weights_diag},
{"gru2_recurrent_weights_int8", WEIGHTS_gru2_recurrent_weights_int8_TYPE, sizeof(gru2_recurrent_weights_int8), gru2_recurrent_weights_int8},
{"gru2_recurrent_weights_float", WEIGHTS_gru2_recurrent_weights_float_TYPE, sizeof(gru2_recurrent_weights_float), gru2_recurrent_weights_float},
{"gru2_recurrent_weights_idx", WEIGHTS_gru2_recurrent_weights_idx_TYPE, sizeof(gru2_recurrent_weights_idx), gru2_recurrent_weights_idx},
{"gru2_recurrent_subias", WEIGHTS_gru2_recurrent_subias_TYPE, sizeof(gru2_recurrent_subias), gru2_recurrent_subias},
{"gru2_recurrent_scale", WEIGHTS_gru2_recurrent_scale_TYPE, sizeof(gru2_recurrent_scale), gru2_recurrent_scale},
{"gru2_recurrent_bias", WEIGHTS_gru2_recurrent_bias_TYPE, sizeof(gru2_recurrent_bias), gru2_recurrent_bias},
{"gru3_input_weights_int8", WEIGHTS_gru3_input_weights_int8_TYPE, sizeof(gru3_input_weights_int8), gru3_input_weights_int8},
{"gru3_input_weights_float", WEIGHTS_gru3_input_weights_float_TYPE, sizeof(gru3_input_weights_float), gru3_input_weights_float},
{"gru3_input_weights_idx", WEIGHTS_gru3_input_weights_idx_TYPE, sizeof(gru3_input_weights_idx), gru3_input_weights_idx},
{"gru3_input_subias", WEIGHTS_gru3_input_subias_TYPE, sizeof(gru3_input_subias), gru3_input_subias},
{"gru3_input_scale", WEIGHTS_gru3_input_scale_TYPE, sizeof(gru3_input_scale), gru3_input_scale},
{"gru3_input_bias", WEIGHTS_gru3_input_bias_TYPE, sizeof(gru3_input_bias), gru3_input_bias},
{"gru3_recurrent_weights_diag", WEIGHTS_gru3_recurrent_weights_diag_TYPE, sizeof(gru3_recurrent_weights_diag), gru3_recurrent_weights_diag},
{"gru3_recurrent_weights_int8", WEIGHTS_gru3_recurrent_weights_int8_TYPE, sizeof(gru3_recurrent_weights_int8), gru3_recurrent_weights_int8},
{"gru3_recurrent_weights_float", WEIGHTS_gru3_recurrent_weights_float_TYPE, sizeof(gru3_recurrent_weights_float), gru3_recurrent_weights_float},
{"gru3_recurrent_weights_idx", WEIGHTS_gru3_recurrent_weights_idx_TYPE, sizeof(gru3_recurrent_weights_idx), gru3_recurrent_weights_idx},
{"gru3_recurrent_subias", WEIGHTS_gru3_recurrent_subias_TYPE, sizeof(gru3_recurrent_subias), gru3_recurrent_subias},
{"gru3_recurrent_scale", WEIGHTS_gru3_recurrent_scale_TYPE, sizeof(gru3_recurrent_scale), gru3_recurrent_scale},
{"gru3_recurrent_bias", WEIGHTS_gru3_recurrent_bias_TYPE, sizeof(gru3_recurrent_bias), gru3_recurrent_bias},
{"dense_out_weights_float", WEIGHTS_dense_out_weights_float_TYPE, sizeof(dense_out_weights_float), dense_out_weights_float},
{"dense_out_bias", WEIGHTS_dense_out_bias_TYPE, sizeof(dense_out_bias), dense_out_bias},
{"vad_dense_weights_float", WEIGHTS_vad_dense_weights_float_TYPE, sizeof(vad_dense_weights_float), vad_dense_weights_float},
{"vad_dense_bias", WEIGHTS_vad_dense_bias_TYPE, sizeof(vad_dense_bias), vad_dense_bias},
{NULL, 0, 0, NULL}
};
int init_rnnoise(RNNoise *model, const WeightArray *arrays) {
if (linear_init(&model->conv1, arrays, "conv1_bias", NULL, NULL,"conv1_weights_float", NULL, NULL, NULL, 195, 128)) return 1;
if (linear_init(&model->conv2, arrays, "conv2_bias", "conv2_subias", "conv2_weights_int8","conv2_weights_float", NULL, NULL, "conv2_scale", 384, 384)) return 1;
if (linear_init(&model->gru1_input, arrays, "gru1_input_bias", "gru1_input_subias", "gru1_input_weights_int8","gru1_input_weights_float", "gru1_input_weights_idx", NULL, "gru1_input_scale", 384, 1152)) return 1;
if (linear_init(&model->gru1_recurrent, arrays, "gru1_recurrent_bias", "gru1_recurrent_subias", "gru1_recurrent_weights_int8","gru1_recurrent_weights_float", "gru1_recurrent_weights_idx", "gru1_recurrent_weights_diag", "gru1_recurrent_scale", 384, 1152)) return 1;
if (linear_init(&model->gru2_input, arrays, "gru2_input_bias", "gru2_input_subias", "gru2_input_weights_int8","gru2_input_weights_float", "gru2_input_weights_idx", NULL, "gru2_input_scale", 384, 1152)) return 1;
if (linear_init(&model->gru2_recurrent, arrays, "gru2_recurrent_bias", "gru2_recurrent_subias", "gru2_recurrent_weights_int8","gru2_recurrent_weights_float", "gru2_recurrent_weights_idx", "gru2_recurrent_weights_diag", "gru2_recurrent_scale", 384, 1152)) return 1;
if (linear_init(&model->gru3_input, arrays, "gru3_input_bias", "gru3_input_subias", "gru3_input_weights_int8","gru3_input_weights_float", "gru3_input_weights_idx", NULL, "gru3_input_scale", 384, 1152)) return 1;
if (linear_init(&model->gru3_recurrent, arrays, "gru3_recurrent_bias", "gru3_recurrent_subias", "gru3_recurrent_weights_int8","gru3_recurrent_weights_float", "gru3_recurrent_weights_idx", "gru3_recurrent_weights_diag", "gru3_recurrent_scale", 384, 1152)) return 1;
if (linear_init(&model->dense_out, arrays, "dense_out_bias", NULL, NULL,"dense_out_weights_float", NULL, NULL, NULL, 1536, 32)) return 1;
if (linear_init(&model->vad_dense, arrays, "vad_dense_bias", NULL, NULL,"vad_dense_weights_float", NULL, NULL, NULL, 1536, 1)) return 1;
return 0;
}