Encoding
In order to encode speech using Speex, you first need to:
#include <speex.h>
You then need to declare a Speex bit-packing struct
SpeexBits bits;
and a Speex encoder state
void *enc_state;
The two are initialized by:
speex_bits_init(&bits);
enc_state = speex_encoder_init(&speex_nb_mode);
For wideband coding,
speex_nb_mode will be replaced by
speex_wb_mode
.
For every input frame:
speex_bits_reset(&bits);
speex_encode(enc_state, input_frame, &bits);
nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);
where
input_frame is a
(float *) pointing to the beginning
of a speech frame, byte_ptr is a
(char *) where the encoded frame
will be written,
MAX_NB_BYTES is the maximum number of bytes that
can be written to
byte_ptr without causing an overflow and
nbBytes
is the number of bytes actually written to
byte_ptr (the encoded
size in bytes).
After you're done with the encoding, free all resources with:
speex_bits_destroy(&bits);
speex_encoder_destroy(&enc_state);
That's about it for the encoder.
Decoding
In order to encode speech using Speex, you first need to:
#include <speex.h>
You then need to declare a Speex bit-packing struct
SpeexBits bits;
and a Speex encoder state
void *dec_state;
The two are initialized by:
speex_bits_init(&bits);
dec_state = speex_decoder_init(&speex_nb_mode);
For wideband decoding,
speex_nb_mode will be replaced by
speex_wb_mode
.
For every input frame:
speex_bits_read_from(&bits, input_bytes, nbBytes);
speex_decode(st, &bits, output_frame, 0);
where
input_bytes is a
(char *) containing the bit-stream data
received for a frame,
nbBytes is the size (in bytes) of that bit-stream,
and
output_frame is a
(float *) and points to the area where
the decoded speech frame will be written. The last argument indicates whether
the frame we'd like to decode was lost. A value of 0 indicates the normal
case where bits points to the bit of the current frame. A value of 1 indicates
that we don't have the bits for the current frame, in which case the bits
argument should be the same as the bits for the last correctly received frame.
When a frame is lost, the Speex decoder will do its best to "guess" the sorrect
signal.