32
32
#include "audiocodec.h"
34
34
#include <speex/speex.h>
35
#include <speex/speex_preprocess.h>
37
36
class Speex : public AudioCodec
41
40
Speex (int payload=0)
42
: AudioCodec (payload, "speex"),
41
: AudioCodec (payload, "speex"),
50
48
_clockRate = 32000;
51
49
_frameSize = 640; // 20 ms at 32 kHz
78
76
speex_encoder_ctl (_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate);
80
78
speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size);
82
#ifdef HAVE_SPEEXDSP_LIB
86
int attenuation = -10;
88
speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VAD, &enable);
89
speex_encoder_ctl (_speex_enc_state, SPEEX_SET_DTX, &enable);
90
// speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality);
91
speex_encoder_ctl (_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex);
93
// Init the decoder struct
94
speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_frameSize);
96
// Init the preprocess struct
97
_preprocess_state = speex_preprocess_state_init (_frameSize,_clockRate);
98
speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable);
99
speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation);
100
speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable);
101
speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable);
118
93
speex_encoder_destroy (_speex_enc_state);
119
94
_speex_enc_state = 0;
121
speex_preprocess_state_destroy( _preprocess_state);
122
_preprocess_state = NULL;
125
98
virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) {
135
108
virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) {
136
109
speex_bits_reset (&_speex_enc_bits);
138
#ifdef HAVE_SPEEXDSP_LIB
140
speex_preprocess_run (_preprocess_state, src);
144
111
speex_encode_int (_speex_enc_state, src, &_speex_enc_bits);
145
112
speex_bits_nbytes (&_speex_enc_bits);
146
113
int nbBytes = speex_bits_write (&_speex_enc_bits, (char*) dst, size);