diff --git a/src/lpcnet_dec.c b/src/lpcnet_dec.c index 5319884..89d6b4f 100644 --- a/src/lpcnet_dec.c +++ b/src/lpcnet_dec.c @@ -44,14 +44,6 @@ #undef NB_FEATURES #include "lpcnet.h" -// Two sorts of VQs available -extern int pred_num_stages; -extern float pred_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES]; -extern int pred_m[MAX_STAGES]; -extern int direct_split_num_stages; -extern float direct_split_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES]; -extern int direct_split_m[MAX_STAGES]; - void lpcnet_dec(LPCNET_QUANT *q, LPCNetState *net, char *frame, short* pcm) { float in_features[NB_TOTAL_FEATURES]; @@ -90,9 +82,6 @@ int main(int argc, char **argv) { int logmag = 0; int direct_split = 0; - dec = 3; pred = 0.9; mbest_survivors = 5; weight = 1.0/sqrt(NB_BANDS); pitch_bits = 6; num_stages = pred_num_stages; - m = pred_m; vq = pred_vq; logmag = 0; - /* quantiser options */ static struct option long_options[] = { @@ -132,7 +121,7 @@ int main(int argc, char **argv) { fprintf(stderr, "pred = %f\n", pred); break; case 's': - direct_split = 1; + direct_split = 1; m = direct_split_m; vq = direct_split_vq; pred = 0.0; logmag = 1; weight = 1.0; fprintf(stderr, "split VQ\n"); break; case 'v': @@ -149,15 +138,13 @@ int main(int argc, char **argv) { exit(1); } } - - if (direct_split) { - m = direct_split_m; vq = direct_split_vq; pred = 0.0; logmag = 1; weight = 1.0; - } else { - } - LPCNET_QUANT *q = lpcnet_quant_create(num_stages, m, vq); + LPCNET_QUANT *q = lpcnet_quant_create(direct_split); + + // this program allows us to tweak params via command line q->weight = weight; q->pred = pred; q->mbest = mbest_survivors; q->pitch_bits = pitch_bits; q->dec = dec; q->logmag = logmag; + q->num_stages = num_stages; q->m = m; q->vq = vq; lpcnet_quant_compute_bits_per_frame(q); fprintf(stderr, "dec: %d pred: %3.2f num_stages: %d mbest: %d bits_per_frame: %d frame: %2d ms bit_rate: %5.2f bits/s", diff --git a/src/lpcnet_enc.c b/src/lpcnet_enc.c index ad7dff7..8f03137 100644 --- a/src/lpcnet_enc.c +++ b/src/lpcnet_enc.c @@ -39,14 +39,6 @@ #include "lpcnet_dump.h" #include "lpcnet_quant.h" -// Two sorts of VQs available -extern int pred_num_stages; -extern float pred_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES]; -extern int pred_m[MAX_STAGES]; -extern int direct_split_num_stages; -extern float direct_split_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES]; -extern int direct_split_m[MAX_STAGES]; - int main(int argc, char **argv) { FILE *fin, *fout; @@ -61,6 +53,7 @@ int main(int argc, char **argv) { int *m = pred_m; float *vq = pred_vq; int logmag = 0; + int direct_split = 0; /* quantiser options */ @@ -96,6 +89,7 @@ int main(int argc, char **argv) { fprintf(stderr, "pred = %f\n", pred); break; case 's': + direct_split = 1; m = direct_split_m; vq = direct_split_vq; pred = 0.0; logmag = 1; weight = 1.0; fprintf(stderr, "split VQ\n"); break; @@ -112,9 +106,9 @@ int main(int argc, char **argv) { } LPCNET_DUMP *d = lpcnet_dump_create(); - LPCNET_QUANT *q = lpcnet_quant_create(num_stages, m, vq); + LPCNET_QUANT *q = lpcnet_quant_create(direct_split); q->weight = weight; q->pred = pred; q->mbest = mbest_survivors; - q->pitch_bits = pitch_bits; q->dec = dec; + q->pitch_bits = pitch_bits; q->dec = dec; q->m = m; q->vq = vq; q->num_stages = num_stages; lpcnet_quant_compute_bits_per_frame(q); fprintf(stderr, "dec: %d pred: %3.2f num_stages: %d mbest: %d bits_per_frame: %d frame: %2d ms bit_rate: %5.2f bits/s", diff --git a/src/lpcnet_quant.c b/src/lpcnet_quant.c index ddcf5af..1fd003e 100644 --- a/src/lpcnet_quant.c +++ b/src/lpcnet_quant.c @@ -28,12 +28,19 @@ int lpcnet_verbose = 0; #define DEFAULT_PITCH_BITS 6 #define DEFAULT_DEC 3 -LPCNET_QUANT *lpcnet_quant_create(int num_stages, int m[], float vq[]) { +LPCNET_QUANT *lpcnet_quant_create(int direct_split) { LPCNET_QUANT *q = (LPCNET_QUANT*)malloc(sizeof(LPCNET_QUANT)); if (q == NULL) return NULL; - q->weight = DEFAULT_WEIGHT; q->pred = DEFAULT_PRED; - q->mbest = DEFAULT_MBEST; q->pitch_bits = DEFAULT_PITCH_BITS; q->dec = DEFAULT_DEC; - q->num_stages = num_stages; q->vq = vq; q->m = m; q->logmag = 0; + if (direct_split) { + q->weight = 1.0; q->pred = 0.0; + q->mbest = DEFAULT_MBEST; q->pitch_bits = DEFAULT_PITCH_BITS; q->dec = DEFAULT_DEC; + q->num_stages = direct_split_num_stages; q->vq = direct_split_vq; q->m = direct_split_m; q->logmag = 1; + } + else { + q->weight = DEFAULT_WEIGHT; q->pred = DEFAULT_PRED; + q->mbest = DEFAULT_MBEST; q->pitch_bits = DEFAULT_PITCH_BITS; q->dec = DEFAULT_DEC; + q->num_stages = pred_num_stages; q->vq = pred_vq; q->m = pred_m; q->logmag = 0; + } lpcnet_quant_compute_bits_per_frame(q); int i,d; diff --git a/src/lpcnet_quant.h b/src/lpcnet_quant.h index 8a5f5db..3bc9719 100644 --- a/src/lpcnet_quant.h +++ b/src/lpcnet_quant.h @@ -32,7 +32,15 @@ typedef struct { float features_lin[2][NB_FEATURES]; /* adjacent frames features for linear interpolation */ } LPCNET_QUANT; -LPCNET_QUANT *lpcnet_quant_create(int num_stages, int m[], float vq[]); +// Two sorts of VQs available +extern int pred_num_stages; +extern float pred_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES]; +extern int pred_m[MAX_STAGES]; +extern int direct_split_num_stages; +extern float direct_split_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES]; +extern int direct_split_m[MAX_STAGES]; + +LPCNET_QUANT *lpcnet_quant_create(int direct_split); void lpcnet_quant_destroy(LPCNET_QUANT *q); void lpcnet_quant_compute_bits_per_frame(LPCNET_QUANT *q); diff --git a/src/quant_dec.c b/src/quant_dec.c index 3f68616..20678cf 100644 --- a/src/quant_dec.c +++ b/src/quant_dec.c @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) { } } - LPCNET_QUANT *q = lpcnet_quant_create(num_stages, pred_m, pred_vq); + LPCNET_QUANT *q = lpcnet_quant_create(0); q->weight = weight; q->pred = pred; q->pitch_bits = pitch_bits; q->dec = dec; lpcnet_quant_compute_bits_per_frame(q); diff --git a/src/quant_enc.c b/src/quant_enc.c index 1ba653d..2441cd0 100644 --- a/src/quant_enc.c +++ b/src/quant_enc.c @@ -76,7 +76,7 @@ int main(int argc, char *argv[]) { } } - LPCNET_QUANT *q = lpcnet_quant_create(num_stages, pred_m, pred_vq); + LPCNET_QUANT *q = lpcnet_quant_create(0); q->weight = weight; q->pred = pred; q->mbest = mbest_survivors; q->pitch_bits = pitch_bits; q->dec = dec; lpcnet_quant_compute_bits_per_frame(q);