added encoder complexity option
[speexdsp.git] / doc / manual.lyx
1 #LyX 1.2 created this file. For more info see http://www.lyx.org/
2 \lyxformat 220
3 \textclass article
4 \language english
5 \inputencoding auto
6 \fontscheme default
7 \graphics default
8 \float_placement h
9 \paperfontsize default
10 \spacing single 
11 \papersize Default
12 \paperpackage a4
13 \use_geometry 0
14 \use_amsmath 0
15 \use_natbib 0
16 \use_numerical_citations 0
17 \paperorientation portrait
18 \secnumdepth 3
19 \tocdepth 3
20 \paragraph_separation indent
21 \defskip medskip
22 \quotes_language english
23 \quotes_times 2
24 \papercolumns 1
25 \papersides 1
26 \paperpagestyle headings
27
28 \layout Title
29
30 The Speex Codec Manual
31 \newline 
32 (draft)
33 \layout Author
34
35 Jean-Marc Valin
36 \layout Standard
37 \pagebreak_top 
38 Copyright (c) 2002 Jean-Marc Valin.
39 \layout Standard
40
41 Permission is granted to copy, distribute and/or modify this document under
42  the terms of the GNU Free Documentation License, Version 1.1 or any later
43  version published by the Free Software Foundation; with no Invariant Section,
44  with no Front-Cover Texts, and with no Back-Cover.
45  A copy of the license is included in the section entitled "GNU Free Documentati
46 on License".
47  
48 \layout Section*
49
50 Disclaimer
51 \layout Standard
52
53 This document is meant to provide useful information on the Speex codec
54  but there is absolutely no warranty regarding usefulness or correctness
55  of the information provided.
56  Also, some techniques used in Speex are said to be 
57 \begin_inset Quotes eld
58 \end_inset 
59
60 similar
61 \begin_inset Quotes erd
62 \end_inset 
63
64  to techniques used in known codecs.
65  This should not be understood as an acknowledgment that Speex is using
66  any patented algorithm used in these codecs, but merely that comprehension
67  of Speex can be facilitated by thinking that the principles of operation
68  are the same or similar.
69  Of course, there's also the obligatory 
70 \begin_inset Quotes eld
71 \end_inset 
72
73 all trademarks are property of their respective owner
74 \begin_inset Quotes erd
75 \end_inset 
76
77 .
78 \layout Standard
79 \pagebreak_top \pagebreak_bottom 
80
81 \begin_inset LatexCommand \tableofcontents{}
82
83 \end_inset 
84
85
86 \layout Standard
87 \pagebreak_bottom 
88
89 \begin_inset FloatList table
90
91 \end_inset 
92
93
94 \layout Section
95
96 Introduction to Speex
97 \layout Standard
98
99 Speex has been designed with the following goals in mind:
100 \layout Itemize
101
102 No use of patented algorithms (implies that we can't use patented algorithms
103  such as ACELP)
104 \layout Itemize
105
106 Optimized for speech, not music
107 \layout Itemize
108
109 Good for Voice over IP (VoIP)
110 \layout Itemize
111
112 Provide very good quality speech (at least as an option)
113 \layout Itemize
114
115 Allow a wide range of quality/bit-rates
116 \layout Itemize
117
118 Integrate both narrowband and wideband coding
119 \layout Itemize
120
121 Reasonable complexity
122 \layout Standard
123
124 Throughout the design the following assumptions and constraints were considered
125 \layout Itemize
126
127 Presence of packet losses
128 \layout Itemize
129
130 Integrity of received frames (no bit-errors)
131 \layout Itemize
132
133 Memory footprint is neither critical nor unlimited
134 \layout Standard
135
136 This led us to choose the CELP technique for Speex.
137  Also many design decisions were based on the original goals and assumptions:
138 \layout Itemize
139
140 Minimizing the amount of information extracted from past frames (for robustness
141  to packet loss)
142 \layout Itemize
143
144 Dynamically-selectable codebooks (LSP, pitch and innovation)
145 \layout Itemize
146
147 G.728-like fixed codebooks (without backward-adaptive grains) because of
148  patent issues
149 \layout Section
150
151 Introduction to CELP Coding
152 \layout Standard
153
154 Speex is based on the CELP, which stands for Code Excited Linear Prediction.
155  This section attempts to introduce the principles behind CELP, so if you
156  are already familiar with CELP, you can safely skip to section 
157 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
158
159 \end_inset 
160
161 .
162  The CELP technique is based on three ideas:
163 \layout Enumerate
164
165 The use of a linear prediction (LP) model to model the vocal tract
166 \layout Enumerate
167
168 The use of (adaptive and fixed) codebook entries as input (excitation) of
169  the LP model
170 \layout Enumerate
171
172 The search performed in closed-loop in a 
173 \begin_inset Quotes eld
174 \end_inset 
175
176 perceptually weighted domain
177 \begin_inset Quotes erd
178 \end_inset 
179
180
181 \layout Subsection
182
183 Linear Prediction
184 \layout Standard
185
186 The linear prediction model represents each speech sample as linear combination
187  of past samples, plus an error signal called the excitation (or residual).
188 \begin_inset Formula \[
189 x(n)=\sum _{i=1}^{N}a_{i}x(n-i)+e(n)\]
190
191 \end_inset 
192
193
194 \layout Standard
195
196 In the 
197 \emph on 
198 z
199 \emph default 
200 -domain, this can be expressed as
201 \layout Standard
202
203
204 \begin_inset Formula \[
205 x(z)=\frac{1}{A(z)}\: e(z)\]
206
207 \end_inset 
208
209
210 \layout Standard
211
212 where 
213 \begin_inset Formula $A(z)$
214 \end_inset 
215
216  is defined as
217 \layout Standard
218
219
220 \begin_inset Formula \[
221 A(z)=1-\sum _{i=1}^{N}a_{i}z^{-i}\]
222
223 \end_inset 
224
225
226 \layout Standard
227
228 We usually refer to 
229 \begin_inset Formula $A(z)$
230 \end_inset 
231
232  as the analysis filter and 
233 \begin_inset Formula $1/A(z)$
234 \end_inset 
235
236  as the synthesis filter.
237 \layout Standard
238
239 The 
240 \begin_inset Formula $A(z)$
241 \end_inset 
242
243  filter is computed using the Levinson-Durbin algorithm, which starts from
244  the auto-correlation 
245 \begin_inset Formula $R(m)$
246 \end_inset 
247
248  of the signal 
249 \begin_inset Formula $x(n)$
250 \end_inset 
251
252 .
253 \layout Standard
254
255
256 \begin_inset Formula \[
257 r(m)=\sum _{i=0}^{N-1}x(i)x(i-m)\]
258
259 \end_inset 
260
261
262 \layout Standard
263
264 For an order 
265 \begin_inset Formula $N$
266 \end_inset 
267
268  filter, we have:
269 \begin_inset Formula \[
270 \mathbf{R}=\left[\begin{array}{cccc}
271  r(0) & r(1) & \cdots  & r(N-1)\\
272  r(1) & r(0) & \cdots  & r(N-2)\\
273  \vdots  & \vdots  & \ddots  & \vdots \\
274  r(N-1) & r(N-2) & \cdots  & r(0)\end{array}
275 \right]\]
276
277 \end_inset 
278
279
280 \begin_inset Formula \[
281 \mathbf{r}=\left[\begin{array}{c}
282  r(1)\\
283  r(2)\\
284  \vdots \\
285  R(N)\end{array}
286 \right]\]
287
288 \end_inset 
289
290
291 \layout Standard
292
293 The filter coefficients 
294 \begin_inset Formula $a_{i}$
295 \end_inset 
296
297  are found by solving the system 
298 \begin_inset Formula $\mathbf{Ra}=\mathbf{r}$
299 \end_inset 
300
301 .
302  What the Levinson-Durbin algorithm does here is making the solution to
303  the problem 
304 \begin_inset Formula $\mathcal{O}\left(N^{2}\right)$
305 \end_inset 
306
307  instead of 
308 \begin_inset Formula $\mathcal{O}\left(N^{3}\right)$
309 \end_inset 
310
311  by exploiting the fact that matrix 
312 \begin_inset Formula $\mathbf{R}$
313 \end_inset 
314
315  is toeplitz hermitian.
316  Also, it can be proved that all the roots of 
317 \begin_inset Formula $A(z)$
318 \end_inset 
319
320  are withing the unit circle, which means that 
321 \begin_inset Formula $1/A(z)$
322 \end_inset 
323
324  is always stable.
325  This is in theory; in practice because of finite precision, there are two
326  commonly used techniques to make sure we have a stable filter.
327  First, we multiply 
328 \begin_inset Formula $r(0)$
329 \end_inset 
330
331  by a number slightly above one (such as 1.0001), which is equivalent to
332  adding noise to the signal.
333  Also, we can apply a window the the auto-correlation, which is equivalent
334  to filtering in the frequency domain, reducing sharp resonances.
335 \layout Subsection
336
337 Pitch Prediction
338 \layout Standard
339
340 During voiced segments, the speech signal is very periodic, so it is possible
341  to take advantage of that.
342 \layout Standard
343
344
345 \begin_inset Formula \[
346 e(n)=\beta e(n-T)+c(n)\]
347
348 \end_inset 
349
350
351 \layout Standard
352
353 where 
354 \begin_inset Formula $T$
355 \end_inset 
356
357  is the pitch period and 
358 \begin_inset Formula $\beta $
359 \end_inset 
360
361  is the pitch gain.
362  In the 
363 \emph on 
364 z
365 \emph default 
366 -domain, the excitation can be expressed as:
367 \layout Standard
368
369
370 \begin_inset Formula \[
371 e(z)=\frac{1}{1-\beta z^{-T}}\: c(z)\]
372
373 \end_inset 
374
375 where 
376 \begin_inset Formula $c(n)$
377 \end_inset 
378
379  is taken from the 
380 \emph on 
381 innovation codebook
382 \emph default 
383 .
384 \layout Subsection
385
386 Innovation Codebook
387 \layout Standard
388
389 This is where most of the bits in a CELP codec are allocated.
390  It represents the information that couldn't be obtained either from linear
391  prediction or pitch prediction.
392 \layout Subsection
393
394 Analysis-by-Synthesis and Error Weighting
395 \layout Standard
396
397 Most (if not all) modern audio codecs attempt to 
398 \emph on 
399 shape
400 \emph default 
401  the noise so that it is the hardest to detect with the ear.
402  That means that more noise can be tolerated in parts of the spectrum that
403  are louder and 
404 \emph on 
405 vice versa
406 \emph default 
407 .
408  That's why the error is minimized for the perceptually weighted signal
409 \begin_inset Formula \[
410 X_{w}(z)=W(z)X(z)\]
411
412 \end_inset 
413
414 where 
415 \begin_inset Formula $W(z)$
416 \end_inset 
417
418  is the weighting filter, usually of the form
419 \layout Standard
420
421
422 \begin_inset Formula \begin{equation}
423 W(z)=\frac{A\left(\frac{z}{\gamma _{1}}\right)}{A\left(\frac{z}{\gamma _{2}}\right)}\label{eq:weighting_filter}\end{equation}
424
425 \end_inset 
426
427
428 \layout Standard
429
430 with control parameters 
431 \begin_inset Formula $\gamma _{1}>\gamma _{2}$
432 \end_inset 
433
434 .
435  If the noise is white in the perceptually weighted domain, then in the
436  signal domain its spectral shape will be of the form
437 \begin_inset Formula \[
438 A_{noise}(z)=\frac{1}{W(z)}=\frac{A\left(\frac{z}{\gamma _{2}}\right)}{A\left(\frac{z}{\gamma _{1}}\right)}\]
439
440 \end_inset 
441
442
443 \layout Section
444
445 Speex narrowband mode
446 \begin_inset LatexCommand \label{sec:Speex-narrowband-mode}
447
448 \end_inset 
449
450
451 \layout Standard
452
453 This section looks at how Speex works for narrowband (
454 \begin_inset Formula $8\: \mathrm{kHz}$
455 \end_inset 
456
457  sampling rate) operation.
458  The frame size for this mode is 
459 \begin_inset Formula $20\: \mathrm{ms}$
460 \end_inset 
461
462 , corresponding to 160 samples.
463  Each frame is also subdivided into 4 sub-frames of 40 samples each.
464 \layout Subsection
465
466 LPC Analysis
467 \layout Standard
468
469 An LPC analysis is first performed on a (Hamming) window that spans all
470  the current frame and half a frame in advance.
471  The LPC coefficients are then converted to Line Spectral Pair (LSP), a
472  representation that is more robust to quantization.
473  The LSP's are quantized using 30 bits for higher quality modes and 18 bits
474  for lower quality.
475  The quantized LSP's are considered to be associated to the 
476 \begin_inset Formula $4^{th}$
477 \end_inset 
478
479  sub-frames and the LSP's associated to the first 3 sub-frames are linearly
480  interpolated using the current and previous LSP's.
481 \layout Standard
482
483 The perceptual weighting filter 
484 \begin_inset Formula $W(z)$
485 \end_inset 
486
487  used by Speex corresponds to the one described by eq.
488  
489 \begin_inset LatexCommand \ref{eq:weighting_filter}
490
491 \end_inset 
492
493  with 
494 \begin_inset Formula $\gamma _{1}=0.9$
495 \end_inset 
496
497  and 
498 \begin_inset Formula $\gamma _{2}=0.6$
499 \end_inset 
500
501 .
502  We can use the unquantized 
503 \begin_inset Formula $A(z)$
504 \end_inset 
505
506  filter since the weighting filter is only used in the encoder.
507 \layout Subsection
508
509 Pitch Prediction (adaptive codebook)
510 \layout Standard
511
512 Speex uses a 3-tap prediction for pitch.
513  That is, 
514 \layout Standard
515
516
517 \begin_inset Formula \[
518 e(n)=\beta _{0}e(n-T-1)+\beta _{1}e(n-T)+\beta _{2}e(n-T+1)+c(n)\]
519
520 \end_inset 
521
522
523 \layout Standard
524
525 where 
526 \begin_inset Formula $T$
527 \end_inset 
528
529  is the pitch period and the 
530 \begin_inset Formula $\beta _{i}$
531 \end_inset 
532
533  are the prediction (filter) taps.
534  The period and quantized gains are determined in closed loop.
535 \layout Subsection
536
537 Innovation Codebook
538 \layout Standard
539
540 In Speex, the innovation signal is quantized using shape-only vector quantizatio
541 n (VQ).
542  That means that the codebooks that are used represent both the shape and
543  the gain at the same time.
544  This save many bits that would otherwise be allocated for a separate gain
545  at the price of a slight increase in complexity.
546  Except for the absence of (backward-adaptive) gain, the technique used
547  in Speex is similar to G.728 (LD-CELP).
548  However since we do not have a low-delay constraint, the search can be
549  made more 
550 \begin_inset Quotes eld
551 \end_inset 
552
553 global
554 \begin_inset Quotes erd
555 \end_inset 
556
557  and make use of the whole information available for a sub-frame.
558 \layout Subsection
559
560 Bit allocation
561 \layout Standard
562
563 There are 7 different narrowband bit-rates defined for Speex, ranging from
564  200 bps to 18.15 kbps, although the modes below 5.9 kbps should not be used
565  for speech.
566  The bit-allocation for each mode is detailed in table 
567 \begin_inset LatexCommand \ref{cap:bits-narrowband}
568
569 \end_inset 
570
571 .
572  Each frame starts with the mode ID encoded with 4 bits which allows a range
573  from 0 to 15, though only the first 7 values are used (the others are reserved).
574  The parameters are listed in the table in the order they are packed in
575  the bit-stream.
576  All frame-based parameters are packed before sub-frame parameters.
577  The parameters for a certain sub-frame are all packed before the following
578  sub-frame is packed.
579 \layout Standard
580
581
582 \begin_inset Float table
583 placement htbp
584 wide true
585 collapsed false
586
587 \layout Standard
588
589
590 \begin_inset  Tabular
591 <lyxtabular version="3" rows="11" columns="9">
592 <features>
593 <column alignment="center" valignment="top" leftline="true" width="0pt">
594 <column alignment="center" valignment="top" leftline="true" width="0pt">
595 <column alignment="center" valignment="top" leftline="true" width="0pt">
596 <column alignment="center" valignment="top" leftline="true" width="0pt">
597 <column alignment="center" valignment="top" leftline="true" width="0pt">
598 <column alignment="center" valignment="top" leftline="true" width="0pt">
599 <column alignment="center" valignment="top" leftline="true" width="0pt">
600 <column alignment="center" valignment="top" leftline="true" width="0pt">
601 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
602 <row topline="true" bottomline="true">
603 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
604 \begin_inset Text
605
606 \layout Standard
607
608 Parameter
609 \end_inset 
610 </cell>
611 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
612 \begin_inset Text
613
614 \layout Standard
615
616 Update rate
617 \end_inset 
618 </cell>
619 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
620 \begin_inset Text
621
622 \layout Standard
623
624 0
625 \end_inset 
626 </cell>
627 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
628 \begin_inset Text
629
630 \layout Standard
631
632 1
633 \end_inset 
634 </cell>
635 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
636 \begin_inset Text
637
638 \layout Standard
639
640 2
641 \end_inset 
642 </cell>
643 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
644 \begin_inset Text
645
646 \layout Standard
647
648 3
649 \end_inset 
650 </cell>
651 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
652 \begin_inset Text
653
654 \layout Standard
655
656 4
657 \end_inset 
658 </cell>
659 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
660 \begin_inset Text
661
662 \layout Standard
663
664 5
665 \end_inset 
666 </cell>
667 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
668 \begin_inset Text
669
670 \layout Standard
671
672 6
673 \end_inset 
674 </cell>
675 </row>
676 <row topline="true">
677 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
678 \begin_inset Text
679
680 \layout Standard
681
682 Mode ID
683 \end_inset 
684 </cell>
685 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
686 \begin_inset Text
687
688 \layout Standard
689
690 frame
691 \end_inset 
692 </cell>
693 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
694 \begin_inset Text
695
696 \layout Standard
697
698 4
699 \end_inset 
700 </cell>
701 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
702 \begin_inset Text
703
704 \layout Standard
705
706 4
707 \end_inset 
708 </cell>
709 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
710 \begin_inset Text
711
712 \layout Standard
713
714 4
715 \end_inset 
716 </cell>
717 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
718 \begin_inset Text
719
720 \layout Standard
721
722 4
723 \end_inset 
724 </cell>
725 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
726 \begin_inset Text
727
728 \layout Standard
729
730 4
731 \end_inset 
732 </cell>
733 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
734 \begin_inset Text
735
736 \layout Standard
737
738 4
739 \end_inset 
740 </cell>
741 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
742 \begin_inset Text
743
744 \layout Standard
745
746 4
747 \end_inset 
748 </cell>
749 </row>
750 <row topline="true">
751 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
752 \begin_inset Text
753
754 \layout Standard
755
756 LSP
757 \end_inset 
758 </cell>
759 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
760 \begin_inset Text
761
762 \layout Standard
763
764 frame
765 \end_inset 
766 </cell>
767 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
768 \begin_inset Text
769
770 \layout Standard
771
772 0
773 \end_inset 
774 </cell>
775 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
776 \begin_inset Text
777
778 \layout Standard
779
780 18
781 \end_inset 
782 </cell>
783 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
784 \begin_inset Text
785
786 \layout Standard
787
788 18
789 \end_inset 
790 </cell>
791 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
792 \begin_inset Text
793
794 \layout Standard
795
796 18
797 \end_inset 
798 </cell>
799 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
800 \begin_inset Text
801
802 \layout Standard
803
804 18
805 \end_inset 
806 </cell>
807 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
808 \begin_inset Text
809
810 \layout Standard
811
812 30
813 \end_inset 
814 </cell>
815 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
816 \begin_inset Text
817
818 \layout Standard
819
820 30
821 \end_inset 
822 </cell>
823 </row>
824 <row topline="true">
825 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
826 \begin_inset Text
827
828 \layout Standard
829
830 OL pitch
831 \end_inset 
832 </cell>
833 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
834 \begin_inset Text
835
836 \layout Standard
837
838 frame
839 \end_inset 
840 </cell>
841 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
842 \begin_inset Text
843
844 \layout Standard
845
846 0
847 \end_inset 
848 </cell>
849 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
850 \begin_inset Text
851
852 \layout Standard
853
854 7
855 \end_inset 
856 </cell>
857 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
858 \begin_inset Text
859
860 \layout Standard
861
862 7
863 \end_inset 
864 </cell>
865 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
866 \begin_inset Text
867
868 \layout Standard
869
870 0
871 \end_inset 
872 </cell>
873 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
874 \begin_inset Text
875
876 \layout Standard
877
878 0
879 \end_inset 
880 </cell>
881 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
882 \begin_inset Text
883
884 \layout Standard
885
886 0
887 \end_inset 
888 </cell>
889 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
890 \begin_inset Text
891
892 \layout Standard
893
894 0
895 \end_inset 
896 </cell>
897 </row>
898 <row topline="true">
899 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
900 \begin_inset Text
901
902 \layout Standard
903
904 OL pitch gain
905 \end_inset 
906 </cell>
907 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
908 \begin_inset Text
909
910 \layout Standard
911
912 frame
913 \end_inset 
914 </cell>
915 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
916 \begin_inset Text
917
918 \layout Standard
919
920 0
921 \end_inset 
922 </cell>
923 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
924 \begin_inset Text
925
926 \layout Standard
927
928 4
929 \end_inset 
930 </cell>
931 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
932 \begin_inset Text
933
934 \layout Standard
935
936 0
937 \end_inset 
938 </cell>
939 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
940 \begin_inset Text
941
942 \layout Standard
943
944 0
945 \end_inset 
946 </cell>
947 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
948 \begin_inset Text
949
950 \layout Standard
951
952 0
953 \end_inset 
954 </cell>
955 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
956 \begin_inset Text
957
958 \layout Standard
959
960 0
961 \end_inset 
962 </cell>
963 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
964 \begin_inset Text
965
966 \layout Standard
967
968 0
969 \end_inset 
970 </cell>
971 </row>
972 <row topline="true">
973 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
974 \begin_inset Text
975
976 \layout Standard
977
978 Exc gain
979 \end_inset 
980 </cell>
981 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
982 \begin_inset Text
983
984 \layout Standard
985
986 frame
987 \end_inset 
988 </cell>
989 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
990 \begin_inset Text
991
992 \layout Standard
993
994 0
995 \end_inset 
996 </cell>
997 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
998 \begin_inset Text
999
1000 \layout Standard
1001
1002 5
1003 \end_inset 
1004 </cell>
1005 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1006 \begin_inset Text
1007
1008 \layout Standard
1009
1010 5
1011 \end_inset 
1012 </cell>
1013 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1014 \begin_inset Text
1015
1016 \layout Standard
1017
1018 5
1019 \end_inset 
1020 </cell>
1021 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1022 \begin_inset Text
1023
1024 \layout Standard
1025
1026 5
1027 \end_inset 
1028 </cell>
1029 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1030 \begin_inset Text
1031
1032 \layout Standard
1033
1034 5
1035 \end_inset 
1036 </cell>
1037 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1038 \begin_inset Text
1039
1040 \layout Standard
1041
1042 5
1043 \end_inset 
1044 </cell>
1045 </row>
1046 <row topline="true">
1047 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1048 \begin_inset Text
1049
1050 \layout Standard
1051
1052 Fine pitch
1053 \end_inset 
1054 </cell>
1055 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1056 \begin_inset Text
1057
1058 \layout Standard
1059
1060 sub-frame
1061 \end_inset 
1062 </cell>
1063 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1064 \begin_inset Text
1065
1066 \layout Standard
1067
1068 0
1069 \end_inset 
1070 </cell>
1071 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1072 \begin_inset Text
1073
1074 \layout Standard
1075
1076 0
1077 \end_inset 
1078 </cell>
1079 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1080 \begin_inset Text
1081
1082 \layout Standard
1083
1084 0
1085 \end_inset 
1086 </cell>
1087 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1088 \begin_inset Text
1089
1090 \layout Standard
1091
1092 7
1093 \end_inset 
1094 </cell>
1095 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1096 \begin_inset Text
1097
1098 \layout Standard
1099
1100 7
1101 \end_inset 
1102 </cell>
1103 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1104 \begin_inset Text
1105
1106 \layout Standard
1107
1108 7
1109 \end_inset 
1110 </cell>
1111 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1112 \begin_inset Text
1113
1114 \layout Standard
1115
1116 7
1117 \end_inset 
1118 </cell>
1119 </row>
1120 <row topline="true">
1121 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1122 \begin_inset Text
1123
1124 \layout Standard
1125
1126 Pitch gain
1127 \end_inset 
1128 </cell>
1129 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1130 \begin_inset Text
1131
1132 \layout Standard
1133
1134 sub-frame
1135 \end_inset 
1136 </cell>
1137 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1138 \begin_inset Text
1139
1140 \layout Standard
1141
1142 0
1143 \end_inset 
1144 </cell>
1145 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1146 \begin_inset Text
1147
1148 \layout Standard
1149
1150 0
1151 \end_inset 
1152 </cell>
1153 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1154 \begin_inset Text
1155
1156 \layout Standard
1157
1158 5
1159 \end_inset 
1160 </cell>
1161 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1162 \begin_inset Text
1163
1164 \layout Standard
1165
1166 5
1167 \end_inset 
1168 </cell>
1169 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1170 \begin_inset Text
1171
1172 \layout Standard
1173
1174 5
1175 \end_inset 
1176 </cell>
1177 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1178 \begin_inset Text
1179
1180 \layout Standard
1181
1182 7
1183 \end_inset 
1184 </cell>
1185 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1186 \begin_inset Text
1187
1188 \layout Standard
1189
1190 7
1191 \end_inset 
1192 </cell>
1193 </row>
1194 <row topline="true">
1195 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1196 \begin_inset Text
1197
1198 \layout Standard
1199
1200 Innovation gain
1201 \end_inset 
1202 </cell>
1203 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1204 \begin_inset Text
1205
1206 \layout Standard
1207
1208 sub-frame
1209 \end_inset 
1210 </cell>
1211 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1212 \begin_inset Text
1213
1214 \layout Standard
1215
1216 0
1217 \end_inset 
1218 </cell>
1219 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1220 \begin_inset Text
1221
1222 \layout Standard
1223
1224 3
1225 \end_inset 
1226 </cell>
1227 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1228 \begin_inset Text
1229
1230 \layout Standard
1231
1232 0
1233 \end_inset 
1234 </cell>
1235 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1236 \begin_inset Text
1237
1238 \layout Standard
1239
1240 3
1241 \end_inset 
1242 </cell>
1243 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1244 \begin_inset Text
1245
1246 \layout Standard
1247
1248 3
1249 \end_inset 
1250 </cell>
1251 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1252 \begin_inset Text
1253
1254 \layout Standard
1255
1256 3
1257 \end_inset 
1258 </cell>
1259 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1260 \begin_inset Text
1261
1262 \layout Standard
1263
1264 3
1265 \end_inset 
1266 </cell>
1267 </row>
1268 <row topline="true" bottomline="true">
1269 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1270 \begin_inset Text
1271
1272 \layout Standard
1273
1274 Innovation VQ
1275 \end_inset 
1276 </cell>
1277 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1278 \begin_inset Text
1279
1280 \layout Standard
1281
1282 sub-frame
1283 \end_inset 
1284 </cell>
1285 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1286 \begin_inset Text
1287
1288 \layout Standard
1289
1290 0
1291 \end_inset 
1292 </cell>
1293 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1294 \begin_inset Text
1295
1296 \layout Standard
1297
1298 0
1299 \end_inset 
1300 </cell>
1301 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1302 \begin_inset Text
1303
1304 \layout Standard
1305
1306 16
1307 \end_inset 
1308 </cell>
1309 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1310 \begin_inset Text
1311
1312 \layout Standard
1313
1314 20
1315 \end_inset 
1316 </cell>
1317 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1318 \begin_inset Text
1319
1320 \layout Standard
1321
1322 35
1323 \end_inset 
1324 </cell>
1325 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1326 \begin_inset Text
1327
1328 \layout Standard
1329
1330 48
1331 \end_inset 
1332 </cell>
1333 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1334 \begin_inset Text
1335
1336 \layout Standard
1337
1338 64
1339 \end_inset 
1340 </cell>
1341 </row>
1342 <row topline="true" bottomline="true">
1343 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1344 \begin_inset Text
1345
1346 \layout Standard
1347
1348 Total
1349 \end_inset 
1350 </cell>
1351 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1352 \begin_inset Text
1353
1354 \layout Standard
1355
1356 frame
1357 \end_inset 
1358 </cell>
1359 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1360 \begin_inset Text
1361
1362 \layout Standard
1363
1364 4
1365 \end_inset 
1366 </cell>
1367 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1368 \begin_inset Text
1369
1370 \layout Standard
1371
1372 50
1373 \end_inset 
1374 </cell>
1375 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1376 \begin_inset Text
1377
1378 \layout Standard
1379
1380 118
1381 \end_inset 
1382 </cell>
1383 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1384 \begin_inset Text
1385
1386 \layout Standard
1387
1388 167
1389 \end_inset 
1390 </cell>
1391 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1392 \begin_inset Text
1393
1394 \layout Standard
1395
1396 227
1397 \end_inset 
1398 </cell>
1399 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1400 \begin_inset Text
1401
1402 \layout Standard
1403
1404 299
1405 \end_inset 
1406 </cell>
1407 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1408 \begin_inset Text
1409
1410 \layout Standard
1411
1412 363
1413 \end_inset 
1414 </cell>
1415 </row>
1416 </lyxtabular>
1417
1418 \end_inset 
1419
1420
1421 \layout Caption
1422
1423 Bit allocation for narrowband modes
1424 \begin_inset LatexCommand \label{cap:bits-narrowband}
1425
1426 \end_inset 
1427
1428
1429 \end_inset 
1430
1431
1432 \layout Standard
1433
1434 So far, no MOS (mean opinion score) subjective evaluation has been performed
1435  for Speex.
1436  In order to give an idea of the quality achivable with it, table 
1437 \begin_inset LatexCommand \ref{cap:quality_vs_bps}
1438
1439 \end_inset 
1440
1441  presents my own subjective opinion on it.
1442  It sould be noted that different people will perceive the quality differently
1443  and that the person that designed the codec often has a bias (one way or
1444  another) when it comes to subjective evaluation.
1445  Last thing, it should be noted that for most codecs (including Speex) encoding
1446  quality sometimes varies depending on the input.
1447 \layout Standard
1448
1449
1450 \begin_inset Float table
1451 placement htbp
1452 wide true
1453 collapsed false
1454
1455 \layout Standard
1456
1457
1458 \begin_inset  Tabular
1459 <lyxtabular version="3" rows="8" columns="3">
1460 <features>
1461 <column alignment="center" valignment="top" leftline="true" width="0pt">
1462 <column alignment="center" valignment="top" leftline="true" width="0pt">
1463 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
1464 <row topline="true" bottomline="true">
1465 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1466 \begin_inset Text
1467
1468 \layout Standard
1469
1470 Mode
1471 \end_inset 
1472 </cell>
1473 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1474 \begin_inset Text
1475
1476 \layout Standard
1477
1478 Bitrate (bps)
1479 \end_inset 
1480 </cell>
1481 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1482 \begin_inset Text
1483
1484 \layout Standard
1485
1486 Quality
1487 \end_inset 
1488 </cell>
1489 </row>
1490 <row topline="true">
1491 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1492 \begin_inset Text
1493
1494 \layout Standard
1495
1496 0
1497 \end_inset 
1498 </cell>
1499 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1500 \begin_inset Text
1501
1502 \layout Standard
1503
1504 200
1505 \end_inset 
1506 </cell>
1507 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1508 \begin_inset Text
1509
1510 \layout Standard
1511
1512 No sound (VBR only)
1513 \end_inset 
1514 </cell>
1515 </row>
1516 <row topline="true">
1517 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1518 \begin_inset Text
1519
1520 \layout Standard
1521
1522 1
1523 \end_inset 
1524 </cell>
1525 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1526 \begin_inset Text
1527
1528 \layout Standard
1529
1530 2,500
1531 \end_inset 
1532 </cell>
1533 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1534 \begin_inset Text
1535
1536 \layout Standard
1537
1538 Comfort noise only (VBR only)
1539 \end_inset 
1540 </cell>
1541 </row>
1542 <row topline="true">
1543 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1544 \begin_inset Text
1545
1546 \layout Standard
1547
1548 2
1549 \end_inset 
1550 </cell>
1551 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1552 \begin_inset Text
1553
1554 \layout Standard
1555
1556 5,900
1557 \end_inset 
1558 </cell>
1559 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1560 \begin_inset Text
1561
1562 \layout Standard
1563
1564 Very noticeable artifacts/noise, good intelligibility
1565 \end_inset 
1566 </cell>
1567 </row>
1568 <row topline="true">
1569 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1570 \begin_inset Text
1571
1572 \layout Standard
1573
1574 3
1575 \end_inset 
1576 </cell>
1577 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1578 \begin_inset Text
1579
1580 \layout Standard
1581
1582 8,350
1583 \end_inset 
1584 </cell>
1585 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1586 \begin_inset Text
1587
1588 \layout Standard
1589
1590 Artifacts/noise often noticeable
1591 \end_inset 
1592 </cell>
1593 </row>
1594 <row topline="true">
1595 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1596 \begin_inset Text
1597
1598 \layout Standard
1599
1600 4
1601 \end_inset 
1602 </cell>
1603 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1604 \begin_inset Text
1605
1606 \layout Standard
1607
1608 11,350
1609 \end_inset 
1610 </cell>
1611 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1612 \begin_inset Text
1613
1614 \layout Standard
1615
1616 Artifacts usually noticeable only with headphones
1617 \end_inset 
1618 </cell>
1619 </row>
1620 <row topline="true">
1621 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1622 \begin_inset Text
1623
1624 \layout Standard
1625
1626 5
1627 \end_inset 
1628 </cell>
1629 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1630 \begin_inset Text
1631
1632 \layout Standard
1633
1634 14,950
1635 \end_inset 
1636 </cell>
1637 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1638 \begin_inset Text
1639
1640 \layout Standard
1641
1642 Need good headphones to tell the difference
1643 \end_inset 
1644 </cell>
1645 </row>
1646 <row topline="true" bottomline="true">
1647 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1648 \begin_inset Text
1649
1650 \layout Standard
1651
1652 6
1653 \end_inset 
1654 </cell>
1655 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1656 \begin_inset Text
1657
1658 \layout Standard
1659
1660 18,150
1661 \end_inset 
1662 </cell>
1663 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1664 \begin_inset Text
1665
1666 \layout Standard
1667
1668 Hard to tell the difference even with good headphones
1669 \end_inset 
1670 </cell>
1671 </row>
1672 </lyxtabular>
1673
1674 \end_inset 
1675
1676
1677 \layout Caption
1678
1679 Quality versus bit-rate
1680 \begin_inset LatexCommand \label{cap:quality_vs_bps}
1681
1682 \end_inset 
1683
1684
1685 \end_inset 
1686
1687
1688 \layout Subsection
1689
1690 Perceptual post-filter
1691 \layout Standard
1692
1693 This part of the codec only applies to the decoder and can even be changed
1694  without affecting inter-operability.
1695  For that reason, the implementation provided should only be considered
1696  as a reference implementation.
1697 \layout Section
1698
1699 Speex wideband mode (sub-band CELP)
1700 \layout Standard
1701
1702 For wideband, the Speex approach uses a 
1703 \emph on 
1704 q
1705 \emph default 
1706 uadrature 
1707 \emph on 
1708 m
1709 \emph default 
1710 irror 
1711 \emph on 
1712 f
1713 \emph default 
1714 ilter (QMF) to split the band in two.
1715  The 16 kHz signal is thus divided into two 8 kHz signals, one representing
1716  the low band (0-4 kHz), the other the high band (4-8 kHz).
1717  The low band is encoded with the narrowband mode described in section 
1718 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
1719
1720 \end_inset 
1721
1722  in such a way that the resulting 
1723 \begin_inset Quotes eld
1724 \end_inset 
1725
1726 embedded narrowband bit-stream
1727 \begin_inset Quotes erd
1728 \end_inset 
1729
1730  can also be decoded with the narrowband decoder.
1731  Since the low band encoding has already been described only the high band
1732  encoding is described in this section.
1733 \layout Subsection
1734
1735 Linear Prediction
1736 \layout Standard
1737
1738 The linear prediction part used for the high-band is very similar to what
1739  is done for narrowband.
1740  The only difference is that we use only 12 bits to encode the high-band
1741  LSP's.
1742 \layout Subsection
1743
1744 Pitch Prediction
1745 \layout Standard
1746
1747 That part is easy: there's no pitch prediction for the high-band.
1748  There are two reasons for that.
1749  First, there is usually little harmonic structure in this band (above 4
1750  kHz).
1751  Second, it would be very hard to implement since the QMF folds the 4-8
1752  kHz band into 4-0 kHz (reversing the frequency axis), which means that
1753  the location of the harmonics are no longer at multiples of the fundamental
1754  (pitch).
1755 \layout Subsection
1756
1757 Excitation Quantization
1758 \layout Standard
1759
1760 The high-band excitation is coded in the same way as for narrowband.
1761  
1762 \layout Subsection
1763
1764 Bit allocation
1765 \layout Standard
1766
1767 For the wideband mode, all the narrowband frame is packed before the high-band
1768  is encoded.
1769  The narrowband part of the bit-stream is as defined in table 
1770 \begin_inset LatexCommand \ref{cap:bits-narrowband}
1771
1772 \end_inset 
1773
1774 .
1775  The high-band follows, as described in table 
1776 \begin_inset LatexCommand \ref{cap:bits-wideband}
1777
1778 \end_inset 
1779
1780 .
1781  This also means that a wideband frame may be correctly decoded by a narrowband
1782  decoder with the only caveat that if more than one frame is packed in the
1783  same packet, the decoder will need to skip the high-band parts in order
1784  to sync with the bit-stream.
1785 \layout Standard
1786
1787
1788 \begin_inset Float table
1789 placement htbp
1790 wide true
1791 collapsed false
1792
1793 \layout Standard
1794
1795
1796 \begin_inset  Tabular
1797 <lyxtabular version="3" rows="6" columns="6">
1798 <features>
1799 <column alignment="center" valignment="top" leftline="true" width="0pt">
1800 <column alignment="center" valignment="top" leftline="true" width="0pt">
1801 <column alignment="center" valignment="top" leftline="true" width="0pt">
1802 <column alignment="center" valignment="top" leftline="true" width="0pt">
1803 <column alignment="center" valignment="top" leftline="true" width="0pt">
1804 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
1805 <row topline="true" bottomline="true">
1806 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1807 \begin_inset Text
1808
1809 \layout Standard
1810
1811 Parameter
1812 \end_inset 
1813 </cell>
1814 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1815 \begin_inset Text
1816
1817 \layout Standard
1818
1819 Update rate
1820 \end_inset 
1821 </cell>
1822 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1823 \begin_inset Text
1824
1825 \layout Standard
1826
1827 0
1828 \end_inset 
1829 </cell>
1830 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1831 \begin_inset Text
1832
1833 \layout Standard
1834
1835 1
1836 \end_inset 
1837 </cell>
1838 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1839 \begin_inset Text
1840
1841 \layout Standard
1842
1843 2
1844 \end_inset 
1845 </cell>
1846 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1847 \begin_inset Text
1848
1849 \layout Standard
1850
1851 3
1852 \end_inset 
1853 </cell>
1854 </row>
1855 <row topline="true">
1856 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1857 \begin_inset Text
1858
1859 \layout Standard
1860
1861 Mode ID
1862 \end_inset 
1863 </cell>
1864 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1865 \begin_inset Text
1866
1867 \layout Standard
1868
1869 frame
1870 \end_inset 
1871 </cell>
1872 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1873 \begin_inset Text
1874
1875 \layout Standard
1876
1877 3
1878 \end_inset 
1879 </cell>
1880 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1881 \begin_inset Text
1882
1883 \layout Standard
1884
1885 3
1886 \end_inset 
1887 </cell>
1888 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1889 \begin_inset Text
1890
1891 \layout Standard
1892
1893 3
1894 \end_inset 
1895 </cell>
1896 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1897 \begin_inset Text
1898
1899 \layout Standard
1900
1901 3
1902 \end_inset 
1903 </cell>
1904 </row>
1905 <row topline="true">
1906 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1907 \begin_inset Text
1908
1909 \layout Standard
1910
1911 LSP
1912 \end_inset 
1913 </cell>
1914 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1915 \begin_inset Text
1916
1917 \layout Standard
1918
1919 frame
1920 \end_inset 
1921 </cell>
1922 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1923 \begin_inset Text
1924
1925 \layout Standard
1926
1927 0
1928 \end_inset 
1929 </cell>
1930 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1931 \begin_inset Text
1932
1933 \layout Standard
1934
1935 12
1936 \end_inset 
1937 </cell>
1938 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1939 \begin_inset Text
1940
1941 \layout Standard
1942
1943 12
1944 \end_inset 
1945 </cell>
1946 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1947 \begin_inset Text
1948
1949 \layout Standard
1950
1951 12
1952 \end_inset 
1953 </cell>
1954 </row>
1955 <row topline="true">
1956 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1957 \begin_inset Text
1958
1959 \layout Standard
1960
1961 Excitation gain
1962 \end_inset 
1963 </cell>
1964 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1965 \begin_inset Text
1966
1967 \layout Standard
1968
1969 sub-frame
1970 \end_inset 
1971 </cell>
1972 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1973 \begin_inset Text
1974
1975 \layout Standard
1976
1977 0
1978 \end_inset 
1979 </cell>
1980 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1981 \begin_inset Text
1982
1983 \layout Standard
1984
1985 5
1986 \end_inset 
1987 </cell>
1988 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1989 \begin_inset Text
1990
1991 \layout Standard
1992
1993 4
1994 \end_inset 
1995 </cell>
1996 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1997 \begin_inset Text
1998
1999 \layout Standard
2000
2001 4
2002 \end_inset 
2003 </cell>
2004 </row>
2005 <row topline="true" bottomline="true">
2006 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2007 \begin_inset Text
2008
2009 \layout Standard
2010
2011 Excitation VQ
2012 \end_inset 
2013 </cell>
2014 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2015 \begin_inset Text
2016
2017 \layout Standard
2018
2019 sub-frame
2020 \end_inset 
2021 </cell>
2022 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2023 \begin_inset Text
2024
2025 \layout Standard
2026
2027 0
2028 \end_inset 
2029 </cell>
2030 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2031 \begin_inset Text
2032
2033 \layout Standard
2034
2035 0
2036 \end_inset 
2037 </cell>
2038 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2039 \begin_inset Text
2040
2041 \layout Standard
2042
2043 20
2044 \end_inset 
2045 </cell>
2046 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2047 \begin_inset Text
2048
2049 \layout Standard
2050
2051 40
2052 \end_inset 
2053 </cell>
2054 </row>
2055 <row topline="true" bottomline="true">
2056 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2057 \begin_inset Text
2058
2059 \layout Standard
2060
2061 Total
2062 \end_inset 
2063 </cell>
2064 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2065 \begin_inset Text
2066
2067 \layout Standard
2068
2069 frame
2070 \end_inset 
2071 </cell>
2072 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2073 \begin_inset Text
2074
2075 \layout Standard
2076
2077 3
2078 \end_inset 
2079 </cell>
2080 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2081 \begin_inset Text
2082
2083 \layout Standard
2084
2085 35
2086 \end_inset 
2087 </cell>
2088 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2089 \begin_inset Text
2090
2091 \layout Standard
2092
2093 111
2094 \end_inset 
2095 </cell>
2096 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2097 \begin_inset Text
2098
2099 \layout Standard
2100
2101 191
2102 \end_inset 
2103 </cell>
2104 </row>
2105 </lyxtabular>
2106
2107 \end_inset 
2108
2109
2110 \layout Caption
2111
2112 Bit allocation for high-band in wideband mode
2113 \begin_inset LatexCommand \label{cap:bits-wideband}
2114
2115 \end_inset 
2116
2117
2118 \end_inset 
2119
2120
2121 \layout Section
2122
2123 Command-line encoder/decoder
2124 \layout Standard
2125
2126 The base Speex distribution includes a command-line encoder (
2127 \emph on 
2128 speexenc
2129 \emph default 
2130 ) and decoder (
2131 \emph on 
2132 speexdec
2133 \emph default 
2134 ).
2135 \layout Subsection
2136
2137
2138 \emph on 
2139 speexenc
2140 \layout Standard
2141
2142 The encoder
2143 \layout Subsection
2144
2145
2146 \emph on 
2147 speexdec
2148 \layout Section
2149
2150 Programming with Speex (the libspeex API)
2151 \layout Subsection
2152
2153 Encoding
2154 \layout Standard
2155
2156 In order to encode speech using Speex, you first need to:
2157 \layout LyX-Code
2158
2159 #include <speex.h>
2160 \layout Standard
2161
2162 You then need to declare a Speex bit-packing struct
2163 \layout LyX-Code
2164
2165 SpeexBits bits;
2166 \layout Standard
2167
2168 and a Speex encoder state
2169 \layout LyX-Code
2170
2171 void *enc_state;
2172 \layout Standard
2173
2174 The two are initialized by:
2175 \layout LyX-Code
2176
2177 speex_bits_init(&bits);
2178 \layout LyX-Code
2179
2180 enc_state = speex_encoder_init(&speex_nb_mode);
2181 \layout Standard
2182
2183 For wideband coding, 
2184 \emph on 
2185 speex_nb_mode
2186 \emph default 
2187  will be replaced by 
2188 \emph on 
2189 speex_wb_mode
2190 \emph default 
2191 .
2192  In most cases, you will need to know the frame size used by the mode you
2193  are using.
2194  You can get that value in the 
2195 \emph on 
2196 frame_size
2197 \emph default 
2198  variable with:
2199 \layout LyX-Code
2200
2201 speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
2202 \layout Standard
2203
2204 Once the initialization is done, for every input frame:
2205 \layout LyX-Code
2206
2207 speex_bits_reset(&bits);
2208 \layout LyX-Code
2209
2210 speex_encode(enc_state, input_frame, &bits);
2211 \layout LyX-Code
2212
2213 nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);
2214 \layout Standard
2215
2216 where 
2217 \emph on 
2218 input_frame
2219 \emph default 
2220  is a 
2221 \emph on 
2222 (float *)
2223 \emph default 
2224  pointing to the beginning of a speech frame, 
2225 \emph on 
2226 byte_ptr
2227 \emph default 
2228  is a 
2229 \emph on 
2230 (char *)
2231 \emph default 
2232  where the encoded frame will be written, 
2233 \emph on 
2234 MAX_NB_BYTES
2235 \emph default 
2236  is the maximum number of bytes that can be written to 
2237 \emph on 
2238 byte_ptr
2239 \emph default 
2240  without causing an overflow and 
2241 \emph on 
2242 nbBytes
2243 \emph default 
2244  is the number of bytes actually written to 
2245 \emph on 
2246 byte_ptr
2247 \emph default 
2248  (the encoded size in bytes).
2249  Before calling speex_bits_write, it is possible to find the number of bytes
2250  that need to be written by calling 
2251 \family typewriter 
2252 speex_bits_nbytes(&bits)
2253 \family default 
2254 , which returns a number of bytes.
2255  
2256 \layout Standard
2257
2258 After you're done with the encoding, free all resources with:
2259 \layout LyX-Code
2260
2261 speex_bits_destroy(&bits);
2262 \layout LyX-Code
2263
2264 speex_encoder_destroy(&enc_state);
2265 \layout Standard
2266
2267 That's about it for the encoder.
2268  
2269 \layout Subsection
2270
2271 Decoding
2272 \layout Standard
2273
2274 In order to encode speech using Speex, you first need to:
2275 \layout LyX-Code
2276
2277 #include <speex.h>
2278 \layout Standard
2279
2280 You then need to declare a Speex bit-packing struct
2281 \layout LyX-Code
2282
2283 SpeexBits bits;
2284 \layout Standard
2285
2286 and a Speex encoder state
2287 \layout LyX-Code
2288
2289 void *dec_state;
2290 \layout Standard
2291
2292 The two are initialized by:
2293 \layout LyX-Code
2294
2295 speex_bits_init(&bits);
2296 \layout LyX-Code
2297
2298 dec_state = speex_decoder_init(&speex_nb_mode);
2299 \layout Standard
2300
2301 For wideband decoding, 
2302 \emph on 
2303 speex_nb_mode
2304 \emph default 
2305  will be replaced by 
2306 \emph on 
2307 speex_wb_mode
2308 \emph default 
2309 .
2310  You can get that value in the 
2311 \emph on 
2312 frame_size
2313 \emph default 
2314  variable with:
2315 \layout LyX-Code
2316
2317 speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size); 
2318 \layout Standard
2319
2320 There is also a parameter that can be set for the decoder: whether or not
2321  to use a perceptual post-filter.
2322  This can be set by: 
2323 \layout LyX-Code
2324
2325 speex_decoder_ctl(dec_state, SPEEX_SET_PF, &pf); 
2326 \layout Standard
2327
2328 where pf is an int that with value 0 to have the post-filter disabled and
2329  1 to have it enabled.
2330 \layout Standard
2331
2332 Again, once the decoder initialization is done, for every input frame:
2333 \layout LyX-Code
2334
2335 speex_bits_read_from(&bits, input_bytes, nbBytes);
2336 \layout LyX-Code
2337
2338 speex_decode(st, &bits, output_frame, 0);
2339 \layout Standard
2340
2341 where input_bytes is a 
2342 \emph on 
2343 (char *)
2344 \emph default 
2345  containing the bit-stream data received for a frame, 
2346 \emph on 
2347 nbBytes
2348 \emph default 
2349  is the size (in bytes) of that bit-stream, and 
2350 \emph on 
2351 output_frame
2352 \emph default 
2353  is a 
2354 \emph on 
2355 (float *)
2356 \emph default 
2357  and points to the area where the decoded speech frame will be written.
2358  The last argument indicates whether the frame we'd like to decode was lost.
2359  A value of 0 indicates the normal case where bits points to the bit of
2360  the current frame.
2361  A value of 1 indicates that we don't have the bits for the current frame,
2362  in which case the bits argument should be the same as the bits for the
2363  last correctly received frame.
2364  When a frame is lost, the Speex decoder will do its best to "guess" the
2365  correct signal.
2366 \layout Subsection
2367
2368 Codec Options (speex_*_ctl)
2369 \layout Standard
2370
2371 The Speex encoder and decoder support many options and requests that can
2372  be accessed through the 
2373 \emph on 
2374 speex_encoder_ctl
2375 \emph default 
2376  and 
2377 \emph on 
2378 speex_decoder_ctl
2379 \emph default 
2380  functions.
2381  These functions are similar the the 
2382 \emph on 
2383 ioctl
2384 \emph default 
2385  system call and their prototypes are:
2386 \layout LyX-Code
2387
2388 void speex_encoder_ctl(void *encoder, int request, void *ptr);
2389 \layout LyX-Code
2390
2391 void speex_decoder_ctl(void *encoder, int request, void *ptr);
2392 \layout Standard
2393
2394 The different values of request allowed are (note that some only apply to
2395  the encoder or the decoder):
2396 \layout Description
2397
2398 SPEEX_SET_PF** Set post-filter to on (1) or off (0) (integer)
2399 \layout Description
2400
2401 SPEEX_GET_PF** Get post-filter status (integer)
2402 \layout Description
2403
2404 SPEEX_GET_FRAME_SIZE Get the frame size used for the current mode (integer)
2405 \layout Description
2406
2407 SPEEX_SET_QUALITY* Set the encoder speech quality (integer 0 to 10)
2408 \layout Description
2409
2410 SPEEX_GET_QUALITY* Get the current encoder speech quality (integer 0 to
2411  10)
2412 \layout Description
2413
2414 SPEEX_SET_MODE*
2415 \begin_inset Formula $\dagger $
2416 \end_inset 
2417
2418
2419 \layout Description
2420
2421 SPEEX_GET_MODE*
2422 \begin_inset Formula $\dagger $
2423 \end_inset 
2424
2425
2426 \layout Description
2427
2428 SPEEX_SET_LOW_MODE*
2429 \begin_inset Formula $\dagger $
2430 \end_inset 
2431
2432
2433 \layout Description
2434
2435 SPEEX_GET_LOW_MODE*
2436 \begin_inset Formula $\dagger $
2437 \end_inset 
2438
2439
2440 \layout Description
2441
2442 SPEEX_SET_HIGH_MODE*
2443 \begin_inset Formula $\dagger $
2444 \end_inset 
2445
2446
2447 \layout Description
2448
2449 SPEEX_GET_HIGH_MODE*
2450 \begin_inset Formula $\dagger $
2451 \end_inset 
2452
2453
2454 \layout Description
2455
2456 SPEEX_SET_VBR* Set variable bit-rate (VBR) to on (1) or off (0) (integer)
2457 \layout Description
2458
2459 SPEEX_GET_VBR* Get variable bit-rate (VBR) status (integer)
2460 \layout Description
2461
2462 SPEEX_SET_VBR_QUALITY* Set the encoder VBR speech quality (integer 0 to
2463  10)
2464 \layout Description
2465
2466 SPEEX_GET_VBR_QUALITY* Get the current encoder VBR speech quality (integer
2467  0 to 10)
2468 \layout Description
2469
2470 SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder
2471 \layout Description
2472
2473 SPEEX_GET_COMPLEXITY* Get the CPU resources allowed for the encoder
2474 \layout Description
2475
2476 * applies only to the encoder
2477 \layout Description
2478
2479 ** applies only to the decoder
2480 \layout Description
2481
2482
2483 \begin_inset Formula $\dagger $
2484 \end_inset 
2485
2486  normally only used internally
2487 \layout Section
2488
2489 Formats and standards
2490 \layout Standard
2491
2492 Speex can encode speech in both narrowband and wideband and provides different
2493  bit-rates.
2494  All modes of operation MUST be supported at the decoder and at least one
2495  MUST be supported by the encoder.
2496  The main reason is that not all platforms may be able to handle the complexity
2497  of encoding for all modes.
2498 \layout Subsection
2499
2500 RTP Payload Format
2501 \layout Standard
2502
2503 Since Speex encoded frames already contain mode information, they can be
2504  sent without any other information in an RTP packet.
2505  If more than one frame is transmitted, no byte padding is performed at
2506  the end of frames, except the last one.
2507 \layout Subsection
2508
2509 Ogg file format
2510 \layout Standard
2511
2512 Speex bit-streams can be stored in Ogg files.
2513  In this case, the first packet of the Ogg file contains the Speex header
2514  (see speex_header.h for now) and the second packet contains comments.
2515  The next frames contain one or more (number found in header) Speex frames.
2516  The header format is described in table 
2517 \begin_inset LatexCommand \ref{cap:ogg_speex_header}
2518
2519 \end_inset 
2520
2521 .
2522 \layout Standard
2523
2524
2525 \begin_inset Float table
2526 placement htbp
2527 wide true
2528 collapsed false
2529
2530 \layout Standard
2531
2532
2533 \begin_inset  Tabular
2534 <lyxtabular version="3" rows="16" columns="3">
2535 <features>
2536 <column alignment="center" valignment="top" leftline="true" width="0pt">
2537 <column alignment="center" valignment="top" leftline="true" width="0pt">
2538 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
2539 <row topline="true" bottomline="true">
2540 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2541 \begin_inset Text
2542
2543 \layout Standard
2544
2545 Field
2546 \end_inset 
2547 </cell>
2548 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2549 \begin_inset Text
2550
2551 \layout Standard
2552
2553 Type
2554 \end_inset 
2555 </cell>
2556 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2557 \begin_inset Text
2558
2559 \layout Standard
2560
2561 Size
2562 \end_inset 
2563 </cell>
2564 </row>
2565 <row topline="true">
2566 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2567 \begin_inset Text
2568
2569 \layout Standard
2570
2571 speex_string
2572 \end_inset 
2573 </cell>
2574 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2575 \begin_inset Text
2576
2577 \layout Standard
2578
2579 char[]
2580 \end_inset 
2581 </cell>
2582 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2583 \begin_inset Text
2584
2585 \layout Standard
2586
2587 8
2588 \end_inset 
2589 </cell>
2590 </row>
2591 <row topline="true">
2592 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2593 \begin_inset Text
2594
2595 \layout Standard
2596
2597 speex_version
2598 \end_inset 
2599 </cell>
2600 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2601 \begin_inset Text
2602
2603 \layout Standard
2604
2605 char[]
2606 \end_inset 
2607 </cell>
2608 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2609 \begin_inset Text
2610
2611 \layout Standard
2612
2613 20
2614 \end_inset 
2615 </cell>
2616 </row>
2617 <row topline="true">
2618 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2619 \begin_inset Text
2620
2621 \layout Standard
2622
2623 speex_header_version
2624 \end_inset 
2625 </cell>
2626 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2627 \begin_inset Text
2628
2629 \layout Standard
2630
2631 int
2632 \end_inset 
2633 </cell>
2634 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2635 \begin_inset Text
2636
2637 \layout Standard
2638
2639 4
2640 \end_inset 
2641 </cell>
2642 </row>
2643 <row topline="true">
2644 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2645 \begin_inset Text
2646
2647 \layout Standard
2648
2649 header_size
2650 \end_inset 
2651 </cell>
2652 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2653 \begin_inset Text
2654
2655 \layout Standard
2656
2657 int
2658 \end_inset 
2659 </cell>
2660 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2661 \begin_inset Text
2662
2663 \layout Standard
2664
2665 4
2666 \end_inset 
2667 </cell>
2668 </row>
2669 <row topline="true">
2670 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2671 \begin_inset Text
2672
2673 \layout Standard
2674
2675 rate
2676 \end_inset 
2677 </cell>
2678 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2679 \begin_inset Text
2680
2681 \layout Standard
2682
2683 int
2684 \end_inset 
2685 </cell>
2686 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2687 \begin_inset Text
2688
2689 \layout Standard
2690
2691 4
2692 \end_inset 
2693 </cell>
2694 </row>
2695 <row topline="true">
2696 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2697 \begin_inset Text
2698
2699 \layout Standard
2700
2701 mode
2702 \end_inset 
2703 </cell>
2704 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2705 \begin_inset Text
2706
2707 \layout Standard
2708
2709 int
2710 \end_inset 
2711 </cell>
2712 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2713 \begin_inset Text
2714
2715 \layout Standard
2716
2717 4
2718 \end_inset 
2719 </cell>
2720 </row>
2721 <row topline="true">
2722 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2723 \begin_inset Text
2724
2725 \layout Standard
2726
2727 mode_bitstream_version
2728 \end_inset 
2729 </cell>
2730 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2731 \begin_inset Text
2732
2733 \layout Standard
2734
2735 int
2736 \end_inset 
2737 </cell>
2738 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2739 \begin_inset Text
2740
2741 \layout Standard
2742
2743 4
2744 \end_inset 
2745 </cell>
2746 </row>
2747 <row topline="true">
2748 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2749 \begin_inset Text
2750
2751 \layout Standard
2752
2753 nb_channels
2754 \end_inset 
2755 </cell>
2756 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2757 \begin_inset Text
2758
2759 \layout Standard
2760
2761 int
2762 \end_inset 
2763 </cell>
2764 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2765 \begin_inset Text
2766
2767 \layout Standard
2768
2769 4
2770 \end_inset 
2771 </cell>
2772 </row>
2773 <row topline="true">
2774 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2775 \begin_inset Text
2776
2777 \layout Standard
2778
2779 bitrate
2780 \end_inset 
2781 </cell>
2782 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2783 \begin_inset Text
2784
2785 \layout Standard
2786
2787 int
2788 \end_inset 
2789 </cell>
2790 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2791 \begin_inset Text
2792
2793 \layout Standard
2794
2795 4
2796 \end_inset 
2797 </cell>
2798 </row>
2799 <row topline="true">
2800 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2801 \begin_inset Text
2802
2803 \layout Standard
2804
2805 frame_size
2806 \end_inset 
2807 </cell>
2808 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2809 \begin_inset Text
2810
2811 \layout Standard
2812
2813 int
2814 \end_inset 
2815 </cell>
2816 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2817 \begin_inset Text
2818
2819 \layout Standard
2820
2821 4
2822 \end_inset 
2823 </cell>
2824 </row>
2825 <row topline="true">
2826 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2827 \begin_inset Text
2828
2829 \layout Standard
2830
2831 vbr
2832 \end_inset 
2833 </cell>
2834 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2835 \begin_inset Text
2836
2837 \layout Standard
2838
2839 int
2840 \end_inset 
2841 </cell>
2842 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2843 \begin_inset Text
2844
2845 \layout Standard
2846
2847 4
2848 \end_inset 
2849 </cell>
2850 </row>
2851 <row topline="true">
2852 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2853 \begin_inset Text
2854
2855 \layout Standard
2856
2857 frames_per_packet
2858 \end_inset 
2859 </cell>
2860 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2861 \begin_inset Text
2862
2863 \layout Standard
2864
2865 int
2866 \end_inset 
2867 </cell>
2868 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2869 \begin_inset Text
2870
2871 \layout Standard
2872
2873 4
2874 \end_inset 
2875 </cell>
2876 </row>
2877 <row topline="true">
2878 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2879 \begin_inset Text
2880
2881 \layout Standard
2882
2883 reserved1
2884 \end_inset 
2885 </cell>
2886 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2887 \begin_inset Text
2888
2889 \layout Standard
2890
2891 int
2892 \end_inset 
2893 </cell>
2894 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2895 \begin_inset Text
2896
2897 \layout Standard
2898
2899 4
2900 \end_inset 
2901 </cell>
2902 </row>
2903 <row topline="true">
2904 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2905 \begin_inset Text
2906
2907 \layout Standard
2908
2909 reserved2
2910 \end_inset 
2911 </cell>
2912 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2913 \begin_inset Text
2914
2915 \layout Standard
2916
2917 int
2918 \end_inset 
2919 </cell>
2920 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2921 \begin_inset Text
2922
2923 \layout Standard
2924
2925 4
2926 \end_inset 
2927 </cell>
2928 </row>
2929 <row topline="true" bottomline="true">
2930 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2931 \begin_inset Text
2932
2933 \layout Standard
2934
2935 reserved3
2936 \end_inset 
2937 </cell>
2938 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2939 \begin_inset Text
2940
2941 \layout Standard
2942
2943 int
2944 \end_inset 
2945 </cell>
2946 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2947 \begin_inset Text
2948
2949 \layout Standard
2950
2951 4
2952 \end_inset 
2953 </cell>
2954 </row>
2955 </lyxtabular>
2956
2957 \end_inset 
2958
2959
2960 \layout Caption
2961
2962 Ogg/Speex header packet
2963 \begin_inset LatexCommand \label{cap:ogg_speex_header}
2964
2965 \end_inset 
2966
2967
2968 \end_inset 
2969
2970
2971 \layout LyX-Code
2972
2973 \layout LyX-Code
2974
2975
2976 \begin_inset ERT
2977 status Collapsed
2978
2979 \layout Standard
2980
2981 \backslash 
2982 clearpage
2983 \end_inset 
2984
2985
2986 \layout Section
2987 \start_of_appendix 
2988 GNU Free Documentation License
2989 \layout Standard
2990
2991 Version 1.1, March 2000
2992 \layout Standard
2993
2994 Copyright (C) 2000 Free Software Foundation, Inc.
2995  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted
2996  to copy and distribute verbatim copies of this license document, but changing
2997  it is not allowed.
2998  
2999 \layout Subsection*
3000
3001 0.
3002  PREAMBLE
3003 \layout Standard
3004
3005 The purpose of this License is to make a manual, textbook, or other written
3006  document "free" in the sense of freedom: to assure everyone the effective
3007  freedom to copy and redistribute it, with or without modifying it, either
3008  commercially or noncommercially.
3009  Secondarily, this License preserves for the author and publisher a way
3010  to get credit for their work, while not being considered responsible for
3011  modifications made by others.
3012 \layout Standard
3013
3014 This License is a kind of "copyleft", which means that derivative works
3015  of the document must themselves be free in the same sense.
3016  It complements the GNU General Public License, which is a copyleft license
3017  designed for free software.
3018 \layout Standard
3019
3020 We have designed this License in order to use it for manuals for free software,
3021  because free software needs free documentation: a free program should come
3022  with manuals providing the same freedoms that the software does.
3023  But this License is not limited to software manuals; it can be used for
3024  any textual work, regardless of subject matter or whether it is published
3025  as a printed book.
3026  We recommend this License principally for works whose purpose is instruction
3027  or reference.
3028  
3029 \layout Subsection*
3030
3031 1.
3032  APPLICABILITY AND DEFINITIONS
3033 \layout Standard
3034
3035 This License applies to any manual or other work that contains a notice
3036  placed by the copyright holder saying it can be distributed under the terms
3037  of this License.
3038  The "Document", below, refers to any such manual or work.
3039  Any member of the public is a licensee, and is addressed as "you".
3040 \layout Standard
3041
3042 A "Modified Version" of the Document means any work containing the Document
3043  or a portion of it, either copied verbatim, or with modifications and/or
3044  translated into another language.
3045 \layout Standard
3046
3047 A "Secondary Section" is a named appendix or a front-matter section of the
3048  Document that deals exclusively with the relationship of the publishers
3049  or authors of the Document to the Document's overall subject (or to related
3050  matters) and contains nothing that could fall directly within that overall
3051  subject.
3052  (For example, if the Document is in part a textbook of mathematics, a Secondary
3053  Section may not explain any mathematics.) The relationship could be a matter
3054  of historical connection with the subject or with related matters, or of
3055  legal, commercial, philosophical, ethical or political position regarding
3056  them.
3057 \layout Standard
3058
3059 The "Invariant Sections" are certain Secondary Sections whose titles are
3060  designated, as being those of Invariant Sections, in the notice that says
3061  that the Document is released under this License.
3062 \layout Standard
3063
3064 The "Cover Texts" are certain short passages of text that are listed, as
3065  Front-Cover Texts or Back-Cover Texts, in the notice that says that the
3066  Document is released under this License.
3067 \layout Standard
3068
3069 A "Transparent" copy of the Document means a machine-readable copy, represented
3070  in a format whose specification is available to the general public, whose
3071  contents can be viewed and edited directly and straightforwardly with generic
3072  text editors or (for images composed of pixels) generic paint programs
3073  or (for drawings) some widely available drawing editor, and that is suitable
3074  for input to text formatters or for automatic translation to a variety
3075  of formats suitable for input to text formatters.
3076  A copy made in an otherwise Transparent file format whose markup has been
3077  designed to thwart or discourage subsequent modification by readers is
3078  not Transparent.
3079  A copy that is not "Transparent" is called "Opaque".
3080 \layout Standard
3081
3082 Examples of suitable formats for Transparent copies include plain ASCII
3083  without markup, Texinfo input format, LaTeX input format, SGML or XML using
3084  a publicly available DTD, and standard-conforming simple HTML designed
3085  for human modification.
3086  Opaque formats include PostScript, PDF, proprietary formats that can be
3087  read and edited only by proprietary word processors, SGML or XML for which
3088  the DTD and/or processing tools are not generally available, and the machine-ge
3089 nerated HTML produced by some word processors for output purposes only.
3090 \layout Standard
3091
3092 The "Title Page" means, for a printed book, the title page itself, plus
3093  such following pages as are needed to hold, legibly, the material this
3094  License requires to appear in the title page.
3095  For works in formats which do not have any title page as such, "Title Page"
3096  means the text near the most prominent appearance of the work's title,
3097  preceding the beginning of the body of the text.
3098 \layout Subsection*
3099
3100 2.
3101  VERBATIM COPYING
3102 \layout Standard
3103
3104 You may copy and distribute the Document in any medium, either commercially
3105  or noncommercially, provided that this License, the copyright notices,
3106  and the license notice saying this License applies to the Document are
3107  reproduced in all copies, and that you add no other conditions whatsoever
3108  to those of this License.
3109  You may not use technical measures to obstruct or control the reading or
3110  further copying of the copies you make or distribute.
3111  However, you may accept compensation in exchange for copies.
3112  If you distribute a large enough number of copies you must also follow
3113  the conditions in section 3.
3114 \layout Standard
3115
3116 You may also lend copies, under the same conditions stated above, and you
3117  may publicly display copies.
3118 \layout Subsection*
3119
3120 3.
3121  COPYING IN QUANTITY
3122 \layout Standard
3123
3124 If you publish printed copies of the Document numbering more than 100, and
3125  the Document's license notice requires Cover Texts, you must enclose the
3126  copies in covers that carry, clearly and legibly, all these Cover Texts:
3127  Front-Cover Texts on the front cover, and Back-Cover Texts on the back
3128  cover.
3129  Both covers must also clearly and legibly identify you as the publisher
3130  of these copies.
3131  The front cover must present the full title with all words of the title
3132  equally prominent and visible.
3133  You may add other material on the covers in addition.
3134  Copying with changes limited to the covers, as long as they preserve the
3135  title of the Document and satisfy these conditions, can be treated as verbatim
3136  copying in other respects.
3137 \layout Standard
3138
3139 If the required texts for either cover are too voluminous to fit legibly,
3140  you should put the first ones listed (as many as fit reasonably) on the
3141  actual cover, and continue the rest onto adjacent pages.
3142 \layout Standard
3143
3144 If you publish or distribute Opaque copies of the Document numbering more
3145  than 100, you must either include a machine-readable Transparent copy along
3146  with each Opaque copy, or state in or with each Opaque copy a publicly-accessib
3147 le computer-network location containing a complete Transparent copy of the
3148  Document, free of added material, which the general network-using public
3149  has access to download anonymously at no charge using public-standard network
3150  protocols.
3151  If you use the latter option, you must take reasonably prudent steps, when
3152  you begin distribution of Opaque copies in quantity, to ensure that this
3153  Transparent copy will remain thus accessible at the stated location until
3154  at least one year after the last time you distribute an Opaque copy (directly
3155  or through your agents or retailers) of that edition to the public.
3156 \layout Standard
3157
3158 It is requested, but not required, that you contact the authors of the Document
3159  well before redistributing any large number of copies, to give them a chance
3160  to provide you with an updated version of the Document.
3161  
3162 \layout Subsection*
3163
3164 4.
3165  MODIFICATIONS
3166 \layout Standard
3167
3168 You may copy and distribute a Modified Version of the Document under the
3169  conditions of sections 2 and 3 above, provided that you release the Modified
3170  Version under precisely this License, with the Modified Version filling
3171  the role of the Document, thus licensing distribution and modification
3172  of the Modified Version to whoever possesses a copy of it.
3173  In addition, you must do these things in the Modified Version: 
3174 \layout Itemize
3175
3176 A.
3177  Use in the Title Page (and on the covers, if any) a title distinct from
3178  that of the Document, and from those of previous versions (which should,
3179  if there were any, be listed in the History section of the Document).
3180  You may use the same title as a previous version if the original publisher
3181  of that version gives permission.
3182 \layout Itemize
3183
3184 B.
3185  List on the Title Page, as authors, one or more persons or entities responsible
3186  for authorship of the modifications in the Modified Version, together with
3187  at least five of the principal authors of the Document (all of its principal
3188  authors, if it has less than five).
3189 \layout Itemize
3190
3191 C.
3192  State on the Title page the name of the publisher of the Modified Version,
3193  as the publisher.
3194 \layout Itemize
3195
3196 D.
3197  Preserve all the copyright notices of the Document.
3198 \layout Itemize
3199
3200 E.
3201  Add an appropriate copyright notice for your modifications adjacent to
3202  the other copyright notices.
3203 \layout Itemize
3204
3205 F.
3206  Include, immediately after the copyright notices, a license notice giving
3207  the public permission to use the Modified Version under the terms of this
3208  License, in the form shown in the Addendum below.
3209 \layout Itemize
3210
3211 G.
3212  Preserve in that license notice the full lists of Invariant Sections and
3213  required Cover Texts given in the Document's license notice.
3214 \layout Itemize
3215
3216 H.
3217  Include an unaltered copy of this License.
3218 \layout Itemize
3219
3220 I.
3221  Preserve the section entitled "History", and its title, and add to it an
3222  item stating at least the title, year, new authors, and publisher of the
3223  Modified Version as given on the Title Page.
3224  If there is no section entitled "History" in the Document, create one stating
3225  the title, year, authors, and publisher of the Document as given on its
3226  Title Page, then add an item describing the Modified Version as stated
3227  in the previous sentence.
3228 \layout Itemize
3229
3230 J.
3231  Preserve the network location, if any, given in the Document for public
3232  access to a Transparent copy of the Document, and likewise the network
3233  locations given in the Document for previous versions it was based on.
3234  These may be placed in the "History" section.
3235  You may omit a network location for a work that was published at least
3236  four years before the Document itself, or if the original publisher of
3237  the version it refers to gives permission.
3238 \layout Itemize
3239
3240 K.
3241  In any section entitled "Acknowledgements" or "Dedications", preserve the
3242  section's title, and preserve in the section all the substance and tone
3243  of each of the contributor acknowledgements and/or dedications given therein.
3244 \layout Itemize
3245
3246 L.
3247  Preserve all the Invariant Sections of the Document, unaltered in their
3248  text and in their titles.
3249  Section numbers or the equivalent are not considered part of the section
3250  titles.
3251 \layout Itemize
3252
3253 M.
3254  Delete any section entitled "Endorsements".
3255  Such a section may not be included in the Modified Version.
3256 \layout Itemize
3257
3258 N.
3259  Do not retitle any existing section as "Endorsements" or to conflict in
3260  title with any Invariant Section.
3261  
3262 \layout Standard
3263
3264 If the Modified Version includes new front-matter sections or appendices
3265  that qualify as Secondary Sections and contain no material copied from
3266  the Document, you may at your option designate some or all of these sections
3267  as invariant.
3268  To do this, add their titles to the list of Invariant Sections in the Modified
3269  Version's license notice.
3270  These titles must be distinct from any other section titles.
3271 \layout Standard
3272
3273 You may add a section entitled "Endorsements", provided it contains nothing
3274  but endorsements of your Modified Version by various parties--for example,
3275  statements of peer review or that the text has been approved by an organization
3276  as the authoritative definition of a standard.
3277 \layout Standard
3278
3279 You may add a passage of up to five words as a Front-Cover Text, and a passage
3280  of up to 25 words as a Back-Cover Text, to the end of the list of Cover
3281  Texts in the Modified Version.
3282  Only one passage of Front-Cover Text and one of Back-Cover Text may be
3283  added by (or through arrangements made by) any one entity.
3284  If the Document already includes a cover text for the same cover, previously
3285  added by you or by arrangement made by the same entity you are acting on
3286  behalf of, you may not add another; but you may replace the old one, on
3287  explicit permission from the previous publisher that added the old one.
3288 \layout Standard
3289
3290 The author(s) and publisher(s) of the Document do not by this License give
3291  permission to use their names for publicity for or to assert or imply endorseme
3292 nt of any Modified Version.
3293  
3294 \layout Subsection*
3295
3296 5.
3297  COMBINING DOCUMENTS
3298 \layout Standard
3299
3300 You may combine the Document with other documents released under this License,
3301  under the terms defined in section 4 above for modified versions, provided
3302  that you include in the combination all of the Invariant Sections of all
3303  of the original documents, unmodified, and list them all as Invariant Sections
3304  of your combined work in its license notice.
3305 \layout Standard
3306
3307 The combined work need only contain one copy of this License, and multiple
3308  identical Invariant Sections may be replaced with a single copy.
3309  If there are multiple Invariant Sections with the same name but different
3310  contents, make the title of each such section unique by adding at the end
3311  of it, in parentheses, the name of the original author or publisher of
3312  that section if known, or else a unique number.
3313  Make the same adjustment to the section titles in the list of Invariant
3314  Sections in the license notice of the combined work.
3315 \layout Standard
3316
3317 In the combination, you must combine any sections entitled "History" in
3318  the various original documents, forming one section entitled "History";
3319  likewise combine any sections entitled "Acknowledgements", and any sections
3320  entitled "Dedications".
3321  You must delete all sections entitled "Endorsements."
3322 \layout Subsection*
3323
3324 6.
3325  COLLECTIONS OF DOCUMENTS
3326 \layout Standard
3327
3328 You may make a collection consisting of the Document and other documents
3329  released under this License, and replace the individual copies of this
3330  License in the various documents with a single copy that is included in
3331  the collection, provided that you follow the rules of this License for
3332  verbatim copying of each of the documents in all other respects.
3333 \layout Standard
3334
3335 You may extract a single document from such a collection, and distribute
3336  it individually under this License, provided you insert a copy of this
3337  License into the extracted document, and follow this License in all other
3338  respects regarding verbatim copying of that document.
3339  
3340 \layout Subsection*
3341
3342 7.
3343  AGGREGATION WITH INDEPENDENT WORKS
3344 \layout Standard
3345
3346 A compilation of the Document or its derivatives with other separate and
3347  independent documents or works, in or on a volume of a storage or distribution
3348  medium, does not as a whole count as a Modified Version of the Document,
3349  provided no compilation copyright is claimed for the compilation.
3350  Such a compilation is called an "aggregate", and this License does not
3351  apply to the other self-contained works thus compiled with the Document,
3352  on account of their being thus compiled, if they are not themselves derivative
3353  works of the Document.
3354 \layout Standard
3355
3356 If the Cover Text requirement of section 3 is applicable to these copies
3357  of the Document, then if the Document is less than one quarter of the entire
3358  aggregate, the Document's Cover Texts may be placed on covers that surround
3359  only the Document within the aggregate.
3360  Otherwise they must appear on covers around the whole aggregate.
3361 \layout Subsection*
3362
3363 8.
3364  TRANSLATION
3365 \layout Standard
3366
3367 Translation is considered a kind of modification, so you may distribute
3368  translations of the Document under the terms of section 4.
3369  Replacing Invariant Sections with translations requires special permission
3370  from their copyright holders, but you may include translations of some
3371  or all Invariant Sections in addition to the original versions of these
3372  Invariant Sections.
3373  You may include a translation of this License provided that you also include
3374  the original English version of this License.
3375  In case of a disagreement between the translation and the original English
3376  version of this License, the original English version will prevail.
3377 \layout Subsection*
3378
3379 9.
3380  TERMINATION
3381 \layout Standard
3382
3383 You may not copy, modify, sublicense, or distribute the Document except
3384  as expressly provided for under this License.
3385  Any other attempt to copy, modify, sublicense or distribute the Document
3386  is void, and will automatically terminate your rights under this License.
3387  However, parties who have received copies, or rights, from you under this
3388  License will not have their licenses terminated so long as such parties
3389  remain in full compliance.
3390  
3391 \layout Subsection*
3392
3393 10.
3394  FUTURE REVISIONS OF THIS LICENSE
3395 \layout Standard
3396
3397 The Free Software Foundation may publish new, revised versions of the GNU
3398  Free Documentation License from time to time.
3399  Such new versions will be similar in spirit to the present version, but
3400  may differ in detail to address new problems or concerns.
3401  See http://www.gnu.org/copyleft/.
3402 \layout Standard
3403
3404 Each version of the License is given a distinguishing version number.
3405  If the Document specifies that a particular numbered version of this License
3406  "or any later version" applies to it, you have the option of following
3407  the terms and conditions either of that specified version or of any later
3408  version that has been published (not as a draft) by the Free Software Foundatio
3409 n.
3410  If the Document does not specify a version number of this License, you
3411  may choose any version ever published (not as a draft) by the Free Software
3412  Foundation.
3413 \the_end