The Speex Codec Manual
(version 1.1.9)
Jean-Marc Valin
11th May 2005
1
2
Copyright (c) 2002-2004 Jean-Marc Valin/Xiph.org Foundation
Permission is granted to copy, distribute and/or modify this document under the
terms of the GNU Free Documentation License, Version 1.1 or any later version pub-
lished by the Free Software Foundation; with no Invariant Section, with no Front-Cover
Texts, and with no Back-Cover. A copy of the license is included in the section entitled
"GNU Free Documentation License".
CONTENTS
3
Contents
1 Introduction to Speex 6
2 Codec description 8
2.1 Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Coding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Compiling 11
4 Command-line encoder/decoder 12
4.1 speexenc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2 speexdec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5 Programming with Speex (the libspeex API) 15
5.1 Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.2 Decoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3 Preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4 Echo Cancellation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.5 Codec Options (speex_*_ctl) . . . . . . . . . . . . . . . . . . . . . . 19
5.6 Mode queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.7 Preprocessor options . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.8 Packing and in-band signalling . . . . . . . . . . . . . . . . . . . . . 22
6 Formats and standards 24
6.1 RTP Payload Format . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2 MIME Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3 Ogg file format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7 Introduction to CELP Coding 26
7.1 Linear Prediction (LPC) . . . . . . . . . . . . . . . . . . . . . . . . 26
7.2 Pitch Prediction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.3 Innovation Codebook . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.4 Analysis-by-Synthesis and Error Weighting . . . . . . . . . . . . . . 29
8 Speex narrowband mode 30
8.1 LPC Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
8.2 Pitch Prediction (adaptive codebook) . . . . . . . . . . . . . . . . . . 30
CONTENTS
4
8.3 Innovation Codebook . . . . . . . . . . . . . . . . . . . . . . . . . . 31
8.4 Bit allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
8.5 Perceptual enhancement . . . . . . . . . . . . . . . . . . . . . . . . 32
9 Speex wideband mode (sub-band CELP) 34
9.1 Linear Prediction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.2 Pitch Prediction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.3 Excitation Quantization . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.4 Bit allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
A FAQ 36
B Sample code 40
B.1 sampleenc.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
B.2 sampledec.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
C IETF RTP Profile 44
D Speex License 67
E GNU Free Documentation License 68
LIST OF TABLES
5
List of Tables
1 In-band signalling codes . . . . . . . . . . . . . . . . . . . . . . . . 23
2 Ogg/Speex header packet . . . . . . . . . . . . . . . . . . . . . . . . 25
3 Bit allocation for narrowband modes . . . . . . . . . . . . . . . . . . 31
4 Quality versus bit-rate . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5 Bit allocation for high-band in wideband mode . . . . . . . . . . . . 35