doc update
[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 (version 1.0rc3)
33 \layout Author
34
35 Jean-Marc Valin
36 \layout Standard
37 \pagebreak_top 
38 Copyright (c) 2002-2003 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 Standard
49 \pagebreak_top \pagebreak_bottom 
50
51 \begin_inset LatexCommand \tableofcontents{}
52
53 \end_inset 
54
55
56 \layout Standard
57 \pagebreak_bottom 
58
59 \begin_inset FloatList table
60
61 \end_inset 
62
63
64 \layout Section
65
66 Introduction to Speex
67 \layout Standard
68
69 The Speex project (
70 \family typewriter 
71 http://www.speex.org/
72 \family default 
73 ) has been started because there was a need for a speech codec that was
74  open-source and free from software patents.
75  These are essential conditions for being used by any open-source software.
76  There is already Vorbis that does general audio, but it is not really suitable
77  for speech.
78  Also, unlike many other speech codecs, Speex is not targeted at cell phones
79  (not many open-source cell phones anyway :-) ) but rather voice over IP
80  (VoIP) and file-based compression.
81  
82 \layout Standard
83
84 As design goals, we wanted to have a codec that would allowed both very
85  good quality speech and low bit-rate (unfortunately not at the same time!),
86  which led us to developing a codec with multiple bit-rates.
87  Of course very good quality also meant we had to do wideband (16 kHz sampling
88  rate) in addition to narrowband (telephone quality, 8 kHz sampling rate).
89 \layout Standard
90
91 Designing for VoIP instead of cell phone use means that Speex must be robust
92  to lost packets, but not to corrupted ones since packets either arrive
93  unaltered or don't arrive at all.
94  Also, the idea was to have a reasonnable complexity and memory requirement
95  without compromising too much on the efficiency of the codec.
96 \layout Standard
97
98 All this led us to the choice of CELP
99 \begin_inset LatexCommand \index{CELP}
100
101 \end_inset 
102
103  as the encoding technique to use for Speex.
104  One of the main reasons is that CELP has long proved that it could do the
105  job and scale well to both low bit-rates (think DoD CELP @ 4.8 kbps) and
106  high bit-rates (think G.728 @ 16 kbps).
107  
108 \layout Standard
109
110 The main characteristics can be summerized as follows:
111 \layout Itemize
112
113 Free software/open-source
114 \begin_inset LatexCommand \index{open-source}
115
116 \end_inset 
117
118 , patent
119 \begin_inset LatexCommand \index{patent}
120
121 \end_inset 
122
123  and royalty-free
124 \layout Itemize
125
126 Integration of narrowband
127 \begin_inset LatexCommand \index{narrowband}
128
129 \end_inset 
130
131  and wideband
132 \begin_inset LatexCommand \index{wideband}
133
134 \end_inset 
135
136  in the same bit-stream
137 \layout Itemize
138
139 Wide range of bit-rates available (from 2 kbps to 44 kbps)
140 \layout Itemize
141
142 Dynamic bit-rate switching and Variable Bit-Rate
143 \begin_inset LatexCommand \index{variable bit-rate}
144
145 \end_inset 
146
147  (VBR)
148 \layout Itemize
149
150 Voice Activity Detection
151 \begin_inset LatexCommand \index{voice activity detection}
152
153 \end_inset 
154
155  (VAD, integrated with VBR)
156 \layout Itemize
157
158 Variable complexity
159 \begin_inset LatexCommand \index{complexity}
160
161 \end_inset 
162
163
164 \layout Itemize
165
166 Ultra-wideband mode at 32 kHz (up to 48 kHz)
167 \layout Itemize
168
169 Intensity stereo encoding option
170 \layout Section
171 \pagebreak_top 
172 Feature description
173 \layout Standard
174
175 This section explains the main Speex features, as well as some concepts
176  in speech coding that help better understand the next sections.
177  
178 \layout Subsection*
179
180 Sampling rate
181 \begin_inset LatexCommand \index{sampling rate}
182
183 \end_inset 
184
185
186 \layout Standard
187
188 Speex is mainly designed for 3 different sampling rates: 8 kHz, 16 kHz,
189  and 32 kHz.
190  These are respectively refered to as narrowband
191 \begin_inset LatexCommand \index{narrowband}
192
193 \end_inset 
194
195 , wideband
196 \begin_inset LatexCommand \index{wideband}
197
198 \end_inset 
199
200  and ultra-wideband
201 \begin_inset LatexCommand \index{ultra-wideband}
202
203 \end_inset 
204
205 .
206  
207 \layout Subsection*
208
209 Quality
210 \begin_inset LatexCommand \index{quality}
211
212 \end_inset 
213
214
215 \layout Standard
216
217 Speex encoding is controlled most of the time by a quality parameter that
218  range from 0 to 10.
219  In constant bit-rate
220 \begin_inset LatexCommand \index{constant bit-rate}
221
222 \end_inset 
223
224  (CBR) operation, the quality parameter is an integer, while for variable
225  bit-rate (VBR), the parameter is a float.
226  
227 \layout Subsection*
228
229 Complexity
230 \begin_inset LatexCommand \index{complexity}
231
232 \end_inset 
233
234  (variable)
235 \layout Standard
236
237 With Speex, it is possible to vary the complexity allowed for the encoder.
238  This is done by controlling how the search is performed with an integer
239  ranging from 1 to 10 in a way that's similar to the -1 to -9 options to
240  
241 \emph on 
242 gzip
243 \emph default 
244  and 
245 \emph on 
246 bzip2
247 \emph default 
248  compression utilities.
249  For normal use, the noise level at complexity 1is between 1 and 2 dB higher
250  than at complexity 10, but the CPU requirements for complexity 10 is about
251  5 time higher than for complexity 1.
252  In practice, the best trade-off is between complexity 2 and 4, though higher
253  settings are often useful when encoding non-speech sounds like DTMF
254 \begin_inset LatexCommand \index{DTMF}
255
256 \end_inset 
257
258  tones.
259 \layout Subsection*
260
261 Variable Bit-Rate
262 \begin_inset LatexCommand \index{variable bit-rate}
263
264 \end_inset 
265
266  (VBR)
267 \layout Standard
268
269 Variable bit-rate (VBR) allows a codec to change its bit-rate dynamically
270  to adapt to the 
271 \begin_inset Quotes eld
272 \end_inset 
273
274 difficulty
275 \begin_inset Quotes erd
276 \end_inset 
277
278  of the audio being encoded.
279  In the example of Speex, sounds like vowels and high-energy transients
280  require a higher bit-rate to achieve good quality, while fricatives (e.g.
281  s,f sounds) can be coded adequately with less bits.
282  For this reason, VBR can achive lower bit-rate for the same quality, or
283  a better quality for a certain bit-rate.
284  Despite its advantages, VBR has two main drawbacks: first, by only specifying
285  quality, there's no guaranty about the final average bit-rate.
286  Second, for some real-time applications like voice over IP (VoIP), what
287  counts is the maximum bit-rate, which must be low enough for the communication
288  channel.
289 \layout Subsection*
290
291 Average Bit-Rate
292 \begin_inset LatexCommand \index{average bit-rate}
293
294 \end_inset 
295
296  (ABR)
297 \layout Standard
298
299 Average bit-rate solves one of the problems of VBR, as it dynamically adjusts
300  VBR quality in order to meet a specific target bit-rate.
301  Because the quality/bit-rate is adjusted in real-time (open-loop), the
302  global quality will be slightly lower than that obtained be encoding in
303  VBR with exactly the right quality setting to meet the target average bit-rate.
304 \layout Subsection*
305
306 Voice Activity Detection
307 \begin_inset LatexCommand \index{voice activity detection}
308
309 \end_inset 
310
311  (VAD)
312 \layout Standard
313
314 When enabled, voice activity detection detects whether the audio being encoded
315  is speech or silence/background noise.
316  VAD is always implicitly activated when encoding in VBR, so the option
317  is only useful in non-VBR operation.
318  In this case, Speex detects non-speech periods and encode them with just
319  enough bits to reproduce the background noise.
320  This is called 
321 \begin_inset Quotes eld
322 \end_inset 
323
324 comfort noise generation
325 \begin_inset Quotes erd
326 \end_inset 
327
328  (CNG).
329 \layout Subsection*
330
331 Discontinuous Transmission
332 \begin_inset LatexCommand \index{discontinuous transmission}
333
334 \end_inset 
335
336  (DTX)
337 \layout Standard
338
339 Discontinuous transmission is an addition to VAD operation, that allows
340  to stop transmitting completely when the background noise is stationnary.
341  In file-based operation, since we cannot just stop writing to the file,
342  only 5 bits are used for such frames (corresponding to 250 bps).
343 \layout Subsection*
344
345 Perceptual enhancement
346 \begin_inset LatexCommand \index{perceptual enhancement}
347
348 \end_inset 
349
350
351 \layout Standard
352
353 Perceptual enhancement is a part of the decoder which, when turned on, tries
354  to reduce (the perception of) the noise produced by the coding/decoding
355  process.
356  In most cases, perceptual enhancement make the sound further from the original
357  
358 \emph on 
359 objectively
360 \emph default 
361  (if you use SNR), but in the end it still 
362 \emph on 
363 sounds
364 \emph default 
365  better (subjective improvement).
366 \layout Subsection*
367
368 Algorithmic delay
369 \begin_inset LatexCommand \index{algorithmic delay}
370
371 \end_inset 
372
373
374 \layout Standard
375
376 Every speech codec introduces a delay in the transmission.
377  For Speex, this delay is equal to the frame size, plus some amount of 
378 \begin_inset Quotes eld
379 \end_inset 
380
381 look-ahead
382 \begin_inset Quotes erd
383 \end_inset 
384
385  required to process each frame.
386  In narrowband operation (8 kHz), the delay is 30 ms, while for wideband
387  (16 kHz), the delay is 34 ms.
388  These values don't account for the CPU time it takes to encode or decode
389  the frames.
390 \layout Section
391 \pagebreak_top 
392 Command-line encoder/decoder
393 \begin_inset LatexCommand \label{sec:Command-line-encoder/decoder}
394
395 \end_inset 
396
397
398 \layout Standard
399
400 The base Speex distribution includes a command-line encoder (
401 \emph on 
402 speexenc
403 \emph default 
404 ) and decoder (
405 \emph on 
406 speexdec
407 \emph default 
408 ).
409  This section describes how to use these tools.
410 \layout Subsection
411
412
413 \emph on 
414 speexenc
415 \begin_inset LatexCommand \index{speexenc}
416
417 \end_inset 
418
419
420 \layout Standard
421
422 The 
423 \emph on 
424 speexenc
425 \emph default 
426  utility is used to create Speex files from raw PCM or wave files.
427  It can be used by calling: 
428 \layout LyX-Code
429
430 speexenc [options] input_file output_file
431 \layout Standard
432
433 The value '-' for input_file or output_file corresponds respectively to
434  stdin and stdout.
435  The valid options are:
436 \layout Description
437
438 --narrowband\SpecialChar ~
439 (-n) Tell Speex to treat the input as narrowband (8 kHz).
440  This is the default
441 \layout Description
442
443 --wideband\SpecialChar ~
444 (-w) Tell Speex to treat the input as wideband (16 kHz)
445 \layout Description
446
447 --ultra-wideband\SpecialChar ~
448 (-u) Tell Speex to treat the input as 
449 \begin_inset Quotes eld
450 \end_inset 
451
452 ultra-wideband
453 \begin_inset Quotes erd
454 \end_inset 
455
456  (32 kHz)
457 \layout Description
458
459 --quality\SpecialChar ~
460 n Set the encoding quality (0-10), default is 8
461 \layout Description
462
463 --bitrate\SpecialChar ~
464 n Encoding bit-rate (use bit-rate n or lower) 
465 \layout Description
466
467 --vbr Enable VBR (Variable Bit-Rate), disabled by default
468 \layout Description
469
470 --abr\SpecialChar ~
471 n Enable ABR (Average Bit-Rate) at n kbps, disabled by default
472 \layout Description
473
474 --vad Enable VAD (Voice Activity Detection), disabled by default
475 \layout Description
476
477 --dtx Enable DTX (Discontinuous Transmission), disabled by default
478 \layout Description
479
480 --nframes\SpecialChar ~
481 n Pack n frames in each Ogg packet (this saves space at low bit-rates)
482 \layout Description
483
484 --comp\SpecialChar ~
485 n Set encoding speed/quality tradeoff.
486  The higher the value of n, the slower the encoding (default is 3)
487 \layout Description
488
489 -V Verbose operation, print bit-rate currently in use
490 \layout Description
491
492 --help\SpecialChar ~
493 (-h) Print the help
494 \layout Description
495
496 --version\SpecialChar ~
497 (-v) Print version information
498 \layout Subsubsection*
499
500 Speex comments
501 \layout Description
502
503 --comment Add the given string as an extra comment.
504  This may be used multiple times.
505  
506 \layout Description
507
508 --author Author of this track.
509  
510 \layout Description
511
512 --title Title for this track.
513  
514 \layout Subsubsection*
515
516 Raw input options
517 \layout Description
518
519 --rate\SpecialChar ~
520 n Sampling rate for raw input
521 \layout Description
522
523 --stereo Consider raw input as stereo 
524 \layout Description
525
526 --le Raw input is little-endian 
527 \layout Description
528
529 --be Raw input is big-endian 
530 \layout Description
531
532 --8bit Raw input is 8-bit unsigned 
533 \layout Description
534
535 --16bit Raw input is 16-bit signed 
536 \layout Subsection
537
538
539 \emph on 
540 speexdec
541 \begin_inset LatexCommand \index{speexdec}
542
543 \end_inset 
544
545
546 \layout Standard
547
548 The 
549 \emph on 
550 speexdec
551 \emph default 
552  utility is used to decode Speex files and can be used by calling: 
553 \layout LyX-Code
554
555 speexdec [options] speex_file [output_file]
556 \layout Standard
557
558 The value '-' for input_file or output_file corresponds respectively to
559  stdin and stdout.
560  Also, when no output_file is specified, the file is played to the soundcard.
561  The valid options are:
562 \layout Description
563
564 --enh enable post-filter (default)
565 \layout Description
566
567 --no-enh disable post-filter
568 \layout Description
569
570 --force-nb Force decoding in narrowband 
571 \layout Description
572
573 --force-wb Force decoding in wideband 
574 \layout Description
575
576 --force-uwb Force decoding in ultra-wideband 
577 \layout Description
578
579 --mono Force decoding in mono 
580 \layout Description
581
582 --stereo Force decoding in stereo 
583 \layout Description
584
585 --rate\SpecialChar ~
586 n For decoding at n Hz sampling rate
587 \layout Description
588
589 --packet-loss\SpecialChar ~
590 n Simulate n % random packet loss
591 \layout Description
592
593 -V Verbose operation, print bit-rate currently in use
594 \layout Description
595
596 --help\SpecialChar ~
597 (-h) Print the help
598 \layout Description
599
600 --version\SpecialChar ~
601 (-v) Print version information
602 \layout Section
603 \pagebreak_top 
604 Programming with Speex (the libspeex
605 \begin_inset LatexCommand \index{libspeex}
606
607 \end_inset 
608
609  API
610 \begin_inset LatexCommand \index{API}
611
612 \end_inset 
613
614 )
615 \layout Subsection
616
617 Encoding
618 \layout Standard
619
620 In order to encode speech using Speex, you first need to:
621 \layout LyX-Code
622
623 #include <speex.h>
624 \layout Standard
625
626 You then need to declare a Speex bit-packing struct
627 \layout LyX-Code
628
629 SpeexBits bits;
630 \layout Standard
631
632 and a Speex encoder state
633 \layout LyX-Code
634
635 void *enc_state;
636 \layout Standard
637
638 The two are initialized by:
639 \layout LyX-Code
640
641 speex_bits_init(&bits);
642 \layout LyX-Code
643
644 enc_state = speex_encoder_init(&speex_nb_mode);
645 \layout Standard
646
647 For wideband coding, 
648 \emph on 
649 speex_nb_mode
650 \emph default 
651  will be replaced by 
652 \emph on 
653 speex_wb_mode
654 \emph default 
655 .
656  In most cases, you will need to know the frame size used by the mode you
657  are using.
658  You can get that value in the 
659 \emph on 
660 frame_size
661 \emph default 
662  variable with:
663 \layout LyX-Code
664
665 speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
666 \layout Standard
667
668 Once the initialization is done, for every input frame:
669 \layout LyX-Code
670
671 speex_bits_reset(&bits);
672 \layout LyX-Code
673
674 speex_encode(enc_state, input_frame, &bits);
675 \layout LyX-Code
676
677 nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);
678 \layout Standard
679
680 where 
681 \emph on 
682 input_frame
683 \emph default 
684  is a 
685 \emph on 
686 (float *)
687 \emph default 
688  pointing to the beginning of a speech frame, 
689 \emph on 
690 byte_ptr
691 \emph default 
692  is a 
693 \emph on 
694 (char *)
695 \emph default 
696  where the encoded frame will be written, 
697 \emph on 
698 MAX_NB_BYTES
699 \emph default 
700  is the maximum number of bytes that can be written to 
701 \emph on 
702 byte_ptr
703 \emph default 
704  without causing an overflow and 
705 \emph on 
706 nbBytes
707 \emph default 
708  is the number of bytes actually written to 
709 \emph on 
710 byte_ptr
711 \emph default 
712  (the encoded size in bytes).
713  Before calling speex_bits_write, it is possible to find the number of bytes
714  that need to be written by calling 
715 \family typewriter 
716 speex_bits_nbytes(&bits)
717 \family default 
718 , which returns a number of bytes.
719  
720 \layout Standard
721
722 After you're done with the encoding, free all resources with:
723 \layout LyX-Code
724
725 speex_bits_destroy(&bits);
726 \layout LyX-Code
727
728 speex_encoder_destroy(enc_state);
729 \layout Standard
730
731 That's about it for the encoder.
732  
733 \layout Subsection
734
735 Decoding
736 \layout Standard
737
738 In order to encode speech using Speex, you first need to:
739 \layout LyX-Code
740
741 #include <speex.h>
742 \layout Standard
743
744 You also need to declare a Speex bit-packing struct
745 \layout LyX-Code
746
747 SpeexBits bits;
748 \layout Standard
749
750 and a Speex encoder state
751 \layout LyX-Code
752
753 void *dec_state;
754 \layout Standard
755
756 The two are initialized by:
757 \layout LyX-Code
758
759 speex_bits_init(&bits);
760 \layout LyX-Code
761
762 dec_state = speex_decoder_init(&speex_nb_mode);
763 \layout Standard
764
765 For wideband decoding, 
766 \emph on 
767 speex_nb_mode
768 \emph default 
769  will be replaced by 
770 \emph on 
771 speex_wb_mode
772 \emph default 
773 .
774  If you need to obtain the size of the frames that will be used by the decoder,
775  you can get that value in the 
776 \emph on 
777 frame_size
778 \emph default 
779  variable with:
780 \layout LyX-Code
781
782 speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size); 
783 \layout Standard
784
785 There is also a parameter that can be set for the decoder: whether or not
786  to use a perceptual post-filter.
787  This can be set by: 
788 \layout LyX-Code
789
790 speex_decoder_ctl(dec_state, SPEEX_SET_ENH, &enh); 
791 \layout Standard
792
793 where 
794 \emph on 
795 enh
796 \emph default 
797  is an int that with value 0 to have the post-filter disabled and 1 to have
798  it enabled.
799 \layout Standard
800
801 Again, once the decoder initialization is done, for every input frame:
802 \layout LyX-Code
803
804 speex_bits_read_from(&bits, input_bytes, nbBytes);
805 \layout LyX-Code
806
807 speex_decode(st, &bits, output_frame);
808 \layout Standard
809
810 where input_bytes is a 
811 \emph on 
812 (char *)
813 \emph default 
814  containing the bit-stream data received for a frame, 
815 \emph on 
816 nbBytes
817 \emph default 
818  is the size (in bytes) of that bit-stream, and 
819 \emph on 
820 output_frame
821 \emph default 
822  is a 
823 \emph on 
824 (float *)
825 \emph default 
826  and points to the area where the decoded speech frame will be written.
827  A NULL value as the first argument indicates that we don't have the bits
828  for the current frame.
829  When a frame is lost, the Speex decoder will do its best to "guess" the
830  correct signal.
831 \layout Standard
832
833 After you're done with the decoding, free all resources with:
834 \layout LyX-Code
835
836 speex_bits_destroy(&bits);
837 \layout LyX-Code
838
839 speex_decoder_destroy(dec_state);
840 \layout Subsection
841
842 Codec Options (speex_*_ctl)
843 \layout Standard
844
845 The Speex encoder and decoder support many options and requests that can
846  be accessed through the 
847 \emph on 
848 speex_encoder_ctl
849 \emph default 
850  and 
851 \emph on 
852 speex_decoder_ctl
853 \emph default 
854  functions.
855  These functions are similar to the 
856 \emph on 
857 ioctl
858 \emph default 
859  system call and their prototypes are:
860 \layout LyX-Code
861
862 void speex_encoder_ctl(void *encoder, int request, void *ptr);
863 \layout LyX-Code
864
865 void speex_decoder_ctl(void *encoder, int request, void *ptr);
866 \layout Standard
867
868 The different values of request allowed are (note that some only apply to
869  the encoder or the decoder):
870 \layout Description
871
872 SPEEX_SET_ENH** Set perceptual enhancer
873 \begin_inset LatexCommand \index{perceptual enhancement}
874
875 \end_inset 
876
877  to on (1) or off (0) (integer)
878 \layout Description
879
880 SPEEX_GET_ENH** Get perceptual enhancer status (integer)
881 \layout Description
882
883 SPEEX_GET_FRAME_SIZE Get the frame size used for the current mode (integer)
884 \layout Description
885
886 SPEEX_SET_QUALITY* Set the encoder speech quality (integer 0 to 10)
887 \layout Description
888
889 SPEEX_GET_QUALITY* Get the current encoder speech quality (integer 0 to
890  10)
891 \layout Description
892
893 SPEEX_SET_MODE*
894 \begin_inset Formula $\dagger $
895 \end_inset 
896
897
898 \layout Description
899
900 SPEEX_GET_MODE*
901 \begin_inset Formula $\dagger $
902 \end_inset 
903
904
905 \layout Description
906
907 SPEEX_SET_LOW_MODE*
908 \begin_inset Formula $\dagger $
909 \end_inset 
910
911
912 \layout Description
913
914 SPEEX_GET_LOW_MODE*
915 \begin_inset Formula $\dagger $
916 \end_inset 
917
918
919 \layout Description
920
921 SPEEX_SET_HIGH_MODE*
922 \begin_inset Formula $\dagger $
923 \end_inset 
924
925
926 \layout Description
927
928 SPEEX_GET_HIGH_MODE*
929 \begin_inset Formula $\dagger $
930 \end_inset 
931
932
933 \layout Description
934
935 SPEEX_SET_VBR* Set variable bit-rate (VBR) to on (1) or off (0) (integer)
936 \layout Description
937
938 SPEEX_GET_VBR* Get variable bit-rate
939 \begin_inset LatexCommand \index{variable bit-rate}
940
941 \end_inset 
942
943  (VBR) status (integer)
944 \layout Description
945
946 SPEEX_SET_VBR_QUALITY* Set the encoder VBR speech quality (float 0 to 10)
947 \layout Description
948
949 SPEEX_GET_VBR_QUALITY* Get the current encoder VBR speech quality (float
950  0 to 10)
951 \layout Description
952
953 SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder (integer
954  1 to 10)
955 \layout Description
956
957 SPEEX_GET_COMPLEXITY* Get the CPU resources allowed for the encoder (integer
958  1 to 10)
959 \layout Description
960
961 SPEEX_SET_BITRATE* Set the bit-rate to use to the closest value not exceeding
962  the parameter (integer in bps)
963 \layout Description
964
965 SPEEX_GET_BITRATE Get the current bit-rate in use (integer in bps)
966 \layout Description
967
968 SPEEX_SET_SAMPLING_RATE Set real sampling rate (integer in Hz)
969 \layout Description
970
971 SPEEX_GET_SAMPLING_RATE Get real sampling rate (integer in Hz)
972 \layout Description
973
974 SPEEX_RESET_STATE Reset the encoder/decoder state to its original state
975  (zeros all memories)
976 \layout Description
977
978 SPEEX_SET_VAD* Set voice activity detection
979 \begin_inset LatexCommand \index{voice activity detection}
980
981 \end_inset 
982
983  (VAD) to on (1) or off (0) (integer)
984 \layout Description
985
986 SPEEX_GET_VAD* Get voice activity detection (VAD) status (integer)
987 \layout Description
988
989 SPEEX_SET_DTX* Set discontinuous transmission
990 \begin_inset LatexCommand \index{discontinuous transmission}
991
992 \end_inset 
993
994  (DTX) to on (1) or off (0) (integer)
995 \layout Description
996
997 SPEEX_GET_DTX* Get discontinuous transmission (DTX) status (integer)
998 \layout Description
999
1000 SPEEX_SET_ABR* Set average bit-rate
1001 \begin_inset LatexCommand \index{average bit-rate}
1002
1003 \end_inset 
1004
1005  (ABR) to a value n in bits per second (integer in bps)
1006 \layout Description
1007
1008 SPEEX_GET_ABR* Get average bit-rate (ABR) setting (integer in bps)
1009 \layout Description
1010
1011 * applies only to the encoder
1012 \layout Description
1013
1014 ** applies only to the decoder
1015 \layout Description
1016
1017
1018 \begin_inset Formula $\dagger $
1019 \end_inset 
1020
1021  normally only used internally
1022 \layout Subsection
1023
1024 Mode queries
1025 \layout Standard
1026
1027 Speex modes have a querry system similar to the speex_encoder_ctl and speex_deco
1028 der_ctl calls.
1029  Since modes are read-only, it is only possible to get information about
1030  a particular mode.
1031  The function used to do that is:
1032 \layout LyX-Code
1033
1034 void speex_mode_query(SpeexMode *mode, int request, void *ptr);
1035 \layout Standard
1036
1037 The admissible values for request are (unless otherwise note, the values
1038  are returned through 
1039 \emph on 
1040 ptr
1041 \emph default 
1042 ):
1043 \layout Description
1044
1045 SPEEX_MODE_FRAME_SIZE Get the frame size (in samples) for the mode
1046 \layout Description
1047
1048 SPEEX_SUBMODE_BITRATE Get the bit-rate for a submode number specified throught
1049  
1050 \emph on 
1051 ptr
1052 \emph default 
1053  (integer in bps).
1054  
1055 \layout Subsection
1056
1057 Packing and in-band signalling
1058 \begin_inset LatexCommand \index{in-band signalling}
1059
1060 \end_inset 
1061
1062
1063 \layout Standard
1064
1065 Sometimes it is desirable to pack more than one frame per packet (or other
1066  basic unit of storage).
1067  The proper way to do it is to call speex_encode 
1068 \begin_inset Formula $N$
1069 \end_inset 
1070
1071  times before writing the stream with speex_bits_write.
1072  In cases where the number of frames is not determined by an out-of-band
1073  mechanism, it is possible to include a terminator code.
1074  That terminator consists of the code 15 (decimal) encoded with 5 bits,
1075  as shown in figure 
1076 \begin_inset LatexCommand \ref{cap:quality_vs_bps}
1077
1078 \end_inset 
1079
1080 .
1081  
1082 \layout Standard
1083
1084 It is also possible to send in-band 
1085 \begin_inset Quotes eld
1086 \end_inset 
1087
1088 messages
1089 \begin_inset Quotes erd
1090 \end_inset 
1091
1092  to the other side.
1093  All these messages are encoded as a 
1094 \begin_inset Quotes eld
1095 \end_inset 
1096
1097 pseudo-frame
1098 \begin_inset Quotes erd
1099 \end_inset 
1100
1101  of mode 14 which contain a 4-bit message type code, followed by the message.
1102  Table 
1103 \begin_inset LatexCommand \ref{cap:In-band-signalling-codes}
1104
1105 \end_inset 
1106
1107  lists the available codes, their meaning and the size of the message that
1108  follow.
1109  Most of these messages are requests that are sent to the encoder or decoder
1110  on the other end, which is free to comply or ignore them.
1111  By default, all in-band messages are ignored.
1112 \layout Standard
1113
1114
1115 \begin_inset Float table
1116 placement htbp
1117 wide false
1118 collapsed false
1119
1120 \layout Standard
1121
1122
1123 \begin_inset  Tabular
1124 <lyxtabular version="3" rows="17" columns="3">
1125 <features>
1126 <column alignment="center" valignment="top" leftline="true" width="0pt">
1127 <column alignment="center" valignment="top" leftline="true" width="0pt">
1128 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
1129 <row topline="true" bottomline="true">
1130 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1131 \begin_inset Text
1132
1133 \layout Standard
1134
1135 code
1136 \end_inset 
1137 </cell>
1138 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1139 \begin_inset Text
1140
1141 \layout Standard
1142
1143 Size (bits)
1144 \end_inset 
1145 </cell>
1146 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1147 \begin_inset Text
1148
1149 \layout Standard
1150
1151 Content
1152 \end_inset 
1153 </cell>
1154 </row>
1155 <row topline="true">
1156 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1157 \begin_inset Text
1158
1159 \layout Standard
1160
1161 0
1162 \end_inset 
1163 </cell>
1164 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1165 \begin_inset Text
1166
1167 \layout Standard
1168
1169 1
1170 \end_inset 
1171 </cell>
1172 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1173 \begin_inset Text
1174
1175 \layout Standard
1176
1177 Asks decoder to set perceptual enhancement off (0) or on(1)
1178 \end_inset 
1179 </cell>
1180 </row>
1181 <row topline="true">
1182 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1183 \begin_inset Text
1184
1185 \layout Standard
1186
1187 1
1188 \end_inset 
1189 </cell>
1190 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1191 \begin_inset Text
1192
1193 \layout Standard
1194
1195 1
1196 \end_inset 
1197 </cell>
1198 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1199 \begin_inset Text
1200
1201 \layout Standard
1202
1203 reserved
1204 \end_inset 
1205 </cell>
1206 </row>
1207 <row topline="true">
1208 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1209 \begin_inset Text
1210
1211 \layout Standard
1212
1213 2
1214 \end_inset 
1215 </cell>
1216 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1217 \begin_inset Text
1218
1219 \layout Standard
1220
1221 4
1222 \end_inset 
1223 </cell>
1224 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1225 \begin_inset Text
1226
1227 \layout Standard
1228
1229 Asks encoder to switch to mode N
1230 \end_inset 
1231 </cell>
1232 </row>
1233 <row topline="true">
1234 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1235 \begin_inset Text
1236
1237 \layout Standard
1238
1239 3
1240 \end_inset 
1241 </cell>
1242 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1243 \begin_inset Text
1244
1245 \layout Standard
1246
1247 4
1248 \end_inset 
1249 </cell>
1250 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1251 \begin_inset Text
1252
1253 \layout Standard
1254
1255 Asks encoder to switch to mode N for low-band
1256 \end_inset 
1257 </cell>
1258 </row>
1259 <row topline="true">
1260 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1261 \begin_inset Text
1262
1263 \layout Standard
1264
1265 4
1266 \end_inset 
1267 </cell>
1268 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1269 \begin_inset Text
1270
1271 \layout Standard
1272
1273 4
1274 \end_inset 
1275 </cell>
1276 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1277 \begin_inset Text
1278
1279 \layout Standard
1280
1281 Asks encoder to switch to mode N for high-band
1282 \end_inset 
1283 </cell>
1284 </row>
1285 <row topline="true">
1286 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1287 \begin_inset Text
1288
1289 \layout Standard
1290
1291 5
1292 \end_inset 
1293 </cell>
1294 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1295 \begin_inset Text
1296
1297 \layout Standard
1298
1299 4
1300 \end_inset 
1301 </cell>
1302 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1303 \begin_inset Text
1304
1305 \layout Standard
1306
1307 Asks encoder to switch to quality N for VBR
1308 \end_inset 
1309 </cell>
1310 </row>
1311 <row topline="true">
1312 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1313 \begin_inset Text
1314
1315 \layout Standard
1316
1317 6
1318 \end_inset 
1319 </cell>
1320 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1321 \begin_inset Text
1322
1323 \layout Standard
1324
1325 4
1326 \end_inset 
1327 </cell>
1328 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1329 \begin_inset Text
1330
1331 \layout Standard
1332
1333 Request acknowloedge (0=no, 1=all, 2=only for in-band data)
1334 \end_inset 
1335 </cell>
1336 </row>
1337 <row topline="true">
1338 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1339 \begin_inset Text
1340
1341 \layout Standard
1342
1343 7
1344 \end_inset 
1345 </cell>
1346 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1347 \begin_inset Text
1348
1349 \layout Standard
1350
1351 4
1352 \end_inset 
1353 </cell>
1354 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1355 \begin_inset Text
1356
1357 \layout Standard
1358
1359 Asks encoder to set VBR off (0), on(1), VAD(2), DTX(3)
1360 \end_inset 
1361 </cell>
1362 </row>
1363 <row topline="true">
1364 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1365 \begin_inset Text
1366
1367 \layout Standard
1368
1369 8
1370 \end_inset 
1371 </cell>
1372 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1373 \begin_inset Text
1374
1375 \layout Standard
1376
1377 8
1378 \end_inset 
1379 </cell>
1380 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1381 \begin_inset Text
1382
1383 \layout Standard
1384
1385 Transmit (8-bit) character to the other end
1386 \end_inset 
1387 </cell>
1388 </row>
1389 <row topline="true">
1390 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1391 \begin_inset Text
1392
1393 \layout Standard
1394
1395 9
1396 \end_inset 
1397 </cell>
1398 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1399 \begin_inset Text
1400
1401 \layout Standard
1402
1403 8
1404 \end_inset 
1405 </cell>
1406 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1407 \begin_inset Text
1408
1409 \layout Standard
1410
1411 Intensity stereo information
1412 \end_inset 
1413 </cell>
1414 </row>
1415 <row topline="true">
1416 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1417 \begin_inset Text
1418
1419 \layout Standard
1420
1421 10
1422 \end_inset 
1423 </cell>
1424 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1425 \begin_inset Text
1426
1427 \layout Standard
1428
1429 16
1430 \end_inset 
1431 </cell>
1432 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1433 \begin_inset Text
1434
1435 \layout Standard
1436
1437 Announce maximum bit-rate acceptable (N in bytes/second)
1438 \end_inset 
1439 </cell>
1440 </row>
1441 <row topline="true">
1442 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1443 \begin_inset Text
1444
1445 \layout Standard
1446
1447 11
1448 \end_inset 
1449 </cell>
1450 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1451 \begin_inset Text
1452
1453 \layout Standard
1454
1455 16
1456 \end_inset 
1457 </cell>
1458 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1459 \begin_inset Text
1460
1461 \layout Standard
1462
1463 reserved
1464 \end_inset 
1465 </cell>
1466 </row>
1467 <row topline="true">
1468 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1469 \begin_inset Text
1470
1471 \layout Standard
1472
1473 12
1474 \end_inset 
1475 </cell>
1476 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1477 \begin_inset Text
1478
1479 \layout Standard
1480
1481 32
1482 \end_inset 
1483 </cell>
1484 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1485 \begin_inset Text
1486
1487 \layout Standard
1488
1489 Acknowledge receiving packet N
1490 \end_inset 
1491 </cell>
1492 </row>
1493 <row topline="true">
1494 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1495 \begin_inset Text
1496
1497 \layout Standard
1498
1499 13
1500 \end_inset 
1501 </cell>
1502 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1503 \begin_inset Text
1504
1505 \layout Standard
1506
1507 32
1508 \end_inset 
1509 </cell>
1510 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1511 \begin_inset Text
1512
1513 \layout Standard
1514
1515 reserved
1516 \end_inset 
1517 </cell>
1518 </row>
1519 <row topline="true">
1520 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1521 \begin_inset Text
1522
1523 \layout Standard
1524
1525 14
1526 \end_inset 
1527 </cell>
1528 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1529 \begin_inset Text
1530
1531 \layout Standard
1532
1533 64
1534 \end_inset 
1535 </cell>
1536 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1537 \begin_inset Text
1538
1539 \layout Standard
1540
1541 reserved
1542 \end_inset 
1543 </cell>
1544 </row>
1545 <row topline="true" bottomline="true">
1546 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1547 \begin_inset Text
1548
1549 \layout Standard
1550
1551 15
1552 \end_inset 
1553 </cell>
1554 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1555 \begin_inset Text
1556
1557 \layout Standard
1558
1559 64
1560 \end_inset 
1561 </cell>
1562 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1563 \begin_inset Text
1564
1565 \layout Standard
1566
1567 reserved
1568 \end_inset 
1569 </cell>
1570 </row>
1571 </lyxtabular>
1572
1573 \end_inset 
1574
1575
1576 \layout Caption
1577
1578 In-band signalling codes
1579 \begin_inset LatexCommand \label{cap:In-band-signalling-codes}
1580
1581 \end_inset 
1582
1583
1584 \end_inset 
1585
1586
1587 \layout Standard
1588
1589 Finally, applications may define custom in-band messages using mode 13.
1590  The size of the message in bytes is encoded with 5 bits, so that the decoder
1591  can skip it if it doesn't know how to interpret it.
1592 \layout Section
1593 \pagebreak_top 
1594 Formats and standards
1595 \begin_inset LatexCommand \index{standards}
1596
1597 \end_inset 
1598
1599
1600 \layout Standard
1601
1602 Speex can encode speech in both narrowband and wideband and provides different
1603  bit-rates.
1604  However not all features must be supported by a certain implementation
1605  or device.
1606  In order to be said 
1607 \begin_inset Quotes eld
1608 \end_inset 
1609
1610 Speex compatible
1611 \begin_inset Quotes erd
1612 \end_inset 
1613
1614  (whatever that means), an implementation must implement at least a basic
1615  set of features.
1616 \layout Standard
1617
1618 At the minimum, all narrowband modes of operation MUST be supported at the
1619  decoder.
1620  This includes the decoding of a wideband bit-stream by the narrowband decoder
1621 \begin_inset Foot
1622 collapsed true
1623
1624 \layout Standard
1625
1626 The wideband bit-stream contains an embedded narrowband bit-stream which
1627  can be decoded alone
1628 \end_inset 
1629
1630 .
1631  If present, a wideband decoder MUST be able to decode a narrowband stream,
1632  and MAY either be able to decode all wideband modes or be able to decode
1633  the embedded narrowband part of all modes (which includes ignoring the
1634  high-band bits).
1635 \layout Standard
1636
1637 For encoders, at least one narrowband or wideband mode MUST be supported.
1638  The main reason why all encoding modes do not have to be supported is that
1639  some platforms may not be able to handle the complexity of encoding in
1640  some modes.
1641 \layout Subsection
1642
1643 RTP
1644 \begin_inset LatexCommand \index{RTP}
1645
1646 \end_inset 
1647
1648  Payload Format 
1649 \layout Standard
1650
1651 The RTP payload draft is included in appendix 
1652 \begin_inset LatexCommand \ref{sec:IETF-draft}
1653
1654 \end_inset 
1655
1656  and the latest version is available at 
1657 \begin_inset LatexCommand \url{http://www.speex.org/drafts/latest}
1658
1659 \end_inset 
1660
1661 .
1662  We are (2003/02/16) about to send the latest draft to the IETF for comments.
1663  
1664 \layout Subsection
1665
1666 MIME Type
1667 \layout Standard
1668
1669 Speex will use the MIME type 
1670 \family typewriter 
1671 audio/speex
1672 \family default 
1673 .
1674  We will apply for that type in the near future.
1675 \layout Subsection
1676
1677 Ogg
1678 \begin_inset LatexCommand \index{Ogg}
1679
1680 \end_inset 
1681
1682  file format
1683 \layout Standard
1684
1685 Speex bit-streams can be stored in Ogg files.
1686  In this case, the first packet of the Ogg file contains the Speex header
1687  described in table 
1688 \begin_inset LatexCommand \ref{cap:ogg_speex_header}
1689
1690 \end_inset 
1691
1692 .
1693  All integer fields in the headers are stored as little-endian.
1694  The 
1695 \family typewriter 
1696 speex_string
1697 \family default 
1698  field must contain the 
1699 \begin_inset Quotes eld
1700 \end_inset 
1701
1702
1703 \family typewriter 
1704 Speex
1705 \family default 
1706 \SpecialChar ~
1707 \SpecialChar ~
1708 \SpecialChar ~
1709
1710 \begin_inset Quotes eld
1711 \end_inset 
1712
1713  (with 3 training spaces), which identifies the bit-stream.
1714  The next field, 
1715 \family typewriter 
1716 speex_version
1717 \family default 
1718  contains the version of Speex that encoded the file.
1719  For now, refer to speex_header.[ch] for more info.
1720  The 
1721 \emph on 
1722 beginning of stream
1723 \emph default 
1724  (
1725 \family typewriter 
1726 b_o_s
1727 \family default 
1728 ) flag is set to 1 for the header.
1729  The header packet has 
1730 \family typewriter 
1731 packetno=0
1732 \family default 
1733  and 
1734 \family typewriter 
1735 granulepos=0
1736 \family default 
1737 .
1738 \layout Standard
1739
1740 The second packet contains the Speex comment header.
1741  The format used is the Vorbis comment format described here: http://www.xiph.org/
1742 ogg/vorbis/doc/v-comment.html .
1743  This packet has 
1744 \family typewriter 
1745 packetno=1
1746 \family default 
1747  and 
1748 \family typewriter 
1749 granulepos=0
1750 \family default 
1751 .
1752 \layout Standard
1753
1754 The third and subsequant packets each contain one or more (number found
1755  in header) Speex frames.
1756  These are identified with 
1757 \family typewriter 
1758 packetno
1759 \family default 
1760  starting from 2 and the 
1761 \family typewriter 
1762 granulepos
1763 \family default 
1764  is the number of the last sample encoded in that packet.
1765  Le last of these packets has the 
1766 \emph on 
1767 end of stream
1768 \emph default 
1769  (
1770 \family typewriter 
1771 e_o_s
1772 \family default 
1773 ) flag is set to 1.
1774 \layout Standard
1775
1776
1777 \begin_inset Float table
1778 placement htbp
1779 wide true
1780 collapsed false
1781
1782 \layout Standard
1783
1784
1785 \begin_inset  Tabular
1786 <lyxtabular version="3" rows="16" columns="3">
1787 <features>
1788 <column alignment="center" valignment="top" leftline="true" width="0pt">
1789 <column alignment="center" valignment="top" leftline="true" width="0pt">
1790 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
1791 <row topline="true" bottomline="true">
1792 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1793 \begin_inset Text
1794
1795 \layout Standard
1796
1797 Field
1798 \end_inset 
1799 </cell>
1800 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1801 \begin_inset Text
1802
1803 \layout Standard
1804
1805 Type
1806 \end_inset 
1807 </cell>
1808 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1809 \begin_inset Text
1810
1811 \layout Standard
1812
1813 Size
1814 \end_inset 
1815 </cell>
1816 </row>
1817 <row topline="true">
1818 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1819 \begin_inset Text
1820
1821 \layout Standard
1822
1823 speex_string
1824 \end_inset 
1825 </cell>
1826 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1827 \begin_inset Text
1828
1829 \layout Standard
1830
1831 char[]
1832 \end_inset 
1833 </cell>
1834 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1835 \begin_inset Text
1836
1837 \layout Standard
1838
1839 8
1840 \end_inset 
1841 </cell>
1842 </row>
1843 <row topline="true">
1844 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1845 \begin_inset Text
1846
1847 \layout Standard
1848
1849 speex_version
1850 \end_inset 
1851 </cell>
1852 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1853 \begin_inset Text
1854
1855 \layout Standard
1856
1857 char[]
1858 \end_inset 
1859 </cell>
1860 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1861 \begin_inset Text
1862
1863 \layout Standard
1864
1865 20
1866 \end_inset 
1867 </cell>
1868 </row>
1869 <row topline="true">
1870 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1871 \begin_inset Text
1872
1873 \layout Standard
1874
1875 speex_version_id
1876 \end_inset 
1877 </cell>
1878 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1879 \begin_inset Text
1880
1881 \layout Standard
1882
1883 int
1884 \end_inset 
1885 </cell>
1886 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1887 \begin_inset Text
1888
1889 \layout Standard
1890
1891 4
1892 \end_inset 
1893 </cell>
1894 </row>
1895 <row topline="true">
1896 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1897 \begin_inset Text
1898
1899 \layout Standard
1900
1901 header_size
1902 \end_inset 
1903 </cell>
1904 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1905 \begin_inset Text
1906
1907 \layout Standard
1908
1909 int
1910 \end_inset 
1911 </cell>
1912 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1913 \begin_inset Text
1914
1915 \layout Standard
1916
1917 4
1918 \end_inset 
1919 </cell>
1920 </row>
1921 <row topline="true">
1922 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1923 \begin_inset Text
1924
1925 \layout Standard
1926
1927 rate
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 int
1936 \end_inset 
1937 </cell>
1938 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1939 \begin_inset Text
1940
1941 \layout Standard
1942
1943 4
1944 \end_inset 
1945 </cell>
1946 </row>
1947 <row topline="true">
1948 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1949 \begin_inset Text
1950
1951 \layout Standard
1952
1953 mode
1954 \end_inset 
1955 </cell>
1956 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1957 \begin_inset Text
1958
1959 \layout Standard
1960
1961 int
1962 \end_inset 
1963 </cell>
1964 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1965 \begin_inset Text
1966
1967 \layout Standard
1968
1969 4
1970 \end_inset 
1971 </cell>
1972 </row>
1973 <row topline="true">
1974 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1975 \begin_inset Text
1976
1977 \layout Standard
1978
1979 mode_bitstream_version
1980 \end_inset 
1981 </cell>
1982 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1983 \begin_inset Text
1984
1985 \layout Standard
1986
1987 int
1988 \end_inset 
1989 </cell>
1990 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1991 \begin_inset Text
1992
1993 \layout Standard
1994
1995 4
1996 \end_inset 
1997 </cell>
1998 </row>
1999 <row topline="true">
2000 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2001 \begin_inset Text
2002
2003 \layout Standard
2004
2005 nb_channels
2006 \end_inset 
2007 </cell>
2008 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2009 \begin_inset Text
2010
2011 \layout Standard
2012
2013 int
2014 \end_inset 
2015 </cell>
2016 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2017 \begin_inset Text
2018
2019 \layout Standard
2020
2021 4
2022 \end_inset 
2023 </cell>
2024 </row>
2025 <row topline="true">
2026 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2027 \begin_inset Text
2028
2029 \layout Standard
2030
2031 bitrate
2032 \end_inset 
2033 </cell>
2034 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2035 \begin_inset Text
2036
2037 \layout Standard
2038
2039 int
2040 \end_inset 
2041 </cell>
2042 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2043 \begin_inset Text
2044
2045 \layout Standard
2046
2047 4
2048 \end_inset 
2049 </cell>
2050 </row>
2051 <row topline="true">
2052 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2053 \begin_inset Text
2054
2055 \layout Standard
2056
2057 frame_size
2058 \end_inset 
2059 </cell>
2060 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2061 \begin_inset Text
2062
2063 \layout Standard
2064
2065 int
2066 \end_inset 
2067 </cell>
2068 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2069 \begin_inset Text
2070
2071 \layout Standard
2072
2073 4
2074 \end_inset 
2075 </cell>
2076 </row>
2077 <row topline="true">
2078 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2079 \begin_inset Text
2080
2081 \layout Standard
2082
2083 vbr
2084 \end_inset 
2085 </cell>
2086 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2087 \begin_inset Text
2088
2089 \layout Standard
2090
2091 int
2092 \end_inset 
2093 </cell>
2094 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2095 \begin_inset Text
2096
2097 \layout Standard
2098
2099 4
2100 \end_inset 
2101 </cell>
2102 </row>
2103 <row topline="true">
2104 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2105 \begin_inset Text
2106
2107 \layout Standard
2108
2109 frames_per_packet
2110 \end_inset 
2111 </cell>
2112 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2113 \begin_inset Text
2114
2115 \layout Standard
2116
2117 int
2118 \end_inset 
2119 </cell>
2120 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2121 \begin_inset Text
2122
2123 \layout Standard
2124
2125 4
2126 \end_inset 
2127 </cell>
2128 </row>
2129 <row topline="true">
2130 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2131 \begin_inset Text
2132
2133 \layout Standard
2134
2135 extra_headers
2136 \end_inset 
2137 </cell>
2138 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2139 \begin_inset Text
2140
2141 \layout Standard
2142
2143 int
2144 \end_inset 
2145 </cell>
2146 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2147 \begin_inset Text
2148
2149 \layout Standard
2150
2151 4
2152 \end_inset 
2153 </cell>
2154 </row>
2155 <row topline="true">
2156 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2157 \begin_inset Text
2158
2159 \layout Standard
2160
2161 reserved1
2162 \end_inset 
2163 </cell>
2164 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2165 \begin_inset Text
2166
2167 \layout Standard
2168
2169 int
2170 \end_inset 
2171 </cell>
2172 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2173 \begin_inset Text
2174
2175 \layout Standard
2176
2177 4
2178 \end_inset 
2179 </cell>
2180 </row>
2181 <row topline="true" bottomline="true">
2182 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2183 \begin_inset Text
2184
2185 \layout Standard
2186
2187 reserved2
2188 \end_inset 
2189 </cell>
2190 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2191 \begin_inset Text
2192
2193 \layout Standard
2194
2195 int
2196 \end_inset 
2197 </cell>
2198 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2199 \begin_inset Text
2200
2201 \layout Standard
2202
2203 4
2204 \end_inset 
2205 </cell>
2206 </row>
2207 </lyxtabular>
2208
2209 \end_inset 
2210
2211
2212 \layout Caption
2213
2214 Ogg/Speex header packet
2215 \begin_inset LatexCommand \label{cap:ogg_speex_header}
2216
2217 \end_inset 
2218
2219
2220 \end_inset 
2221
2222
2223 \layout Section
2224 \pagebreak_top 
2225 Introduction to CELP Coding
2226 \begin_inset LatexCommand \index{CELP}
2227
2228 \end_inset 
2229
2230
2231 \layout Standard
2232
2233 The three following sections describe the internals of the codec and require
2234  some signal processing knowledge.
2235  If you are only interested in using Speex, they are not required.
2236 \layout Standard
2237
2238 Speex is based on CELP, which stands for Code Excited Linear Prediction.
2239  This section attempts to introduce the principles behind CELP, so if you
2240  are already familiar with CELP, you can safely skip to section 
2241 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
2242
2243 \end_inset 
2244
2245 .
2246  The CELP technique is based on three ideas:
2247 \layout Enumerate
2248
2249 The use of a linear prediction (LP) model to model the vocal tract
2250 \layout Enumerate
2251
2252 The use of (adaptive and fixed) codebook entries as input (excitation) of
2253  the LP model
2254 \layout Enumerate
2255
2256 The search performed in closed-loop in a 
2257 \begin_inset Quotes eld
2258 \end_inset 
2259
2260 perceptually weighted domain
2261 \begin_inset Quotes erd
2262 \end_inset 
2263
2264
2265 \layout Standard
2266
2267 This section describes the basic ideas behind CELP.
2268  Note that it's still incomplete.
2269 \layout Subsection
2270
2271 Linear Prediction (LPC)
2272 \begin_inset LatexCommand \index{linear prediction}
2273
2274 \end_inset 
2275
2276
2277 \layout Standard
2278
2279 Linear prediction is at the base of may speech coding techniques, including
2280  CELP.
2281  The idea behind it is to predict the signal 
2282 \begin_inset Formula $x(n)$
2283 \end_inset 
2284
2285  using a linear combination of its past samples:
2286 \layout Standard
2287
2288
2289 \begin_inset Formula \[
2290 y[n]=\sum _{i=1}^{N}a_{i}x[n-i]\]
2291
2292 \end_inset 
2293
2294 where 
2295 \begin_inset Formula $y[n]$
2296 \end_inset 
2297
2298  is the linear prediction of 
2299 \begin_inset Formula $x[n]$
2300 \end_inset 
2301
2302 .
2303  The prediction error is thus given by:
2304 \begin_inset Formula \[
2305 e[n]=x[n]-y[n]=x[n]-\sum _{i=1}^{N}a_{i}x[n-i]\]
2306
2307 \end_inset 
2308
2309
2310 \layout Standard
2311
2312 The goal of the LPC analysis is to find the best prediction coefficients
2313  
2314 \begin_inset Formula $a_{i}$
2315 \end_inset 
2316
2317  which minimize the quadratic error function:
2318 \begin_inset Formula \[
2319 E=\sum _{n=0}^{L-1}\left[e[n]\right]^{2}=\sum _{n=0}^{L-1}\left[x[n]-\sum _{i=1}^{N}a_{i}x[n-i]\right]^{2}\]
2320
2321 \end_inset 
2322
2323 That can be done by making all derivatives 
2324 \begin_inset Formula $\frac{\partial E}{\partial a_{i}}$
2325 \end_inset 
2326
2327  equal to zero:
2328 \begin_inset Formula \[
2329 \frac{\partial E}{\partial a_{i}}=\frac{\partial }{\partial a_{i}}\sum _{n=0}^{L-1}\left[x[n]-\sum _{i=1}^{N}a_{i}x[n-i]\right]^{2}=0\]
2330
2331 \end_inset 
2332
2333
2334 \layout Standard
2335
2336 The 
2337 \begin_inset Formula $a_{i}$
2338 \end_inset 
2339
2340  filter coefficients are computed using the Levinson-Durbin
2341 \begin_inset LatexCommand \index{Levinson-Durbin}
2342
2343 \end_inset 
2344
2345  algorithm, which starts from the auto-correlation
2346 \begin_inset LatexCommand \index{auto-correlation}
2347
2348 \end_inset 
2349
2350  
2351 \begin_inset Formula $R(m)$
2352 \end_inset 
2353
2354  of the signal 
2355 \begin_inset Formula $x[n]$
2356 \end_inset 
2357
2358 .
2359 \layout Standard
2360
2361
2362 \begin_inset Formula \[
2363 R(m)=\sum _{i=0}^{N-1}x[i]x[i-m]\]
2364
2365 \end_inset 
2366
2367
2368 \layout Standard
2369
2370 For an order 
2371 \begin_inset Formula $N$
2372 \end_inset 
2373
2374  filter, we have:
2375 \begin_inset Formula \[
2376 \mathbf{R}=\left[\begin{array}{cccc}
2377  R(0) & R(1) & \cdots  & R(N-1)\\
2378  R(1) & R(0) & \cdots  & R(N-2)\\
2379  \vdots  & \vdots  & \ddots  & \vdots \\
2380  R(N-1) & R(N-2) & \cdots  & R(0)\end{array}
2381 \right]\]
2382
2383 \end_inset 
2384
2385
2386 \begin_inset Formula \[
2387 \mathbf{r}=\left[\begin{array}{c}
2388  R(1)\\
2389  R(2)\\
2390  \vdots \\
2391  R(N)\end{array}
2392 \right]\]
2393
2394 \end_inset 
2395
2396
2397 \layout Standard
2398
2399 The filter coefficients 
2400 \begin_inset Formula $a_{i}$
2401 \end_inset 
2402
2403  are found by solving the system 
2404 \begin_inset Formula $\mathbf{Ra}=\mathbf{r}$
2405 \end_inset 
2406
2407 .
2408  What the Levinson-Durbin algorithm does here is making the solution to
2409  the problem 
2410 \begin_inset Formula $\mathcal{O}\left(N^{2}\right)$
2411 \end_inset 
2412
2413  instead of 
2414 \begin_inset Formula $\mathcal{O}\left(N^{3}\right)$
2415 \end_inset 
2416
2417  by exploiting the fact that matrix 
2418 \begin_inset Formula $\mathbf{R}$
2419 \end_inset 
2420
2421  is toeplitz hermitian.
2422  Also, it can be proved that all the roots of 
2423 \begin_inset Formula $A(z)$
2424 \end_inset 
2425
2426  are within the unit circle, which means that 
2427 \begin_inset Formula $1/A(z)$
2428 \end_inset 
2429
2430  is always stable.
2431  This is in theory; in practice because of finite precision, there are two
2432  commonly used techniques to make sure we have a stable filter.
2433  First, we multiply 
2434 \begin_inset Formula $R(0)$
2435 \end_inset 
2436
2437  by a number slightly above one (such as 1.0001), which is equivalent to
2438  adding noise to the signal.
2439  Also, we can apply a window to the auto-correlation, which is equivalent
2440  to filtering in the frequency domain, reducing sharp resonances.
2441 \layout Standard
2442
2443 The linear prediction model represents each speech sample as linear combination
2444  of past samples, plus an error signal called the excitation (or residual).
2445 \begin_inset Formula \[
2446 x[n]=\sum _{i=1}^{N}a_{i}x[n-i]+e[n]\]
2447
2448 \end_inset 
2449
2450
2451 \layout Standard
2452
2453 In the 
2454 \emph on 
2455 z
2456 \emph default 
2457 -domain, this can be expressed as
2458 \layout Standard
2459
2460
2461 \begin_inset Formula \[
2462 x(z)=\frac{1}{A(z)}\: e(z)\]
2463
2464 \end_inset 
2465
2466
2467 \layout Standard
2468
2469 where 
2470 \begin_inset Formula $A(z)$
2471 \end_inset 
2472
2473  is defined as
2474 \layout Standard
2475
2476
2477 \begin_inset Formula \[
2478 A(z)=1-\sum _{i=1}^{N}a_{i}z^{-i}\]
2479
2480 \end_inset 
2481
2482
2483 \layout Standard
2484
2485 We usually refer to 
2486 \begin_inset Formula $A(z)$
2487 \end_inset 
2488
2489  as the analysis filter and 
2490 \begin_inset Formula $1/A(z)$
2491 \end_inset 
2492
2493  as the synthesis filter.
2494  The whole process is called short-term prediction as it predicts the signal
2495  
2496 \begin_inset Formula $x[n]$
2497 \end_inset 
2498
2499  using a prediction using only the 
2500 \begin_inset Formula $N$
2501 \end_inset 
2502
2503  past samples, where 
2504 \begin_inset Formula $N$
2505 \end_inset 
2506
2507  is usually around 10.
2508 \layout Standard
2509
2510 Because LPC coefficients have very little robustness to quantization, they
2511  are converted to Line Spectral Pair
2512 \begin_inset LatexCommand \index{line spectral pair}
2513
2514 \end_inset 
2515
2516  (LSP) coefficients which have a much better behaviour with quantization,
2517  one of them being that it's easy to keep the filter stable.
2518  
2519 \layout Subsection
2520
2521 Pitch Prediction
2522 \begin_inset LatexCommand \index{pitch}
2523
2524 \end_inset 
2525
2526
2527 \layout Standard
2528
2529 During voiced segments, the speech signal is periodic, so it is possible
2530  to take advantage of that property by approximating the excitation signal
2531  
2532 \begin_inset Formula $e[n]$
2533 \end_inset 
2534
2535  by a gain times the past of the excitation:
2536 \layout Standard
2537
2538
2539 \begin_inset Formula \[
2540 e[n]\simeq p[n]=\beta e[n-T]\]
2541
2542 \end_inset 
2543
2544
2545 \layout Standard
2546
2547 where 
2548 \begin_inset Formula $T$
2549 \end_inset 
2550
2551  is the pitch period, 
2552 \begin_inset Formula $\beta $
2553 \end_inset 
2554
2555  is the pitch gain and 
2556 \begin_inset Formula $c(n)$
2557 \end_inset 
2558
2559  is taken from the 
2560 \emph on 
2561 innovation codebook
2562 \emph default 
2563 .
2564  We call that long-term prediction since the excitation is predicted from
2565  
2566 \begin_inset Formula $e[n-T]$
2567 \end_inset 
2568
2569  with 
2570 \begin_inset Formula $T\gg N$
2571 \end_inset 
2572
2573 .
2574 \layout Subsection
2575
2576 Innovation Codebook
2577 \layout Standard
2578
2579 The final excitation 
2580 \begin_inset Formula $e[n]$
2581 \end_inset 
2582
2583  will be the sum of the pitch prediction and an 
2584 \emph on 
2585 innovation
2586 \emph default 
2587  signal 
2588 \begin_inset Formula $c[n]$
2589 \end_inset 
2590
2591  taken from a fixed codebook.
2592 \layout Standard
2593
2594
2595 \begin_inset Formula \[
2596 e[n]=p[n]+c[n]=\beta e[n-T]+c[n]\]
2597
2598 \end_inset 
2599
2600 This is where most of the bits in a CELP codec are allocated.
2601  It represents the information that couldn't be obtained either from linear
2602  prediction or pitch prediction.
2603  In the 
2604 \emph on 
2605 z
2606 \emph default 
2607 -domain we can represent the final signal 
2608 \begin_inset Formula $X(z)$
2609 \end_inset 
2610
2611  as 
2612 \begin_inset Formula \[
2613 X(z)=\frac{C(z)}{A(z)\left(1-\beta z^{-T}\right)}\]
2614
2615 \end_inset 
2616
2617
2618 \layout Subsection
2619
2620 Analysis-by-Synthesis and Error Weighting
2621 \begin_inset LatexCommand \index{error weighting}
2622
2623 \end_inset 
2624
2625
2626 \begin_inset LatexCommand \index{analysis-by-synthesis}
2627
2628 \end_inset 
2629
2630
2631 \layout Standard
2632
2633 Most (if not all) modern audio codecs attempt to 
2634 \begin_inset Quotes eld
2635 \end_inset 
2636
2637 shape
2638 \begin_inset Quotes erd
2639 \end_inset 
2640
2641  the noise so that it appears mostly in the frequency regions where the
2642  ear cannot detect it.
2643  For example, the ear is more tolerant to noise in parts of the spectrum
2644  that are louder and 
2645 \emph on 
2646 vice versa
2647 \emph default 
2648 .
2649  That's why instead of minimizing the simple quadratic error
2650 \begin_inset Formula \[
2651 E=\sum _{n}\left(x[n]-\overline{x}[n]\right)^{2}\]
2652
2653 \end_inset 
2654
2655 where 
2656 \begin_inset Formula $\overline{x}[n]$
2657 \end_inset 
2658
2659  is the encoder signal, we minimize the error for the perceptually weighted
2660  signal
2661 \begin_inset Formula \[
2662 X_{w}(z)=W(z)X(z)\]
2663
2664 \end_inset 
2665
2666 where 
2667 \begin_inset Formula $W(z)$
2668 \end_inset 
2669
2670  is the weighting filter, usually of the form
2671 \layout Standard
2672
2673
2674 \begin_inset Formula \begin{equation}
2675 W(z)=\frac{A\left(\frac{z}{\gamma _{1}}\right)}{A\left(\frac{z}{\gamma _{2}}\right)}\label{eq:weighting_filter}\end{equation}
2676
2677 \end_inset 
2678
2679
2680 \layout Standard
2681
2682 with control parameters 
2683 \begin_inset Formula $\gamma _{1}>\gamma _{2}$
2684 \end_inset 
2685
2686 .
2687  If the noise is white in the perceptually weighted domain, then in the
2688  signal domain its spectral shape will be of the form
2689 \begin_inset Formula \[
2690 A_{noise}(z)=\frac{1}{W(z)}=\frac{A\left(\frac{z}{\gamma _{2}}\right)}{A\left(\frac{z}{\gamma _{1}}\right)}\]
2691
2692 \end_inset 
2693
2694
2695 \layout Standard
2696
2697 If a filter 
2698 \begin_inset Formula $A(z)$
2699 \end_inset 
2700
2701  has (complex) poles at 
2702 \begin_inset Formula $p_{i}$
2703 \end_inset 
2704
2705  in the 
2706 \begin_inset Formula $z$
2707 \end_inset 
2708
2709 -plane, the filter 
2710 \begin_inset Formula $A(z/\gamma )$
2711 \end_inset 
2712
2713  filter will have its poles at 
2714 \begin_inset Formula $p_{i}^{'}=\gamma p_{i}$
2715 \end_inset 
2716
2717 , making it a flatter version of 
2718 \begin_inset Formula $A(z)$
2719 \end_inset 
2720
2721 .
2722 \layout Section
2723 \pagebreak_top 
2724 Speex narrowband mode
2725 \begin_inset LatexCommand \label{sec:Speex-narrowband-mode}
2726
2727 \end_inset 
2728
2729
2730 \begin_inset LatexCommand \index{narrowband}
2731
2732 \end_inset 
2733
2734
2735 \layout Standard
2736
2737 This section looks at how Speex works for narrowband (
2738 \begin_inset Formula $8\: \mathrm{kHz}$
2739 \end_inset 
2740
2741  sampling rate) operation.
2742  The frame size for this mode is 
2743 \begin_inset Formula $20\: \mathrm{ms}$
2744 \end_inset 
2745
2746 , corresponding to 160 samples.
2747  Each frame is also subdivided into 4 sub-frames of 40 samples each.
2748 \layout Standard
2749
2750 Also many design decisions were based on the original goals and assumptions:
2751 \layout Itemize
2752
2753 Minimizing the amount of information extracted from past frames (for robustness
2754  to packet loss)
2755 \layout Itemize
2756
2757 Dynamically-selectable codebooks (LSP, pitch and innovation)
2758 \layout Itemize
2759
2760 sub-vector fixed (innovation) codebooks
2761 \layout Subsection
2762
2763 LPC Analysis
2764 \begin_inset LatexCommand \index{linear prediction}
2765
2766 \end_inset 
2767
2768
2769 \layout Standard
2770
2771 An LPC analysis is first performed on a (asymetric Hamming) window that
2772  spans all the current frame and half a frame in advance.
2773  The LPC coefficients are then converted to Line Spectral Pair
2774 \begin_inset LatexCommand \index{line spectral pair}
2775
2776 \end_inset 
2777
2778  (LSP), a representation that is more robust to quantization.
2779  The LSP's are considered to be associated to the 
2780 \begin_inset Formula $4^{th}$
2781 \end_inset 
2782
2783  sub-frames and the LSP's associated to the first 3 sub-frames are linearly
2784  interpolated using the current and previous LSP's.
2785 \layout Standard
2786
2787 The LSP's are encoded using 30 bits for higher quality modes and 18 bits
2788  for lower quality, through the use of a multi-stage split-vector quantizer.
2789  For the lower quality modes, the 10 coefficients are first quantized with
2790  6 bits and the error is then divided in two 5-coefficient sub-vectors.
2791  Each of them is quantized with 6 bits, for a total of 18 bits.
2792  For the higher quality modes, the remaining error on both sub-vectors is
2793  further quantized with 6 bits each, for a total of 30 bits.
2794 \layout Standard
2795
2796 The perceptual weighting filter 
2797 \begin_inset Formula $W(z)$
2798 \end_inset 
2799
2800  used by Speex is derived from the LPC filter 
2801 \begin_inset Formula $A(z)$
2802 \end_inset 
2803
2804  and corresponds to the one described by eq.
2805  
2806 \begin_inset LatexCommand \ref{eq:weighting_filter}
2807
2808 \end_inset 
2809
2810  with 
2811 \begin_inset Formula $\gamma _{1}=0.9$
2812 \end_inset 
2813
2814  and 
2815 \begin_inset Formula $\gamma _{2}=0.6$
2816 \end_inset 
2817
2818 .
2819  We can use the unquantized 
2820 \begin_inset Formula $A(z)$
2821 \end_inset 
2822
2823  filter since the weighting filter is only used in the encoder.
2824 \layout Subsection
2825
2826 Pitch Prediction (adaptive codebook)
2827 \begin_inset LatexCommand \index{pitch}
2828
2829 \end_inset 
2830
2831
2832 \layout Standard
2833
2834 Speex uses a 3-tap prediction for pitch.
2835  That is, the pitch prediction signal 
2836 \begin_inset Formula $p[n]$
2837 \end_inset 
2838
2839  is obtained by the past of the excitation by:
2840 \begin_inset Formula \[
2841 p[n]=\beta _{0}e[n-T-1]+\beta _{1}e[n-T]+\beta _{2}e[n-T+1]\]
2842
2843 \end_inset 
2844
2845
2846 \layout Standard
2847
2848 where 
2849 \begin_inset Formula $T$
2850 \end_inset 
2851
2852  is the pitch period and the 
2853 \begin_inset Formula $\beta _{i}$
2854 \end_inset 
2855
2856  are the prediction (filter) taps.
2857  It is worth noting that when the pitch is smaller than the sub-frame size,
2858  we repeat the excitation at a period 
2859 \begin_inset Formula $T$
2860 \end_inset 
2861
2862 .
2863  For example, when 
2864 \begin_inset Formula $n-T+1$
2865 \end_inset 
2866
2867 , we use 
2868 \begin_inset Formula $n-2T+1$
2869 \end_inset 
2870
2871  instead.
2872  The period and quantized gains are determined in closed loop.
2873  In most modes, the pitch period is encoded with 7 bits in the 
2874 \begin_inset Formula $\left[17,144\right]$
2875 \end_inset 
2876
2877  range and the 
2878 \begin_inset Formula $\beta _{i}$
2879 \end_inset 
2880
2881  coefficients are vector-quantized using 7 bits (15 kbps narrowband and
2882  above) at higher bit-rates and 5 bits at lower bit-rates (11 kbps narrowband
2883  and below).
2884 \layout Subsection
2885
2886 Innovation Codebook
2887 \layout Standard
2888
2889 In Speex, the innovation signal is quantized using shape-only vector quantizatio
2890 n (VQ).
2891  That means that the codebooks that are used represent both the shape and
2892  the gain at the same time.
2893  This save many bits that would otherwise be allocated for a separate gain
2894  at the price of a slight increase in complexity.
2895  
2896 \layout Subsection
2897
2898 Bit allocation
2899 \layout Standard
2900
2901 There are 7 different narrowband bit-rates defined for Speex, ranging from
2902  200 bps to 18.15 kbps, although the modes below 5.9 kbps should not be used
2903  for speech.
2904  The bit-allocation for each mode is detailed in table 
2905 \begin_inset LatexCommand \ref{cap:bits-narrowband}
2906
2907 \end_inset 
2908
2909 .
2910  Each frame starts with the mode ID encoded with 4 bits which allows a range
2911  from 0 to 15, though only the first 7 values are used (the others are reserved).
2912  The parameters are listed in the table in the order they are packed in
2913  the bit-stream.
2914  All frame-based parameters are packed before sub-frame parameters.
2915  The parameters for a certain sub-frame are all packed before the following
2916  sub-frame is packed.
2917  Note that the 
2918 \begin_inset Quotes eld
2919 \end_inset 
2920
2921 OL
2922 \begin_inset Quotes erd
2923 \end_inset 
2924
2925  in the parameter description means that the parameter is an open loop estimatio
2926 n based on the whole frame.
2927 \layout Standard
2928
2929
2930 \begin_inset Float table
2931 placement h
2932 wide true
2933 collapsed false
2934
2935 \layout Standard
2936
2937
2938 \begin_inset  Tabular
2939 <lyxtabular version="3" rows="12" columns="11">
2940 <features>
2941 <column alignment="center" valignment="top" leftline="true" width="0pt">
2942 <column alignment="center" valignment="top" leftline="true" width="0pt">
2943 <column alignment="center" valignment="top" leftline="true" width="0pt">
2944 <column alignment="center" valignment="top" leftline="true" width="0pt">
2945 <column alignment="center" valignment="top" leftline="true" width="0pt">
2946 <column alignment="center" valignment="top" leftline="true" width="0pt">
2947 <column alignment="center" valignment="top" leftline="true" width="0pt">
2948 <column alignment="center" valignment="top" leftline="true" width="0pt">
2949 <column alignment="center" valignment="top" leftline="true" width="0pt">
2950 <column alignment="center" valignment="top" leftline="true" width="0pt">
2951 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
2952 <row topline="true" bottomline="true">
2953 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2954 \begin_inset Text
2955
2956 \layout Standard
2957
2958 Parameter
2959 \end_inset 
2960 </cell>
2961 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2962 \begin_inset Text
2963
2964 \layout Standard
2965
2966 Update rate
2967 \end_inset 
2968 </cell>
2969 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2970 \begin_inset Text
2971
2972 \layout Standard
2973
2974 0
2975 \end_inset 
2976 </cell>
2977 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2978 \begin_inset Text
2979
2980 \layout Standard
2981
2982 1
2983 \end_inset 
2984 </cell>
2985 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2986 \begin_inset Text
2987
2988 \layout Standard
2989
2990 2
2991 \end_inset 
2992 </cell>
2993 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2994 \begin_inset Text
2995
2996 \layout Standard
2997
2998 3
2999 \end_inset 
3000 </cell>
3001 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3002 \begin_inset Text
3003
3004 \layout Standard
3005
3006 4
3007 \end_inset 
3008 </cell>
3009 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3010 \begin_inset Text
3011
3012 \layout Standard
3013
3014 5
3015 \end_inset 
3016 </cell>
3017 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3018 \begin_inset Text
3019
3020 \layout Standard
3021
3022 6
3023 \end_inset 
3024 </cell>
3025 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3026 \begin_inset Text
3027
3028 \layout Standard
3029
3030 7
3031 \end_inset 
3032 </cell>
3033 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3034 \begin_inset Text
3035
3036 \layout Standard
3037
3038 8
3039 \end_inset 
3040 </cell>
3041 </row>
3042 <row topline="true">
3043 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3044 \begin_inset Text
3045
3046 \layout Standard
3047
3048 Wideband bit
3049 \end_inset 
3050 </cell>
3051 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3052 \begin_inset Text
3053
3054 \layout Standard
3055
3056 frame
3057 \end_inset 
3058 </cell>
3059 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3060 \begin_inset Text
3061
3062 \layout Standard
3063
3064 1
3065 \end_inset 
3066 </cell>
3067 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3068 \begin_inset Text
3069
3070 \layout Standard
3071
3072 1
3073 \end_inset 
3074 </cell>
3075 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3076 \begin_inset Text
3077
3078 \layout Standard
3079
3080 1
3081 \end_inset 
3082 </cell>
3083 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3084 \begin_inset Text
3085
3086 \layout Standard
3087
3088 1
3089 \end_inset 
3090 </cell>
3091 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3092 \begin_inset Text
3093
3094 \layout Standard
3095
3096 1
3097 \end_inset 
3098 </cell>
3099 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3100 \begin_inset Text
3101
3102 \layout Standard
3103
3104 1
3105 \end_inset 
3106 </cell>
3107 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3108 \begin_inset Text
3109
3110 \layout Standard
3111
3112 1
3113 \end_inset 
3114 </cell>
3115 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3116 \begin_inset Text
3117
3118 \layout Standard
3119
3120 1
3121 \end_inset 
3122 </cell>
3123 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3124 \begin_inset Text
3125
3126 \layout Standard
3127
3128 1
3129 \end_inset 
3130 </cell>
3131 </row>
3132 <row topline="true">
3133 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3134 \begin_inset Text
3135
3136 \layout Standard
3137
3138 Mode ID
3139 \end_inset 
3140 </cell>
3141 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3142 \begin_inset Text
3143
3144 \layout Standard
3145
3146 frame
3147 \end_inset 
3148 </cell>
3149 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3150 \begin_inset Text
3151
3152 \layout Standard
3153
3154 4
3155 \end_inset 
3156 </cell>
3157 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3158 \begin_inset Text
3159
3160 \layout Standard
3161
3162 4
3163 \end_inset 
3164 </cell>
3165 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3166 \begin_inset Text
3167
3168 \layout Standard
3169
3170 4
3171 \end_inset 
3172 </cell>
3173 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3174 \begin_inset Text
3175
3176 \layout Standard
3177
3178 4
3179 \end_inset 
3180 </cell>
3181 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3182 \begin_inset Text
3183
3184 \layout Standard
3185
3186 4
3187 \end_inset 
3188 </cell>
3189 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3190 \begin_inset Text
3191
3192 \layout Standard
3193
3194 4
3195 \end_inset 
3196 </cell>
3197 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3198 \begin_inset Text
3199
3200 \layout Standard
3201
3202 4
3203 \end_inset 
3204 </cell>
3205 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3206 \begin_inset Text
3207
3208 \layout Standard
3209
3210 4
3211 \end_inset 
3212 </cell>
3213 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3214 \begin_inset Text
3215
3216 \layout Standard
3217
3218 4
3219 \end_inset 
3220 </cell>
3221 </row>
3222 <row topline="true">
3223 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3224 \begin_inset Text
3225
3226 \layout Standard
3227
3228 LSP
3229 \end_inset 
3230 </cell>
3231 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3232 \begin_inset Text
3233
3234 \layout Standard
3235
3236 frame
3237 \end_inset 
3238 </cell>
3239 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3240 \begin_inset Text
3241
3242 \layout Standard
3243
3244 0
3245 \end_inset 
3246 </cell>
3247 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3248 \begin_inset Text
3249
3250 \layout Standard
3251
3252 18
3253 \end_inset 
3254 </cell>
3255 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3256 \begin_inset Text
3257
3258 \layout Standard
3259
3260 18
3261 \end_inset 
3262 </cell>
3263 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3264 \begin_inset Text
3265
3266 \layout Standard
3267
3268 18
3269 \end_inset 
3270 </cell>
3271 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3272 \begin_inset Text
3273
3274 \layout Standard
3275
3276 18
3277 \end_inset 
3278 </cell>
3279 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3280 \begin_inset Text
3281
3282 \layout Standard
3283
3284 30
3285 \end_inset 
3286 </cell>
3287 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3288 \begin_inset Text
3289
3290 \layout Standard
3291
3292 30
3293 \end_inset 
3294 </cell>
3295 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3296 \begin_inset Text
3297
3298 \layout Standard
3299
3300 30
3301 \end_inset 
3302 </cell>
3303 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3304 \begin_inset Text
3305
3306 \layout Standard
3307
3308 18
3309 \end_inset 
3310 </cell>
3311 </row>
3312 <row topline="true">
3313 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3314 \begin_inset Text
3315
3316 \layout Standard
3317
3318 OL pitch
3319 \end_inset 
3320 </cell>
3321 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3322 \begin_inset Text
3323
3324 \layout Standard
3325
3326 frame
3327 \end_inset 
3328 </cell>
3329 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3330 \begin_inset Text
3331
3332 \layout Standard
3333
3334 0
3335 \end_inset 
3336 </cell>
3337 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3338 \begin_inset Text
3339
3340 \layout Standard
3341
3342 7
3343 \end_inset 
3344 </cell>
3345 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3346 \begin_inset Text
3347
3348 \layout Standard
3349
3350 7
3351 \end_inset 
3352 </cell>
3353 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3354 \begin_inset Text
3355
3356 \layout Standard
3357
3358 0
3359 \end_inset 
3360 </cell>
3361 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3362 \begin_inset Text
3363
3364 \layout Standard
3365
3366 0
3367 \end_inset 
3368 </cell>
3369 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3370 \begin_inset Text
3371
3372 \layout Standard
3373
3374 0
3375 \end_inset 
3376 </cell>
3377 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3378 \begin_inset Text
3379
3380 \layout Standard
3381
3382 0
3383 \end_inset 
3384 </cell>
3385 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3386 \begin_inset Text
3387
3388 \layout Standard
3389
3390 0
3391 \end_inset 
3392 </cell>
3393 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3394 \begin_inset Text
3395
3396 \layout Standard
3397
3398 7
3399 \end_inset 
3400 </cell>
3401 </row>
3402 <row topline="true">
3403 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3404 \begin_inset Text
3405
3406 \layout Standard
3407
3408 OL pitch gain
3409 \end_inset 
3410 </cell>
3411 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3412 \begin_inset Text
3413
3414 \layout Standard
3415
3416 frame
3417 \end_inset 
3418 </cell>
3419 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3420 \begin_inset Text
3421
3422 \layout Standard
3423
3424 0
3425 \end_inset 
3426 </cell>
3427 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3428 \begin_inset Text
3429
3430 \layout Standard
3431
3432 4
3433 \end_inset 
3434 </cell>
3435 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3436 \begin_inset Text
3437
3438 \layout Standard
3439
3440 0
3441 \end_inset 
3442 </cell>
3443 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3444 \begin_inset Text
3445
3446 \layout Standard
3447
3448 0
3449 \end_inset 
3450 </cell>
3451 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3452 \begin_inset Text
3453
3454 \layout Standard
3455
3456 0
3457 \end_inset 
3458 </cell>
3459 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3460 \begin_inset Text
3461
3462 \layout Standard
3463
3464 0
3465 \end_inset 
3466 </cell>
3467 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3468 \begin_inset Text
3469
3470 \layout Standard
3471
3472 0
3473 \end_inset 
3474 </cell>
3475 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3476 \begin_inset Text
3477
3478 \layout Standard
3479
3480 0
3481 \end_inset 
3482 </cell>
3483 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3484 \begin_inset Text
3485
3486 \layout Standard
3487
3488 4
3489 \end_inset 
3490 </cell>
3491 </row>
3492 <row topline="true">
3493 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3494 \begin_inset Text
3495
3496 \layout Standard
3497
3498 OL Exc gain
3499 \end_inset 
3500 </cell>
3501 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3502 \begin_inset Text
3503
3504 \layout Standard
3505
3506 frame
3507 \end_inset 
3508 </cell>
3509 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3510 \begin_inset Text
3511
3512 \layout Standard
3513
3514 0
3515 \end_inset 
3516 </cell>
3517 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3518 \begin_inset Text
3519
3520 \layout Standard
3521
3522 5
3523 \end_inset 
3524 </cell>
3525 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3526 \begin_inset Text
3527
3528 \layout Standard
3529
3530 5
3531 \end_inset 
3532 </cell>
3533 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3534 \begin_inset Text
3535
3536 \layout Standard
3537
3538 5
3539 \end_inset 
3540 </cell>
3541 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3542 \begin_inset Text
3543
3544 \layout Standard
3545
3546 5
3547 \end_inset 
3548 </cell>
3549 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3550 \begin_inset Text
3551
3552 \layout Standard
3553
3554 5
3555 \end_inset 
3556 </cell>
3557 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3558 \begin_inset Text
3559
3560 \layout Standard
3561
3562 5
3563 \end_inset 
3564 </cell>
3565 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3566 \begin_inset Text
3567
3568 \layout Standard
3569
3570 5
3571 \end_inset 
3572 </cell>
3573 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3574 \begin_inset Text
3575
3576 \layout Standard
3577
3578 5
3579 \end_inset 
3580 </cell>
3581 </row>
3582 <row topline="true">
3583 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3584 \begin_inset Text
3585
3586 \layout Standard
3587
3588 Fine pitch
3589 \end_inset 
3590 </cell>
3591 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3592 \begin_inset Text
3593
3594 \layout Standard
3595
3596 sub-frame
3597 \end_inset 
3598 </cell>
3599 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3600 \begin_inset Text
3601
3602 \layout Standard
3603
3604 0
3605 \end_inset 
3606 </cell>
3607 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3608 \begin_inset Text
3609
3610 \layout Standard
3611
3612 0
3613 \end_inset 
3614 </cell>
3615 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3616 \begin_inset Text
3617
3618 \layout Standard
3619
3620 0
3621 \end_inset 
3622 </cell>
3623 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3624 \begin_inset Text
3625
3626 \layout Standard
3627
3628 7
3629 \end_inset 
3630 </cell>
3631 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3632 \begin_inset Text
3633
3634 \layout Standard
3635
3636 7
3637 \end_inset 
3638 </cell>
3639 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3640 \begin_inset Text
3641
3642 \layout Standard
3643
3644 7
3645 \end_inset 
3646 </cell>
3647 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3648 \begin_inset Text
3649
3650 \layout Standard
3651
3652 7
3653 \end_inset 
3654 </cell>
3655 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3656 \begin_inset Text
3657
3658 \layout Standard
3659
3660 7
3661 \end_inset 
3662 </cell>
3663 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3664 \begin_inset Text
3665
3666 \layout Standard
3667
3668 0
3669 \end_inset 
3670 </cell>
3671 </row>
3672 <row topline="true">
3673 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3674 \begin_inset Text
3675
3676 \layout Standard
3677
3678 Pitch gain
3679 \end_inset 
3680 </cell>
3681 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3682 \begin_inset Text
3683
3684 \layout Standard
3685
3686 sub-frame
3687 \end_inset 
3688 </cell>
3689 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3690 \begin_inset Text
3691
3692 \layout Standard
3693
3694 0
3695 \end_inset 
3696 </cell>
3697 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3698 \begin_inset Text
3699
3700 \layout Standard
3701
3702 0
3703 \end_inset 
3704 </cell>
3705 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3706 \begin_inset Text
3707
3708 \layout Standard
3709
3710 5
3711 \end_inset 
3712 </cell>
3713 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3714 \begin_inset Text
3715
3716 \layout Standard
3717
3718 5
3719 \end_inset 
3720 </cell>
3721 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3722 \begin_inset Text
3723
3724 \layout Standard
3725
3726 5
3727 \end_inset 
3728 </cell>
3729 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3730 \begin_inset Text
3731
3732 \layout Standard
3733
3734 7
3735 \end_inset 
3736 </cell>
3737 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3738 \begin_inset Text
3739
3740 \layout Standard
3741
3742 7
3743 \end_inset 
3744 </cell>
3745 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3746 \begin_inset Text
3747
3748 \layout Standard
3749
3750 7
3751 \end_inset 
3752 </cell>
3753 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3754 \begin_inset Text
3755
3756 \layout Standard
3757
3758 0
3759 \end_inset 
3760 </cell>
3761 </row>
3762 <row topline="true">
3763 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3764 \begin_inset Text
3765
3766 \layout Standard
3767
3768 Innovation gain
3769 \end_inset 
3770 </cell>
3771 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3772 \begin_inset Text
3773
3774 \layout Standard
3775
3776 sub-frame
3777 \end_inset 
3778 </cell>
3779 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3780 \begin_inset Text
3781
3782 \layout Standard
3783
3784 0
3785 \end_inset 
3786 </cell>
3787 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3788 \begin_inset Text
3789
3790 \layout Standard
3791
3792 1
3793 \end_inset 
3794 </cell>
3795 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3796 \begin_inset Text
3797
3798 \layout Standard
3799
3800 0
3801 \end_inset 
3802 </cell>
3803 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3804 \begin_inset Text
3805
3806 \layout Standard
3807
3808 1
3809 \end_inset 
3810 </cell>
3811 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3812 \begin_inset Text
3813
3814 \layout Standard
3815
3816 1
3817 \end_inset 
3818 </cell>
3819 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3820 \begin_inset Text
3821
3822 \layout Standard
3823
3824 3
3825 \end_inset 
3826 </cell>
3827 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3828 \begin_inset Text
3829
3830 \layout Standard
3831
3832 3
3833 \end_inset 
3834 </cell>
3835 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3836 \begin_inset Text
3837
3838 \layout Standard
3839
3840 3
3841 \end_inset 
3842 </cell>
3843 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3844 \begin_inset Text
3845
3846 \layout Standard
3847
3848 0
3849 \end_inset 
3850 </cell>
3851 </row>
3852 <row topline="true" bottomline="true">
3853 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3854 \begin_inset Text
3855
3856 \layout Standard
3857
3858 Innovation VQ
3859 \end_inset 
3860 </cell>
3861 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3862 \begin_inset Text
3863
3864 \layout Standard
3865
3866 sub-frame
3867 \end_inset 
3868 </cell>
3869 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3870 \begin_inset Text
3871
3872 \layout Standard
3873
3874 0
3875 \end_inset 
3876 </cell>
3877 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3878 \begin_inset Text
3879
3880 \layout Standard
3881
3882 0
3883 \end_inset 
3884 </cell>
3885 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3886 \begin_inset Text
3887
3888 \layout Standard
3889
3890 16
3891 \end_inset 
3892 </cell>
3893 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3894 \begin_inset Text
3895
3896 \layout Standard
3897
3898 20
3899 \end_inset 
3900 </cell>
3901 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3902 \begin_inset Text
3903
3904 \layout Standard
3905
3906 35
3907 \end_inset 
3908 </cell>
3909 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3910 \begin_inset Text
3911
3912 \layout Standard
3913
3914 48
3915 \end_inset 
3916 </cell>
3917 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3918 \begin_inset Text
3919
3920 \layout Standard
3921
3922 64
3923 \end_inset 
3924 </cell>
3925 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3926 \begin_inset Text
3927
3928 \layout Standard
3929
3930 96
3931 \end_inset 
3932 </cell>
3933 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
3934 \begin_inset Text
3935
3936 \layout Standard
3937
3938 10
3939 \end_inset 
3940 </cell>
3941 </row>
3942 <row topline="true" bottomline="true">
3943 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3944 \begin_inset Text
3945
3946 \layout Standard
3947
3948 Total
3949 \end_inset 
3950 </cell>
3951 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3952 \begin_inset Text
3953
3954 \layout Standard
3955
3956 frame
3957 \end_inset 
3958 </cell>
3959 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3960 \begin_inset Text
3961
3962 \layout Standard
3963
3964 5
3965 \end_inset 
3966 </cell>
3967 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3968 \begin_inset Text
3969
3970 \layout Standard
3971
3972 43
3973 \end_inset 
3974 </cell>
3975 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3976 \begin_inset Text
3977
3978 \layout Standard
3979
3980 119
3981 \end_inset 
3982 </cell>
3983 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3984 \begin_inset Text
3985
3986 \layout Standard
3987
3988 160
3989 \end_inset 
3990 </cell>
3991 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
3992 \begin_inset Text
3993
3994 \layout Standard
3995
3996 220
3997 \end_inset 
3998 </cell>
3999 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4000 \begin_inset Text
4001
4002 \layout Standard
4003
4004 300
4005 \end_inset 
4006 </cell>
4007 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4008 \begin_inset Text
4009
4010 \layout Standard
4011
4012 364
4013 \end_inset 
4014 </cell>
4015 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4016 \begin_inset Text
4017
4018 \layout Standard
4019
4020 492
4021 \end_inset 
4022 </cell>
4023 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4024 \begin_inset Text
4025
4026 \layout Standard
4027
4028 79
4029 \end_inset 
4030 </cell>
4031 </row>
4032 </lyxtabular>
4033
4034 \end_inset 
4035
4036
4037 \layout Caption
4038
4039 Bit allocation for narrowband modes
4040 \begin_inset LatexCommand \label{cap:bits-narrowband}
4041
4042 \end_inset 
4043
4044
4045 \end_inset 
4046
4047
4048 \layout Standard
4049
4050 So far, no MOS (Mean Opinion Score
4051 \begin_inset LatexCommand \index{mean opinion score}
4052
4053 \end_inset 
4054
4055 ) subjective evaluation has been performed for Speex.
4056  In order to give an idea of the quality achivable with it, table 
4057 \begin_inset LatexCommand \ref{cap:quality_vs_bps}
4058
4059 \end_inset 
4060
4061  presents my own subjective opinion on it.
4062  It sould be noted that different people will perceive the quality differently
4063  and that the person that designed the codec often has a bias (one way or
4064  another) when it comes to subjective evaluation.
4065  Last thing, it should be noted that for most codecs (including Speex) encoding
4066  quality sometimes varies depending on the input.
4067  Note that the complexity is only approximate (within 0.5 mflops and using
4068  the lowers complexity setting).
4069  Decoding requires approximately 0.5 mflops
4070 \begin_inset LatexCommand \index{complexity}
4071
4072 \end_inset 
4073
4074  in most modes (1 mflops with perceptual enhancement).
4075 \layout Standard
4076
4077
4078 \begin_inset Float table
4079 placement h
4080 wide true
4081 collapsed false
4082
4083 \layout Standard
4084
4085
4086 \begin_inset  Tabular
4087 <lyxtabular version="3" rows="17" columns="4">
4088 <features>
4089 <column alignment="center" valignment="top" leftline="true" width="0pt">
4090 <column alignment="center" valignment="top" leftline="true" width="0pt">
4091 <column alignment="center" valignment="top" leftline="true" width="0pt">
4092 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
4093 <row topline="true" bottomline="true">
4094 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4095 \begin_inset Text
4096
4097 \layout Standard
4098
4099 Mode
4100 \end_inset 
4101 </cell>
4102 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4103 \begin_inset Text
4104
4105 \layout Standard
4106
4107 Bit-rate
4108 \begin_inset LatexCommand \index{bit-rate}
4109
4110 \end_inset 
4111
4112  (bps)
4113 \end_inset 
4114 </cell>
4115 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4116 \begin_inset Text
4117
4118 \layout Standard
4119
4120 mflops
4121 \begin_inset LatexCommand \index{complexity}
4122
4123 \end_inset 
4124
4125
4126 \end_inset 
4127 </cell>
4128 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4129 \begin_inset Text
4130
4131 \layout Standard
4132
4133 Quality/description
4134 \end_inset 
4135 </cell>
4136 </row>
4137 <row topline="true">
4138 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4139 \begin_inset Text
4140
4141 \layout Standard
4142
4143 0
4144 \end_inset 
4145 </cell>
4146 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4147 \begin_inset Text
4148
4149 \layout Standard
4150
4151 250
4152 \end_inset 
4153 </cell>
4154 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4155 \begin_inset Text
4156
4157 \layout Standard
4158
4159 N/A
4160 \end_inset 
4161 </cell>
4162 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4163 \begin_inset Text
4164
4165 \layout Standard
4166
4167 No sound (VBR only)
4168 \end_inset 
4169 </cell>
4170 </row>
4171 <row topline="true">
4172 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4173 \begin_inset Text
4174
4175 \layout Standard
4176
4177 1
4178 \end_inset 
4179 </cell>
4180 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4181 \begin_inset Text
4182
4183 \layout Standard
4184
4185 2,150
4186 \end_inset 
4187 </cell>
4188 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4189 \begin_inset Text
4190
4191 \layout Standard
4192
4193 6
4194 \end_inset 
4195 </cell>
4196 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4197 \begin_inset Text
4198
4199 \layout Standard
4200
4201 Vocoder (mostly for comfort noise)
4202 \end_inset 
4203 </cell>
4204 </row>
4205 <row topline="true">
4206 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4207 \begin_inset Text
4208
4209 \layout Standard
4210
4211 2
4212 \end_inset 
4213 </cell>
4214 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4215 \begin_inset Text
4216
4217 \layout Standard
4218
4219 5,950
4220 \end_inset 
4221 </cell>
4222 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4223 \begin_inset Text
4224
4225 \layout Standard
4226
4227 9
4228 \end_inset 
4229 </cell>
4230 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4231 \begin_inset Text
4232
4233 \layout Standard
4234
4235 Very noticeable artifacts/noise, good intelligibility
4236 \end_inset 
4237 </cell>
4238 </row>
4239 <row topline="true">
4240 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4241 \begin_inset Text
4242
4243 \layout Standard
4244
4245 3
4246 \end_inset 
4247 </cell>
4248 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4249 \begin_inset Text
4250
4251 \layout Standard
4252
4253 8,000
4254 \end_inset 
4255 </cell>
4256 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4257 \begin_inset Text
4258
4259 \layout Standard
4260
4261 10
4262 \end_inset 
4263 </cell>
4264 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4265 \begin_inset Text
4266
4267 \layout Standard
4268
4269 Artifacts/noise sometimes noticeable
4270 \end_inset 
4271 </cell>
4272 </row>
4273 <row topline="true">
4274 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4275 \begin_inset Text
4276
4277 \layout Standard
4278
4279 4
4280 \end_inset 
4281 </cell>
4282 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4283 \begin_inset Text
4284
4285 \layout Standard
4286
4287 11,000
4288 \end_inset 
4289 </cell>
4290 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4291 \begin_inset Text
4292
4293 \layout Standard
4294
4295 14
4296 \end_inset 
4297 </cell>
4298 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4299 \begin_inset Text
4300
4301 \layout Standard
4302
4303 Artifacts usually noticeable only with headphones
4304 \end_inset 
4305 </cell>
4306 </row>
4307 <row topline="true">
4308 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4309 \begin_inset Text
4310
4311 \layout Standard
4312
4313 5
4314 \end_inset 
4315 </cell>
4316 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4317 \begin_inset Text
4318
4319 \layout Standard
4320
4321 15,000
4322 \end_inset 
4323 </cell>
4324 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4325 \begin_inset Text
4326
4327 \layout Standard
4328
4329 11
4330 \end_inset 
4331 </cell>
4332 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4333 \begin_inset Text
4334
4335 \layout Standard
4336
4337 Need good headphones to tell the difference
4338 \end_inset 
4339 </cell>
4340 </row>
4341 <row topline="true">
4342 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4343 \begin_inset Text
4344
4345 \layout Standard
4346
4347 6
4348 \end_inset 
4349 </cell>
4350 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4351 \begin_inset Text
4352
4353 \layout Standard
4354
4355 18,200
4356 \end_inset 
4357 </cell>
4358 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4359 \begin_inset Text
4360
4361 \layout Standard
4362
4363 17.5
4364 \end_inset 
4365 </cell>
4366 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4367 \begin_inset Text
4368
4369 \layout Standard
4370
4371 Hard to tell the difference even with good headphones
4372 \end_inset 
4373 </cell>
4374 </row>
4375 <row topline="true">
4376 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4377 \begin_inset Text
4378
4379 \layout Standard
4380
4381 7
4382 \end_inset 
4383 </cell>
4384 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4385 \begin_inset Text
4386
4387 \layout Standard
4388
4389 24,600
4390 \end_inset 
4391 </cell>
4392 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4393 \begin_inset Text
4394
4395 \layout Standard
4396
4397 14.5
4398 \end_inset 
4399 </cell>
4400 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4401 \begin_inset Text
4402
4403 \layout Standard
4404
4405 Completely transparent for voice, good quality music
4406 \end_inset 
4407 </cell>
4408 </row>
4409 <row topline="true">
4410 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4411 \begin_inset Text
4412
4413 \layout Standard
4414
4415 8
4416 \end_inset 
4417 </cell>
4418 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4419 \begin_inset Text
4420
4421 \layout Standard
4422
4423 3,950
4424 \end_inset 
4425 </cell>
4426 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4427 \begin_inset Text
4428
4429 \layout Standard
4430
4431 -
4432 \end_inset 
4433 </cell>
4434 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4435 \begin_inset Text
4436
4437 \layout Standard
4438
4439 Very noticeable artifacts/noise, good intelligibility
4440 \end_inset 
4441 </cell>
4442 </row>
4443 <row topline="true">
4444 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4445 \begin_inset Text
4446
4447 \layout Standard
4448
4449 9
4450 \end_inset 
4451 </cell>
4452 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4453 \begin_inset Text
4454
4455 \layout Standard
4456
4457 N/A
4458 \end_inset 
4459 </cell>
4460 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4461 \begin_inset Text
4462
4463 \layout Standard
4464
4465 N/A
4466 \end_inset 
4467 </cell>
4468 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4469 \begin_inset Text
4470
4471 \layout Standard
4472
4473 reserved
4474 \end_inset 
4475 </cell>
4476 </row>
4477 <row topline="true">
4478 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4479 \begin_inset Text
4480
4481 \layout Standard
4482
4483 10
4484 \end_inset 
4485 </cell>
4486 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4487 \begin_inset Text
4488
4489 \layout Standard
4490
4491 N/A
4492 \end_inset 
4493 </cell>
4494 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4495 \begin_inset Text
4496
4497 \layout Standard
4498
4499 N/A
4500 \end_inset 
4501 </cell>
4502 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4503 \begin_inset Text
4504
4505 \layout Standard
4506
4507 reserved
4508 \end_inset 
4509 </cell>
4510 </row>
4511 <row topline="true">
4512 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4513 \begin_inset Text
4514
4515 \layout Standard
4516
4517 11
4518 \end_inset 
4519 </cell>
4520 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4521 \begin_inset Text
4522
4523 \layout Standard
4524
4525 N/A
4526 \end_inset 
4527 </cell>
4528 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4529 \begin_inset Text
4530
4531 \layout Standard
4532
4533 N/A
4534 \end_inset 
4535 </cell>
4536 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4537 \begin_inset Text
4538
4539 \layout Standard
4540
4541 reserved
4542 \end_inset 
4543 </cell>
4544 </row>
4545 <row topline="true">
4546 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4547 \begin_inset Text
4548
4549 \layout Standard
4550
4551 12
4552 \end_inset 
4553 </cell>
4554 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4555 \begin_inset Text
4556
4557 \layout Standard
4558
4559 N/A
4560 \end_inset 
4561 </cell>
4562 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4563 \begin_inset Text
4564
4565 \layout Standard
4566
4567 N/A
4568 \end_inset 
4569 </cell>
4570 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4571 \begin_inset Text
4572
4573 \layout Standard
4574
4575 reserved
4576 \end_inset 
4577 </cell>
4578 </row>
4579 <row topline="true">
4580 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4581 \begin_inset Text
4582
4583 \layout Standard
4584
4585 13
4586 \end_inset 
4587 </cell>
4588 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4589 \begin_inset Text
4590
4591 \layout Standard
4592
4593 N/A
4594 \end_inset 
4595 </cell>
4596 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4597 \begin_inset Text
4598
4599 \layout Standard
4600
4601 N/A
4602 \end_inset 
4603 </cell>
4604 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4605 \begin_inset Text
4606
4607 \layout Standard
4608
4609 Application-defined, interpreted by callback or skipped
4610 \end_inset 
4611 </cell>
4612 </row>
4613 <row topline="true">
4614 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4615 \begin_inset Text
4616
4617 \layout Standard
4618
4619 14
4620 \end_inset 
4621 </cell>
4622 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4623 \begin_inset Text
4624
4625 \layout Standard
4626
4627 N/A
4628 \end_inset 
4629 </cell>
4630 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4631 \begin_inset Text
4632
4633 \layout Standard
4634
4635 N/A
4636 \end_inset 
4637 </cell>
4638 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4639 \begin_inset Text
4640
4641 \layout Standard
4642
4643 Speex in-band signaling
4644 \end_inset 
4645 </cell>
4646 </row>
4647 <row topline="true" bottomline="true">
4648 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4649 \begin_inset Text
4650
4651 \layout Standard
4652
4653 15
4654 \end_inset 
4655 </cell>
4656 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4657 \begin_inset Text
4658
4659 \layout Standard
4660
4661 N/A
4662 \end_inset 
4663 </cell>
4664 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4665 \begin_inset Text
4666
4667 \layout Standard
4668
4669 N/A
4670 \end_inset 
4671 </cell>
4672 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4673 \begin_inset Text
4674
4675 \layout Standard
4676
4677 Terminator code
4678 \end_inset 
4679 </cell>
4680 </row>
4681 </lyxtabular>
4682
4683 \end_inset 
4684
4685
4686 \layout Caption
4687
4688 Quality versus bit-rate
4689 \begin_inset LatexCommand \label{cap:quality_vs_bps}
4690
4691 \end_inset 
4692
4693
4694 \end_inset 
4695
4696
4697 \layout Subsection
4698
4699 Perceptual enhancement
4700 \begin_inset LatexCommand \index{perceptual enhancement}
4701
4702 \end_inset 
4703
4704
4705 \layout Standard
4706
4707 This part of the codec only applies to the decoder and can even be changed
4708  without affecting inter-operability.
4709  For that reason, the implementation provided and described here should
4710  only be considered as a reference implementation.
4711  The enhancement system is devided in two parts.
4712  First, the synthesis filter 
4713 \begin_inset Formula $S(z)=1/A(z)$
4714 \end_inset 
4715
4716  is replaced by an enhanced filter
4717 \begin_inset Formula \[
4718 S'(z)=\frac{A\left(z/a_{2}\right)A\left(z/a_{3}\right)}{A\left(z\right)A\left(z/a_{1}\right)}\]
4719
4720 \end_inset 
4721
4722 where 
4723 \begin_inset Formula $a_{1}$
4724 \end_inset 
4725
4726  and 
4727 \begin_inset Formula $a_{2}$
4728 \end_inset 
4729
4730  depend on the mode in use and 
4731 \begin_inset Formula $a_{3}=\frac{1}{r}\left(1-\frac{1-ra_{1}}{1-ra_{2}}\right)$
4732 \end_inset 
4733
4734  with 
4735 \begin_inset Formula $r=.9$
4736 \end_inset 
4737
4738 .
4739  The second part of the enhancement consists of using a comb filter to enhance
4740  the pitch in the excitation domain.
4741  
4742 \layout Section
4743 \pagebreak_top 
4744 Speex wideband mode (sub-band CELP)
4745 \begin_inset LatexCommand \index{wideband}
4746
4747 \end_inset 
4748
4749
4750 \layout Standard
4751
4752 For wideband, the Speex approach uses a 
4753 \emph on 
4754 q
4755 \emph default 
4756 uadrature 
4757 \emph on 
4758 m
4759 \emph default 
4760 irror 
4761 \emph on 
4762 f
4763 \emph default 
4764 ilter
4765 \begin_inset LatexCommand \index{quadrature mirror filter}
4766
4767 \end_inset 
4768
4769  (QMF) to split the band in two.
4770  The 16 kHz signal is thus divided into two 8 kHz signals, one representing
4771  the low band (0-4 kHz), the other the high band (4-8 kHz).
4772  The low band is encoded with the narrowband mode described in section 
4773 \begin_inset LatexCommand \ref{sec:Speex-narrowband-mode}
4774
4775 \end_inset 
4776
4777  in such a way that the resulting 
4778 \begin_inset Quotes eld
4779 \end_inset 
4780
4781 embedded narrowband bit-stream
4782 \begin_inset Quotes erd
4783 \end_inset 
4784
4785  can also be decoded with the narrowband decoder.
4786  Since the low band encoding has already been described only the high band
4787  encoding is described in this section.
4788 \layout Subsection
4789
4790 Linear Prediction
4791 \layout Standard
4792
4793 The linear prediction part used for the high-band is very similar to what
4794  is done for narrowband.
4795  The only difference is that we use only 12 bits to encode the high-band
4796  LSP's using a multi-stage vector quantizer (MSVQ).
4797  The first level quantizes the 10 coefficients with 6 bits and the error
4798  is then quantized using 6 bits too.
4799 \layout Subsection
4800
4801 Pitch Prediction
4802 \layout Standard
4803
4804 That part is easy: there's no pitch prediction for the high-band.
4805  There are two reasons for that.
4806  First, there is usually little harmonic structure in this band (above 4
4807  kHz).
4808  Second, it would be very hard to implement since the QMF folds the 4-8
4809  kHz band into 4-0 kHz (reversing the frequency axis), which means that
4810  the location of the harmonics are no longer at multiples of the fundamental
4811  (pitch).
4812 \layout Subsection
4813
4814 Excitation Quantization
4815 \layout Standard
4816
4817 The high-band excitation is coded in the same way as for narrowband.
4818  
4819 \layout Subsection
4820
4821 Bit allocation
4822 \layout Standard
4823
4824 For the wideband mode, all the narrowband frame is packed before the high-band
4825  is encoded.
4826  The narrowband part of the bit-stream is as defined in table 
4827 \begin_inset LatexCommand \ref{cap:bits-narrowband}
4828
4829 \end_inset 
4830
4831 .
4832  The high-band follows, as described in table 
4833 \begin_inset LatexCommand \ref{cap:bits-wideband}
4834
4835 \end_inset 
4836
4837 .
4838  This also means that a wideband frame may be correctly decoded by a narrowband
4839  decoder with the only caveat that if more than one frame is packed in the
4840  same packet, the decoder will need to skip the high-band parts in order
4841  to sync with the bit-stream.
4842 \layout Standard
4843
4844
4845 \begin_inset Float table
4846 placement h
4847 wide true
4848 collapsed false
4849
4850 \layout Standard
4851
4852
4853 \begin_inset  Tabular
4854 <lyxtabular version="3" rows="7" columns="7">
4855 <features>
4856 <column alignment="center" valignment="top" leftline="true" width="0pt">
4857 <column alignment="center" valignment="top" leftline="true" width="0pt">
4858 <column alignment="center" valignment="top" leftline="true" width="0pt">
4859 <column alignment="center" valignment="top" leftline="true" width="0pt">
4860 <column alignment="center" valignment="top" leftline="true" width="0pt">
4861 <column alignment="center" valignment="top" leftline="true" width="0pt">
4862 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0pt">
4863 <row topline="true" bottomline="true">
4864 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4865 \begin_inset Text
4866
4867 \layout Standard
4868
4869 Parameter
4870 \end_inset 
4871 </cell>
4872 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4873 \begin_inset Text
4874
4875 \layout Standard
4876
4877 Update rate
4878 \end_inset 
4879 </cell>
4880 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4881 \begin_inset Text
4882
4883 \layout Standard
4884
4885 0
4886 \end_inset 
4887 </cell>
4888 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4889 \begin_inset Text
4890
4891 \layout Standard
4892
4893 1
4894 \end_inset 
4895 </cell>
4896 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4897 \begin_inset Text
4898
4899 \layout Standard
4900
4901 2
4902 \end_inset 
4903 </cell>
4904 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4905 \begin_inset Text
4906
4907 \layout Standard
4908
4909 3
4910 \end_inset 
4911 </cell>
4912 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4913 \begin_inset Text
4914
4915 \layout Standard
4916
4917 4
4918 \end_inset 
4919 </cell>
4920 </row>
4921 <row topline="true">
4922 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4923 \begin_inset Text
4924
4925 \layout Standard
4926
4927 Wideband bit
4928 \end_inset 
4929 </cell>
4930 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4931 \begin_inset Text
4932
4933 \layout Standard
4934
4935 frame
4936 \end_inset 
4937 </cell>
4938 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4939 \begin_inset Text
4940
4941 \layout Standard
4942
4943 1
4944 \end_inset 
4945 </cell>
4946 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4947 \begin_inset Text
4948
4949 \layout Standard
4950
4951 1
4952 \end_inset 
4953 </cell>
4954 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4955 \begin_inset Text
4956
4957 \layout Standard
4958
4959 1
4960 \end_inset 
4961 </cell>
4962 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4963 \begin_inset Text
4964
4965 \layout Standard
4966
4967 1
4968 \end_inset 
4969 </cell>
4970 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4971 \begin_inset Text
4972
4973 \layout Standard
4974
4975 1
4976 \end_inset 
4977 </cell>
4978 </row>
4979 <row topline="true">
4980 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4981 \begin_inset Text
4982
4983 \layout Standard
4984
4985 Mode ID
4986 \end_inset 
4987 </cell>
4988 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4989 \begin_inset Text
4990
4991 \layout Standard
4992
4993 frame
4994 \end_inset 
4995 </cell>
4996 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4997 \begin_inset Text
4998
4999 \layout Standard
5000
5001 3
5002 \end_inset 
5003 </cell>
5004 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5005 \begin_inset Text
5006
5007 \layout Standard
5008
5009 3
5010 \end_inset 
5011 </cell>
5012 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5013 \begin_inset Text
5014
5015 \layout Standard
5016
5017 3
5018 \end_inset 
5019 </cell>
5020 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5021 \begin_inset Text
5022
5023 \layout Standard
5024
5025 3
5026 \end_inset 
5027 </cell>
5028 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5029 \begin_inset Text
5030
5031 \layout Standard
5032
5033 3
5034 \end_inset 
5035 </cell>
5036 </row>
5037 <row topline="true">
5038 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5039 \begin_inset Text
5040
5041 \layout Standard
5042
5043 LSP
5044 \end_inset 
5045 </cell>
5046 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5047 \begin_inset Text
5048
5049 \layout Standard
5050
5051 frame
5052 \end_inset 
5053 </cell>
5054 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5055 \begin_inset Text
5056
5057 \layout Standard
5058
5059 0
5060 \end_inset 
5061 </cell>
5062 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5063 \begin_inset Text
5064
5065 \layout Standard
5066
5067 12
5068 \end_inset 
5069 </cell>
5070 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5071 \begin_inset Text
5072
5073 \layout Standard
5074
5075 12
5076 \end_inset 
5077 </cell>
5078 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5079 \begin_inset Text
5080
5081 \layout Standard
5082
5083 12
5084 \end_inset 
5085 </cell>
5086 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5087 \begin_inset Text
5088
5089 \layout Standard
5090
5091 12
5092 \end_inset 
5093 </cell>
5094 </row>
5095 <row topline="true">
5096 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5097 \begin_inset Text
5098
5099 \layout Standard
5100
5101 Excitation gain
5102 \end_inset 
5103 </cell>
5104 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5105 \begin_inset Text
5106
5107 \layout Standard
5108
5109 sub-frame
5110 \end_inset 
5111 </cell>
5112 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5113 \begin_inset Text
5114
5115 \layout Standard
5116
5117 0
5118 \end_inset 
5119 </cell>
5120 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5121 \begin_inset Text
5122
5123 \layout Standard
5124
5125 5
5126 \end_inset 
5127 </cell>
5128 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5129 \begin_inset Text
5130
5131 \layout Standard
5132
5133 4
5134 \end_inset 
5135 </cell>
5136 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5137 \begin_inset Text
5138
5139 \layout Standard
5140
5141 4
5142 \end_inset 
5143 </cell>
5144 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5145 \begin_inset Text
5146
5147 \layout Standard
5148
5149 4
5150 \end_inset 
5151 </cell>
5152 </row>
5153 <row topline="true" bottomline="true">
5154 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5155 \begin_inset Text
5156
5157 \layout Standard
5158
5159 Excitation VQ
5160 \end_inset 
5161 </cell>
5162 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5163 \begin_inset Text
5164
5165 \layout Standard
5166
5167 sub-frame
5168 \end_inset 
5169 </cell>
5170 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5171 \begin_inset Text
5172
5173 \layout Standard
5174
5175 0
5176 \end_inset 
5177 </cell>
5178 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5179 \begin_inset Text
5180
5181 \layout Standard
5182
5183 0
5184 \end_inset 
5185 </cell>
5186 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5187 \begin_inset Text
5188
5189 \layout Standard
5190
5191 20
5192 \end_inset 
5193 </cell>
5194 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5195 \begin_inset Text
5196
5197 \layout Standard
5198
5199 40
5200 \end_inset 
5201 </cell>
5202 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5203 \begin_inset Text
5204
5205 \layout Standard
5206
5207 80
5208 \end_inset 
5209 </cell>
5210 </row>
5211 <row topline="true" bottomline="true">
5212 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5213 \begin_inset Text
5214
5215 \layout Standard
5216
5217 Total
5218 \end_inset 
5219 </cell>
5220 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5221 \begin_inset Text
5222
5223 \layout Standard
5224
5225 frame
5226 \end_inset 
5227 </cell>
5228 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5229 \begin_inset Text
5230
5231 \layout Standard
5232
5233 4
5234 \end_inset 
5235 </cell>
5236 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5237 \begin_inset Text
5238
5239 \layout Standard
5240
5241 36
5242 \end_inset 
5243 </cell>
5244 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5245 \begin_inset Text
5246
5247 \layout Standard
5248
5249 112
5250 \end_inset 
5251 </cell>
5252 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5253 \begin_inset Text
5254
5255 \layout Standard
5256
5257 192
5258 \end_inset 
5259 </cell>
5260 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5261 \begin_inset Text
5262
5263 \layout Standard
5264
5265 352
5266 \end_inset 
5267 </cell>
5268 </row>
5269 </lyxtabular>
5270
5271 \end_inset 
5272
5273
5274 \layout Caption
5275
5276 Bit allocation for high-band in wideband mode
5277 \begin_inset LatexCommand \label{cap:bits-wideband}
5278
5279 \end_inset 
5280
5281
5282 \end_inset 
5283
5284
5285 \layout Standard
5286
5287
5288 \begin_inset ERT
5289 status Open
5290
5291 \layout Standard
5292
5293 \backslash 
5294 clearpage
5295 \end_inset 
5296
5297
5298 \layout Standard
5299
5300
5301 \begin_inset ERT
5302 status Collapsed
5303
5304 \layout Standard
5305
5306 \backslash 
5307 clearpage
5308 \end_inset 
5309
5310
5311 \layout Section
5312 \start_of_appendix 
5313 FAQ
5314 \layout Subsection*
5315
5316 Vorbis is open-source
5317 \begin_inset LatexCommand \index{open-source}
5318
5319 \end_inset 
5320
5321  and patent-free
5322 \begin_inset LatexCommand \index{patent}
5323
5324 \end_inset 
5325
5326 , why do we need Speex?
5327 \layout Standard
5328
5329 Vorbis is a great project but its goals are not the same as Speex.
5330  Vorbis is mostly aimed at compressing music and audio in general, while
5331  Speex targets speech only.
5332  For that reason Speex can achieve much better results than Vorbis on speech,
5333  typically 2-4 times higher compression at equal quality.
5334 \layout Subsection*
5335
5336 Isn't there a GPL implementation of the GSM-FR codec? Why is Speex necessary?
5337 \layout Standard
5338
5339 First of all, it's not clear whether or not GSM-FR is covered by a phillips
5340  patent (see http://kbs.cs.tu-berlin.de/~jutta/toast.html).
5341  Also, GSM-FR offers mediocre quality at a relatively high bit-rate, while
5342  Speex can offer equivalent quality at almost half the bit-rate.
5343  Last but not least, Speex offers a wide range of bit-rates and sampling
5344  rates, while GSM-FR is limited to 8 kHz speech at 13 kbps.
5345 \layout Subsection*
5346
5347 Under what license is Speex released?
5348 \layout Standard
5349
5350 As of version 1.0 beta 1, Speex in released under Xiph's BSD-like license.
5351  This license is the most permissive of the open-source licenses.
5352 \layout Subsection*
5353
5354 Ogg
5355 \begin_inset LatexCommand \index{Ogg}
5356
5357 \end_inset 
5358
5359 , Speex, Vorbis
5360 \begin_inset LatexCommand \index{Vorbis}
5361
5362 \end_inset 
5363
5364 , what's the difference?
5365 \layout Standard
5366
5367 Ogg is a 
5368 \begin_inset Quotes eld
5369 \end_inset 
5370
5371 container format
5372 \begin_inset Quotes erd
5373 \end_inset 
5374
5375  for holding multimedia data.
5376  Vorbis is an audio codec that uses Ogg to store its bit-streams as files,
5377  hence the name Ogg Vorbis.
5378  Speex also uses the Ogg format to store its bit-streams as files, so technicall
5379 y they would be 
5380 \begin_inset Quotes eld
5381 \end_inset 
5382
5383 Ogg Speex
5384 \begin_inset Quotes erd
5385 \end_inset 
5386
5387  files (I prefer to call them just Speex files).
5388  One difference with Vorbis however, is that Speex is less tied with Ogg.
5389  Actually, if what you do is Voice of IP (VoIP), you don't need Ogg at all.
5390 \layout Subsection*
5391
5392 What's the extension for Speex?
5393 \layout Standard
5394
5395 Speex files have the .spx extension.
5396  Note however that all the Speex tools (speexenc, speexdec) do not rely
5397  on the extension at all so any extension will work.
5398 \layout Subsection*
5399
5400 Can I use Speex for compressing music
5401 \begin_inset LatexCommand \index{music}
5402
5403 \end_inset 
5404
5405 ?
5406 \layout Standard
5407
5408 Just like Vorbis is not really adapted to speech, Speex is really not adapted
5409  for music.
5410  In most cases, you'll be better of with Vorbis when it comes to music.
5411 \layout Subsection*
5412
5413 I converted some MP3's to Speex and the quality is bad.
5414  What's wrong?
5415 \layout Standard
5416
5417 This is called transcoding and it will always result in much poorer quality
5418  than the original MP3.
5419  Unless you have a really good (size) reason to do so, never transcode speech.
5420  This is even valid for self transcoding (tandeming), i.e.
5421  If you decode a Speex file and re-encode it again at the same bit-rate,
5422  you will lose quality.
5423 \layout Subsection*