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