f47754b17245214b15828e959a02ce82a12deb49
[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 Programming with Speex (the libspeex API)
2124 \layout Subsection
2125
2126 Encoding
2127 \layout Standard
2128
2129 In order to encode speech using Speex, you first need to:
2130 \layout LyX-Code
2131
2132 #include <speex.h>
2133 \layout Standard
2134
2135 You then need to declare a Speex bit-packing struct
2136 \layout LyX-Code
2137
2138 SpeexBits bits;
2139 \layout Standard
2140
2141 and a Speex encoder state
2142 \layout LyX-Code
2143
2144 void *enc_state;
2145 \layout Standard
2146
2147 The two are initialized by:
2148 \layout LyX-Code
2149
2150 speex_bits_init(&bits);
2151 \layout LyX-Code
2152
2153 enc_state = speex_encoder_init(&speex_nb_mode);
2154 \layout Standard
2155
2156 For wideband coding, 
2157 \emph on 
2158 speex_nb_mode
2159 \emph default 
2160  will be replaced by 
2161 \emph on 
2162 speex_wb_mode
2163 \emph default 
2164 .
2165  In most cases, you will need to know the frame size used by the mode you
2166  are using.
2167  You can get that value in the 
2168 \emph on 
2169 frame_size
2170 \emph default 
2171  variable with:
2172 \layout LyX-Code
2173
2174 speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
2175 \layout Standard
2176
2177 Once the initialization is done, for every input frame:
2178 \layout LyX-Code
2179
2180 speex_bits_reset(&bits);
2181 \layout LyX-Code
2182
2183 speex_encode(enc_state, input_frame, &bits);
2184 \layout LyX-Code
2185
2186 nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);
2187 \layout Standard
2188
2189 where 
2190 \emph on 
2191 input_frame
2192 \emph default 
2193  is a 
2194 \emph on 
2195 (float *)
2196 \emph default 
2197  pointing to the beginning of a speech frame, 
2198 \emph on 
2199 byte_ptr
2200 \emph default 
2201  is a 
2202 \emph on 
2203 (char *)
2204 \emph default 
2205  where the encoded frame will be written, 
2206 \emph on 
2207 MAX_NB_BYTES
2208 \emph default 
2209  is the maximum number of bytes that can be written to 
2210 \emph on 
2211 byte_ptr
2212 \emph default 
2213  without causing an overflow and 
2214 \emph on 
2215 nbBytes
2216 \emph default 
2217  is the number of bytes actually written to 
2218 \emph on 
2219 byte_ptr
2220 \emph default 
2221  (the encoded size in bytes).
2222  Before calling speex_bits_write, it is possible to find the number of bytes
2223  that need to be written by calling 
2224 \family typewriter 
2225 speex_bits_nbytes(&bits)
2226 \family default 
2227 , which returns a number of bytes.
2228  
2229 \layout Standard
2230
2231 After you're done with the encoding, free all resources with:
2232 \layout LyX-Code
2233
2234 speex_bits_destroy(&bits);
2235 \layout LyX-Code
2236
2237 speex_encoder_destroy(&enc_state);
2238 \layout Standard
2239
2240 That's about it for the encoder.
2241  
2242 \layout Subsection
2243
2244 Decoding
2245 \layout Standard
2246
2247 In order to encode speech using Speex, you first need to:
2248 \layout LyX-Code
2249
2250 #include <speex.h>
2251 \layout Standard
2252
2253 You then need to declare a Speex bit-packing struct
2254 \layout LyX-Code
2255
2256 SpeexBits bits;
2257 \layout Standard
2258
2259 and a Speex encoder state
2260 \layout LyX-Code
2261
2262 void *dec_state;
2263 \layout Standard
2264
2265 The two are initialized by:
2266 \layout LyX-Code
2267
2268 speex_bits_init(&bits);
2269 \layout LyX-Code
2270
2271 dec_state = speex_decoder_init(&speex_nb_mode);
2272 \layout Standard
2273
2274 For wideband decoding, 
2275 \emph on 
2276 speex_nb_mode
2277 \emph default 
2278  will be replaced by 
2279 \emph on 
2280 speex_wb_mode
2281 \emph default 
2282 .
2283  You can get that value in the 
2284 \emph on 
2285 frame_size
2286 \emph default 
2287  variable with:
2288 \layout LyX-Code
2289
2290 speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size); 
2291 \layout Standard
2292
2293 There is also a parameter that can be set for the decoder: whether or not
2294  to use a perceptual post-filter.
2295  This can be set by: 
2296 \layout LyX-Code
2297
2298 speex_decoder_ctl(dec_state, SPEEX_SET_PF, &pf); 
2299 \layout Standard
2300
2301 where pf is an int that with value 0 to have the post-filter disabled and
2302  1 to have it enabled.
2303 \layout Standard
2304
2305 Again, once the decoder initialization is done, for every input frame:
2306 \layout LyX-Code
2307
2308 speex_bits_read_from(&bits, input_bytes, nbBytes);
2309 \layout LyX-Code
2310
2311 speex_decode(st, &bits, output_frame, 0);
2312 \layout Standard
2313
2314 where input_bytes is a 
2315 \emph on 
2316 (char *)
2317 \emph default 
2318  containing the bit-stream data received for a frame, 
2319 \emph on 
2320 nbBytes
2321 \emph default 
2322  is the size (in bytes) of that bit-stream, and 
2323 \emph on 
2324 output_frame
2325 \emph default 
2326  is a 
2327 \emph on 
2328 (float *)
2329 \emph default 
2330  and points to the area where the decoded speech frame will be written.
2331  The last argument indicates whether the frame we'd like to decode was lost.
2332  A value of 0 indicates the normal case where bits points to the bit of
2333  the current frame.
2334  A value of 1 indicates that we don't have the bits for the current frame,
2335  in which case the bits argument should be the same as the bits for the
2336  last correctly received frame.
2337  When a frame is lost, the Speex decoder will do its best to "guess" the
2338  correct signal.
2339 \layout Subsection
2340
2341 Codec Options (speex_*_ctl)
2342 \layout Standard
2343
2344 The Speex encoder and decoder support many options and requests that can
2345  be accessed through the 
2346 \emph on 
2347 speex_encoder_ctl
2348 \emph default 
2349  and 
2350 \emph on 
2351 speex_decoder_ctl
2352 \emph default 
2353  functions.
2354  These functions are similar the the 
2355 \emph on 
2356 ioctl
2357 \emph default 
2358  system call and their prototypes are:
2359 \layout LyX-Code
2360
2361 void speex_encoder_ctl(void *encoder, int request, void *ptr);
2362 \layout LyX-Code
2363
2364 void speex_decoder_ctl(void *encoder, int request, void *ptr);
2365 \layout Standard
2366
2367 The different values of request allowed are (note that some only apply to
2368  the encoder or the decoder):
2369 \layout Description
2370
2371 SPEEX_SET_PF** Set post-filter to on (1) or off (0) (integer)
2372 \layout Description
2373
2374 SPEEX_GET_PF** Get post-filter status (integer)
2375 \layout Description
2376
2377 SPEEX_GET_FRAME_SIZE Get the frame size used for the current mode (integer)
2378 \layout Description
2379
2380 SPEEX_SET_QUALITY* Set the encoder speech quality (integer 0 to 10)
2381 \layout Description
2382
2383 SPEEX_GET_QUALITY* Get the current encoder speech quality (integer 0 to
2384  10)
2385 \layout Description
2386
2387 SPEEX_SET_MODE*
2388 \begin_inset Formula $\dagger $
2389 \end_inset 
2390
2391
2392 \layout Description
2393
2394 SPEEX_GET_MODE*
2395 \begin_inset Formula $\dagger $
2396 \end_inset 
2397
2398
2399 \layout Description
2400
2401 SPEEX_SET_LOW_MODE*
2402 \begin_inset Formula $\dagger $
2403 \end_inset 
2404
2405
2406 \layout Description
2407
2408 SPEEX_GET_LOW_MODE*
2409 \begin_inset Formula $\dagger $
2410 \end_inset 
2411
2412
2413 \layout Description
2414
2415 SPEEX_SET_HIGH_MODE*
2416 \begin_inset Formula $\dagger $
2417 \end_inset 
2418
2419
2420 \layout Description
2421
2422 SPEEX_GET_HIGH_MODE*
2423 \begin_inset Formula $\dagger $
2424 \end_inset 
2425
2426
2427 \layout Description
2428
2429 SPEEX_SET_VBR* Set variable bit-rate (VBR) to on (1) or off (0) (integer)
2430 \layout Description
2431
2432 SPEEX_GET_VBR* Get variable bit-rate (VBR) status (integer)
2433 \layout Description
2434
2435 SPEEX_SET_VBR_QUALITY* Set the encoder VBR speech quality (integer 0 to
2436  10)
2437 \layout Description
2438
2439 SPEEX_GET_VBR_QUALITY* Get the current encoder VBR speech quality (integer
2440  0 to 10)
2441 \layout Description
2442
2443 SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder
2444 \layout Description
2445
2446 SPEEX_GET_COMPLEXITY*
2447 \layout Description
2448
2449 * applies only to the encoder
2450 \layout Description
2451
2452 ** applies only to the decoder
2453 \layout Description
2454
2455
2456 \begin_inset Formula $\dagger $
2457 \end_inset 
2458
2459  normally only used internally
2460 \layout Section
2461
2462 Formats and standards
2463 \layout Standard
2464
2465 Speex can encode speech in both narrowband and wideband and provides different
2466  bit-rates.
2467  All modes of operation MUST be supported at the decoder and at least one
2468  MUST be supported by the encoder.
2469  The main reason is that not all platforms may be able to handle the complexity
2470  of encoding for all modes.
2471 \layout Subsection
2472
2473 RTP Payload Format
2474 \layout Standard
2475
2476 Since Speex encoded frames already contain mode information, they can be
2477  sent without any other information in an RTP packet.
2478  If more than one frame is transmitted, no byte padding is performed at
2479  the end of frames, except the last one.
2480 \layout Subsection
2481
2482 Ogg file format
2483 \layout Standard
2484
2485 Speex bit-streams can be stored in Ogg files.
2486  In this case, the first packet of the Ogg file contains the Speex header
2487  (see speex_header.h for now) and the second packet contains comments.
2488  The next frames contain one or more (number found in header) Speex frames.
2489  The header format is described in table 
2490 \begin_inset LatexCommand \ref{cap:ogg_speex_header}
2491
2492 \end_inset 
2493
2494 .
2495 \layout Standard
2496
2497
2498 \begin_inset Float table
2499 placement htbp
2500 wide true
2501 collapsed false
2502
2503 \layout Standard
2504
2505
2506 \begin_inset  Tabular
2507 <lyxtabular version="3" rows="16" columns="3">
2508 <features>
2509 <column alignment="center" valignment="top" leftline="true" width="0pt">
2510 <column alignment="center" valignment="top" leftline="true" width="0pt">
2511 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
2512 <row topline="true" bottomline="true">
2513 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2514 \begin_inset Text
2515
2516 \layout Standard
2517
2518 Field
2519 \end_inset 
2520 </cell>
2521 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2522 \begin_inset Text
2523
2524 \layout Standard
2525
2526 Type
2527 \end_inset 
2528 </cell>
2529 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2530 \begin_inset Text
2531
2532 \layout Standard
2533
2534 Size
2535 \end_inset 
2536 </cell>
2537 </row>
2538 <row topline="true">
2539 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2540 \begin_inset Text
2541
2542 \layout Standard
2543
2544 speex_string
2545 \end_inset 
2546 </cell>
2547 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2548 \begin_inset Text
2549
2550 \layout Standard
2551
2552 char[]
2553 \end_inset 
2554 </cell>
2555 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2556 \begin_inset Text
2557
2558 \layout Standard
2559
2560 8
2561 \end_inset 
2562 </cell>
2563 </row>
2564 <row topline="true">
2565 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2566 \begin_inset Text
2567
2568 \layout Standard
2569
2570 speex_version
2571 \end_inset 
2572 </cell>
2573 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2574 \begin_inset Text
2575
2576 \layout Standard
2577
2578 char[]
2579 \end_inset 
2580 </cell>
2581 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2582 \begin_inset Text
2583
2584 \layout Standard
2585
2586 20
2587 \end_inset 
2588 </cell>
2589 </row>
2590 <row topline="true">
2591 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2592 \begin_inset Text
2593
2594 \layout Standard
2595
2596 speex_header_version
2597 \end_inset 
2598 </cell>
2599 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2600 \begin_inset Text
2601
2602 \layout Standard
2603
2604 int
2605 \end_inset 
2606 </cell>
2607 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2608 \begin_inset Text
2609
2610 \layout Standard
2611
2612 4
2613 \end_inset 
2614 </cell>
2615 </row>
2616 <row topline="true">
2617 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2618 \begin_inset Text
2619
2620 \layout Standard
2621
2622 header_size
2623 \end_inset 
2624 </cell>
2625 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2626 \begin_inset Text
2627
2628 \layout Standard
2629
2630 int
2631 \end_inset 
2632 </cell>
2633 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2634 \begin_inset Text
2635
2636 \layout Standard
2637
2638 4
2639 \end_inset 
2640 </cell>
2641 </row>
2642 <row topline="true">
2643 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2644 \begin_inset Text
2645
2646 \layout Standard
2647
2648 rate
2649 \end_inset 
2650 </cell>
2651 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2652 \begin_inset Text
2653
2654 \layout Standard
2655
2656 int
2657 \end_inset 
2658 </cell>
2659 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2660 \begin_inset Text
2661
2662 \layout Standard
2663
2664 4
2665 \end_inset 
2666 </cell>
2667 </row>
2668 <row topline="true">
2669 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2670 \begin_inset Text
2671
2672 \layout Standard
2673
2674 mode
2675 \end_inset 
2676 </cell>
2677 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2678 \begin_inset Text
2679
2680 \layout Standard
2681
2682 int
2683 \end_inset 
2684 </cell>
2685 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2686 \begin_inset Text
2687
2688 \layout Standard
2689
2690 4
2691 \end_inset 
2692 </cell>
2693 </row>
2694 <row topline="true">
2695 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2696 \begin_inset Text
2697
2698 \layout Standard
2699
2700 mode_bitstream_version
2701 \end_inset 
2702 </cell>
2703 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2704 \begin_inset Text
2705
2706 \layout Standard
2707
2708 int
2709 \end_inset 
2710 </cell>
2711 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2712 \begin_inset Text
2713
2714 \layout Standard
2715
2716 4
2717 \end_inset 
2718 </cell>
2719 </row>
2720 <row topline="true">
2721 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2722 \begin_inset Text
2723
2724 \layout Standard
2725
2726 nb_channels
2727 \end_inset 
2728 </cell>
2729 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2730 \begin_inset Text
2731
2732 \layout Standard
2733
2734 int
2735 \end_inset 
2736 </cell>
2737 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2738 \begin_inset Text
2739
2740 \layout Standard
2741
2742 4
2743 \end_inset 
2744 </cell>
2745 </row>
2746 <row topline="true">
2747 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2748 \begin_inset Text
2749
2750 \layout Standard
2751
2752 bitrate
2753 \end_inset 
2754 </cell>
2755 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2756 \begin_inset Text
2757
2758 \layout Standard
2759
2760 int
2761 \end_inset 
2762 </cell>
2763 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2764 \begin_inset Text
2765
2766 \layout Standard
2767
2768 4
2769 \end_inset 
2770 </cell>
2771 </row>
2772 <row topline="true">
2773 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2774 \begin_inset Text
2775
2776 \layout Standard
2777
2778 frame_size
2779 \end_inset 
2780 </cell>
2781 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2782 \begin_inset Text
2783
2784 \layout Standard
2785
2786 int
2787 \end_inset 
2788 </cell>
2789 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2790 \begin_inset Text
2791
2792 \layout Standard
2793
2794 4
2795 \end_inset 
2796 </cell>
2797 </row>
2798 <row topline="true">
2799 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2800 \begin_inset Text
2801
2802 \layout Standard
2803
2804 vbr
2805 \end_inset 
2806 </cell>
2807 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2808 \begin_inset Text
2809
2810 \layout Standard
2811
2812 int
2813 \end_inset 
2814 </cell>
2815 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2816 \begin_inset Text
2817
2818 \layout Standard
2819
2820 4
2821 \end_inset 
2822 </cell>
2823 </row>
2824 <row topline="true">
2825 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2826 \begin_inset Text
2827
2828 \layout Standard
2829
2830 frames_per_packet
2831 \end_inset 
2832 </cell>
2833 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2834 \begin_inset Text
2835
2836 \layout Standard
2837
2838 int
2839 \end_inset 
2840 </cell>
2841 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2842 \begin_inset Text
2843
2844 \layout Standard
2845
2846 4
2847 \end_inset 
2848 </cell>
2849 </row>
2850 <row topline="true">
2851 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2852 \begin_inset Text
2853
2854 \layout Standard
2855
2856 reserved1
2857 \end_inset 
2858 </cell>
2859 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2860 \begin_inset Text
2861
2862 \layout Standard
2863
2864 int
2865 \end_inset 
2866 </cell>
2867 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2868 \begin_inset Text
2869
2870 \layout Standard
2871
2872 4
2873 \end_inset 
2874 </cell>
2875 </row>
2876 <row topline="true">
2877 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2878 \begin_inset Text
2879
2880 \layout Standard
2881
2882 reserved2
2883 \end_inset 
2884 </cell>
2885 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2886 \begin_inset Text
2887
2888 \layout Standard
2889
2890 int
2891 \end_inset 
2892 </cell>
2893 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2894 \begin_inset Text
2895
2896 \layout Standard
2897
2898 4
2899 \end_inset 
2900 </cell>
2901 </row>
2902 <row topline="true" bottomline="true">
2903 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2904 \begin_inset Text
2905
2906 \layout Standard
2907
2908 reserved3
2909 \end_inset 
2910 </cell>
2911 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2912 \begin_inset Text
2913
2914 \layout Standard
2915
2916 int
2917 \end_inset 
2918 </cell>
2919 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2920 \begin_inset Text
2921
2922 \layout Standard
2923
2924 4
2925 \end_inset 
2926 </cell>
2927 </row>
2928 </lyxtabular>
2929
2930 \end_inset 
2931
2932
2933 \layout Caption
2934
2935 Ogg/Speex header packet
2936 \begin_inset LatexCommand \label{cap:ogg_speex_header}
2937
2938 \end_inset 
2939
2940
2941 \end_inset 
2942
2943
2944 \layout LyX-Code
2945
2946 \layout LyX-Code
2947
2948
2949 \begin_inset ERT
2950 status Collapsed
2951
2952 \layout Standard
2953
2954 \backslash 
2955 clearpage
2956 \end_inset 
2957
2958
2959 \layout Section
2960 \start_of_appendix 
2961 GNU Free Documentation License
2962 \layout Standard
2963
2964 Version 1.1, March 2000
2965 \layout Standard
2966
2967 Copyright (C) 2000 Free Software Foundation, Inc.
2968  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted
2969  to copy and distribute verbatim copies of this license document, but changing
2970  it is not allowed.
2971  
2972 \layout Subsection*
2973
2974 0.
2975  PREAMBLE
2976 \layout Standard
2977
2978 The purpose of this License is to make a manual, textbook, or other written
2979  document "free" in the sense of freedom: to assure everyone the effective
2980  freedom to copy and redistribute it, with or without modifying it, either
2981  commercially or noncommercially.
2982  Secondarily, this License preserves for the author and publisher a way
2983  to get credit for their work, while not being considered responsible for
2984  modifications made by others.
2985 \layout Standard
2986
2987 This License is a kind of "copyleft", which means that derivative works
2988  of the document must themselves be free in the same sense.
2989  It complements the GNU General Public License, which is a copyleft license
2990  designed for free software.
2991 \layout Standard
2992
2993 We have designed this License in order to use it for manuals for free software,
2994  because free software needs free documentation: a free program should come
2995  with manuals providing the same freedoms that the software does.
2996  But this License is not limited to software manuals; it can be used for
2997  any textual work, regardless of subject matter or whether it is published
2998  as a printed book.
2999  We recommend this License principally for works whose purpose is instruction
3000  or reference.
3001  
3002 \layout Subsection*
3003
3004 1.
3005  APPLICABILITY AND DEFINITIONS
3006 \layout Standard
3007
3008 This License applies to any manual or other work that contains a notice
3009  placed by the copyright holder saying it can be distributed under the terms
3010  of this License.
3011  The "Document", below, refers to any such manual or work.
3012  Any member of the public is a licensee, and is addressed as "you".
3013 \layout Standard
3014
3015 A "Modified Version" of the Document means any work containing the Document
3016  or a portion of it, either copied verbatim, or with modifications and/or
3017  translated into another language.
3018 \layout Standard
3019
3020 A "Secondary Section" is a named appendix or a front-matter section of the
3021  Document that deals exclusively with the relationship of the publishers
3022  or authors of the Document to the Document's overall subject (or to related
3023  matters) and contains nothing that could fall directly within that overall
3024  subject.
3025  (For example, if the Document is in part a textbook of mathematics, a Secondary
3026  Section may not explain any mathematics.) The relationship could be a matter
3027  of historical connection with the subject or with related matters, or of
3028  legal, commercial, philosophical, ethical or political position regarding
3029  them.
3030 \layout Standard
3031
3032 The "Invariant Sections" are certain Secondary Sections whose titles are
3033  designated, as being those of Invariant Sections, in the notice that says
3034  that the Document is released under this License.
3035 \layout Standard
3036
3037 The "Cover Texts" are certain short passages of text that are listed, as
3038  Front-Cover Texts or Back-Cover Texts, in the notice that says that the
3039  Document is released under this License.
3040 \layout Standard
3041
3042 A "Transparent" copy of the Document means a machine-readable copy, represented
3043  in a format whose specification is available to the general public, whose
3044  contents can be viewed and edited directly and straightforwardly with generic
3045  text editors or (for images composed of pixels) generic paint programs
3046  or (for drawings) some widely available drawing editor, and that is suitable
3047  for input to text formatters or for automatic translation to a variety
3048  of formats suitable for input to text formatters.
3049  A copy made in an otherwise Transparent file format whose markup has been
3050  designed to thwart or discourage subsequent modification by readers is
3051  not Transparent.
3052  A copy that is not "Transparent" is called "Opaque".
3053 \layout Standard
3054
3055 Examples of suitable formats for Transparent copies include plain ASCII
3056  without markup, Texinfo input format, LaTeX input format, SGML or XML using
3057  a publicly available DTD, and standard-conforming simple HTML designed
3058  for human modification.
3059  Opaque formats include PostScript, PDF, proprietary formats that can be
3060  read and edited only by proprietary word processors, SGML or XML for which
3061  the DTD and/or processing tools are not generally available, and the machine-ge
3062 nerated HTML produced by some word processors for output purposes only.
3063 \layout Standard
3064
3065 The "Title Page" means, for a printed book, the title page itself, plus
3066  such following pages as are needed to hold, legibly, the material this
3067  License requires to appear in the title page.
3068  For works in formats which do not have any title page as such, "Title Page"
3069  means the text near the most prominent appearance of the work's title,
3070  preceding the beginning of the body of the text.
3071 \layout Subsection*
3072
3073 2.
3074  VERBATIM COPYING
3075 \layout Standard
3076
3077 You may copy and distribute the Document in any medium, either commercially
3078  or noncommercially, provided that this License, the copyright notices,
3079  and the license notice saying this License applies to the Document are
3080  reproduced in all copies, and that you add no other conditions whatsoever
3081  to those of this License.
3082  You may not use technical measures to obstruct or control the reading or
3083  further copying of the copies you make or distribute.
3084  However, you may accept compensation in exchange for copies.
3085  If you distribute a large enough number of copies you must also follow
3086  the conditions in section 3.
3087 \layout Standard
3088
3089 You may also lend copies, under the same conditions stated above, and you
3090  may publicly display copies.
3091 \layout Subsection*
3092
3093 3.
3094  COPYING IN QUANTITY
3095 \layout Standard
3096
3097 If you publish printed copies of the Document numbering more than 100, and
3098  the Document's license notice requires Cover Texts, you must enclose the
3099  copies in covers that carry, clearly and legibly, all these Cover Texts:
3100  Front-Cover Texts on the front cover, and Back-Cover Texts on the back
3101  cover.
3102  Both covers must also clearly and legibly identify you as the publisher
3103  of these copies.
3104  The front cover must present the full title with all words of the title
3105  equally prominent and visible.
3106  You may add other material on the covers in addition.
3107  Copying with changes limited to the covers, as long as they preserve the
3108  title of the Document and satisfy these conditions, can be treated as verbatim
3109  copying in other respects.
3110 \layout Standard
3111
3112 If the required texts for either cover are too voluminous to fit legibly,
3113  you should put the first ones listed (as many as fit reasonably) on the
3114  actual cover, and continue the rest onto adjacent pages.
3115 \layout Standard
3116
3117 If you publish or distribute Opaque copies of the Document numbering more
3118  than 100, you must either include a machine-readable Transparent copy along
3119  with each Opaque copy, or state in or with each Opaque copy a publicly-accessib
3120 le computer-network location containing a complete Transparent copy of the
3121  Document, free of added material, which the general network-using public
3122  has access to download anonymously at no charge using public-standard network
3123  protocols.
3124  If you use the latter option, you must take reasonably prudent steps, when
3125  you begin distribution of Opaque copies in quantity, to ensure that this
3126  Transparent copy will remain thus accessible at the stated location until
3127  at least one year after the last time you distribute an Opaque copy (directly
3128  or through your agents or retailers) of that edition to the public.
3129 \layout Standard
3130
3131 It is requested, but not required, that you contact the authors of the Document
3132  well before redistributing any large number of copies, to give them a chance
3133  to provide you with an updated version of the Document.
3134  
3135 \layout Subsection*
3136
3137 4.
3138  MODIFICATIONS
3139 \layout Standard
3140
3141 You may copy and distribute a Modified Version of the Document under the
3142  conditions of sections 2 and 3 above, provided that you release the Modified
3143  Version under precisely this License, with the Modified Version filling
3144  the role of the Document, thus licensing distribution and modification
3145  of the Modified Version to whoever possesses a copy of it.
3146  In addition, you must do these things in the Modified Version: 
3147 \layout Itemize
3148
3149 A.
3150  Use in the Title Page (and on the covers, if any) a title distinct from
3151  that of the Document, and from those of previous versions (which should,
3152  if there were any, be listed in the History section of the Document).
3153  You may use the same title as a previous version if the original publisher
3154  of that version gives permission.
3155 \layout Itemize
3156
3157 B.
3158  List on the Title Page, as authors, one or more persons or entities responsible
3159  for authorship of the modifications in the Modified Version, together with
3160  at least five of the principal authors of the Document (all of its principal
3161  authors, if it has less than five).
3162 \layout Itemize
3163
3164 C.
3165  State on the Title page the name of the publisher of the Modified Version,
3166  as the publisher.
3167 \layout Itemize
3168
3169 D.
3170  Preserve all the copyright notices of the Document.
3171 \layout Itemize
3172
3173 E.
3174  Add an appropriate copyright notice for your modifications adjacent to
3175  the other copyright notices.
3176 \layout Itemize
3177
3178 F.
3179  Include, immediately after the copyright notices, a license notice giving
3180  the public permission to use the Modified Version under the terms of this
3181  License, in the form shown in the Addendum below.
3182 \layout Itemize
3183
3184 G.
3185  Preserve in that license notice the full lists of Invariant Sections and
3186  required Cover Texts given in the Document's license notice.
3187 \layout Itemize
3188
3189 H.
3190  Include an unaltered copy of this License.
3191 \layout Itemize
3192
3193 I.
3194  Preserve the section entitled "History", and its title, and add to it an
3195  item stating at least the title, year, new authors, and publisher of the
3196  Modified Version as given on the Title Page.
3197  If there is no section entitled "History" in the Document, create one stating
3198  the title, year, authors, and publisher of the Document as given on its
3199  Title Page, then add an item describing the Modified Version as stated
3200  in the previous sentence.
3201 \layout Itemize
3202
3203 J.
3204  Preserve the network location, if any, given in the Document for public
3205  access to a Transparent copy of the Document, and likewise the network
3206  locations given in the Document for previous versions it was based on.
3207  These may be placed in the "History" section.
3208  You may omit a network location for a work that was published at least
3209  four years before the Document itself, or if the original publisher of
3210  the version it refers to gives permission.
3211 \layout Itemize
3212
3213 K.
3214  In any section entitled "Acknowledgements" or "Dedications", preserve the
3215  section's title, and preserve in the section all the substance and tone
3216  of each of the contributor acknowledgements and/or dedications given therein.
3217 \layout Itemize
3218
3219 L.
3220  Preserve all the Invariant Sections of the Document, unaltered in their
3221  text and in their titles.
3222  Section numbers or the equivalent are not considered part of the section
3223  titles.
3224 \layout Itemize
3225
3226 M.
3227  Delete any section entitled "Endorsements".
3228  Such a section may not be included in the Modified Version.
3229 \layout Itemize
3230
3231 N.
3232  Do not retitle any existing section as "Endorsements" or to conflict in
3233  title with any Invariant Section.
3234  
3235 \layout Standard
3236
3237 If the Modified Version includes new front-matter sections or appendices
3238  that qualify as Secondary Sections and contain no material copied from
3239  the Document, you may at your option designate some or all of these sections
3240  as invariant.
3241  To do this, add their titles to the list of Invariant Sections in the Modified
3242  Version's license notice.
3243  These titles must be distinct from any other section titles.
3244 \layout Standard
3245
3246 You may add a section entitled "Endorsements", provided it contains nothing
3247  but endorsements of your Modified Version by various parties--for example,
3248  statements of peer review or that the text has been approved by an organization
3249  as the authoritative definition of a standard.
3250 \layout Standard
3251
3252 You may add a passage of up to five words as a Front-Cover Text, and a passage
3253  of up to 25 words as a Back-Cover Text, to the end of the list of Cover
3254  Texts in the Modified Version.
3255  Only one passage of Front-Cover Text and one of Back-Cover Text may be
3256  added by (or through arrangements made by) any one entity.
3257  If the Document already includes a cover text for the same cover, previously
3258  added by you or by arrangement made by the same entity you are acting on
3259  behalf of, you may not add another; but you may replace the old one, on
3260  explicit permission from the previous publisher that added the old one.
3261 \layout Standard
3262
3263 The author(s) and publisher(s) of the Document do not by this License give
3264  permission to use their names for publicity for or to assert or imply endorseme
3265 nt of any Modified Version.
3266  
3267 \layout Subsection*
3268
3269 5.
3270  COMBINING DOCUMENTS
3271 \layout Standard
3272
3273 You may combine the Document with other documents released under this License,
3274  under the terms defined in section 4 above for modified versions, provided
3275  that you include in the combination all of the Invariant Sections of all
3276  of the original documents, unmodified, and list them all as Invariant Sections
3277  of your combined work in its license notice.
3278 \layout Standard
3279
3280 The combined work need only contain one copy of this License, and multiple
3281  identical Invariant Sections may be replaced with a single copy.
3282  If there are multiple Invariant Sections with the same name but different
3283  contents, make the title of each such section unique by adding at the end
3284  of it, in parentheses, the name of the original author or publisher of
3285  that section if known, or else a unique number.
3286  Make the same adjustment to the section titles in the list of Invariant
3287  Sections in the license notice of the combined work.
3288 \layout Standard
3289
3290 In the combination, you must combine any sections entitled "History" in
3291  the various original documents, forming one section entitled "History";
3292  likewise combine any sections entitled "Acknowledgements", and any sections
3293  entitled "Dedications".
3294  You must delete all sections entitled "Endorsements."
3295 \layout Subsection*
3296
3297 6.
3298  COLLECTIONS OF DOCUMENTS
3299 \layout Standard
3300
3301 You may make a collection consisting of the Document and other documents
3302  released under this License, and replace the individual copies of this
3303  License in the various documents with a single copy that is included in
3304  the collection, provided that you follow the rules of this License for
3305  verbatim copying of each of the documents in all other respects.
3306 \layout Standard
3307
3308 You may extract a single document from such a collection, and distribute
3309  it individually under this License, provided you insert a copy of this
3310  License into the extracted document, and follow this License in all other
3311  respects regarding verbatim copying of that document.
3312  
3313 \layout Subsection*
3314
3315 7.
3316  AGGREGATION WITH INDEPENDENT WORKS
3317 \layout Standard
3318
3319 A compilation of the Document or its derivatives with other separate and
3320  independent documents or works, in or on a volume of a storage or distribution
3321  medium, does not as a whole count as a Modified Version of the Document,
3322  provided no compilation copyright is claimed for the compilation.
3323  Such a compilation is called an "aggregate", and this License does not
3324  apply to the other self-contained works thus compiled with the Document,
3325  on account of their being thus compiled, if they are not themselves derivative
3326  works of the Document.
3327 \layout Standard
3328
3329 If the Cover Text requirement of section 3 is applicable to these copies
3330  of the Document, then if the Document is less than one quarter of the entire
3331  aggregate, the Document's Cover Texts may be placed on covers that surround
3332  only the Document within the aggregate.
3333  Otherwise they must appear on covers around the whole aggregate.
3334 \layout Subsection*
3335
3336 8.
3337  TRANSLATION
3338 \layout Standard
3339
3340 Translation is considered a kind of modification, so you may distribute
3341  translations of the Document under the terms of section 4.
3342  Replacing Invariant Sections with translations requires special permission
3343  from their copyright holders, but you may include translations of some
3344  or all Invariant Sections in addition to the original versions of these
3345  Invariant Sections.
3346  You may include a translation of this License provided that you also include
3347  the original English version of this License.
3348  In case of a disagreement between the translation and the original English
3349  version of this License, the original English version will prevail.
3350 \layout Subsection*
3351
3352 9.
3353  TERMINATION
3354 \layout Standard
3355
3356 You may not copy, modify, sublicense, or distribute the Document except
3357  as expressly provided for under this License.
3358  Any other attempt to copy, modify, sublicense or distribute the Document
3359  is void, and will automatically terminate your rights under this License.
3360  However, parties who have received copies, or rights, from you under this
3361  License will not have their licenses terminated so long as such parties
3362  remain in full compliance.
3363  
3364 \layout Subsection*
3365
3366 10.
3367  FUTURE REVISIONS OF THIS LICENSE
3368 \layout Standard
3369
3370 The Free Software Foundation may publish new, revised versions of the GNU
3371  Free Documentation License from time to time.
3372  Such new versions will be similar in spirit to the present version, but
3373  may differ in detail to address new problems or concerns.
3374  See http://www.gnu.org/copyleft/.
3375 \layout Standard
3376
3377 Each version of the License is given a distinguishing version number.
3378  If the Document specifies that a particular numbered version of this License
3379  "or any later version" applies to it, you have the option of following
3380  the terms and conditions either of that specified version or of any later
3381  version that has been published (not as a draft) by the Free Software Foundatio
3382 n.
3383  If the Document does not specify a version number of this License, you
3384  may choose any version ever published (not as a draft) by the Free Software
3385  Foundation.
3386 \the_end