decoder stuff
[speexdsp.git] / libspeex / speex.h
1 /* Copyright (C) 2002 Jean-Marc Valin 
2    File: speex.h
3
4    This library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8    
9    This library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13    
14    You should have received a copy of the GNU Lesser General Public
15    License along with this library; if not, write to the Free Software
16    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18 */
19
20 #ifndef SPEEX_H
21 #define SPEEX_H
22
23 #include "modes.h"
24 #include "bits.h"
25
26 /**Structure representing the full state of the encoder*/
27 typedef struct EncState {
28    int    first;          /* Is this the first frame? */
29    int    frameSize;      /* Size of frames */
30    int    subframeSize;   /* Size of sub-frames */
31    int    nbSubframes;    /* Number of sub-frames */
32    int    windowSize;     /* Analysis (LPC) window length */
33    int    lpcSize;        /* LPC order */
34    int    bufSize;        /* Buffer size */
35    int    min_pitch;      /* Minimum pitch value allowed */
36    int    max_pitch;      /* Maximum pitch value allowed */
37    int    ol_pitch;       /* Open-loop pitch */
38    int    ol_voiced;      /* Open-loop voiced/non-voiced decision */
39    float  gamma1;         /* Perceptual filter: A(z/gamma1) */
40    float  gamma2;         /* Perceptual filter: A(z/gamma2) */
41    float  lag_factor;     /* Lag windowing gaussian width */
42    float  lpc_floor;      /* Noise floor multiplier for A[0] in LPC analysis*/
43    float  preemph;        /* Pre-emphasis: P(z) = 1 - a*z^-1*/
44    float  pre_mem;        /* 1-element memory for pre-emphasis */
45    float  pre_mem2;       /* 1-element memory for pre-emphasis */
46    float *stack;          /* Pseudo-stack allocation for temporary memory */
47    int    os_fact;        /* Over-sampling factor for fractional pitch */
48    int    os_filt_ord2;   /* Over-sampling filter size for fractional pitch */
49    float *os_exc;         /* Over-sampled excitation for fractional pitch */
50    float *os_filt;        /* Over-sampling filter for fractional pitch */
51    float *inBuf;          /* Input buffer (original signal) */
52    float *frame;          /* Start of original frame */
53    float *excBuf;         /* Excitation buffer */
54    float *exc;            /* Start of excitation frame */
55    float *swBuf;          /* Weighted signal buffer */
56    float *sw;             /* Start of weighted signal frame */
57    float *window;         /* Temporary (Hanning) window */
58    float *buf2;           /* 2nd temporary buffer */
59    float *autocorr;       /* auto-correlation */
60    float *lagWindow;      /* Window applied to auto-correlation */
61    float *lpc;            /* LPCs for current frame */
62    float *lsp;            /* LSPs for current frame */
63    float *qlsp;           /* Quantized LSPs for current frame */
64    float *old_lsp;        /* LSPs for previous frame */
65    float *old_qlsp;       /* Quantized LSPs for previous frame */
66    float *interp_lsp;     /* Interpolated LSPs */
67    float *interp_qlsp;    /* Interpolated quantized LSPs */
68    float *interp_lpc;     /* Interpolated LPCs */
69    float *interp_qlpc;    /* Interpolated quantized LPCs */
70    float *bw_lpc1;        /* LPCs after bandwidth expansion by gamma1 for perceptual weighting*/
71    float *bw_lpc2;        /* LPCs after bandwidth expansion by gamma2 for perceptual weighting*/
72    float *rc;             /* Reflection coefficients */
73    float *mem_sp, *mem_sw;
74    float *dmem1, *dmem2;
75    float *pi_gain;
76
77    lsp_quant_func    lsp_quant;
78    ltp_quant_func    ltp_quant;
79    void             *ltp_params;
80    innovation_quant_func innovation_quant;
81    void             *innovation_params;
82 } EncState;
83
84 typedef struct DecState {
85    int    first;          /* Is this the first frame? */
86    int    frameSize;      /* Size of frames */
87    int    subframeSize;   /* Size of sub-frames */
88    int    nbSubframes;    /* Number of sub-frames */
89    int    windowSize;     /* Analysis (LPC) window length */
90    int    lpcSize;        /* LPC order */
91    int    bufSize;        /* Buffer size */
92    int    min_pitch;      /* Minimum pitch value allowed */
93    int    max_pitch;      /* Maximum pitch value allowed */
94    float  gamma1;         /* Perceptual filter: A(z/gamma1) */
95    float  gamma2;         /* Perceptual filter: A(z/gamma2) */
96    float  preemph;        /* Pre-emphasis: P(z) = 1 - a*z^-1*/
97    float  pre_mem;        /* 1-element memory for pre-emphasis */
98    float *stack;
99    float *inBuf;          /* Input buffer (original signal) */
100    float *frame;          /* Start of original frame */
101    float *excBuf;         /* Excitation buffer */
102    float *exc;            /* Start of excitation frame */
103    float *qlsp;           /* Quantized LSPs for current frame */
104    float *old_qlsp;       /* Quantized LSPs for previous frame */
105    float *interp_qlsp;    /* Interpolated quantized LSPs */
106    float *interp_qlpc;    /* Interpolated quantized LPCs */
107    float *mem_sp;
108    float *pi_gain;
109
110    lsp_unquant_func  lsp_unquant;
111    ltp_unquant_func  ltp_unquant;
112    void             *ltp_params;
113    innovation_unquant_func innovation_unquant;
114    void             *innovation_params;
115 } DecState;
116
117 /**Initializes encoder state*/
118 void encoder_init(EncState *st, SpeexMode *mode);
119
120 /**De-allocates encoder state resources*/
121 void encoder_destroy(EncState *st);
122
123 /**Encodes one frame*/
124 void encode(EncState *st, float *in, FrameBits *bits);
125
126
127 /**Initializes decoder state*/
128 void decoder_init(DecState *st, SpeexMode *mode);
129
130 /**De-allocates decoder state resources*/
131 void decoder_destroy(DecState *st);
132
133 /**Decodes one frame*/
134 void decode(DecState *st, FrameBits *bits, float *out);
135
136
137
138 #endif