Cleaned up vocoder mode...
[speexdsp.git] / libspeex / modes.c
index 7330f52..fc9bf73 100644 (file)
@@ -26,8 +26,6 @@
 #include "cb_search.h"
 #include "sb_celp.h"
 #include "nb_celp.h"
-#include "post_filter.h"
-
 
 SpeexMode *speex_mode_list[SPEEX_NB_MODES] = {&speex_nb_mode, &speex_wb_mode};
 
@@ -38,70 +36,58 @@ extern float hexc_table[];
 extern float exc_5_256_table[];
 extern float exc_5_64_table[];
 extern float exc_8_128_table[];
+extern float exc_8_32_table[];
 extern float exc_10_32_table[];
+extern float exc_10_16_table[];
 extern float hexc_10_32_table[];
 
-/* Post-filter parameters for narrowband */
-pf_params pf_params_nb = {
-   0.65,      /* formant enhancement numerator */
-   0.7,      /* formant enhancement denominator */
-   0.4       /* pitch enhancement factor */
-};
-
-/* Post-filter parameters for low bit-rate narrowband */
-pf_params pf_params_lbr = {
-   0.65,      /* formant enhancement numerator */
-   0.72,      /* formant enhancement denominator */
-   0.4       /* pitch enhancement factor */
-};
-
-/* Post-filter parameters for wideband */
-pf_params pf_params_sb = {
-   0.65,      /* formant enhancement numerator */
-   0.68,      /* formant enhancement denominator */
-   0.2       /* pitch enhancement factor */
-};
-
-/* Post-filter parameters for wideband */
-pf_params pf_params_sb_lbr = {
-   0.65,      /* formant enhancement numerator */
-   0.7,      /* formant enhancement denominator */
-   0.4       /* pitch enhancement factor */
-};
-
 /* Parameters for Long-Term Prediction (LTP)*/
-ltp_params ltp_params_nb = {
+static ltp_params ltp_params_nb = {
    gain_cdbk_nb,
    7,
    7
 };
 
 /* Parameters for Long-Term Prediction (LTP)*/
-ltp_params ltp_params_lbr = {
+static ltp_params ltp_params_vlbr = {
    gain_cdbk_lbr,
    5,
-   4
+   0
 };
 
 /* Parameters for Long-Term Prediction (LTP)*/
-ltp_params ltp_params_med = {
+static ltp_params ltp_params_lbr = {
    gain_cdbk_lbr,
    5,
    7
 };
 
+/* Parameters for Long-Term Prediction (LTP)*/
+static ltp_params ltp_params_med = {
+   gain_cdbk_lbr,
+   5,
+   7
+};
 
-/* Split-VQ innovation parameters for low bit-rate narrowband */
-split_cb_params split_cb_nb_lbr = {
+/* Split-VQ innovation parameters for very low bit-rate narrowband */
+static split_cb_params split_cb_nb_vlbr = {
    10,               /*subvect_size*/
    4,               /*nb_subvect*/
+   exc_10_16_table, /*shape_cb*/
+   4,               /*shape_bits*/
+};
+
+/* Split-VQ innovation parameters for low bit-rate narrowband */
+static split_cb_params split_cb_nb_lbr = {
+   10,              /*subvect_size*/
+   4,               /*nb_subvect*/
    exc_10_32_table, /*shape_cb*/
    5,               /*shape_bits*/
 };
 
 
 /* Split-VQ innovation parameters narrowband */
-split_cb_params split_cb_nb = {
+static split_cb_params split_cb_nb = {
    5,               /*subvect_size*/
    8,               /*nb_subvect*/
    exc_5_64_table, /*shape_cb*/
@@ -109,7 +95,7 @@ split_cb_params split_cb_nb = {
 };
 
 /* Split-VQ innovation parameters narrowband */
-split_cb_params split_cb_nb_med = {
+static split_cb_params split_cb_nb_med = {
    8,               /*subvect_size*/
    5,               /*nb_subvect*/
    exc_8_128_table, /*shape_cb*/
@@ -117,7 +103,7 @@ split_cb_params split_cb_nb_med = {
 };
 
 /* Split-VQ innovation for low-band wideband */
-split_cb_params split_cb_sb = {
+static split_cb_params split_cb_sb = {
    5,               /*subvect_size*/
    8,              /*nb_subvect*/
    exc_5_256_table,    /*shape_cb*/
@@ -142,27 +128,49 @@ static split_cb_params split_cb_high_lbr = {
 };
 
 
-SpeexSubmode nb_submode1 = {
+static SpeexSubmode nb_submode1 = {
    0,
    1,
+   1,
    /* LSP quantization */
    lsp_quant_lbr,
    lsp_unquant_lbr,
    /* No pitch quantization */
-   NULL,
-   NULL,
+   forced_pitch_quant,
+   forced_pitch_unquant,
    NULL,
    /* No innovation quantization (noise only) */
+   noise_codebook_quant,
+   noise_codebook_unquant,
    NULL,
-   NULL,
-   NULL,
-   /* No Post-filter */
-   NULL,
-   NULL
+   0, 0, -1,
+   43
+};
+
+static SpeexSubmode nb_submode2 = {
+   0,
+   0,
+   0,
+   /*LSP quantization*/
+   lsp_quant_lbr,
+   lsp_unquant_lbr,
+   /*No pitch quantization*/
+   pitch_search_3tap,
+   pitch_unquant_3tap,
+   &ltp_params_vlbr,
+   /*Innovation quantization*/
+   split_cb_search_nogain,
+   split_cb_nogain_unquant,
+   &split_cb_nb_vlbr,
+
+   0.75, 0.6, .6,
+   119
 };
 
-SpeexSubmode nb_submode2 = {
-   8,
+
+static SpeexSubmode nb_submode3 = {
+   -1,
+   0,
    1,
    /*LSP quantization*/
    lsp_quant_lbr,
@@ -172,34 +180,38 @@ SpeexSubmode nb_submode2 = {
    pitch_unquant_3tap,
    &ltp_params_lbr,
    /*Innovation quantization*/
-   split_cb_search_nogain2,
+   split_cb_search_nogain,
    split_cb_nogain_unquant,
    &split_cb_nb_lbr,
-   nb_post_filter,
-   &pf_params_lbr
+
+   0.75, 0.6, .5,
+   160
 };
 
-SpeexSubmode nb_submode3 = {
+static SpeexSubmode nb_submode4 = {
    -1,
+   0,
    1,
    /*LSP quantization*/
-   lsp_quant_nb,
-   lsp_unquant_nb,
+   lsp_quant_lbr,
+   lsp_unquant_lbr,
    /*Pitch quantization*/
    pitch_search_3tap,
    pitch_unquant_3tap,
    &ltp_params_med,
    /*Innovation quantization*/
-   split_cb_search_nogain2,
+   split_cb_search_nogain,
    split_cb_nogain_unquant,
    &split_cb_nb_med,
-   nb_post_filter,
-   &pf_params_nb
+
+   0.72, 0.65, .3,
+   220
 };
 
-SpeexSubmode nb_submode4 = {
+static SpeexSubmode nb_submode5 = {
    -1,
-   1,
+   0,
+   3,
    /*LSP quantization*/
    lsp_quant_nb,
    lsp_unquant_nb,
@@ -208,16 +220,18 @@ SpeexSubmode nb_submode4 = {
    pitch_unquant_3tap,
    &ltp_params_nb,
    /*Innovation quantization*/
-   split_cb_search_nogain2,
+   split_cb_search_nogain,
    split_cb_nogain_unquant,
    &split_cb_nb,
-   nb_post_filter,
-   &pf_params_nb
+
+   0.7, 0.65, .2,
+   300
 };
 
-SpeexSubmode nb_submode5 = {
+static SpeexSubmode nb_submode6 = {
    -1,
-   1,
+   0,
+   3,
    /*LSP quantization*/
    lsp_quant_nb,
    lsp_unquant_nb,
@@ -226,16 +240,17 @@ SpeexSubmode nb_submode5 = {
    pitch_unquant_3tap,
    &ltp_params_nb,
    /*Innovation quantization*/
-   split_cb_search_nogain2,
+   split_cb_search_nogain,
    split_cb_nogain_unquant,
    &split_cb_sb,
-   nb_post_filter,
-   &pf_params_sb
+
+   0.68, 0.65, .1,
+   364
 };
 
 
 /* Default mode for narrowband */
-SpeexNBMode nb_mode = {
+static SpeexNBMode nb_mode = {
    160,    /*frameSize*/
    40,     /*subframeSize*/
    10,     /*lpcSize*/
@@ -247,9 +262,9 @@ SpeexNBMode nb_mode = {
    .005,   /*lag_factor*/
    1.0001, /*lpc_floor*/
    0.0,    /*preemph*/
-   {NULL, &nb_submode1, &nb_submode2, &nb_submode3, &nb_submode4, &nb_submode5, NULL, NULL,
+   {NULL, &nb_submode1, &nb_submode2, &nb_submode3, &nb_submode4, &nb_submode5, &nb_submode6, NULL,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
-   4
+   5
 };
 
 
@@ -257,7 +272,7 @@ SpeexMode speex_nb_mode = {
    &nb_mode,
    "narrowband",
    0,
-   1,
+   4,
    &nb_encoder_init,
    &nb_encoder_destroy,
    &nb_encode,
@@ -267,11 +282,12 @@ SpeexMode speex_nb_mode = {
    &nb_encoder_ctl,
    &nb_decoder_ctl,
    160,
-   14750,
+   -1,
    0
 };
 
-SpeexSubmode wb_submode1 = {
+static SpeexSubmode wb_submode1 = {
+   0,
    0,
    1,
    /*LSP quantization*/
@@ -285,13 +301,14 @@ SpeexSubmode wb_submode1 = {
    NULL,
    NULL,
    NULL,
-   /*No post-filter*/
-   NULL,
-   NULL
+
+   0, 0, -1,
+   36
 };
 
 
-SpeexSubmode wb_submode2 = {
+static SpeexSubmode wb_submode2 = {
+   0,
    0,
    1,
    /*LSP quantization*/
@@ -302,15 +319,17 @@ SpeexSubmode wb_submode2 = {
    NULL,
    NULL,
    /*Innovation quantization*/
-   split_cb_search_nogain2,
+   split_cb_search_nogain,
    split_cb_nogain_unquant,
    &split_cb_high_lbr,
-   NULL,
-   NULL
+
+   0, 0, -1,
+   112
 };
 
 
-SpeexSubmode wb_submode3 = {
+static SpeexSubmode wb_submode3 = {
+   0,
    0,
    1,
    /*LSP quantization*/
@@ -324,13 +343,14 @@ SpeexSubmode wb_submode3 = {
    split_cb_search_shape_sign,
    split_cb_shape_sign_unquant,
    &split_cb_high,
-   NULL,
-   NULL
+
+   0, 0, -1,
+   192
 };
 
 
 /* Split-band wideband CELP mode*/
-static SpeexSBMode sb_wb_mode = {
+SpeexSBMode sb_wb_mode = {
    &speex_nb_mode,
    160,    /*frameSize*/
    40,     /*subframeSize*/
@@ -350,7 +370,7 @@ SpeexMode speex_wb_mode = {
    &sb_wb_mode,
    "full-rate wideband (sub-band CELP)",
    1,
-   1,
+   4,
    &sb_encoder_init,
    &sb_encoder_destroy,
    &sb_encode,
@@ -360,7 +380,7 @@ SpeexMode speex_wb_mode = {
    &sb_encoder_ctl,
    &sb_decoder_ctl,
    320,
-   27350,
+   -1,
    0
 };