xref: /third_party/pulseaudio/speex/doc/manual.lyx (revision 53a5a1b3)
153a5a1b3Sopenharmony_ci#LyX 1.6.1 created this file. For more info see http://www.lyx.org/
253a5a1b3Sopenharmony_ci\lyxformat 345
353a5a1b3Sopenharmony_ci\begin_document
453a5a1b3Sopenharmony_ci\begin_header
553a5a1b3Sopenharmony_ci\textclass scrbook
653a5a1b3Sopenharmony_ci\use_default_options true
753a5a1b3Sopenharmony_ci\language english
853a5a1b3Sopenharmony_ci\inputencoding auto
953a5a1b3Sopenharmony_ci\font_roman default
1053a5a1b3Sopenharmony_ci\font_sans default
1153a5a1b3Sopenharmony_ci\font_typewriter default
1253a5a1b3Sopenharmony_ci\font_default_family default
1353a5a1b3Sopenharmony_ci\font_sc false
1453a5a1b3Sopenharmony_ci\font_osf false
1553a5a1b3Sopenharmony_ci\font_sf_scale 100
1653a5a1b3Sopenharmony_ci\font_tt_scale 100
1753a5a1b3Sopenharmony_ci
1853a5a1b3Sopenharmony_ci\graphics default
1953a5a1b3Sopenharmony_ci\paperfontsize 10
2053a5a1b3Sopenharmony_ci\spacing single
2153a5a1b3Sopenharmony_ci\use_hyperref false
2253a5a1b3Sopenharmony_ci\papersize letterpaper
2353a5a1b3Sopenharmony_ci\use_geometry true
2453a5a1b3Sopenharmony_ci\use_amsmath 2
2553a5a1b3Sopenharmony_ci\use_esint 2
2653a5a1b3Sopenharmony_ci\cite_engine basic
2753a5a1b3Sopenharmony_ci\use_bibtopic false
2853a5a1b3Sopenharmony_ci\paperorientation portrait
2953a5a1b3Sopenharmony_ci\leftmargin 2cm
3053a5a1b3Sopenharmony_ci\topmargin 2cm
3153a5a1b3Sopenharmony_ci\rightmargin 2cm
3253a5a1b3Sopenharmony_ci\bottommargin 2cm
3353a5a1b3Sopenharmony_ci\secnumdepth 3
3453a5a1b3Sopenharmony_ci\tocdepth 3
3553a5a1b3Sopenharmony_ci\paragraph_separation indent
3653a5a1b3Sopenharmony_ci\defskip medskip
3753a5a1b3Sopenharmony_ci\quotes_language english
3853a5a1b3Sopenharmony_ci\papercolumns 1
3953a5a1b3Sopenharmony_ci\papersides 1
4053a5a1b3Sopenharmony_ci\paperpagestyle headings
4153a5a1b3Sopenharmony_ci\tracking_changes false
4253a5a1b3Sopenharmony_ci\output_changes false
4353a5a1b3Sopenharmony_ci\author "" 
4453a5a1b3Sopenharmony_ci\author "" 
4553a5a1b3Sopenharmony_ci\end_header
4653a5a1b3Sopenharmony_ci
4753a5a1b3Sopenharmony_ci\begin_body
4853a5a1b3Sopenharmony_ci
4953a5a1b3Sopenharmony_ci\begin_layout Title
5053a5a1b3Sopenharmony_ciThe Speex Manual
5153a5a1b3Sopenharmony_ci\begin_inset Newline newline
5253a5a1b3Sopenharmony_ci\end_inset
5353a5a1b3Sopenharmony_ci
5453a5a1b3Sopenharmony_ciVersion 1.2
5553a5a1b3Sopenharmony_ci\end_layout
5653a5a1b3Sopenharmony_ci
5753a5a1b3Sopenharmony_ci\begin_layout Author
5853a5a1b3Sopenharmony_ciJean-Marc Valin
5953a5a1b3Sopenharmony_ci\end_layout
6053a5a1b3Sopenharmony_ci
6153a5a1b3Sopenharmony_ci\begin_layout Standard
6253a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
6353a5a1b3Sopenharmony_ci\end_inset
6453a5a1b3Sopenharmony_ci
6553a5a1b3Sopenharmony_ci
6653a5a1b3Sopenharmony_ci\end_layout
6753a5a1b3Sopenharmony_ci
6853a5a1b3Sopenharmony_ci\begin_layout Standard
6953a5a1b3Sopenharmony_ciCopyright 
7053a5a1b3Sopenharmony_ci\begin_inset ERT
7153a5a1b3Sopenharmony_cistatus collapsed
7253a5a1b3Sopenharmony_ci
7353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
7453a5a1b3Sopenharmony_ci
7553a5a1b3Sopenharmony_ci
7653a5a1b3Sopenharmony_ci\backslash
7753a5a1b3Sopenharmony_cicopyright
7853a5a1b3Sopenharmony_ci\end_layout
7953a5a1b3Sopenharmony_ci
8053a5a1b3Sopenharmony_ci\end_inset
8153a5a1b3Sopenharmony_ci
8253a5a1b3Sopenharmony_ci 2002-2008 Jean-Marc Valin/Xiph.org Foundation
8353a5a1b3Sopenharmony_ci\end_layout
8453a5a1b3Sopenharmony_ci
8553a5a1b3Sopenharmony_ci\begin_layout Standard
8653a5a1b3Sopenharmony_ciPermission is granted to copy, distribute and/or modify this document under
8753a5a1b3Sopenharmony_ci the terms of the GNU Free Documentation License, Version 1.1 or any later
8853a5a1b3Sopenharmony_ci version published by the Free Software Foundation; with no Invariant Section,
8953a5a1b3Sopenharmony_ci with no Front-Cover Texts, and with no Back-Cover.
9053a5a1b3Sopenharmony_ci A copy of the license is included in the section entitled "GNU Free Documentati
9153a5a1b3Sopenharmony_cion License".
9253a5a1b3Sopenharmony_ci 
9353a5a1b3Sopenharmony_ci\end_layout
9453a5a1b3Sopenharmony_ci
9553a5a1b3Sopenharmony_ci\begin_layout Standard
9653a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
9753a5a1b3Sopenharmony_ci\end_inset
9853a5a1b3Sopenharmony_ci
9953a5a1b3Sopenharmony_ci
10053a5a1b3Sopenharmony_ci\begin_inset CommandInset toc
10153a5a1b3Sopenharmony_ciLatexCommand tableofcontents
10253a5a1b3Sopenharmony_ci
10353a5a1b3Sopenharmony_ci\end_inset
10453a5a1b3Sopenharmony_ci
10553a5a1b3Sopenharmony_ci
10653a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
10753a5a1b3Sopenharmony_ci\end_inset
10853a5a1b3Sopenharmony_ci
10953a5a1b3Sopenharmony_ci
11053a5a1b3Sopenharmony_ci\end_layout
11153a5a1b3Sopenharmony_ci
11253a5a1b3Sopenharmony_ci\begin_layout Standard
11353a5a1b3Sopenharmony_ci\begin_inset FloatList table
11453a5a1b3Sopenharmony_ci
11553a5a1b3Sopenharmony_ci\end_inset
11653a5a1b3Sopenharmony_ci
11753a5a1b3Sopenharmony_ci
11853a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
11953a5a1b3Sopenharmony_ci\end_inset
12053a5a1b3Sopenharmony_ci
12153a5a1b3Sopenharmony_ci
12253a5a1b3Sopenharmony_ci\end_layout
12353a5a1b3Sopenharmony_ci
12453a5a1b3Sopenharmony_ci\begin_layout Chapter
12553a5a1b3Sopenharmony_ciIntroduction to Speex
12653a5a1b3Sopenharmony_ci\end_layout
12753a5a1b3Sopenharmony_ci
12853a5a1b3Sopenharmony_ci\begin_layout Standard
12953a5a1b3Sopenharmony_ciThe Speex codec (
13053a5a1b3Sopenharmony_ci\family typewriter
13153a5a1b3Sopenharmony_cihttp://www.speex.org/
13253a5a1b3Sopenharmony_ci\family default
13353a5a1b3Sopenharmony_ci) exists because there is a need for a speech codec that is open-source
13453a5a1b3Sopenharmony_ci and free from software patent royalties.
13553a5a1b3Sopenharmony_ci These are essential conditions for being usable in any open-source software.
13653a5a1b3Sopenharmony_ci In essence, Speex is to speech what Vorbis is to audio/music.
13753a5a1b3Sopenharmony_ci Unlike many other speech codecs, Speex is not designed for mobile phones
13853a5a1b3Sopenharmony_ci but rather for packet networks and voice over IP (VoIP) applications.
13953a5a1b3Sopenharmony_ci File-based compression is of course also supported.
14053a5a1b3Sopenharmony_ci 
14153a5a1b3Sopenharmony_ci\end_layout
14253a5a1b3Sopenharmony_ci
14353a5a1b3Sopenharmony_ci\begin_layout Standard
14453a5a1b3Sopenharmony_ciThe Speex codec is designed to be very flexible and support a wide range
14553a5a1b3Sopenharmony_ci of speech quality and bit-rate.
14653a5a1b3Sopenharmony_ci Support for very good quality speech also means that Speex can encode wideband
14753a5a1b3Sopenharmony_ci speech (16 kHz sampling rate) in addition to narrowband speech (telephone
14853a5a1b3Sopenharmony_ci quality, 8 kHz sampling rate).
14953a5a1b3Sopenharmony_ci\end_layout
15053a5a1b3Sopenharmony_ci
15153a5a1b3Sopenharmony_ci\begin_layout Standard
15253a5a1b3Sopenharmony_ciDesigning for VoIP instead of mobile phones means that Speex is robust to
15353a5a1b3Sopenharmony_ci lost packets, but not to corrupted ones.
15453a5a1b3Sopenharmony_ci This is based on the assumption that in VoIP, packets either arrive unaltered
15553a5a1b3Sopenharmony_ci or don't arrive at all.
15653a5a1b3Sopenharmony_ci Because Speex is targeted at a wide range of devices, it has modest (adjustable
15753a5a1b3Sopenharmony_ci) complexity and a small memory footprint.
15853a5a1b3Sopenharmony_ci\end_layout
15953a5a1b3Sopenharmony_ci
16053a5a1b3Sopenharmony_ci\begin_layout Standard
16153a5a1b3Sopenharmony_ciAll the design goals led to the choice of CELP
16253a5a1b3Sopenharmony_ci\begin_inset Index
16353a5a1b3Sopenharmony_cistatus collapsed
16453a5a1b3Sopenharmony_ci
16553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
16653a5a1b3Sopenharmony_ciCELP
16753a5a1b3Sopenharmony_ci\end_layout
16853a5a1b3Sopenharmony_ci
16953a5a1b3Sopenharmony_ci\end_inset
17053a5a1b3Sopenharmony_ci
17153a5a1b3Sopenharmony_ci as the encoding technique.
17253a5a1b3Sopenharmony_ci One of the main reasons is that CELP has long proved that it could work
17353a5a1b3Sopenharmony_ci reliably and scale well to both low bit-rates (e.g.
17453a5a1b3Sopenharmony_ci DoD CELP @ 4.8 kbps) and high bit-rates (e.g.
17553a5a1b3Sopenharmony_ci G.728 @ 16 kbps).
17653a5a1b3Sopenharmony_ci 
17753a5a1b3Sopenharmony_ci\end_layout
17853a5a1b3Sopenharmony_ci
17953a5a1b3Sopenharmony_ci\begin_layout Section
18053a5a1b3Sopenharmony_ciGetting help
18153a5a1b3Sopenharmony_ci\begin_inset CommandInset label
18253a5a1b3Sopenharmony_ciLatexCommand label
18353a5a1b3Sopenharmony_ciname "sec:Getting-help"
18453a5a1b3Sopenharmony_ci
18553a5a1b3Sopenharmony_ci\end_inset
18653a5a1b3Sopenharmony_ci
18753a5a1b3Sopenharmony_ci
18853a5a1b3Sopenharmony_ci\end_layout
18953a5a1b3Sopenharmony_ci
19053a5a1b3Sopenharmony_ci\begin_layout Standard
19153a5a1b3Sopenharmony_ciAs for many open source projects, there are many ways to get help with Speex.
19253a5a1b3Sopenharmony_ci These include:
19353a5a1b3Sopenharmony_ci\end_layout
19453a5a1b3Sopenharmony_ci
19553a5a1b3Sopenharmony_ci\begin_layout Itemize
19653a5a1b3Sopenharmony_ciThis manual
19753a5a1b3Sopenharmony_ci\end_layout
19853a5a1b3Sopenharmony_ci
19953a5a1b3Sopenharmony_ci\begin_layout Itemize
20053a5a1b3Sopenharmony_ciOther documentation on the Speex website (http://www.speex.org/)
20153a5a1b3Sopenharmony_ci\end_layout
20253a5a1b3Sopenharmony_ci
20353a5a1b3Sopenharmony_ci\begin_layout Itemize
20453a5a1b3Sopenharmony_ciMailing list: Discuss any Speex-related topic on speex-dev@xiph.org (not
20553a5a1b3Sopenharmony_ci just for developers)
20653a5a1b3Sopenharmony_ci\end_layout
20753a5a1b3Sopenharmony_ci
20853a5a1b3Sopenharmony_ci\begin_layout Itemize
20953a5a1b3Sopenharmony_ciIRC: The main channel is #speex on irc.freenode.net.
21053a5a1b3Sopenharmony_ci Note that due to time differences, it may take a while to get someone,
21153a5a1b3Sopenharmony_ci so please be patient.
21253a5a1b3Sopenharmony_ci\end_layout
21353a5a1b3Sopenharmony_ci
21453a5a1b3Sopenharmony_ci\begin_layout Itemize
21553a5a1b3Sopenharmony_ciEmail the author privately at jean-marc.valin@usherbrooke.ca 
21653a5a1b3Sopenharmony_ci\series bold
21753a5a1b3Sopenharmony_cionly
21853a5a1b3Sopenharmony_ci\series default
21953a5a1b3Sopenharmony_ci for private/delicate topics you do not wish to discuss publicly.
22053a5a1b3Sopenharmony_ci\end_layout
22153a5a1b3Sopenharmony_ci
22253a5a1b3Sopenharmony_ci\begin_layout Standard
22353a5a1b3Sopenharmony_ciBefore asking for help (mailing list or IRC), 
22453a5a1b3Sopenharmony_ci\series bold
22553a5a1b3Sopenharmony_ciit is important to first read this manual
22653a5a1b3Sopenharmony_ci\series default
22753a5a1b3Sopenharmony_ci (OK, so if you made it here it's already a good sign).
22853a5a1b3Sopenharmony_ci It is generally considered rude to ask on a mailing list about topics that
22953a5a1b3Sopenharmony_ci are clearly detailed in the documentation.
23053a5a1b3Sopenharmony_ci On the other hand, it's perfectly OK (and encouraged) to ask for clarifications
23153a5a1b3Sopenharmony_ci about something covered in the manual.
23253a5a1b3Sopenharmony_ci This manual does not (yet) cover everything about Speex, so everyone is
23353a5a1b3Sopenharmony_ci encouraged to ask questions, send comments, feature requests, or just let
23453a5a1b3Sopenharmony_ci us know how Speex is being used.
23553a5a1b3Sopenharmony_ci 
23653a5a1b3Sopenharmony_ci\end_layout
23753a5a1b3Sopenharmony_ci
23853a5a1b3Sopenharmony_ci\begin_layout Standard
23953a5a1b3Sopenharmony_ciHere are some additional guidelines related to the mailing list.
24053a5a1b3Sopenharmony_ci Before reporting bugs in Speex to the list, it is strongly recommended
24153a5a1b3Sopenharmony_ci (if possible) to first test whether these bugs can be reproduced using
24253a5a1b3Sopenharmony_ci the speexenc and speexdec (see Section 
24353a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
24453a5a1b3Sopenharmony_ciLatexCommand ref
24553a5a1b3Sopenharmony_cireference "sec:Command-line-encoder/decoder"
24653a5a1b3Sopenharmony_ci
24753a5a1b3Sopenharmony_ci\end_inset
24853a5a1b3Sopenharmony_ci
24953a5a1b3Sopenharmony_ci) command-line utilities.
25053a5a1b3Sopenharmony_ci Bugs reported based on 3rd party code are both harder to find and far too
25153a5a1b3Sopenharmony_ci often caused by errors that have nothing to do with Speex.
25253a5a1b3Sopenharmony_ci 
25353a5a1b3Sopenharmony_ci\end_layout
25453a5a1b3Sopenharmony_ci
25553a5a1b3Sopenharmony_ci\begin_layout Section
25653a5a1b3Sopenharmony_ciAbout this document
25753a5a1b3Sopenharmony_ci\end_layout
25853a5a1b3Sopenharmony_ci
25953a5a1b3Sopenharmony_ci\begin_layout Standard
26053a5a1b3Sopenharmony_ciThis document is divided in the following way.
26153a5a1b3Sopenharmony_ci Section 
26253a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
26353a5a1b3Sopenharmony_ciLatexCommand ref
26453a5a1b3Sopenharmony_cireference "sec:Feature-description"
26553a5a1b3Sopenharmony_ci
26653a5a1b3Sopenharmony_ci\end_inset
26753a5a1b3Sopenharmony_ci
26853a5a1b3Sopenharmony_ci describes the different Speex features and defines many basic terms that
26953a5a1b3Sopenharmony_ci are used throughout this manual.
27053a5a1b3Sopenharmony_ci Section 
27153a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
27253a5a1b3Sopenharmony_ciLatexCommand ref
27353a5a1b3Sopenharmony_cireference "sec:Command-line-encoder/decoder"
27453a5a1b3Sopenharmony_ci
27553a5a1b3Sopenharmony_ci\end_inset
27653a5a1b3Sopenharmony_ci
27753a5a1b3Sopenharmony_ci documents the standard command-line tools provided in the Speex distribution.
27853a5a1b3Sopenharmony_ci Section 
27953a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
28053a5a1b3Sopenharmony_ciLatexCommand ref
28153a5a1b3Sopenharmony_cireference "sec:Programming-with-Speex"
28253a5a1b3Sopenharmony_ci
28353a5a1b3Sopenharmony_ci\end_inset
28453a5a1b3Sopenharmony_ci
28553a5a1b3Sopenharmony_ci includes detailed instructions about programming using the libspeex
28653a5a1b3Sopenharmony_ci\begin_inset Index
28753a5a1b3Sopenharmony_cistatus collapsed
28853a5a1b3Sopenharmony_ci
28953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
29053a5a1b3Sopenharmony_cilibspeex
29153a5a1b3Sopenharmony_ci\end_layout
29253a5a1b3Sopenharmony_ci
29353a5a1b3Sopenharmony_ci\end_inset
29453a5a1b3Sopenharmony_ci
29553a5a1b3Sopenharmony_ci API.
29653a5a1b3Sopenharmony_ci Section 
29753a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
29853a5a1b3Sopenharmony_ciLatexCommand ref
29953a5a1b3Sopenharmony_cireference "sec:Formats-and-standards"
30053a5a1b3Sopenharmony_ci
30153a5a1b3Sopenharmony_ci\end_inset
30253a5a1b3Sopenharmony_ci
30353a5a1b3Sopenharmony_ci has some information related to Speex and standards.
30453a5a1b3Sopenharmony_ci 
30553a5a1b3Sopenharmony_ci\end_layout
30653a5a1b3Sopenharmony_ci
30753a5a1b3Sopenharmony_ci\begin_layout Standard
30853a5a1b3Sopenharmony_ciThe three last sections describe the algorithms used in Speex.
30953a5a1b3Sopenharmony_ci These sections require signal processing knowledge, but are not required
31053a5a1b3Sopenharmony_ci for merely using Speex.
31153a5a1b3Sopenharmony_ci They are intended for people who want to understand how Speex really works
31253a5a1b3Sopenharmony_ci and/or want to do research based on Speex.
31353a5a1b3Sopenharmony_ci Section 
31453a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
31553a5a1b3Sopenharmony_ciLatexCommand ref
31653a5a1b3Sopenharmony_cireference "sec:Introduction-to-CELP"
31753a5a1b3Sopenharmony_ci
31853a5a1b3Sopenharmony_ci\end_inset
31953a5a1b3Sopenharmony_ci
32053a5a1b3Sopenharmony_ci explains the general idea behind CELP, while sections 
32153a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
32253a5a1b3Sopenharmony_ciLatexCommand ref
32353a5a1b3Sopenharmony_cireference "sec:Speex-narrowband-mode"
32453a5a1b3Sopenharmony_ci
32553a5a1b3Sopenharmony_ci\end_inset
32653a5a1b3Sopenharmony_ci
32753a5a1b3Sopenharmony_ci and 
32853a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
32953a5a1b3Sopenharmony_ciLatexCommand ref
33053a5a1b3Sopenharmony_cireference "sec:Speex-wideband-mode"
33153a5a1b3Sopenharmony_ci
33253a5a1b3Sopenharmony_ci\end_inset
33353a5a1b3Sopenharmony_ci
33453a5a1b3Sopenharmony_ci are specific to Speex.
33553a5a1b3Sopenharmony_ci\end_layout
33653a5a1b3Sopenharmony_ci
33753a5a1b3Sopenharmony_ci\begin_layout Standard
33853a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
33953a5a1b3Sopenharmony_ci\end_inset
34053a5a1b3Sopenharmony_ci
34153a5a1b3Sopenharmony_ci
34253a5a1b3Sopenharmony_ci\end_layout
34353a5a1b3Sopenharmony_ci
34453a5a1b3Sopenharmony_ci\begin_layout Chapter
34553a5a1b3Sopenharmony_ciCodec description
34653a5a1b3Sopenharmony_ci\begin_inset CommandInset label
34753a5a1b3Sopenharmony_ciLatexCommand label
34853a5a1b3Sopenharmony_ciname "sec:Feature-description"
34953a5a1b3Sopenharmony_ci
35053a5a1b3Sopenharmony_ci\end_inset
35153a5a1b3Sopenharmony_ci
35253a5a1b3Sopenharmony_ci
35353a5a1b3Sopenharmony_ci\end_layout
35453a5a1b3Sopenharmony_ci
35553a5a1b3Sopenharmony_ci\begin_layout Standard
35653a5a1b3Sopenharmony_ciThis section describes Speex and its features into more details.
35753a5a1b3Sopenharmony_ci\end_layout
35853a5a1b3Sopenharmony_ci
35953a5a1b3Sopenharmony_ci\begin_layout Section
36053a5a1b3Sopenharmony_ciConcepts
36153a5a1b3Sopenharmony_ci\end_layout
36253a5a1b3Sopenharmony_ci
36353a5a1b3Sopenharmony_ci\begin_layout Standard
36453a5a1b3Sopenharmony_ciBefore introducing all the Speex features, here are some concepts in speech
36553a5a1b3Sopenharmony_ci coding that help better understand the rest of the manual.
36653a5a1b3Sopenharmony_ci Although some are general concepts in speech/audio processing, others are
36753a5a1b3Sopenharmony_ci specific to Speex.
36853a5a1b3Sopenharmony_ci\end_layout
36953a5a1b3Sopenharmony_ci
37053a5a1b3Sopenharmony_ci\begin_layout Subsection*
37153a5a1b3Sopenharmony_ciSampling rate
37253a5a1b3Sopenharmony_ci\begin_inset Index
37353a5a1b3Sopenharmony_cistatus collapsed
37453a5a1b3Sopenharmony_ci
37553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
37653a5a1b3Sopenharmony_cisampling rate
37753a5a1b3Sopenharmony_ci\end_layout
37853a5a1b3Sopenharmony_ci
37953a5a1b3Sopenharmony_ci\end_inset
38053a5a1b3Sopenharmony_ci
38153a5a1b3Sopenharmony_ci
38253a5a1b3Sopenharmony_ci\end_layout
38353a5a1b3Sopenharmony_ci
38453a5a1b3Sopenharmony_ci\begin_layout Standard
38553a5a1b3Sopenharmony_ciThe sampling rate expressed in Hertz (Hz) is the number of samples taken
38653a5a1b3Sopenharmony_ci from a signal per second.
38753a5a1b3Sopenharmony_ci For a sampling rate of 
38853a5a1b3Sopenharmony_ci\begin_inset Formula $F_{s}$
38953a5a1b3Sopenharmony_ci\end_inset
39053a5a1b3Sopenharmony_ci
39153a5a1b3Sopenharmony_ci kHz, the highest frequency that can be represented is equal to 
39253a5a1b3Sopenharmony_ci\begin_inset Formula $F_{s}/2$
39353a5a1b3Sopenharmony_ci\end_inset
39453a5a1b3Sopenharmony_ci
39553a5a1b3Sopenharmony_ci kHz (
39653a5a1b3Sopenharmony_ci\begin_inset Formula $F_{s}/2$
39753a5a1b3Sopenharmony_ci\end_inset
39853a5a1b3Sopenharmony_ci
39953a5a1b3Sopenharmony_ci is known as the Nyquist frequency).
40053a5a1b3Sopenharmony_ci This is a fundamental property in signal processing and is described by
40153a5a1b3Sopenharmony_ci the sampling theorem.
40253a5a1b3Sopenharmony_ci Speex is mainly designed for three different sampling rates: 8 kHz, 16
40353a5a1b3Sopenharmony_ci kHz, and 32 kHz.
40453a5a1b3Sopenharmony_ci These are respectively referred to as narrowband
40553a5a1b3Sopenharmony_ci\begin_inset Index
40653a5a1b3Sopenharmony_cistatus collapsed
40753a5a1b3Sopenharmony_ci
40853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
40953a5a1b3Sopenharmony_cinarrowband
41053a5a1b3Sopenharmony_ci\end_layout
41153a5a1b3Sopenharmony_ci
41253a5a1b3Sopenharmony_ci\end_inset
41353a5a1b3Sopenharmony_ci
41453a5a1b3Sopenharmony_ci, wideband
41553a5a1b3Sopenharmony_ci\begin_inset Index
41653a5a1b3Sopenharmony_cistatus collapsed
41753a5a1b3Sopenharmony_ci
41853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
41953a5a1b3Sopenharmony_ciwideband
42053a5a1b3Sopenharmony_ci\end_layout
42153a5a1b3Sopenharmony_ci
42253a5a1b3Sopenharmony_ci\end_inset
42353a5a1b3Sopenharmony_ci
42453a5a1b3Sopenharmony_ci and ultra-wideband
42553a5a1b3Sopenharmony_ci\begin_inset Index
42653a5a1b3Sopenharmony_cistatus collapsed
42753a5a1b3Sopenharmony_ci
42853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
42953a5a1b3Sopenharmony_ciultra-wideband
43053a5a1b3Sopenharmony_ci\end_layout
43153a5a1b3Sopenharmony_ci
43253a5a1b3Sopenharmony_ci\end_inset
43353a5a1b3Sopenharmony_ci
43453a5a1b3Sopenharmony_ci.
43553a5a1b3Sopenharmony_ci 
43653a5a1b3Sopenharmony_ci\end_layout
43753a5a1b3Sopenharmony_ci
43853a5a1b3Sopenharmony_ci\begin_layout Subsection*
43953a5a1b3Sopenharmony_ciBit-rate
44053a5a1b3Sopenharmony_ci\end_layout
44153a5a1b3Sopenharmony_ci
44253a5a1b3Sopenharmony_ci\begin_layout Standard
44353a5a1b3Sopenharmony_ciWhen encoding a speech signal, the bit-rate is defined as the number of
44453a5a1b3Sopenharmony_ci bits per unit of time required to encode the speech.
44553a5a1b3Sopenharmony_ci It is measured in 
44653a5a1b3Sopenharmony_ci\emph on
44753a5a1b3Sopenharmony_cibits per second
44853a5a1b3Sopenharmony_ci\emph default
44953a5a1b3Sopenharmony_ci (bps), or generally 
45053a5a1b3Sopenharmony_ci\emph on
45153a5a1b3Sopenharmony_cikilobits per second
45253a5a1b3Sopenharmony_ci\emph default
45353a5a1b3Sopenharmony_ci.
45453a5a1b3Sopenharmony_ci It is important to make the distinction between 
45553a5a1b3Sopenharmony_ci\emph on
45653a5a1b3Sopenharmony_cikilo
45753a5a1b3Sopenharmony_ci\series bold
45853a5a1b3Sopenharmony_cibits
45953a5a1b3Sopenharmony_ci\series default
46053a5a1b3Sopenharmony_ci\emph default
46153a5a1b3Sopenharmony_ci 
46253a5a1b3Sopenharmony_ci\emph on
46353a5a1b3Sopenharmony_ciper second
46453a5a1b3Sopenharmony_ci\emph default
46553a5a1b3Sopenharmony_ci (k
46653a5a1b3Sopenharmony_ci\series bold
46753a5a1b3Sopenharmony_cib
46853a5a1b3Sopenharmony_ci\series default
46953a5a1b3Sopenharmony_cips) and 
47053a5a1b3Sopenharmony_ci\emph on
47153a5a1b3Sopenharmony_cikilo
47253a5a1b3Sopenharmony_ci\series bold
47353a5a1b3Sopenharmony_cibytes
47453a5a1b3Sopenharmony_ci\series default
47553a5a1b3Sopenharmony_ci\emph default
47653a5a1b3Sopenharmony_ci 
47753a5a1b3Sopenharmony_ci\emph on
47853a5a1b3Sopenharmony_ciper second
47953a5a1b3Sopenharmony_ci\emph default
48053a5a1b3Sopenharmony_ci (k
48153a5a1b3Sopenharmony_ci\series bold
48253a5a1b3Sopenharmony_ciB
48353a5a1b3Sopenharmony_ci\series default
48453a5a1b3Sopenharmony_cips).
48553a5a1b3Sopenharmony_ci\end_layout
48653a5a1b3Sopenharmony_ci
48753a5a1b3Sopenharmony_ci\begin_layout Subsection*
48853a5a1b3Sopenharmony_ciQuality
48953a5a1b3Sopenharmony_ci\begin_inset Index
49053a5a1b3Sopenharmony_cistatus collapsed
49153a5a1b3Sopenharmony_ci
49253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
49353a5a1b3Sopenharmony_ciquality
49453a5a1b3Sopenharmony_ci\end_layout
49553a5a1b3Sopenharmony_ci
49653a5a1b3Sopenharmony_ci\end_inset
49753a5a1b3Sopenharmony_ci
49853a5a1b3Sopenharmony_ci (variable)
49953a5a1b3Sopenharmony_ci\end_layout
50053a5a1b3Sopenharmony_ci
50153a5a1b3Sopenharmony_ci\begin_layout Standard
50253a5a1b3Sopenharmony_ciSpeex is a lossy codec, which means that it achieves compression at the
50353a5a1b3Sopenharmony_ci expense of fidelity of the input speech signal.
50453a5a1b3Sopenharmony_ci Unlike some other speech codecs, it is possible to control the trade-off
50553a5a1b3Sopenharmony_ci made between quality and bit-rate.
50653a5a1b3Sopenharmony_ci The Speex encoding process is controlled most of the time by a quality
50753a5a1b3Sopenharmony_ci parameter that ranges from 0 to 10.
50853a5a1b3Sopenharmony_ci In constant bit-rate
50953a5a1b3Sopenharmony_ci\begin_inset Index
51053a5a1b3Sopenharmony_cistatus collapsed
51153a5a1b3Sopenharmony_ci
51253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
51353a5a1b3Sopenharmony_ciconstant bit-rate
51453a5a1b3Sopenharmony_ci\end_layout
51553a5a1b3Sopenharmony_ci
51653a5a1b3Sopenharmony_ci\end_inset
51753a5a1b3Sopenharmony_ci
51853a5a1b3Sopenharmony_ci (CBR) operation, the quality parameter is an integer, while for variable
51953a5a1b3Sopenharmony_ci bit-rate (VBR), the parameter is a float.
52053a5a1b3Sopenharmony_ci 
52153a5a1b3Sopenharmony_ci\end_layout
52253a5a1b3Sopenharmony_ci
52353a5a1b3Sopenharmony_ci\begin_layout Subsection*
52453a5a1b3Sopenharmony_ciComplexity
52553a5a1b3Sopenharmony_ci\begin_inset Index
52653a5a1b3Sopenharmony_cistatus collapsed
52753a5a1b3Sopenharmony_ci
52853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
52953a5a1b3Sopenharmony_cicomplexity
53053a5a1b3Sopenharmony_ci\end_layout
53153a5a1b3Sopenharmony_ci
53253a5a1b3Sopenharmony_ci\end_inset
53353a5a1b3Sopenharmony_ci
53453a5a1b3Sopenharmony_ci (variable)
53553a5a1b3Sopenharmony_ci\end_layout
53653a5a1b3Sopenharmony_ci
53753a5a1b3Sopenharmony_ci\begin_layout Standard
53853a5a1b3Sopenharmony_ciWith Speex, it is possible to vary the complexity allowed for the encoder.
53953a5a1b3Sopenharmony_ci This is done by controlling how the search is performed with an integer
54053a5a1b3Sopenharmony_ci ranging from 1 to 10 in a way that's similar to the -1 to -9 options to
54153a5a1b3Sopenharmony_ci 
54253a5a1b3Sopenharmony_ci\emph on
54353a5a1b3Sopenharmony_cigzip
54453a5a1b3Sopenharmony_ci\emph default
54553a5a1b3Sopenharmony_ci and 
54653a5a1b3Sopenharmony_ci\emph on
54753a5a1b3Sopenharmony_cibzip2
54853a5a1b3Sopenharmony_ci\emph default
54953a5a1b3Sopenharmony_ci compression utilities.
55053a5a1b3Sopenharmony_ci For normal use, the noise level at complexity 1 is between 1 and 2 dB higher
55153a5a1b3Sopenharmony_ci than at complexity 10, but the CPU requirements for complexity 10 is about
55253a5a1b3Sopenharmony_ci 5 times higher than for complexity 1.
55353a5a1b3Sopenharmony_ci In practice, the best trade-off is between complexity 2 and 4, though higher
55453a5a1b3Sopenharmony_ci settings are often useful when encoding non-speech sounds like DTMF
55553a5a1b3Sopenharmony_ci\begin_inset Index
55653a5a1b3Sopenharmony_cistatus collapsed
55753a5a1b3Sopenharmony_ci
55853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
55953a5a1b3Sopenharmony_ciDTMF
56053a5a1b3Sopenharmony_ci\end_layout
56153a5a1b3Sopenharmony_ci
56253a5a1b3Sopenharmony_ci\end_inset
56353a5a1b3Sopenharmony_ci
56453a5a1b3Sopenharmony_ci tones.
56553a5a1b3Sopenharmony_ci\end_layout
56653a5a1b3Sopenharmony_ci
56753a5a1b3Sopenharmony_ci\begin_layout Subsection*
56853a5a1b3Sopenharmony_ciVariable Bit-Rate
56953a5a1b3Sopenharmony_ci\begin_inset Index
57053a5a1b3Sopenharmony_cistatus collapsed
57153a5a1b3Sopenharmony_ci
57253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
57353a5a1b3Sopenharmony_civariable bit-rate
57453a5a1b3Sopenharmony_ci\end_layout
57553a5a1b3Sopenharmony_ci
57653a5a1b3Sopenharmony_ci\end_inset
57753a5a1b3Sopenharmony_ci
57853a5a1b3Sopenharmony_ci (VBR)
57953a5a1b3Sopenharmony_ci\end_layout
58053a5a1b3Sopenharmony_ci
58153a5a1b3Sopenharmony_ci\begin_layout Standard
58253a5a1b3Sopenharmony_ciVariable bit-rate (VBR) allows a codec to change its bit-rate dynamically
58353a5a1b3Sopenharmony_ci to adapt to the 
58453a5a1b3Sopenharmony_ci\begin_inset Quotes eld
58553a5a1b3Sopenharmony_ci\end_inset
58653a5a1b3Sopenharmony_ci
58753a5a1b3Sopenharmony_cidifficulty
58853a5a1b3Sopenharmony_ci\begin_inset Quotes erd
58953a5a1b3Sopenharmony_ci\end_inset
59053a5a1b3Sopenharmony_ci
59153a5a1b3Sopenharmony_ci of the audio being encoded.
59253a5a1b3Sopenharmony_ci In the example of Speex, sounds like vowels and high-energy transients
59353a5a1b3Sopenharmony_ci require a higher bit-rate to achieve good quality, while fricatives (e.g.
59453a5a1b3Sopenharmony_ci s,f sounds) can be coded adequately with less bits.
59553a5a1b3Sopenharmony_ci For this reason, VBR can achieve lower bit-rate for the same quality, or
59653a5a1b3Sopenharmony_ci a better quality for a certain bit-rate.
59753a5a1b3Sopenharmony_ci Despite its advantages, VBR has two main drawbacks: first, by only specifying
59853a5a1b3Sopenharmony_ci quality, there's no guaranty about the final average bit-rate.
59953a5a1b3Sopenharmony_ci Second, for some real-time applications like voice over IP (VoIP), what
60053a5a1b3Sopenharmony_ci counts is the maximum bit-rate, which must be low enough for the communication
60153a5a1b3Sopenharmony_ci channel.
60253a5a1b3Sopenharmony_ci\end_layout
60353a5a1b3Sopenharmony_ci
60453a5a1b3Sopenharmony_ci\begin_layout Subsection*
60553a5a1b3Sopenharmony_ciAverage Bit-Rate
60653a5a1b3Sopenharmony_ci\begin_inset Index
60753a5a1b3Sopenharmony_cistatus collapsed
60853a5a1b3Sopenharmony_ci
60953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
61053a5a1b3Sopenharmony_ciaverage bit-rate
61153a5a1b3Sopenharmony_ci\end_layout
61253a5a1b3Sopenharmony_ci
61353a5a1b3Sopenharmony_ci\end_inset
61453a5a1b3Sopenharmony_ci
61553a5a1b3Sopenharmony_ci (ABR)
61653a5a1b3Sopenharmony_ci\end_layout
61753a5a1b3Sopenharmony_ci
61853a5a1b3Sopenharmony_ci\begin_layout Standard
61953a5a1b3Sopenharmony_ciAverage bit-rate solves one of the problems of VBR, as it dynamically adjusts
62053a5a1b3Sopenharmony_ci VBR quality in order to meet a specific target bit-rate.
62153a5a1b3Sopenharmony_ci Because the quality/bit-rate is adjusted in real-time (open-loop), the
62253a5a1b3Sopenharmony_ci global quality will be slightly lower than that obtained by encoding in
62353a5a1b3Sopenharmony_ci VBR with exactly the right quality setting to meet the target average bit-rate.
62453a5a1b3Sopenharmony_ci\end_layout
62553a5a1b3Sopenharmony_ci
62653a5a1b3Sopenharmony_ci\begin_layout Subsection*
62753a5a1b3Sopenharmony_ciVoice Activity Detection
62853a5a1b3Sopenharmony_ci\begin_inset Index
62953a5a1b3Sopenharmony_cistatus collapsed
63053a5a1b3Sopenharmony_ci
63153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
63253a5a1b3Sopenharmony_civoice activity detection
63353a5a1b3Sopenharmony_ci\end_layout
63453a5a1b3Sopenharmony_ci
63553a5a1b3Sopenharmony_ci\end_inset
63653a5a1b3Sopenharmony_ci
63753a5a1b3Sopenharmony_ci (VAD)
63853a5a1b3Sopenharmony_ci\end_layout
63953a5a1b3Sopenharmony_ci
64053a5a1b3Sopenharmony_ci\begin_layout Standard
64153a5a1b3Sopenharmony_ciWhen enabled, voice activity detection detects whether the audio being encoded
64253a5a1b3Sopenharmony_ci is speech or silence/background noise.
64353a5a1b3Sopenharmony_ci VAD is always implicitly activated when encoding in VBR, so the option
64453a5a1b3Sopenharmony_ci is only useful in non-VBR operation.
64553a5a1b3Sopenharmony_ci In this case, Speex detects non-speech periods and encode them with just
64653a5a1b3Sopenharmony_ci enough bits to reproduce the background noise.
64753a5a1b3Sopenharmony_ci This is called 
64853a5a1b3Sopenharmony_ci\begin_inset Quotes eld
64953a5a1b3Sopenharmony_ci\end_inset
65053a5a1b3Sopenharmony_ci
65153a5a1b3Sopenharmony_cicomfort noise generation
65253a5a1b3Sopenharmony_ci\begin_inset Quotes erd
65353a5a1b3Sopenharmony_ci\end_inset
65453a5a1b3Sopenharmony_ci
65553a5a1b3Sopenharmony_ci (CNG).
65653a5a1b3Sopenharmony_ci\end_layout
65753a5a1b3Sopenharmony_ci
65853a5a1b3Sopenharmony_ci\begin_layout Subsection*
65953a5a1b3Sopenharmony_ciDiscontinuous Transmission
66053a5a1b3Sopenharmony_ci\begin_inset Index
66153a5a1b3Sopenharmony_cistatus collapsed
66253a5a1b3Sopenharmony_ci
66353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
66453a5a1b3Sopenharmony_cidiscontinuous transmission
66553a5a1b3Sopenharmony_ci\end_layout
66653a5a1b3Sopenharmony_ci
66753a5a1b3Sopenharmony_ci\end_inset
66853a5a1b3Sopenharmony_ci
66953a5a1b3Sopenharmony_ci (DTX)
67053a5a1b3Sopenharmony_ci\end_layout
67153a5a1b3Sopenharmony_ci
67253a5a1b3Sopenharmony_ci\begin_layout Standard
67353a5a1b3Sopenharmony_ciDiscontinuous transmission is an addition to VAD/VBR operation, that allows
67453a5a1b3Sopenharmony_ci to stop transmitting completely when the background noise is stationary.
67553a5a1b3Sopenharmony_ci In file-based operation, since we cannot just stop writing to the file,
67653a5a1b3Sopenharmony_ci only 5 bits are used for such frames (corresponding to 250 bps).
67753a5a1b3Sopenharmony_ci\end_layout
67853a5a1b3Sopenharmony_ci
67953a5a1b3Sopenharmony_ci\begin_layout Subsection*
68053a5a1b3Sopenharmony_ciPerceptual enhancement
68153a5a1b3Sopenharmony_ci\begin_inset Index
68253a5a1b3Sopenharmony_cistatus collapsed
68353a5a1b3Sopenharmony_ci
68453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
68553a5a1b3Sopenharmony_ciperceptual enhancement
68653a5a1b3Sopenharmony_ci\end_layout
68753a5a1b3Sopenharmony_ci
68853a5a1b3Sopenharmony_ci\end_inset
68953a5a1b3Sopenharmony_ci
69053a5a1b3Sopenharmony_ci
69153a5a1b3Sopenharmony_ci\end_layout
69253a5a1b3Sopenharmony_ci
69353a5a1b3Sopenharmony_ci\begin_layout Standard
69453a5a1b3Sopenharmony_ciPerceptual enhancement is a part of the decoder which, when turned on, attempts
69553a5a1b3Sopenharmony_ci to reduce the perception of the noise/distortion produced by the encoding/decod
69653a5a1b3Sopenharmony_ciing process.
69753a5a1b3Sopenharmony_ci In most cases, perceptual enhancement brings the sound further from the
69853a5a1b3Sopenharmony_ci original 
69953a5a1b3Sopenharmony_ci\emph on
70053a5a1b3Sopenharmony_ciobjectively
70153a5a1b3Sopenharmony_ci\emph default
70253a5a1b3Sopenharmony_ci (e.g.
70353a5a1b3Sopenharmony_ci considering only SNR), but in the end it still 
70453a5a1b3Sopenharmony_ci\emph on
70553a5a1b3Sopenharmony_cisounds
70653a5a1b3Sopenharmony_ci\emph default
70753a5a1b3Sopenharmony_ci better (subjective improvement).
70853a5a1b3Sopenharmony_ci\end_layout
70953a5a1b3Sopenharmony_ci
71053a5a1b3Sopenharmony_ci\begin_layout Subsection*
71153a5a1b3Sopenharmony_ciLatency and algorithmic delay
71253a5a1b3Sopenharmony_ci\begin_inset Index
71353a5a1b3Sopenharmony_cistatus collapsed
71453a5a1b3Sopenharmony_ci
71553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
71653a5a1b3Sopenharmony_cialgorithmic delay
71753a5a1b3Sopenharmony_ci\end_layout
71853a5a1b3Sopenharmony_ci
71953a5a1b3Sopenharmony_ci\end_inset
72053a5a1b3Sopenharmony_ci
72153a5a1b3Sopenharmony_ci
72253a5a1b3Sopenharmony_ci\end_layout
72353a5a1b3Sopenharmony_ci
72453a5a1b3Sopenharmony_ci\begin_layout Standard
72553a5a1b3Sopenharmony_ciEvery speech codec introduces a delay in the transmission.
72653a5a1b3Sopenharmony_ci For Speex, this delay is equal to the frame size, plus some amount of 
72753a5a1b3Sopenharmony_ci\begin_inset Quotes eld
72853a5a1b3Sopenharmony_ci\end_inset
72953a5a1b3Sopenharmony_ci
73053a5a1b3Sopenharmony_cilook-ahead
73153a5a1b3Sopenharmony_ci\begin_inset Quotes erd
73253a5a1b3Sopenharmony_ci\end_inset
73353a5a1b3Sopenharmony_ci
73453a5a1b3Sopenharmony_ci required to process each frame.
73553a5a1b3Sopenharmony_ci In narrowband operation (8 kHz), the look-ahead is 10 ms, in wideband operation
73653a5a1b3Sopenharmony_ci (16 kHz), the look-ahead is 13.9 ms and in ultra-wideband operation (32
73753a5a1b3Sopenharmony_ci kHz) look-ahead is 15.9 ms, resulting in the algorithic delays of 30 ms,
73853a5a1b3Sopenharmony_ci 33.9 ms and 35.9 ms accordingly.
73953a5a1b3Sopenharmony_ci These values don't account for the CPU time it takes to encode or decode
74053a5a1b3Sopenharmony_ci the frames.
74153a5a1b3Sopenharmony_ci\end_layout
74253a5a1b3Sopenharmony_ci
74353a5a1b3Sopenharmony_ci\begin_layout Section
74453a5a1b3Sopenharmony_ciCodec
74553a5a1b3Sopenharmony_ci\end_layout
74653a5a1b3Sopenharmony_ci
74753a5a1b3Sopenharmony_ci\begin_layout Standard
74853a5a1b3Sopenharmony_ciThe main characteristics of Speex can be summarized as follows:
74953a5a1b3Sopenharmony_ci\end_layout
75053a5a1b3Sopenharmony_ci
75153a5a1b3Sopenharmony_ci\begin_layout Itemize
75253a5a1b3Sopenharmony_ciFree software/open-source
75353a5a1b3Sopenharmony_ci\begin_inset Index
75453a5a1b3Sopenharmony_cistatus collapsed
75553a5a1b3Sopenharmony_ci
75653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
75753a5a1b3Sopenharmony_ciopen-source
75853a5a1b3Sopenharmony_ci\end_layout
75953a5a1b3Sopenharmony_ci
76053a5a1b3Sopenharmony_ci\end_inset
76153a5a1b3Sopenharmony_ci
76253a5a1b3Sopenharmony_ci, patent
76353a5a1b3Sopenharmony_ci\begin_inset Index
76453a5a1b3Sopenharmony_cistatus collapsed
76553a5a1b3Sopenharmony_ci
76653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
76753a5a1b3Sopenharmony_cipatent
76853a5a1b3Sopenharmony_ci\end_layout
76953a5a1b3Sopenharmony_ci
77053a5a1b3Sopenharmony_ci\end_inset
77153a5a1b3Sopenharmony_ci
77253a5a1b3Sopenharmony_ci and royalty-free
77353a5a1b3Sopenharmony_ci\end_layout
77453a5a1b3Sopenharmony_ci
77553a5a1b3Sopenharmony_ci\begin_layout Itemize
77653a5a1b3Sopenharmony_ciIntegration of narrowband
77753a5a1b3Sopenharmony_ci\begin_inset Index
77853a5a1b3Sopenharmony_cistatus collapsed
77953a5a1b3Sopenharmony_ci
78053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
78153a5a1b3Sopenharmony_cinarrowband
78253a5a1b3Sopenharmony_ci\end_layout
78353a5a1b3Sopenharmony_ci
78453a5a1b3Sopenharmony_ci\end_inset
78553a5a1b3Sopenharmony_ci
78653a5a1b3Sopenharmony_ci and wideband
78753a5a1b3Sopenharmony_ci\begin_inset Index
78853a5a1b3Sopenharmony_cistatus collapsed
78953a5a1b3Sopenharmony_ci
79053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
79153a5a1b3Sopenharmony_ciwideband
79253a5a1b3Sopenharmony_ci\end_layout
79353a5a1b3Sopenharmony_ci
79453a5a1b3Sopenharmony_ci\end_inset
79553a5a1b3Sopenharmony_ci
79653a5a1b3Sopenharmony_ci using an embedded bit-stream
79753a5a1b3Sopenharmony_ci\end_layout
79853a5a1b3Sopenharmony_ci
79953a5a1b3Sopenharmony_ci\begin_layout Itemize
80053a5a1b3Sopenharmony_ciWide range of bit-rates available (from 2.15 kbps to 44 kbps)
80153a5a1b3Sopenharmony_ci\end_layout
80253a5a1b3Sopenharmony_ci
80353a5a1b3Sopenharmony_ci\begin_layout Itemize
80453a5a1b3Sopenharmony_ciDynamic bit-rate switching (AMR) and Variable Bit-Rate
80553a5a1b3Sopenharmony_ci\begin_inset Index
80653a5a1b3Sopenharmony_cistatus collapsed
80753a5a1b3Sopenharmony_ci
80853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
80953a5a1b3Sopenharmony_civariable bit-rate
81053a5a1b3Sopenharmony_ci\end_layout
81153a5a1b3Sopenharmony_ci
81253a5a1b3Sopenharmony_ci\end_inset
81353a5a1b3Sopenharmony_ci
81453a5a1b3Sopenharmony_ci (VBR) operation
81553a5a1b3Sopenharmony_ci\end_layout
81653a5a1b3Sopenharmony_ci
81753a5a1b3Sopenharmony_ci\begin_layout Itemize
81853a5a1b3Sopenharmony_ciVoice Activity Detection
81953a5a1b3Sopenharmony_ci\begin_inset Index
82053a5a1b3Sopenharmony_cistatus collapsed
82153a5a1b3Sopenharmony_ci
82253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
82353a5a1b3Sopenharmony_civoice activity detection
82453a5a1b3Sopenharmony_ci\end_layout
82553a5a1b3Sopenharmony_ci
82653a5a1b3Sopenharmony_ci\end_inset
82753a5a1b3Sopenharmony_ci
82853a5a1b3Sopenharmony_ci (VAD, integrated with VBR) and discontinuous transmission (DTX)
82953a5a1b3Sopenharmony_ci\end_layout
83053a5a1b3Sopenharmony_ci
83153a5a1b3Sopenharmony_ci\begin_layout Itemize
83253a5a1b3Sopenharmony_ciVariable complexity
83353a5a1b3Sopenharmony_ci\begin_inset Index
83453a5a1b3Sopenharmony_cistatus collapsed
83553a5a1b3Sopenharmony_ci
83653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
83753a5a1b3Sopenharmony_cicomplexity
83853a5a1b3Sopenharmony_ci\end_layout
83953a5a1b3Sopenharmony_ci
84053a5a1b3Sopenharmony_ci\end_inset
84153a5a1b3Sopenharmony_ci
84253a5a1b3Sopenharmony_ci
84353a5a1b3Sopenharmony_ci\end_layout
84453a5a1b3Sopenharmony_ci
84553a5a1b3Sopenharmony_ci\begin_layout Itemize
84653a5a1b3Sopenharmony_ciEmbedded wideband structure (scalable sampling rate)
84753a5a1b3Sopenharmony_ci\end_layout
84853a5a1b3Sopenharmony_ci
84953a5a1b3Sopenharmony_ci\begin_layout Itemize
85053a5a1b3Sopenharmony_ciUltra-wideband sampling rate at 32 kHz
85153a5a1b3Sopenharmony_ci\end_layout
85253a5a1b3Sopenharmony_ci
85353a5a1b3Sopenharmony_ci\begin_layout Itemize
85453a5a1b3Sopenharmony_ciIntensity stereo encoding option
85553a5a1b3Sopenharmony_ci\end_layout
85653a5a1b3Sopenharmony_ci
85753a5a1b3Sopenharmony_ci\begin_layout Itemize
85853a5a1b3Sopenharmony_ciFixed-point implementation
85953a5a1b3Sopenharmony_ci\end_layout
86053a5a1b3Sopenharmony_ci
86153a5a1b3Sopenharmony_ci\begin_layout Section
86253a5a1b3Sopenharmony_ciPreprocessor
86353a5a1b3Sopenharmony_ci\end_layout
86453a5a1b3Sopenharmony_ci
86553a5a1b3Sopenharmony_ci\begin_layout Standard
86653a5a1b3Sopenharmony_ciThis part refers to the preprocessor module introduced in the 1.1.x branch.
86753a5a1b3Sopenharmony_ci The preprocessor is designed to be used on the audio 
86853a5a1b3Sopenharmony_ci\emph on
86953a5a1b3Sopenharmony_cibefore
87053a5a1b3Sopenharmony_ci\emph default
87153a5a1b3Sopenharmony_ci running the encoder.
87253a5a1b3Sopenharmony_ci The preprocessor provides three main functionalities:
87353a5a1b3Sopenharmony_ci\end_layout
87453a5a1b3Sopenharmony_ci
87553a5a1b3Sopenharmony_ci\begin_layout Itemize
87653a5a1b3Sopenharmony_cinoise suppression
87753a5a1b3Sopenharmony_ci\end_layout
87853a5a1b3Sopenharmony_ci
87953a5a1b3Sopenharmony_ci\begin_layout Itemize
88053a5a1b3Sopenharmony_ciautomatic gain control (AGC)
88153a5a1b3Sopenharmony_ci\end_layout
88253a5a1b3Sopenharmony_ci
88353a5a1b3Sopenharmony_ci\begin_layout Itemize
88453a5a1b3Sopenharmony_civoice activity detection (VAD)
88553a5a1b3Sopenharmony_ci\end_layout
88653a5a1b3Sopenharmony_ci
88753a5a1b3Sopenharmony_ci\begin_layout Standard
88853a5a1b3Sopenharmony_ciThe denoiser can be used to reduce the amount of background noise present
88953a5a1b3Sopenharmony_ci in the input signal.
89053a5a1b3Sopenharmony_ci This provides higher quality speech whether or not the denoised signal
89153a5a1b3Sopenharmony_ci is encoded with Speex (or at all).
89253a5a1b3Sopenharmony_ci However, when using the denoised signal with the codec, there is an additional
89353a5a1b3Sopenharmony_ci benefit.
89453a5a1b3Sopenharmony_ci Speech codecs in general (Speex included) tend to perform poorly on noisy
89553a5a1b3Sopenharmony_ci input, which tends to amplify the noise.
89653a5a1b3Sopenharmony_ci The denoiser greatly reduces this effect.
89753a5a1b3Sopenharmony_ci\end_layout
89853a5a1b3Sopenharmony_ci
89953a5a1b3Sopenharmony_ci\begin_layout Standard
90053a5a1b3Sopenharmony_ciAutomatic gain control (AGC) is a feature that deals with the fact that
90153a5a1b3Sopenharmony_ci the recording volume may vary by a large amount between different setups.
90253a5a1b3Sopenharmony_ci The AGC provides a way to adjust a signal to a reference volume.
90353a5a1b3Sopenharmony_ci This is useful for voice over IP because it removes the need for manual
90453a5a1b3Sopenharmony_ci adjustment of the microphone gain.
90553a5a1b3Sopenharmony_ci A secondary advantage is that by setting the microphone gain to a conservative
90653a5a1b3Sopenharmony_ci (low) level, it is easier to avoid clipping.
90753a5a1b3Sopenharmony_ci\end_layout
90853a5a1b3Sopenharmony_ci
90953a5a1b3Sopenharmony_ci\begin_layout Standard
91053a5a1b3Sopenharmony_ciThe voice activity detector (VAD) provided by the preprocessor is more advanced
91153a5a1b3Sopenharmony_ci than the one directly provided in the codec.
91253a5a1b3Sopenharmony_ci 
91353a5a1b3Sopenharmony_ci\end_layout
91453a5a1b3Sopenharmony_ci
91553a5a1b3Sopenharmony_ci\begin_layout Section
91653a5a1b3Sopenharmony_ciAdaptive Jitter Buffer
91753a5a1b3Sopenharmony_ci\end_layout
91853a5a1b3Sopenharmony_ci
91953a5a1b3Sopenharmony_ci\begin_layout Standard
92053a5a1b3Sopenharmony_ciWhen transmitting voice (or any content for that matter) over UDP or RTP,
92153a5a1b3Sopenharmony_ci packet may be lost, arrive with different delay, or even out of order.
92253a5a1b3Sopenharmony_ci The purpose of a jitter buffer is to reorder packets and buffer them long
92353a5a1b3Sopenharmony_ci enough (but no longer than necessary) so they can be sent to be decoded.
92453a5a1b3Sopenharmony_ci 
92553a5a1b3Sopenharmony_ci\end_layout
92653a5a1b3Sopenharmony_ci
92753a5a1b3Sopenharmony_ci\begin_layout Section
92853a5a1b3Sopenharmony_ciAcoustic Echo Canceller
92953a5a1b3Sopenharmony_ci\end_layout
93053a5a1b3Sopenharmony_ci
93153a5a1b3Sopenharmony_ci\begin_layout Standard
93253a5a1b3Sopenharmony_ciIn any hands-free communication system (Fig.
93353a5a1b3Sopenharmony_ci 
93453a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
93553a5a1b3Sopenharmony_ciLatexCommand ref
93653a5a1b3Sopenharmony_cireference "fig:Acoustic-echo-model"
93753a5a1b3Sopenharmony_ci
93853a5a1b3Sopenharmony_ci\end_inset
93953a5a1b3Sopenharmony_ci
94053a5a1b3Sopenharmony_ci), speech from the remote end is played in the local loudspeaker, propagates
94153a5a1b3Sopenharmony_ci in the room and is captured by the microphone.
94253a5a1b3Sopenharmony_ci If the audio captured from the microphone is sent directly to the remote
94353a5a1b3Sopenharmony_ci end, then the remote user hears an echo of his voice.
94453a5a1b3Sopenharmony_ci An acoustic echo canceller is designed to remove the acoustic echo before
94553a5a1b3Sopenharmony_ci it is sent to the remote end.
94653a5a1b3Sopenharmony_ci It is important to understand that the echo canceller is meant to improve
94753a5a1b3Sopenharmony_ci the quality on the 
94853a5a1b3Sopenharmony_ci\series bold
94953a5a1b3Sopenharmony_ciremote
95053a5a1b3Sopenharmony_ci\series default
95153a5a1b3Sopenharmony_ci end.
95253a5a1b3Sopenharmony_ci For those who care a lot about mouth-to-ear delays it should be noted that
95353a5a1b3Sopenharmony_ci unlike Speex codec, resampler and preprocessor, this Acoustic Echo Canceller
95453a5a1b3Sopenharmony_ci does not introduce any latency.
95553a5a1b3Sopenharmony_ci\end_layout
95653a5a1b3Sopenharmony_ci
95753a5a1b3Sopenharmony_ci\begin_layout Standard
95853a5a1b3Sopenharmony_ci\begin_inset Float figure
95953a5a1b3Sopenharmony_ciwide false
96053a5a1b3Sopenharmony_cisideways false
96153a5a1b3Sopenharmony_cistatus open
96253a5a1b3Sopenharmony_ci
96353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
96453a5a1b3Sopenharmony_ci\begin_inset ERT
96553a5a1b3Sopenharmony_cistatus collapsed
96653a5a1b3Sopenharmony_ci
96753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
96853a5a1b3Sopenharmony_ci
96953a5a1b3Sopenharmony_ci
97053a5a1b3Sopenharmony_ci\backslash
97153a5a1b3Sopenharmony_cibegin{center}
97253a5a1b3Sopenharmony_ci\end_layout
97353a5a1b3Sopenharmony_ci
97453a5a1b3Sopenharmony_ci\end_inset
97553a5a1b3Sopenharmony_ci
97653a5a1b3Sopenharmony_ci
97753a5a1b3Sopenharmony_ci\begin_inset Graphics
97853a5a1b3Sopenharmony_ci	filename echo_path.eps
97953a5a1b3Sopenharmony_ci	width 10cm
98053a5a1b3Sopenharmony_ci
98153a5a1b3Sopenharmony_ci\end_inset
98253a5a1b3Sopenharmony_ci
98353a5a1b3Sopenharmony_ci
98453a5a1b3Sopenharmony_ci\begin_inset ERT
98553a5a1b3Sopenharmony_cistatus collapsed
98653a5a1b3Sopenharmony_ci
98753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
98853a5a1b3Sopenharmony_ci
98953a5a1b3Sopenharmony_ci
99053a5a1b3Sopenharmony_ci\backslash
99153a5a1b3Sopenharmony_ciend{center}
99253a5a1b3Sopenharmony_ci\end_layout
99353a5a1b3Sopenharmony_ci
99453a5a1b3Sopenharmony_ci\end_inset
99553a5a1b3Sopenharmony_ci
99653a5a1b3Sopenharmony_ci
99753a5a1b3Sopenharmony_ci\end_layout
99853a5a1b3Sopenharmony_ci
99953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
100053a5a1b3Sopenharmony_ci\begin_inset Caption
100153a5a1b3Sopenharmony_ci
100253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
100353a5a1b3Sopenharmony_ciAcoustic echo model
100453a5a1b3Sopenharmony_ci\begin_inset CommandInset label
100553a5a1b3Sopenharmony_ciLatexCommand label
100653a5a1b3Sopenharmony_ciname "fig:Acoustic-echo-model"
100753a5a1b3Sopenharmony_ci
100853a5a1b3Sopenharmony_ci\end_inset
100953a5a1b3Sopenharmony_ci
101053a5a1b3Sopenharmony_ci
101153a5a1b3Sopenharmony_ci\end_layout
101253a5a1b3Sopenharmony_ci
101353a5a1b3Sopenharmony_ci\end_inset
101453a5a1b3Sopenharmony_ci
101553a5a1b3Sopenharmony_ci
101653a5a1b3Sopenharmony_ci\end_layout
101753a5a1b3Sopenharmony_ci
101853a5a1b3Sopenharmony_ci\end_inset
101953a5a1b3Sopenharmony_ci
102053a5a1b3Sopenharmony_ci
102153a5a1b3Sopenharmony_ci\end_layout
102253a5a1b3Sopenharmony_ci
102353a5a1b3Sopenharmony_ci\begin_layout Section
102453a5a1b3Sopenharmony_ciResampler
102553a5a1b3Sopenharmony_ci\end_layout
102653a5a1b3Sopenharmony_ci
102753a5a1b3Sopenharmony_ci\begin_layout Standard
102853a5a1b3Sopenharmony_ciIn some cases, it may be useful to convert audio from one sampling rate
102953a5a1b3Sopenharmony_ci to another.
103053a5a1b3Sopenharmony_ci There are many reasons for that.
103153a5a1b3Sopenharmony_ci It can be for mixing streams that have different sampling rates, for supporting
103253a5a1b3Sopenharmony_ci sampling rates that the soundcard doesn't support, for transcoding, etc.
103353a5a1b3Sopenharmony_ci That's why there is now a resampler that is part of the Speex project.
103453a5a1b3Sopenharmony_ci This resampler can be used to convert between any two arbitrary rates (the
103553a5a1b3Sopenharmony_ci ratio must only be a rational number) and there is control over the quality/com
103653a5a1b3Sopenharmony_ciplexity tradeoff.
103753a5a1b3Sopenharmony_ci Keep in mind, that resampler introduce some delay in audio stream, which
103853a5a1b3Sopenharmony_ci size depends on resampler quality setting.
103953a5a1b3Sopenharmony_ci Refer to resampler API documentation to know how to get exact delay values.
104053a5a1b3Sopenharmony_ci\end_layout
104153a5a1b3Sopenharmony_ci
104253a5a1b3Sopenharmony_ci\begin_layout Section
104353a5a1b3Sopenharmony_ciIntegration
104453a5a1b3Sopenharmony_ci\end_layout
104553a5a1b3Sopenharmony_ci
104653a5a1b3Sopenharmony_ci\begin_layout Standard
104753a5a1b3Sopenharmony_ciKnowing 
104853a5a1b3Sopenharmony_ci\emph on
104953a5a1b3Sopenharmony_cihow
105053a5a1b3Sopenharmony_ci\emph default
105153a5a1b3Sopenharmony_ci to use each of the components is not that useful unless we know 
105253a5a1b3Sopenharmony_ci\emph on
105353a5a1b3Sopenharmony_ciwhere
105453a5a1b3Sopenharmony_ci\emph default
105553a5a1b3Sopenharmony_ci to use them.
105653a5a1b3Sopenharmony_ci Figure 
105753a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
105853a5a1b3Sopenharmony_ciLatexCommand ref
105953a5a1b3Sopenharmony_cireference "fig:Integration-VoIP"
106053a5a1b3Sopenharmony_ci
106153a5a1b3Sopenharmony_ci\end_inset
106253a5a1b3Sopenharmony_ci
106353a5a1b3Sopenharmony_ci shows where each of the components would be used in a typical VoIP client.
106453a5a1b3Sopenharmony_ci Components in dotted lines are optional, though they may be very useful
106553a5a1b3Sopenharmony_ci in some circumstances.
106653a5a1b3Sopenharmony_ci There are several important things to note from there.
106753a5a1b3Sopenharmony_ci The AEC must be placed as close as possible to the playback and capture.
106853a5a1b3Sopenharmony_ci Only the resampling may be closer.
106953a5a1b3Sopenharmony_ci Also, it is very important to use the same clock for both mic capture and
107053a5a1b3Sopenharmony_ci speaker/headphones playback.
107153a5a1b3Sopenharmony_ci\end_layout
107253a5a1b3Sopenharmony_ci
107353a5a1b3Sopenharmony_ci\begin_layout Standard
107453a5a1b3Sopenharmony_ci\begin_inset Float figure
107553a5a1b3Sopenharmony_ciwide false
107653a5a1b3Sopenharmony_cisideways false
107753a5a1b3Sopenharmony_cistatus open
107853a5a1b3Sopenharmony_ci
107953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
108053a5a1b3Sopenharmony_ci\begin_inset ERT
108153a5a1b3Sopenharmony_cistatus collapsed
108253a5a1b3Sopenharmony_ci
108353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
108453a5a1b3Sopenharmony_ci
108553a5a1b3Sopenharmony_ci
108653a5a1b3Sopenharmony_ci\backslash
108753a5a1b3Sopenharmony_cibegin{center}
108853a5a1b3Sopenharmony_ci\end_layout
108953a5a1b3Sopenharmony_ci
109053a5a1b3Sopenharmony_ci\end_inset
109153a5a1b3Sopenharmony_ci
109253a5a1b3Sopenharmony_ci
109353a5a1b3Sopenharmony_ci\begin_inset Graphics
109453a5a1b3Sopenharmony_ci	filename components.eps
109553a5a1b3Sopenharmony_ci	width 80text%
109653a5a1b3Sopenharmony_ci
109753a5a1b3Sopenharmony_ci\end_inset
109853a5a1b3Sopenharmony_ci
109953a5a1b3Sopenharmony_ci
110053a5a1b3Sopenharmony_ci\begin_inset ERT
110153a5a1b3Sopenharmony_cistatus collapsed
110253a5a1b3Sopenharmony_ci
110353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
110453a5a1b3Sopenharmony_ci
110553a5a1b3Sopenharmony_ci
110653a5a1b3Sopenharmony_ci\backslash
110753a5a1b3Sopenharmony_ciend{center}
110853a5a1b3Sopenharmony_ci\end_layout
110953a5a1b3Sopenharmony_ci
111053a5a1b3Sopenharmony_ci\end_inset
111153a5a1b3Sopenharmony_ci
111253a5a1b3Sopenharmony_ci
111353a5a1b3Sopenharmony_ci\end_layout
111453a5a1b3Sopenharmony_ci
111553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
111653a5a1b3Sopenharmony_ci\begin_inset Caption
111753a5a1b3Sopenharmony_ci
111853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
111953a5a1b3Sopenharmony_ciIntegration of all the components in a VoIP client.
112053a5a1b3Sopenharmony_ci\begin_inset CommandInset label
112153a5a1b3Sopenharmony_ciLatexCommand label
112253a5a1b3Sopenharmony_ciname "fig:Integration-VoIP"
112353a5a1b3Sopenharmony_ci
112453a5a1b3Sopenharmony_ci\end_inset
112553a5a1b3Sopenharmony_ci
112653a5a1b3Sopenharmony_ci
112753a5a1b3Sopenharmony_ci\end_layout
112853a5a1b3Sopenharmony_ci
112953a5a1b3Sopenharmony_ci\end_inset
113053a5a1b3Sopenharmony_ci
113153a5a1b3Sopenharmony_ci
113253a5a1b3Sopenharmony_ci\end_layout
113353a5a1b3Sopenharmony_ci
113453a5a1b3Sopenharmony_ci\end_inset
113553a5a1b3Sopenharmony_ci
113653a5a1b3Sopenharmony_ci
113753a5a1b3Sopenharmony_ci\end_layout
113853a5a1b3Sopenharmony_ci
113953a5a1b3Sopenharmony_ci\begin_layout Standard
114053a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
114153a5a1b3Sopenharmony_ci\end_inset
114253a5a1b3Sopenharmony_ci
114353a5a1b3Sopenharmony_ci
114453a5a1b3Sopenharmony_ci\end_layout
114553a5a1b3Sopenharmony_ci
114653a5a1b3Sopenharmony_ci\begin_layout Chapter
114753a5a1b3Sopenharmony_ciCompiling and Porting
114853a5a1b3Sopenharmony_ci\end_layout
114953a5a1b3Sopenharmony_ci
115053a5a1b3Sopenharmony_ci\begin_layout Standard
115153a5a1b3Sopenharmony_ciCompiling Speex under UNIX/Linux or any other platform supported by autoconf
115253a5a1b3Sopenharmony_ci (e.g.
115353a5a1b3Sopenharmony_ci Win32/cygwin) is as easy as typing:
115453a5a1b3Sopenharmony_ci\end_layout
115553a5a1b3Sopenharmony_ci
115653a5a1b3Sopenharmony_ci\begin_layout LyX-Code
115753a5a1b3Sopenharmony_ci% ./configure [options]
115853a5a1b3Sopenharmony_ci\end_layout
115953a5a1b3Sopenharmony_ci
116053a5a1b3Sopenharmony_ci\begin_layout LyX-Code
116153a5a1b3Sopenharmony_ci% make
116253a5a1b3Sopenharmony_ci\end_layout
116353a5a1b3Sopenharmony_ci
116453a5a1b3Sopenharmony_ci\begin_layout LyX-Code
116553a5a1b3Sopenharmony_ci% make install
116653a5a1b3Sopenharmony_ci\end_layout
116753a5a1b3Sopenharmony_ci
116853a5a1b3Sopenharmony_ci\begin_layout Standard
116953a5a1b3Sopenharmony_ciThe options supported by the Speex configure script are:
117053a5a1b3Sopenharmony_ci\end_layout
117153a5a1b3Sopenharmony_ci
117253a5a1b3Sopenharmony_ci\begin_layout Description
117353a5a1b3Sopenharmony_ci--prefix=<path> Specifies the base path for installing Speex (e.g.
117453a5a1b3Sopenharmony_ci /usr)
117553a5a1b3Sopenharmony_ci\end_layout
117653a5a1b3Sopenharmony_ci
117753a5a1b3Sopenharmony_ci\begin_layout Description
117853a5a1b3Sopenharmony_ci--enable-shared/--disable-shared Whether to compile shared libraries
117953a5a1b3Sopenharmony_ci\end_layout
118053a5a1b3Sopenharmony_ci
118153a5a1b3Sopenharmony_ci\begin_layout Description
118253a5a1b3Sopenharmony_ci--enable-static/--disable-static Whether to compile static libraries
118353a5a1b3Sopenharmony_ci\end_layout
118453a5a1b3Sopenharmony_ci
118553a5a1b3Sopenharmony_ci\begin_layout Description
118653a5a1b3Sopenharmony_ci--disable-wideband Disable the wideband part of Speex (typically to save
118753a5a1b3Sopenharmony_ci space)
118853a5a1b3Sopenharmony_ci\end_layout
118953a5a1b3Sopenharmony_ci
119053a5a1b3Sopenharmony_ci\begin_layout Description
119153a5a1b3Sopenharmony_ci--enable-valgrind Enable extra hits for valgrind for debugging purposes
119253a5a1b3Sopenharmony_ci (do not use by default)
119353a5a1b3Sopenharmony_ci\end_layout
119453a5a1b3Sopenharmony_ci
119553a5a1b3Sopenharmony_ci\begin_layout Description
119653a5a1b3Sopenharmony_ci--enable-sse Enable use of SSE instructions (x86/float only)
119753a5a1b3Sopenharmony_ci\end_layout
119853a5a1b3Sopenharmony_ci
119953a5a1b3Sopenharmony_ci\begin_layout Description
120053a5a1b3Sopenharmony_ci--enable-fixed-point
120153a5a1b3Sopenharmony_ci\begin_inset Index
120253a5a1b3Sopenharmony_cistatus collapsed
120353a5a1b3Sopenharmony_ci
120453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
120553a5a1b3Sopenharmony_cifixed-point
120653a5a1b3Sopenharmony_ci\end_layout
120753a5a1b3Sopenharmony_ci
120853a5a1b3Sopenharmony_ci\end_inset
120953a5a1b3Sopenharmony_ci
121053a5a1b3Sopenharmony_ci Compile Speex for a processor that does not have a floating point unit
121153a5a1b3Sopenharmony_ci (FPU)
121253a5a1b3Sopenharmony_ci\end_layout
121353a5a1b3Sopenharmony_ci
121453a5a1b3Sopenharmony_ci\begin_layout Description
121553a5a1b3Sopenharmony_ci--enable-arm4-asm Enable assembly specific to the ARMv4 architecture (gcc
121653a5a1b3Sopenharmony_ci only)
121753a5a1b3Sopenharmony_ci\end_layout
121853a5a1b3Sopenharmony_ci
121953a5a1b3Sopenharmony_ci\begin_layout Description
122053a5a1b3Sopenharmony_ci--enable-arm5e-asm Enable assembly specific to the ARMv5E architecture (gcc
122153a5a1b3Sopenharmony_ci only)
122253a5a1b3Sopenharmony_ci\end_layout
122353a5a1b3Sopenharmony_ci
122453a5a1b3Sopenharmony_ci\begin_layout Description
122553a5a1b3Sopenharmony_ci--enable-fixed-point-debug Use only for debugging the fixed-point
122653a5a1b3Sopenharmony_ci\begin_inset Index
122753a5a1b3Sopenharmony_cistatus collapsed
122853a5a1b3Sopenharmony_ci
122953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
123053a5a1b3Sopenharmony_cifixed-point
123153a5a1b3Sopenharmony_ci\end_layout
123253a5a1b3Sopenharmony_ci
123353a5a1b3Sopenharmony_ci\end_inset
123453a5a1b3Sopenharmony_ci
123553a5a1b3Sopenharmony_ci code (very slow)
123653a5a1b3Sopenharmony_ci\end_layout
123753a5a1b3Sopenharmony_ci
123853a5a1b3Sopenharmony_ci\begin_layout Description
123953a5a1b3Sopenharmony_ci--enable-ti-c55x Enable support for the TI C5x family
124053a5a1b3Sopenharmony_ci\end_layout
124153a5a1b3Sopenharmony_ci
124253a5a1b3Sopenharmony_ci\begin_layout Description
124353a5a1b3Sopenharmony_ci--enable-blackfin-asm Enable assembly specific to the Blackfin DSP architecture
124453a5a1b3Sopenharmony_ci (gcc only)
124553a5a1b3Sopenharmony_ci\end_layout
124653a5a1b3Sopenharmony_ci
124753a5a1b3Sopenharmony_ci\begin_layout Section
124853a5a1b3Sopenharmony_ciPlatforms
124953a5a1b3Sopenharmony_ci\end_layout
125053a5a1b3Sopenharmony_ci
125153a5a1b3Sopenharmony_ci\begin_layout Standard
125253a5a1b3Sopenharmony_ciSpeex is known to compile and work on a large number of architectures, both
125353a5a1b3Sopenharmony_ci floating-point and fixed-point.
125453a5a1b3Sopenharmony_ci In general, any architecture that can natively compute the multiplication
125553a5a1b3Sopenharmony_ci of two signed 16-bit numbers (32-bit result) and runs at a sufficient clock
125653a5a1b3Sopenharmony_ci rate (architecture-dependent) is capable of running Speex.
125753a5a1b3Sopenharmony_ci Architectures on which Speex is 
125853a5a1b3Sopenharmony_ci\series bold
125953a5a1b3Sopenharmony_ciknown
126053a5a1b3Sopenharmony_ci\series default
126153a5a1b3Sopenharmony_ci to work (it probably works on many others) are:
126253a5a1b3Sopenharmony_ci\end_layout
126353a5a1b3Sopenharmony_ci
126453a5a1b3Sopenharmony_ci\begin_layout Itemize
126553a5a1b3Sopenharmony_cix86 & x86-64
126653a5a1b3Sopenharmony_ci\end_layout
126753a5a1b3Sopenharmony_ci
126853a5a1b3Sopenharmony_ci\begin_layout Itemize
126953a5a1b3Sopenharmony_ciPower
127053a5a1b3Sopenharmony_ci\end_layout
127153a5a1b3Sopenharmony_ci
127253a5a1b3Sopenharmony_ci\begin_layout Itemize
127353a5a1b3Sopenharmony_ciSPARC
127453a5a1b3Sopenharmony_ci\end_layout
127553a5a1b3Sopenharmony_ci
127653a5a1b3Sopenharmony_ci\begin_layout Itemize
127753a5a1b3Sopenharmony_ciARM
127853a5a1b3Sopenharmony_ci\end_layout
127953a5a1b3Sopenharmony_ci
128053a5a1b3Sopenharmony_ci\begin_layout Itemize
128153a5a1b3Sopenharmony_ciBlackfin
128253a5a1b3Sopenharmony_ci\end_layout
128353a5a1b3Sopenharmony_ci
128453a5a1b3Sopenharmony_ci\begin_layout Itemize
128553a5a1b3Sopenharmony_ciColdfire (68k family)
128653a5a1b3Sopenharmony_ci\end_layout
128753a5a1b3Sopenharmony_ci
128853a5a1b3Sopenharmony_ci\begin_layout Itemize
128953a5a1b3Sopenharmony_ciTI C54xx & C55xx
129053a5a1b3Sopenharmony_ci\end_layout
129153a5a1b3Sopenharmony_ci
129253a5a1b3Sopenharmony_ci\begin_layout Itemize
129353a5a1b3Sopenharmony_ciTI C6xxx
129453a5a1b3Sopenharmony_ci\end_layout
129553a5a1b3Sopenharmony_ci
129653a5a1b3Sopenharmony_ci\begin_layout Itemize
129753a5a1b3Sopenharmony_ciTriMedia (experimental)
129853a5a1b3Sopenharmony_ci\end_layout
129953a5a1b3Sopenharmony_ci
130053a5a1b3Sopenharmony_ci\begin_layout Standard
130153a5a1b3Sopenharmony_ciOperating systems on top of which Speex is known to work include (it probably
130253a5a1b3Sopenharmony_ci works on many others):
130353a5a1b3Sopenharmony_ci\end_layout
130453a5a1b3Sopenharmony_ci
130553a5a1b3Sopenharmony_ci\begin_layout Itemize
130653a5a1b3Sopenharmony_ciLinux
130753a5a1b3Sopenharmony_ci\end_layout
130853a5a1b3Sopenharmony_ci
130953a5a1b3Sopenharmony_ci\begin_layout Itemize
131053a5a1b3Sopenharmony_ci\begin_inset Formula $\mu$
131153a5a1b3Sopenharmony_ci\end_inset
131253a5a1b3Sopenharmony_ci
131353a5a1b3Sopenharmony_ciClinux
131453a5a1b3Sopenharmony_ci\end_layout
131553a5a1b3Sopenharmony_ci
131653a5a1b3Sopenharmony_ci\begin_layout Itemize
131753a5a1b3Sopenharmony_ciMacOS X
131853a5a1b3Sopenharmony_ci\end_layout
131953a5a1b3Sopenharmony_ci
132053a5a1b3Sopenharmony_ci\begin_layout Itemize
132153a5a1b3Sopenharmony_ciBSD
132253a5a1b3Sopenharmony_ci\end_layout
132353a5a1b3Sopenharmony_ci
132453a5a1b3Sopenharmony_ci\begin_layout Itemize
132553a5a1b3Sopenharmony_ciOther UNIX/POSIX variants
132653a5a1b3Sopenharmony_ci\end_layout
132753a5a1b3Sopenharmony_ci
132853a5a1b3Sopenharmony_ci\begin_layout Itemize
132953a5a1b3Sopenharmony_ciSymbian
133053a5a1b3Sopenharmony_ci\end_layout
133153a5a1b3Sopenharmony_ci
133253a5a1b3Sopenharmony_ci\begin_layout Standard
133353a5a1b3Sopenharmony_ciThe source code directory include additional information for compiling on
133453a5a1b3Sopenharmony_ci certain architectures or operating systems in README.xxx files.
133553a5a1b3Sopenharmony_ci\end_layout
133653a5a1b3Sopenharmony_ci
133753a5a1b3Sopenharmony_ci\begin_layout Section
133853a5a1b3Sopenharmony_ciPorting and Optimising
133953a5a1b3Sopenharmony_ci\end_layout
134053a5a1b3Sopenharmony_ci
134153a5a1b3Sopenharmony_ci\begin_layout Standard
134253a5a1b3Sopenharmony_ciHere are a few things to consider when porting or optimising Speex for a
134353a5a1b3Sopenharmony_ci new platform or an existing one.
134453a5a1b3Sopenharmony_ci\end_layout
134553a5a1b3Sopenharmony_ci
134653a5a1b3Sopenharmony_ci\begin_layout Subsection
134753a5a1b3Sopenharmony_ciCPU optimisation
134853a5a1b3Sopenharmony_ci\end_layout
134953a5a1b3Sopenharmony_ci
135053a5a1b3Sopenharmony_ci\begin_layout Standard
135153a5a1b3Sopenharmony_ciThe single factor that will affect the CPU usage of Speex the most is whether
135253a5a1b3Sopenharmony_ci it is compiled for floating point or fixed-point.
135353a5a1b3Sopenharmony_ci If your CPU/DSP does not have a floating-point unit FPU, then compiling
135453a5a1b3Sopenharmony_ci as fixed-point will be orders of magnitudes faster.
135553a5a1b3Sopenharmony_ci If there is an FPU present, then it is important to test which version
135653a5a1b3Sopenharmony_ci is faster.
135753a5a1b3Sopenharmony_ci On the x86 architecture, floating-point is 
135853a5a1b3Sopenharmony_ci\series bold
135953a5a1b3Sopenharmony_cigenerally
136053a5a1b3Sopenharmony_ci\series default
136153a5a1b3Sopenharmony_ci faster, but not always.
136253a5a1b3Sopenharmony_ci To compile Speex as fixed-point, you need to pass --fixed-point to the
136353a5a1b3Sopenharmony_ci configure script or define the FIXED_POINT macro for the compiler.
136453a5a1b3Sopenharmony_ci As of 1.2beta3, it is now possible to disable the floating-point compatibility
136553a5a1b3Sopenharmony_ci API, which means that your code can link without a float emulation library.
136653a5a1b3Sopenharmony_ci To do that configure with --disable-float-api or define the DISABLE_FLOAT_API
136753a5a1b3Sopenharmony_ci macro.
136853a5a1b3Sopenharmony_ci Until the VBR feature is ported to fixed-point, you will also need to configure
136953a5a1b3Sopenharmony_ci with --disable-vbr or define DISABLE_VBR.
137053a5a1b3Sopenharmony_ci\end_layout
137153a5a1b3Sopenharmony_ci
137253a5a1b3Sopenharmony_ci\begin_layout Standard
137353a5a1b3Sopenharmony_ciOther important things to check on some DSP architectures are:
137453a5a1b3Sopenharmony_ci\end_layout
137553a5a1b3Sopenharmony_ci
137653a5a1b3Sopenharmony_ci\begin_layout Itemize
137753a5a1b3Sopenharmony_ciMake sure the cache is set to write-back mode
137853a5a1b3Sopenharmony_ci\end_layout
137953a5a1b3Sopenharmony_ci
138053a5a1b3Sopenharmony_ci\begin_layout Itemize
138153a5a1b3Sopenharmony_ciIf the chip has SRAM instead of cache, make sure as much code and data are
138253a5a1b3Sopenharmony_ci in SRAM, rather than in RAM
138353a5a1b3Sopenharmony_ci\end_layout
138453a5a1b3Sopenharmony_ci
138553a5a1b3Sopenharmony_ci\begin_layout Standard
138653a5a1b3Sopenharmony_ciIf you are going to be writing assembly, then the following functions are
138753a5a1b3Sopenharmony_ci 
138853a5a1b3Sopenharmony_ci\series bold
138953a5a1b3Sopenharmony_ciusually
139053a5a1b3Sopenharmony_ci\series default
139153a5a1b3Sopenharmony_ci the first ones you should consider optimising:
139253a5a1b3Sopenharmony_ci\end_layout
139353a5a1b3Sopenharmony_ci
139453a5a1b3Sopenharmony_ci\begin_layout Itemize
139553a5a1b3Sopenharmony_ci\begin_inset listings
139653a5a1b3Sopenharmony_ciinline true
139753a5a1b3Sopenharmony_cistatus collapsed
139853a5a1b3Sopenharmony_ci
139953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
140053a5a1b3Sopenharmony_ci
140153a5a1b3Sopenharmony_cifilter_mem16()
140253a5a1b3Sopenharmony_ci\end_layout
140353a5a1b3Sopenharmony_ci
140453a5a1b3Sopenharmony_ci\end_inset
140553a5a1b3Sopenharmony_ci
140653a5a1b3Sopenharmony_ci
140753a5a1b3Sopenharmony_ci\end_layout
140853a5a1b3Sopenharmony_ci
140953a5a1b3Sopenharmony_ci\begin_layout Itemize
141053a5a1b3Sopenharmony_ci\begin_inset listings
141153a5a1b3Sopenharmony_ciinline true
141253a5a1b3Sopenharmony_cistatus collapsed
141353a5a1b3Sopenharmony_ci
141453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
141553a5a1b3Sopenharmony_ci
141653a5a1b3Sopenharmony_ciiir_mem16()
141753a5a1b3Sopenharmony_ci\end_layout
141853a5a1b3Sopenharmony_ci
141953a5a1b3Sopenharmony_ci\end_inset
142053a5a1b3Sopenharmony_ci
142153a5a1b3Sopenharmony_ci
142253a5a1b3Sopenharmony_ci\end_layout
142353a5a1b3Sopenharmony_ci
142453a5a1b3Sopenharmony_ci\begin_layout Itemize
142553a5a1b3Sopenharmony_ci\begin_inset listings
142653a5a1b3Sopenharmony_ciinline true
142753a5a1b3Sopenharmony_cistatus collapsed
142853a5a1b3Sopenharmony_ci
142953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
143053a5a1b3Sopenharmony_ci
143153a5a1b3Sopenharmony_civq_nbest()
143253a5a1b3Sopenharmony_ci\end_layout
143353a5a1b3Sopenharmony_ci
143453a5a1b3Sopenharmony_ci\end_inset
143553a5a1b3Sopenharmony_ci
143653a5a1b3Sopenharmony_ci
143753a5a1b3Sopenharmony_ci\end_layout
143853a5a1b3Sopenharmony_ci
143953a5a1b3Sopenharmony_ci\begin_layout Itemize
144053a5a1b3Sopenharmony_ci\begin_inset listings
144153a5a1b3Sopenharmony_ciinline true
144253a5a1b3Sopenharmony_cistatus collapsed
144353a5a1b3Sopenharmony_ci
144453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
144553a5a1b3Sopenharmony_ci
144653a5a1b3Sopenharmony_cipitch_xcorr()
144753a5a1b3Sopenharmony_ci\end_layout
144853a5a1b3Sopenharmony_ci
144953a5a1b3Sopenharmony_ci\end_inset
145053a5a1b3Sopenharmony_ci
145153a5a1b3Sopenharmony_ci
145253a5a1b3Sopenharmony_ci\end_layout
145353a5a1b3Sopenharmony_ci
145453a5a1b3Sopenharmony_ci\begin_layout Itemize
145553a5a1b3Sopenharmony_ci\begin_inset listings
145653a5a1b3Sopenharmony_ciinline true
145753a5a1b3Sopenharmony_cistatus collapsed
145853a5a1b3Sopenharmony_ci
145953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
146053a5a1b3Sopenharmony_ci
146153a5a1b3Sopenharmony_ciinterp_pitch()
146253a5a1b3Sopenharmony_ci\end_layout
146353a5a1b3Sopenharmony_ci
146453a5a1b3Sopenharmony_ci\end_inset
146553a5a1b3Sopenharmony_ci
146653a5a1b3Sopenharmony_ci
146753a5a1b3Sopenharmony_ci\end_layout
146853a5a1b3Sopenharmony_ci
146953a5a1b3Sopenharmony_ci\begin_layout Standard
147053a5a1b3Sopenharmony_ciThe filtering functions 
147153a5a1b3Sopenharmony_ci\begin_inset listings
147253a5a1b3Sopenharmony_ciinline true
147353a5a1b3Sopenharmony_cistatus collapsed
147453a5a1b3Sopenharmony_ci
147553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
147653a5a1b3Sopenharmony_ci
147753a5a1b3Sopenharmony_cifilter_mem16()
147853a5a1b3Sopenharmony_ci\end_layout
147953a5a1b3Sopenharmony_ci
148053a5a1b3Sopenharmony_ci\end_inset
148153a5a1b3Sopenharmony_ci
148253a5a1b3Sopenharmony_ci and 
148353a5a1b3Sopenharmony_ci\begin_inset listings
148453a5a1b3Sopenharmony_ciinline true
148553a5a1b3Sopenharmony_cistatus collapsed
148653a5a1b3Sopenharmony_ci
148753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
148853a5a1b3Sopenharmony_ci
148953a5a1b3Sopenharmony_ciiir_mem16()
149053a5a1b3Sopenharmony_ci\end_layout
149153a5a1b3Sopenharmony_ci
149253a5a1b3Sopenharmony_ci\end_inset
149353a5a1b3Sopenharmony_ci
149453a5a1b3Sopenharmony_ci are implemented in the direct form II transposed (DF2T).
149553a5a1b3Sopenharmony_ci However, for architectures based on multiply-accumulate (MAC), DF2T requires
149653a5a1b3Sopenharmony_ci frequent reload of the accumulator, which can make the code very slow.
149753a5a1b3Sopenharmony_ci For these architectures (e.g.
149853a5a1b3Sopenharmony_ci Blackfin and Coldfire), a better approach is to implement those functions
149953a5a1b3Sopenharmony_ci as direct form I (DF1), which is easier to express in terms of MAC.
150053a5a1b3Sopenharmony_ci When doing that however, 
150153a5a1b3Sopenharmony_ci\series bold
150253a5a1b3Sopenharmony_ciit is important to make sure that the DF1 implementation still behaves like
150353a5a1b3Sopenharmony_ci the original DF2T behaviour when it comes to memory values
150453a5a1b3Sopenharmony_ci\series default
150553a5a1b3Sopenharmony_ci.
150653a5a1b3Sopenharmony_ci This is necessary because the filter is time-varying and must compute exactly
150753a5a1b3Sopenharmony_ci the same value (not counting machine rounding) on any encoder or decoder.
150853a5a1b3Sopenharmony_ci\end_layout
150953a5a1b3Sopenharmony_ci
151053a5a1b3Sopenharmony_ci\begin_layout Subsection
151153a5a1b3Sopenharmony_ciMemory optimisation
151253a5a1b3Sopenharmony_ci\end_layout
151353a5a1b3Sopenharmony_ci
151453a5a1b3Sopenharmony_ci\begin_layout Standard
151553a5a1b3Sopenharmony_ciMemory optimisation is mainly something that should be considered for small
151653a5a1b3Sopenharmony_ci embedded platforms.
151753a5a1b3Sopenharmony_ci For PCs, Speex is already so tiny that it's just not worth doing any of
151853a5a1b3Sopenharmony_ci the things suggested here.
151953a5a1b3Sopenharmony_ci There are several ways to reduce the memory usage of Speex, both in terms
152053a5a1b3Sopenharmony_ci of code size and data size.
152153a5a1b3Sopenharmony_ci For optimising code size, the trick is to first remove features you do
152253a5a1b3Sopenharmony_ci not need.
152353a5a1b3Sopenharmony_ci Some examples of things that can easily be disabled 
152453a5a1b3Sopenharmony_ci\series bold
152553a5a1b3Sopenharmony_ciif you don't need them
152653a5a1b3Sopenharmony_ci\series default
152753a5a1b3Sopenharmony_ci are:
152853a5a1b3Sopenharmony_ci\end_layout
152953a5a1b3Sopenharmony_ci
153053a5a1b3Sopenharmony_ci\begin_layout Itemize
153153a5a1b3Sopenharmony_ciWideband support (--disable-wideband)
153253a5a1b3Sopenharmony_ci\end_layout
153353a5a1b3Sopenharmony_ci
153453a5a1b3Sopenharmony_ci\begin_layout Itemize
153553a5a1b3Sopenharmony_ciSupport for stereo (removing stereo.c)
153653a5a1b3Sopenharmony_ci\end_layout
153753a5a1b3Sopenharmony_ci
153853a5a1b3Sopenharmony_ci\begin_layout Itemize
153953a5a1b3Sopenharmony_ciVBR support (--disable-vbr or DISABLE_VBR)
154053a5a1b3Sopenharmony_ci\end_layout
154153a5a1b3Sopenharmony_ci
154253a5a1b3Sopenharmony_ci\begin_layout Itemize
154353a5a1b3Sopenharmony_ciStatic codebooks that are not needed for the bit-rates you are using (*_table.c
154453a5a1b3Sopenharmony_ci files)
154553a5a1b3Sopenharmony_ci\end_layout
154653a5a1b3Sopenharmony_ci
154753a5a1b3Sopenharmony_ci\begin_layout Standard
154853a5a1b3Sopenharmony_ciSpeex also has several methods for allocating temporary arrays.
154953a5a1b3Sopenharmony_ci When using a compiler that supports C99 properly (as of 2007, Microsoft
155053a5a1b3Sopenharmony_ci compilers don't, but gcc does), it is best to define VAR_ARRAYS.
155153a5a1b3Sopenharmony_ci That makes use of the variable-size array feature of C99.
155253a5a1b3Sopenharmony_ci The next best is to define USE_ALLOCA so that Speex can use alloca() to
155353a5a1b3Sopenharmony_ci allocate the temporary arrays.
155453a5a1b3Sopenharmony_ci Note that on many systems, alloca() is buggy so it may not work.
155553a5a1b3Sopenharmony_ci If none of VAR_ARRAYS and USE_ALLOCA are defined, then Speex falls back
155653a5a1b3Sopenharmony_ci to allocating a large 
155753a5a1b3Sopenharmony_ci\begin_inset Quotes eld
155853a5a1b3Sopenharmony_ci\end_inset
155953a5a1b3Sopenharmony_ci
156053a5a1b3Sopenharmony_ciscratch space
156153a5a1b3Sopenharmony_ci\begin_inset Quotes erd
156253a5a1b3Sopenharmony_ci\end_inset
156353a5a1b3Sopenharmony_ci
156453a5a1b3Sopenharmony_ci and doing its own internal allocation.
156553a5a1b3Sopenharmony_ci The main disadvantage of this solution is that it is wasteful.
156653a5a1b3Sopenharmony_ci It needs to allocate enough stack for the worst case scenario (worst bit-rate,
156753a5a1b3Sopenharmony_ci highest complexity setting, ...) and by default, the memory isn't shared between
156853a5a1b3Sopenharmony_ci multiple encoder/decoder states.
156953a5a1b3Sopenharmony_ci Still, if the 
157053a5a1b3Sopenharmony_ci\begin_inset Quotes eld
157153a5a1b3Sopenharmony_ci\end_inset
157253a5a1b3Sopenharmony_ci
157353a5a1b3Sopenharmony_cimanual
157453a5a1b3Sopenharmony_ci\begin_inset Quotes erd
157553a5a1b3Sopenharmony_ci\end_inset
157653a5a1b3Sopenharmony_ci
157753a5a1b3Sopenharmony_ci allocation is the only option left, there are a few things that can be
157853a5a1b3Sopenharmony_ci improved.
157953a5a1b3Sopenharmony_ci By overriding the speex_alloc_scratch() call in os_support.h, it is possible
158053a5a1b3Sopenharmony_ci to always return the same memory area for all states
158153a5a1b3Sopenharmony_ci\begin_inset Foot
158253a5a1b3Sopenharmony_cistatus collapsed
158353a5a1b3Sopenharmony_ci
158453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
158553a5a1b3Sopenharmony_ciIn this case, one must be careful with threads
158653a5a1b3Sopenharmony_ci\end_layout
158753a5a1b3Sopenharmony_ci
158853a5a1b3Sopenharmony_ci\end_inset
158953a5a1b3Sopenharmony_ci
159053a5a1b3Sopenharmony_ci.
159153a5a1b3Sopenharmony_ci In addition to that, by redefining the NB_ENC_STACK and NB_DEC_STACK (or
159253a5a1b3Sopenharmony_ci similar for wideband), it is possible to only allocate memory for a scenario
159353a5a1b3Sopenharmony_ci that is known in advance.
159453a5a1b3Sopenharmony_ci In this case, it is important to measure the amount of memory required
159553a5a1b3Sopenharmony_ci for the specific sampling rate, bit-rate and complexity level being used.
159653a5a1b3Sopenharmony_ci\end_layout
159753a5a1b3Sopenharmony_ci
159853a5a1b3Sopenharmony_ci\begin_layout Standard
159953a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
160053a5a1b3Sopenharmony_ci\end_inset
160153a5a1b3Sopenharmony_ci
160253a5a1b3Sopenharmony_ci
160353a5a1b3Sopenharmony_ci\end_layout
160453a5a1b3Sopenharmony_ci
160553a5a1b3Sopenharmony_ci\begin_layout Chapter
160653a5a1b3Sopenharmony_ciCommand-line encoder/decoder
160753a5a1b3Sopenharmony_ci\begin_inset CommandInset label
160853a5a1b3Sopenharmony_ciLatexCommand label
160953a5a1b3Sopenharmony_ciname "sec:Command-line-encoder/decoder"
161053a5a1b3Sopenharmony_ci
161153a5a1b3Sopenharmony_ci\end_inset
161253a5a1b3Sopenharmony_ci
161353a5a1b3Sopenharmony_ci
161453a5a1b3Sopenharmony_ci\end_layout
161553a5a1b3Sopenharmony_ci
161653a5a1b3Sopenharmony_ci\begin_layout Standard
161753a5a1b3Sopenharmony_ciThe base Speex distribution includes a command-line encoder (
161853a5a1b3Sopenharmony_ci\emph on
161953a5a1b3Sopenharmony_cispeexenc
162053a5a1b3Sopenharmony_ci\emph default
162153a5a1b3Sopenharmony_ci) and decoder (
162253a5a1b3Sopenharmony_ci\emph on
162353a5a1b3Sopenharmony_cispeexdec
162453a5a1b3Sopenharmony_ci\emph default
162553a5a1b3Sopenharmony_ci).
162653a5a1b3Sopenharmony_ci Those tools produce and read Speex files encapsulated in the Ogg container.
162753a5a1b3Sopenharmony_ci Although it is possible to encapsulate Speex in any container, Ogg is the
162853a5a1b3Sopenharmony_ci recommended container for files.
162953a5a1b3Sopenharmony_ci This section describes how to use the command line tools for Speex files
163053a5a1b3Sopenharmony_ci in Ogg.
163153a5a1b3Sopenharmony_ci\end_layout
163253a5a1b3Sopenharmony_ci
163353a5a1b3Sopenharmony_ci\begin_layout Section
163453a5a1b3Sopenharmony_ci
163553a5a1b3Sopenharmony_ci\emph on
163653a5a1b3Sopenharmony_cispeexenc
163753a5a1b3Sopenharmony_ci\begin_inset Index
163853a5a1b3Sopenharmony_cistatus collapsed
163953a5a1b3Sopenharmony_ci
164053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
164153a5a1b3Sopenharmony_cispeexenc
164253a5a1b3Sopenharmony_ci\end_layout
164353a5a1b3Sopenharmony_ci
164453a5a1b3Sopenharmony_ci\end_inset
164553a5a1b3Sopenharmony_ci
164653a5a1b3Sopenharmony_ci
164753a5a1b3Sopenharmony_ci\end_layout
164853a5a1b3Sopenharmony_ci
164953a5a1b3Sopenharmony_ci\begin_layout Standard
165053a5a1b3Sopenharmony_ciThe 
165153a5a1b3Sopenharmony_ci\emph on
165253a5a1b3Sopenharmony_cispeexenc
165353a5a1b3Sopenharmony_ci\emph default
165453a5a1b3Sopenharmony_ci utility is used to create Speex files from raw PCM or wave files.
165553a5a1b3Sopenharmony_ci It can be used by calling: 
165653a5a1b3Sopenharmony_ci\end_layout
165753a5a1b3Sopenharmony_ci
165853a5a1b3Sopenharmony_ci\begin_layout LyX-Code
165953a5a1b3Sopenharmony_cispeexenc [options] input_file output_file
166053a5a1b3Sopenharmony_ci\end_layout
166153a5a1b3Sopenharmony_ci
166253a5a1b3Sopenharmony_ci\begin_layout Standard
166353a5a1b3Sopenharmony_ciThe value '-' for input_file or output_file corresponds respectively to
166453a5a1b3Sopenharmony_ci stdin and stdout.
166553a5a1b3Sopenharmony_ci The valid options are:
166653a5a1b3Sopenharmony_ci\end_layout
166753a5a1b3Sopenharmony_ci
166853a5a1b3Sopenharmony_ci\begin_layout Description
166953a5a1b3Sopenharmony_ci--narrowband
167053a5a1b3Sopenharmony_ci\begin_inset space ~
167153a5a1b3Sopenharmony_ci\end_inset
167253a5a1b3Sopenharmony_ci
167353a5a1b3Sopenharmony_ci(-n) Tell Speex to treat the input as narrowband (8 kHz).
167453a5a1b3Sopenharmony_ci This is the default
167553a5a1b3Sopenharmony_ci\end_layout
167653a5a1b3Sopenharmony_ci
167753a5a1b3Sopenharmony_ci\begin_layout Description
167853a5a1b3Sopenharmony_ci--wideband
167953a5a1b3Sopenharmony_ci\begin_inset space ~
168053a5a1b3Sopenharmony_ci\end_inset
168153a5a1b3Sopenharmony_ci
168253a5a1b3Sopenharmony_ci(-w) Tell Speex to treat the input as wideband (16 kHz)
168353a5a1b3Sopenharmony_ci\end_layout
168453a5a1b3Sopenharmony_ci
168553a5a1b3Sopenharmony_ci\begin_layout Description
168653a5a1b3Sopenharmony_ci--ultra-wideband
168753a5a1b3Sopenharmony_ci\begin_inset space ~
168853a5a1b3Sopenharmony_ci\end_inset
168953a5a1b3Sopenharmony_ci
169053a5a1b3Sopenharmony_ci(-u) Tell Speex to treat the input as 
169153a5a1b3Sopenharmony_ci\begin_inset Quotes eld
169253a5a1b3Sopenharmony_ci\end_inset
169353a5a1b3Sopenharmony_ci
169453a5a1b3Sopenharmony_ciultra-wideband
169553a5a1b3Sopenharmony_ci\begin_inset Quotes erd
169653a5a1b3Sopenharmony_ci\end_inset
169753a5a1b3Sopenharmony_ci
169853a5a1b3Sopenharmony_ci (32 kHz)
169953a5a1b3Sopenharmony_ci\end_layout
170053a5a1b3Sopenharmony_ci
170153a5a1b3Sopenharmony_ci\begin_layout Description
170253a5a1b3Sopenharmony_ci--quality
170353a5a1b3Sopenharmony_ci\begin_inset space ~
170453a5a1b3Sopenharmony_ci\end_inset
170553a5a1b3Sopenharmony_ci
170653a5a1b3Sopenharmony_cin Set the encoding quality (0-10), default is 8
170753a5a1b3Sopenharmony_ci\end_layout
170853a5a1b3Sopenharmony_ci
170953a5a1b3Sopenharmony_ci\begin_layout Description
171053a5a1b3Sopenharmony_ci--bitrate
171153a5a1b3Sopenharmony_ci\begin_inset space ~
171253a5a1b3Sopenharmony_ci\end_inset
171353a5a1b3Sopenharmony_ci
171453a5a1b3Sopenharmony_cin Encoding bit-rate (use bit-rate n or lower) 
171553a5a1b3Sopenharmony_ci\end_layout
171653a5a1b3Sopenharmony_ci
171753a5a1b3Sopenharmony_ci\begin_layout Description
171853a5a1b3Sopenharmony_ci--vbr Enable VBR (Variable Bit-Rate), disabled by default
171953a5a1b3Sopenharmony_ci\end_layout
172053a5a1b3Sopenharmony_ci
172153a5a1b3Sopenharmony_ci\begin_layout Description
172253a5a1b3Sopenharmony_ci--abr
172353a5a1b3Sopenharmony_ci\begin_inset space ~
172453a5a1b3Sopenharmony_ci\end_inset
172553a5a1b3Sopenharmony_ci
172653a5a1b3Sopenharmony_cin Enable ABR (Average Bit-Rate) at n kbps, disabled by default
172753a5a1b3Sopenharmony_ci\end_layout
172853a5a1b3Sopenharmony_ci
172953a5a1b3Sopenharmony_ci\begin_layout Description
173053a5a1b3Sopenharmony_ci--vad Enable VAD (Voice Activity Detection), disabled by default
173153a5a1b3Sopenharmony_ci\end_layout
173253a5a1b3Sopenharmony_ci
173353a5a1b3Sopenharmony_ci\begin_layout Description
173453a5a1b3Sopenharmony_ci--dtx Enable DTX (Discontinuous Transmission), disabled by default
173553a5a1b3Sopenharmony_ci\end_layout
173653a5a1b3Sopenharmony_ci
173753a5a1b3Sopenharmony_ci\begin_layout Description
173853a5a1b3Sopenharmony_ci--nframes
173953a5a1b3Sopenharmony_ci\begin_inset space ~
174053a5a1b3Sopenharmony_ci\end_inset
174153a5a1b3Sopenharmony_ci
174253a5a1b3Sopenharmony_cin Pack n frames in each Ogg packet (this saves space at low bit-rates)
174353a5a1b3Sopenharmony_ci\end_layout
174453a5a1b3Sopenharmony_ci
174553a5a1b3Sopenharmony_ci\begin_layout Description
174653a5a1b3Sopenharmony_ci--comp
174753a5a1b3Sopenharmony_ci\begin_inset space ~
174853a5a1b3Sopenharmony_ci\end_inset
174953a5a1b3Sopenharmony_ci
175053a5a1b3Sopenharmony_cin Set encoding speed/quality tradeoff.
175153a5a1b3Sopenharmony_ci The higher the value of n, the slower the encoding (default is 3)
175253a5a1b3Sopenharmony_ci\end_layout
175353a5a1b3Sopenharmony_ci
175453a5a1b3Sopenharmony_ci\begin_layout Description
175553a5a1b3Sopenharmony_ci-V Verbose operation, print bit-rate currently in use
175653a5a1b3Sopenharmony_ci\end_layout
175753a5a1b3Sopenharmony_ci
175853a5a1b3Sopenharmony_ci\begin_layout Description
175953a5a1b3Sopenharmony_ci--help
176053a5a1b3Sopenharmony_ci\begin_inset space ~
176153a5a1b3Sopenharmony_ci\end_inset
176253a5a1b3Sopenharmony_ci
176353a5a1b3Sopenharmony_ci(-h) Print the help
176453a5a1b3Sopenharmony_ci\end_layout
176553a5a1b3Sopenharmony_ci
176653a5a1b3Sopenharmony_ci\begin_layout Description
176753a5a1b3Sopenharmony_ci--version
176853a5a1b3Sopenharmony_ci\begin_inset space ~
176953a5a1b3Sopenharmony_ci\end_inset
177053a5a1b3Sopenharmony_ci
177153a5a1b3Sopenharmony_ci(-v) Print version information
177253a5a1b3Sopenharmony_ci\end_layout
177353a5a1b3Sopenharmony_ci
177453a5a1b3Sopenharmony_ci\begin_layout Subsection*
177553a5a1b3Sopenharmony_ciSpeex comments
177653a5a1b3Sopenharmony_ci\end_layout
177753a5a1b3Sopenharmony_ci
177853a5a1b3Sopenharmony_ci\begin_layout Description
177953a5a1b3Sopenharmony_ci--comment Add the given string as an extra comment.
178053a5a1b3Sopenharmony_ci This may be used multiple times.
178153a5a1b3Sopenharmony_ci 
178253a5a1b3Sopenharmony_ci\end_layout
178353a5a1b3Sopenharmony_ci
178453a5a1b3Sopenharmony_ci\begin_layout Description
178553a5a1b3Sopenharmony_ci--author Author of this track.
178653a5a1b3Sopenharmony_ci 
178753a5a1b3Sopenharmony_ci\end_layout
178853a5a1b3Sopenharmony_ci
178953a5a1b3Sopenharmony_ci\begin_layout Description
179053a5a1b3Sopenharmony_ci--title Title for this track.
179153a5a1b3Sopenharmony_ci 
179253a5a1b3Sopenharmony_ci\end_layout
179353a5a1b3Sopenharmony_ci
179453a5a1b3Sopenharmony_ci\begin_layout Subsection*
179553a5a1b3Sopenharmony_ciRaw input options
179653a5a1b3Sopenharmony_ci\end_layout
179753a5a1b3Sopenharmony_ci
179853a5a1b3Sopenharmony_ci\begin_layout Description
179953a5a1b3Sopenharmony_ci--rate
180053a5a1b3Sopenharmony_ci\begin_inset space ~
180153a5a1b3Sopenharmony_ci\end_inset
180253a5a1b3Sopenharmony_ci
180353a5a1b3Sopenharmony_cin Sampling rate for raw input
180453a5a1b3Sopenharmony_ci\end_layout
180553a5a1b3Sopenharmony_ci
180653a5a1b3Sopenharmony_ci\begin_layout Description
180753a5a1b3Sopenharmony_ci--stereo Consider raw input as stereo 
180853a5a1b3Sopenharmony_ci\end_layout
180953a5a1b3Sopenharmony_ci
181053a5a1b3Sopenharmony_ci\begin_layout Description
181153a5a1b3Sopenharmony_ci--le Raw input is little-endian 
181253a5a1b3Sopenharmony_ci\end_layout
181353a5a1b3Sopenharmony_ci
181453a5a1b3Sopenharmony_ci\begin_layout Description
181553a5a1b3Sopenharmony_ci--be Raw input is big-endian 
181653a5a1b3Sopenharmony_ci\end_layout
181753a5a1b3Sopenharmony_ci
181853a5a1b3Sopenharmony_ci\begin_layout Description
181953a5a1b3Sopenharmony_ci--8bit Raw input is 8-bit unsigned 
182053a5a1b3Sopenharmony_ci\end_layout
182153a5a1b3Sopenharmony_ci
182253a5a1b3Sopenharmony_ci\begin_layout Description
182353a5a1b3Sopenharmony_ci--16bit Raw input is 16-bit signed 
182453a5a1b3Sopenharmony_ci\end_layout
182553a5a1b3Sopenharmony_ci
182653a5a1b3Sopenharmony_ci\begin_layout Section
182753a5a1b3Sopenharmony_ci
182853a5a1b3Sopenharmony_ci\emph on
182953a5a1b3Sopenharmony_cispeexdec
183053a5a1b3Sopenharmony_ci\begin_inset Index
183153a5a1b3Sopenharmony_cistatus collapsed
183253a5a1b3Sopenharmony_ci
183353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
183453a5a1b3Sopenharmony_cispeexdec
183553a5a1b3Sopenharmony_ci\end_layout
183653a5a1b3Sopenharmony_ci
183753a5a1b3Sopenharmony_ci\end_inset
183853a5a1b3Sopenharmony_ci
183953a5a1b3Sopenharmony_ci
184053a5a1b3Sopenharmony_ci\end_layout
184153a5a1b3Sopenharmony_ci
184253a5a1b3Sopenharmony_ci\begin_layout Standard
184353a5a1b3Sopenharmony_ciThe 
184453a5a1b3Sopenharmony_ci\emph on
184553a5a1b3Sopenharmony_cispeexdec
184653a5a1b3Sopenharmony_ci\emph default
184753a5a1b3Sopenharmony_ci utility is used to decode Speex files and can be used by calling: 
184853a5a1b3Sopenharmony_ci\end_layout
184953a5a1b3Sopenharmony_ci
185053a5a1b3Sopenharmony_ci\begin_layout LyX-Code
185153a5a1b3Sopenharmony_cispeexdec [options] speex_file [output_file]
185253a5a1b3Sopenharmony_ci\end_layout
185353a5a1b3Sopenharmony_ci
185453a5a1b3Sopenharmony_ci\begin_layout Standard
185553a5a1b3Sopenharmony_ciThe value '-' for input_file or output_file corresponds respectively to
185653a5a1b3Sopenharmony_ci stdin and stdout.
185753a5a1b3Sopenharmony_ci Also, when no output_file is specified, the file is played to the soundcard.
185853a5a1b3Sopenharmony_ci The valid options are:
185953a5a1b3Sopenharmony_ci\end_layout
186053a5a1b3Sopenharmony_ci
186153a5a1b3Sopenharmony_ci\begin_layout Description
186253a5a1b3Sopenharmony_ci--enh enable post-filter (default)
186353a5a1b3Sopenharmony_ci\end_layout
186453a5a1b3Sopenharmony_ci
186553a5a1b3Sopenharmony_ci\begin_layout Description
186653a5a1b3Sopenharmony_ci--no-enh disable post-filter
186753a5a1b3Sopenharmony_ci\end_layout
186853a5a1b3Sopenharmony_ci
186953a5a1b3Sopenharmony_ci\begin_layout Description
187053a5a1b3Sopenharmony_ci--force-nb Force decoding in narrowband 
187153a5a1b3Sopenharmony_ci\end_layout
187253a5a1b3Sopenharmony_ci
187353a5a1b3Sopenharmony_ci\begin_layout Description
187453a5a1b3Sopenharmony_ci--force-wb Force decoding in wideband 
187553a5a1b3Sopenharmony_ci\end_layout
187653a5a1b3Sopenharmony_ci
187753a5a1b3Sopenharmony_ci\begin_layout Description
187853a5a1b3Sopenharmony_ci--force-uwb Force decoding in ultra-wideband 
187953a5a1b3Sopenharmony_ci\end_layout
188053a5a1b3Sopenharmony_ci
188153a5a1b3Sopenharmony_ci\begin_layout Description
188253a5a1b3Sopenharmony_ci--mono Force decoding in mono 
188353a5a1b3Sopenharmony_ci\end_layout
188453a5a1b3Sopenharmony_ci
188553a5a1b3Sopenharmony_ci\begin_layout Description
188653a5a1b3Sopenharmony_ci--stereo Force decoding in stereo 
188753a5a1b3Sopenharmony_ci\end_layout
188853a5a1b3Sopenharmony_ci
188953a5a1b3Sopenharmony_ci\begin_layout Description
189053a5a1b3Sopenharmony_ci--rate
189153a5a1b3Sopenharmony_ci\begin_inset space ~
189253a5a1b3Sopenharmony_ci\end_inset
189353a5a1b3Sopenharmony_ci
189453a5a1b3Sopenharmony_cin Force decoding at n Hz sampling rate
189553a5a1b3Sopenharmony_ci\end_layout
189653a5a1b3Sopenharmony_ci
189753a5a1b3Sopenharmony_ci\begin_layout Description
189853a5a1b3Sopenharmony_ci--packet-loss
189953a5a1b3Sopenharmony_ci\begin_inset space ~
190053a5a1b3Sopenharmony_ci\end_inset
190153a5a1b3Sopenharmony_ci
190253a5a1b3Sopenharmony_cin Simulate n % random packet loss
190353a5a1b3Sopenharmony_ci\end_layout
190453a5a1b3Sopenharmony_ci
190553a5a1b3Sopenharmony_ci\begin_layout Description
190653a5a1b3Sopenharmony_ci-V Verbose operation, print bit-rate currently in use
190753a5a1b3Sopenharmony_ci\end_layout
190853a5a1b3Sopenharmony_ci
190953a5a1b3Sopenharmony_ci\begin_layout Description
191053a5a1b3Sopenharmony_ci--help
191153a5a1b3Sopenharmony_ci\begin_inset space ~
191253a5a1b3Sopenharmony_ci\end_inset
191353a5a1b3Sopenharmony_ci
191453a5a1b3Sopenharmony_ci(-h) Print the help
191553a5a1b3Sopenharmony_ci\end_layout
191653a5a1b3Sopenharmony_ci
191753a5a1b3Sopenharmony_ci\begin_layout Description
191853a5a1b3Sopenharmony_ci--version
191953a5a1b3Sopenharmony_ci\begin_inset space ~
192053a5a1b3Sopenharmony_ci\end_inset
192153a5a1b3Sopenharmony_ci
192253a5a1b3Sopenharmony_ci(-v) Print version information
192353a5a1b3Sopenharmony_ci\end_layout
192453a5a1b3Sopenharmony_ci
192553a5a1b3Sopenharmony_ci\begin_layout Standard
192653a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
192753a5a1b3Sopenharmony_ci\end_inset
192853a5a1b3Sopenharmony_ci
192953a5a1b3Sopenharmony_ci
193053a5a1b3Sopenharmony_ci\end_layout
193153a5a1b3Sopenharmony_ci
193253a5a1b3Sopenharmony_ci\begin_layout Chapter
193353a5a1b3Sopenharmony_ciUsing the Speex Codec API (
193453a5a1b3Sopenharmony_ci\emph on
193553a5a1b3Sopenharmony_cilibspeex
193653a5a1b3Sopenharmony_ci\emph default
193753a5a1b3Sopenharmony_ci
193853a5a1b3Sopenharmony_ci\begin_inset Index
193953a5a1b3Sopenharmony_cistatus collapsed
194053a5a1b3Sopenharmony_ci
194153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
194253a5a1b3Sopenharmony_cilibspeex
194353a5a1b3Sopenharmony_ci\end_layout
194453a5a1b3Sopenharmony_ci
194553a5a1b3Sopenharmony_ci\end_inset
194653a5a1b3Sopenharmony_ci
194753a5a1b3Sopenharmony_ci)
194853a5a1b3Sopenharmony_ci\begin_inset CommandInset label
194953a5a1b3Sopenharmony_ciLatexCommand label
195053a5a1b3Sopenharmony_ciname "sec:Programming-with-Speex"
195153a5a1b3Sopenharmony_ci
195253a5a1b3Sopenharmony_ci\end_inset
195353a5a1b3Sopenharmony_ci
195453a5a1b3Sopenharmony_ci
195553a5a1b3Sopenharmony_ci\end_layout
195653a5a1b3Sopenharmony_ci
195753a5a1b3Sopenharmony_ci\begin_layout Standard
195853a5a1b3Sopenharmony_ciThe 
195953a5a1b3Sopenharmony_ci\emph on
196053a5a1b3Sopenharmony_cilibspeex
196153a5a1b3Sopenharmony_ci\emph default
196253a5a1b3Sopenharmony_ci library contains all the functions for encoding and decoding speech with
196353a5a1b3Sopenharmony_ci the Speex codec.
196453a5a1b3Sopenharmony_ci When linking on a UNIX system, one must add 
196553a5a1b3Sopenharmony_ci\emph on
196653a5a1b3Sopenharmony_ci-lspeex -lm
196753a5a1b3Sopenharmony_ci\emph default
196853a5a1b3Sopenharmony_ci to the compiler command line.
196953a5a1b3Sopenharmony_ci One important thing to know is that 
197053a5a1b3Sopenharmony_ci\series bold
197153a5a1b3Sopenharmony_cilibspeex calls are reentrant, but not thread-safe
197253a5a1b3Sopenharmony_ci\series default
197353a5a1b3Sopenharmony_ci.
197453a5a1b3Sopenharmony_ci That means that it is fine to use calls from many threads, but 
197553a5a1b3Sopenharmony_ci\series bold
197653a5a1b3Sopenharmony_cicalls using the same state from multiple threads must be protected by mutexes
197753a5a1b3Sopenharmony_ci\series default
197853a5a1b3Sopenharmony_ci.
197953a5a1b3Sopenharmony_ci Examples of code can also be found in Appendix 
198053a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
198153a5a1b3Sopenharmony_ciLatexCommand ref
198253a5a1b3Sopenharmony_cireference "sec:Sample-code"
198353a5a1b3Sopenharmony_ci
198453a5a1b3Sopenharmony_ci\end_inset
198553a5a1b3Sopenharmony_ci
198653a5a1b3Sopenharmony_ci and the complete API documentation is included in the Documentation section
198753a5a1b3Sopenharmony_ci of the Speex website (http://www.speex.org/).
198853a5a1b3Sopenharmony_ci\end_layout
198953a5a1b3Sopenharmony_ci
199053a5a1b3Sopenharmony_ci\begin_layout Section
199153a5a1b3Sopenharmony_ciEncoding
199253a5a1b3Sopenharmony_ci\begin_inset CommandInset label
199353a5a1b3Sopenharmony_ciLatexCommand label
199453a5a1b3Sopenharmony_ciname "sub:Encoding"
199553a5a1b3Sopenharmony_ci
199653a5a1b3Sopenharmony_ci\end_inset
199753a5a1b3Sopenharmony_ci
199853a5a1b3Sopenharmony_ci
199953a5a1b3Sopenharmony_ci\end_layout
200053a5a1b3Sopenharmony_ci
200153a5a1b3Sopenharmony_ci\begin_layout Standard
200253a5a1b3Sopenharmony_ciIn order to encode speech using Speex, one first needs to:
200353a5a1b3Sopenharmony_ci\end_layout
200453a5a1b3Sopenharmony_ci
200553a5a1b3Sopenharmony_ci\begin_layout Standard
200653a5a1b3Sopenharmony_ci\begin_inset listings
200753a5a1b3Sopenharmony_ciinline false
200853a5a1b3Sopenharmony_cistatus open
200953a5a1b3Sopenharmony_ci
201053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
201153a5a1b3Sopenharmony_ci
201253a5a1b3Sopenharmony_ci#include <speex/speex.h>
201353a5a1b3Sopenharmony_ci\end_layout
201453a5a1b3Sopenharmony_ci
201553a5a1b3Sopenharmony_ci\end_inset
201653a5a1b3Sopenharmony_ci
201753a5a1b3Sopenharmony_ciThen in the code, a Speex bit-packing struct must be declared, along with
201853a5a1b3Sopenharmony_ci a Speex encoder state:
201953a5a1b3Sopenharmony_ci\begin_inset listings
202053a5a1b3Sopenharmony_ciinline false
202153a5a1b3Sopenharmony_cistatus open
202253a5a1b3Sopenharmony_ci
202353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
202453a5a1b3Sopenharmony_ci
202553a5a1b3Sopenharmony_ciSpeexBits bits;
202653a5a1b3Sopenharmony_ci\end_layout
202753a5a1b3Sopenharmony_ci
202853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
202953a5a1b3Sopenharmony_ci
203053a5a1b3Sopenharmony_civoid *enc_state;
203153a5a1b3Sopenharmony_ci\end_layout
203253a5a1b3Sopenharmony_ci
203353a5a1b3Sopenharmony_ci\end_inset
203453a5a1b3Sopenharmony_ci
203553a5a1b3Sopenharmony_ciThe two are initialized by:
203653a5a1b3Sopenharmony_ci\begin_inset listings
203753a5a1b3Sopenharmony_ciinline false
203853a5a1b3Sopenharmony_cistatus open
203953a5a1b3Sopenharmony_ci
204053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
204153a5a1b3Sopenharmony_ci
204253a5a1b3Sopenharmony_cispeex_bits_init(&bits);
204353a5a1b3Sopenharmony_ci\end_layout
204453a5a1b3Sopenharmony_ci
204553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
204653a5a1b3Sopenharmony_ci
204753a5a1b3Sopenharmony_cienc_state = speex_encoder_init(&speex_nb_mode);
204853a5a1b3Sopenharmony_ci\end_layout
204953a5a1b3Sopenharmony_ci
205053a5a1b3Sopenharmony_ci\end_inset
205153a5a1b3Sopenharmony_ci
205253a5a1b3Sopenharmony_ci
205353a5a1b3Sopenharmony_ci\end_layout
205453a5a1b3Sopenharmony_ci
205553a5a1b3Sopenharmony_ci\begin_layout Standard
205653a5a1b3Sopenharmony_ciFor wideband coding, 
205753a5a1b3Sopenharmony_ci\emph on
205853a5a1b3Sopenharmony_cispeex_nb_mode
205953a5a1b3Sopenharmony_ci\emph default
206053a5a1b3Sopenharmony_ci will be replaced by 
206153a5a1b3Sopenharmony_ci\emph on
206253a5a1b3Sopenharmony_cispeex_wb_mode
206353a5a1b3Sopenharmony_ci\emph default
206453a5a1b3Sopenharmony_ci.
206553a5a1b3Sopenharmony_ci In most cases, you will need to know the frame size used at the sampling
206653a5a1b3Sopenharmony_ci rate you are using.
206753a5a1b3Sopenharmony_ci You can get that value in the 
206853a5a1b3Sopenharmony_ci\emph on
206953a5a1b3Sopenharmony_ciframe_size
207053a5a1b3Sopenharmony_ci\emph default
207153a5a1b3Sopenharmony_ci variable (expressed in 
207253a5a1b3Sopenharmony_ci\series bold
207353a5a1b3Sopenharmony_cisamples
207453a5a1b3Sopenharmony_ci\series default
207553a5a1b3Sopenharmony_ci, not bytes) with:
207653a5a1b3Sopenharmony_ci\end_layout
207753a5a1b3Sopenharmony_ci
207853a5a1b3Sopenharmony_ci\begin_layout Standard
207953a5a1b3Sopenharmony_ci\begin_inset listings
208053a5a1b3Sopenharmony_ciinline false
208153a5a1b3Sopenharmony_cistatus open
208253a5a1b3Sopenharmony_ci
208353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
208453a5a1b3Sopenharmony_ci
208553a5a1b3Sopenharmony_cispeex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
208653a5a1b3Sopenharmony_ci\end_layout
208753a5a1b3Sopenharmony_ci
208853a5a1b3Sopenharmony_ci\end_inset
208953a5a1b3Sopenharmony_ci
209053a5a1b3Sopenharmony_ci
209153a5a1b3Sopenharmony_ci\end_layout
209253a5a1b3Sopenharmony_ci
209353a5a1b3Sopenharmony_ci\begin_layout Standard
209453a5a1b3Sopenharmony_ciIn practice, 
209553a5a1b3Sopenharmony_ci\emph on
209653a5a1b3Sopenharmony_ciframe_size
209753a5a1b3Sopenharmony_ci\emph default
209853a5a1b3Sopenharmony_ci will correspond to 20 ms when using 8, 16, or 32 kHz sampling rate.
209953a5a1b3Sopenharmony_ci There are many parameters that can be set for the Speex encoder, but the
210053a5a1b3Sopenharmony_ci most useful one is the quality parameter that controls the quality vs bit-rate
210153a5a1b3Sopenharmony_ci tradeoff.
210253a5a1b3Sopenharmony_ci This is set by:
210353a5a1b3Sopenharmony_ci\end_layout
210453a5a1b3Sopenharmony_ci
210553a5a1b3Sopenharmony_ci\begin_layout Standard
210653a5a1b3Sopenharmony_ci\begin_inset listings
210753a5a1b3Sopenharmony_ciinline false
210853a5a1b3Sopenharmony_cistatus open
210953a5a1b3Sopenharmony_ci
211053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
211153a5a1b3Sopenharmony_ci
211253a5a1b3Sopenharmony_cispeex_encoder_ctl(enc_state,SPEEX_SET_QUALITY,&quality);
211353a5a1b3Sopenharmony_ci\end_layout
211453a5a1b3Sopenharmony_ci
211553a5a1b3Sopenharmony_ci\end_inset
211653a5a1b3Sopenharmony_ci
211753a5a1b3Sopenharmony_ciwhere 
211853a5a1b3Sopenharmony_ci\emph on
211953a5a1b3Sopenharmony_ciquality
212053a5a1b3Sopenharmony_ci\emph default
212153a5a1b3Sopenharmony_ci is an integer value ranging from 0 to 10 (inclusively).
212253a5a1b3Sopenharmony_ci The mapping between quality and bit-rate is described in Fig.
212353a5a1b3Sopenharmony_ci 
212453a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
212553a5a1b3Sopenharmony_ciLatexCommand ref
212653a5a1b3Sopenharmony_cireference "cap:quality_vs_bps"
212753a5a1b3Sopenharmony_ci
212853a5a1b3Sopenharmony_ci\end_inset
212953a5a1b3Sopenharmony_ci
213053a5a1b3Sopenharmony_ci for narrowband.
213153a5a1b3Sopenharmony_ci\end_layout
213253a5a1b3Sopenharmony_ci
213353a5a1b3Sopenharmony_ci\begin_layout Standard
213453a5a1b3Sopenharmony_ciOnce the initialization is done, for every input frame:
213553a5a1b3Sopenharmony_ci\end_layout
213653a5a1b3Sopenharmony_ci
213753a5a1b3Sopenharmony_ci\begin_layout Standard
213853a5a1b3Sopenharmony_ci\begin_inset listings
213953a5a1b3Sopenharmony_ciinline false
214053a5a1b3Sopenharmony_cistatus open
214153a5a1b3Sopenharmony_ci
214253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
214353a5a1b3Sopenharmony_ci
214453a5a1b3Sopenharmony_cispeex_bits_reset(&bits);
214553a5a1b3Sopenharmony_ci\end_layout
214653a5a1b3Sopenharmony_ci
214753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
214853a5a1b3Sopenharmony_ci
214953a5a1b3Sopenharmony_cispeex_encode_int(enc_state, input_frame, &bits);
215053a5a1b3Sopenharmony_ci\end_layout
215153a5a1b3Sopenharmony_ci
215253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
215353a5a1b3Sopenharmony_ci
215453a5a1b3Sopenharmony_cinbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);
215553a5a1b3Sopenharmony_ci\end_layout
215653a5a1b3Sopenharmony_ci
215753a5a1b3Sopenharmony_ci\end_inset
215853a5a1b3Sopenharmony_ci
215953a5a1b3Sopenharmony_ci
216053a5a1b3Sopenharmony_ci\end_layout
216153a5a1b3Sopenharmony_ci
216253a5a1b3Sopenharmony_ci\begin_layout Standard
216353a5a1b3Sopenharmony_ciwhere 
216453a5a1b3Sopenharmony_ci\emph on
216553a5a1b3Sopenharmony_ciinput_frame
216653a5a1b3Sopenharmony_ci\emph default
216753a5a1b3Sopenharmony_ci is a 
216853a5a1b3Sopenharmony_ci\emph on
216953a5a1b3Sopenharmony_ci(
217053a5a1b3Sopenharmony_ci\emph default
217153a5a1b3Sopenharmony_cishort 
217253a5a1b3Sopenharmony_ci\emph on
217353a5a1b3Sopenharmony_ci*)
217453a5a1b3Sopenharmony_ci\emph default
217553a5a1b3Sopenharmony_ci pointing to the beginning of a speech frame, 
217653a5a1b3Sopenharmony_ci\emph on
217753a5a1b3Sopenharmony_cibyte_ptr
217853a5a1b3Sopenharmony_ci\emph default
217953a5a1b3Sopenharmony_ci is a 
218053a5a1b3Sopenharmony_ci\emph on
218153a5a1b3Sopenharmony_ci(char *)
218253a5a1b3Sopenharmony_ci\emph default
218353a5a1b3Sopenharmony_ci where the encoded frame will be written, 
218453a5a1b3Sopenharmony_ci\emph on
218553a5a1b3Sopenharmony_ciMAX_NB_BYTES
218653a5a1b3Sopenharmony_ci\emph default
218753a5a1b3Sopenharmony_ci is the maximum number of bytes that can be written to 
218853a5a1b3Sopenharmony_ci\emph on
218953a5a1b3Sopenharmony_cibyte_ptr
219053a5a1b3Sopenharmony_ci\emph default
219153a5a1b3Sopenharmony_ci without causing an overflow and 
219253a5a1b3Sopenharmony_ci\emph on
219353a5a1b3Sopenharmony_cinbBytes
219453a5a1b3Sopenharmony_ci\emph default
219553a5a1b3Sopenharmony_ci is the number of bytes actually written to 
219653a5a1b3Sopenharmony_ci\emph on
219753a5a1b3Sopenharmony_cibyte_ptr
219853a5a1b3Sopenharmony_ci\emph default
219953a5a1b3Sopenharmony_ci (the encoded size in bytes).
220053a5a1b3Sopenharmony_ci Before calling speex_bits_write, it is possible to find the number of bytes
220153a5a1b3Sopenharmony_ci that need to be written by calling 
220253a5a1b3Sopenharmony_ci\family typewriter
220353a5a1b3Sopenharmony_cispeex_bits_nbytes(&bits)
220453a5a1b3Sopenharmony_ci\family default
220553a5a1b3Sopenharmony_ci, which returns a number of bytes.
220653a5a1b3Sopenharmony_ci\end_layout
220753a5a1b3Sopenharmony_ci
220853a5a1b3Sopenharmony_ci\begin_layout Standard
220953a5a1b3Sopenharmony_ciIt is still possible to use the 
221053a5a1b3Sopenharmony_ci\emph on
221153a5a1b3Sopenharmony_cispeex_encode()
221253a5a1b3Sopenharmony_ci\emph default
221353a5a1b3Sopenharmony_ci function, which takes a 
221453a5a1b3Sopenharmony_ci\emph on
221553a5a1b3Sopenharmony_ci(float *)
221653a5a1b3Sopenharmony_ci\emph default
221753a5a1b3Sopenharmony_ci for the audio.
221853a5a1b3Sopenharmony_ci However, this would make an eventual port to an FPU-less platform (like
221953a5a1b3Sopenharmony_ci ARM) more complicated.
222053a5a1b3Sopenharmony_ci Internally, 
222153a5a1b3Sopenharmony_ci\emph on
222253a5a1b3Sopenharmony_cispeex_encode()
222353a5a1b3Sopenharmony_ci\emph default
222453a5a1b3Sopenharmony_ci and 
222553a5a1b3Sopenharmony_ci\emph on
222653a5a1b3Sopenharmony_cispeex_encode_int()
222753a5a1b3Sopenharmony_ci\emph default
222853a5a1b3Sopenharmony_ci are processed in the same way.
222953a5a1b3Sopenharmony_ci Whether the encoder uses the fixed-point version is only decided by the
223053a5a1b3Sopenharmony_ci compile-time flags, not at the API level.
223153a5a1b3Sopenharmony_ci\end_layout
223253a5a1b3Sopenharmony_ci
223353a5a1b3Sopenharmony_ci\begin_layout Standard
223453a5a1b3Sopenharmony_ciAfter you're done with the encoding, free all resources with:
223553a5a1b3Sopenharmony_ci\end_layout
223653a5a1b3Sopenharmony_ci
223753a5a1b3Sopenharmony_ci\begin_layout Standard
223853a5a1b3Sopenharmony_ci\begin_inset listings
223953a5a1b3Sopenharmony_ciinline false
224053a5a1b3Sopenharmony_cistatus open
224153a5a1b3Sopenharmony_ci
224253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
224353a5a1b3Sopenharmony_ci
224453a5a1b3Sopenharmony_cispeex_bits_destroy(&bits);
224553a5a1b3Sopenharmony_ci\end_layout
224653a5a1b3Sopenharmony_ci
224753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
224853a5a1b3Sopenharmony_ci
224953a5a1b3Sopenharmony_cispeex_encoder_destroy(enc_state);
225053a5a1b3Sopenharmony_ci\end_layout
225153a5a1b3Sopenharmony_ci
225253a5a1b3Sopenharmony_ci\end_inset
225353a5a1b3Sopenharmony_ci
225453a5a1b3Sopenharmony_ci
225553a5a1b3Sopenharmony_ci\end_layout
225653a5a1b3Sopenharmony_ci
225753a5a1b3Sopenharmony_ci\begin_layout Standard
225853a5a1b3Sopenharmony_ciThat's about it for the encoder.
225953a5a1b3Sopenharmony_ci 
226053a5a1b3Sopenharmony_ci\end_layout
226153a5a1b3Sopenharmony_ci
226253a5a1b3Sopenharmony_ci\begin_layout Section
226353a5a1b3Sopenharmony_ciDecoding
226453a5a1b3Sopenharmony_ci\begin_inset CommandInset label
226553a5a1b3Sopenharmony_ciLatexCommand label
226653a5a1b3Sopenharmony_ciname "sub:Decoding"
226753a5a1b3Sopenharmony_ci
226853a5a1b3Sopenharmony_ci\end_inset
226953a5a1b3Sopenharmony_ci
227053a5a1b3Sopenharmony_ci
227153a5a1b3Sopenharmony_ci\end_layout
227253a5a1b3Sopenharmony_ci
227353a5a1b3Sopenharmony_ci\begin_layout Standard
227453a5a1b3Sopenharmony_ciIn order to decode speech using Speex, you first need to:
227553a5a1b3Sopenharmony_ci\begin_inset listings
227653a5a1b3Sopenharmony_ciinline false
227753a5a1b3Sopenharmony_cistatus open
227853a5a1b3Sopenharmony_ci
227953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
228053a5a1b3Sopenharmony_ci
228153a5a1b3Sopenharmony_ci#include <speex/speex.h>
228253a5a1b3Sopenharmony_ci\end_layout
228353a5a1b3Sopenharmony_ci
228453a5a1b3Sopenharmony_ci\end_inset
228553a5a1b3Sopenharmony_ci
228653a5a1b3Sopenharmony_ciYou also need to declare a Speex bit-packing struct
228753a5a1b3Sopenharmony_ci\begin_inset listings
228853a5a1b3Sopenharmony_ciinline false
228953a5a1b3Sopenharmony_cistatus open
229053a5a1b3Sopenharmony_ci
229153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
229253a5a1b3Sopenharmony_ci
229353a5a1b3Sopenharmony_ciSpeexBits bits;
229453a5a1b3Sopenharmony_ci\end_layout
229553a5a1b3Sopenharmony_ci
229653a5a1b3Sopenharmony_ci\end_inset
229753a5a1b3Sopenharmony_ci
229853a5a1b3Sopenharmony_ciand a Speex decoder state
229953a5a1b3Sopenharmony_ci\begin_inset listings
230053a5a1b3Sopenharmony_ciinline false
230153a5a1b3Sopenharmony_cistatus open
230253a5a1b3Sopenharmony_ci
230353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
230453a5a1b3Sopenharmony_ci
230553a5a1b3Sopenharmony_civoid *dec_state;
230653a5a1b3Sopenharmony_ci\end_layout
230753a5a1b3Sopenharmony_ci
230853a5a1b3Sopenharmony_ci\end_inset
230953a5a1b3Sopenharmony_ci
231053a5a1b3Sopenharmony_ciThe two are initialized by:
231153a5a1b3Sopenharmony_ci\begin_inset listings
231253a5a1b3Sopenharmony_ciinline false
231353a5a1b3Sopenharmony_cistatus open
231453a5a1b3Sopenharmony_ci
231553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
231653a5a1b3Sopenharmony_ci
231753a5a1b3Sopenharmony_cispeex_bits_init(&bits);
231853a5a1b3Sopenharmony_ci\end_layout
231953a5a1b3Sopenharmony_ci
232053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
232153a5a1b3Sopenharmony_ci
232253a5a1b3Sopenharmony_cidec_state = speex_decoder_init(&speex_nb_mode);
232353a5a1b3Sopenharmony_ci\end_layout
232453a5a1b3Sopenharmony_ci
232553a5a1b3Sopenharmony_ci\end_inset
232653a5a1b3Sopenharmony_ci
232753a5a1b3Sopenharmony_ci
232853a5a1b3Sopenharmony_ci\end_layout
232953a5a1b3Sopenharmony_ci
233053a5a1b3Sopenharmony_ci\begin_layout Standard
233153a5a1b3Sopenharmony_ciFor wideband decoding, 
233253a5a1b3Sopenharmony_ci\emph on
233353a5a1b3Sopenharmony_cispeex_nb_mode
233453a5a1b3Sopenharmony_ci\emph default
233553a5a1b3Sopenharmony_ci will be replaced by 
233653a5a1b3Sopenharmony_ci\emph on
233753a5a1b3Sopenharmony_cispeex_wb_mode
233853a5a1b3Sopenharmony_ci\emph default
233953a5a1b3Sopenharmony_ci.
234053a5a1b3Sopenharmony_ci If you need to obtain the size of the frames that will be used by the decoder,
234153a5a1b3Sopenharmony_ci you can get that value in the 
234253a5a1b3Sopenharmony_ci\emph on
234353a5a1b3Sopenharmony_ciframe_size
234453a5a1b3Sopenharmony_ci\emph default
234553a5a1b3Sopenharmony_ci variable (expressed in 
234653a5a1b3Sopenharmony_ci\series bold
234753a5a1b3Sopenharmony_cisamples
234853a5a1b3Sopenharmony_ci\series default
234953a5a1b3Sopenharmony_ci, not bytes) with:
235053a5a1b3Sopenharmony_ci\end_layout
235153a5a1b3Sopenharmony_ci
235253a5a1b3Sopenharmony_ci\begin_layout Standard
235353a5a1b3Sopenharmony_ci\begin_inset listings
235453a5a1b3Sopenharmony_ciinline false
235553a5a1b3Sopenharmony_cistatus open
235653a5a1b3Sopenharmony_ci
235753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
235853a5a1b3Sopenharmony_ci
235953a5a1b3Sopenharmony_cispeex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size);
236053a5a1b3Sopenharmony_ci\end_layout
236153a5a1b3Sopenharmony_ci
236253a5a1b3Sopenharmony_ci\end_inset
236353a5a1b3Sopenharmony_ci
236453a5a1b3Sopenharmony_ci
236553a5a1b3Sopenharmony_ci\end_layout
236653a5a1b3Sopenharmony_ci
236753a5a1b3Sopenharmony_ci\begin_layout Standard
236853a5a1b3Sopenharmony_ciThere is also a parameter that can be set for the decoder: whether or not
236953a5a1b3Sopenharmony_ci to use a perceptual enhancer.
237053a5a1b3Sopenharmony_ci This can be set by: 
237153a5a1b3Sopenharmony_ci\end_layout
237253a5a1b3Sopenharmony_ci
237353a5a1b3Sopenharmony_ci\begin_layout Standard
237453a5a1b3Sopenharmony_ci\begin_inset listings
237553a5a1b3Sopenharmony_ciinline false
237653a5a1b3Sopenharmony_cistatus open
237753a5a1b3Sopenharmony_ci
237853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
237953a5a1b3Sopenharmony_ci
238053a5a1b3Sopenharmony_cispeex_decoder_ctl(dec_state, SPEEX_SET_ENH, &enh);
238153a5a1b3Sopenharmony_ci\end_layout
238253a5a1b3Sopenharmony_ci
238353a5a1b3Sopenharmony_ci\end_inset
238453a5a1b3Sopenharmony_ci
238553a5a1b3Sopenharmony_ci
238653a5a1b3Sopenharmony_ci\end_layout
238753a5a1b3Sopenharmony_ci
238853a5a1b3Sopenharmony_ci\begin_layout Standard
238953a5a1b3Sopenharmony_ciwhere 
239053a5a1b3Sopenharmony_ci\emph on
239153a5a1b3Sopenharmony_cienh
239253a5a1b3Sopenharmony_ci\emph default
239353a5a1b3Sopenharmony_ci is an int with value 0 to have the enhancer disabled and 1 to have it enabled.
239453a5a1b3Sopenharmony_ci As of 1.2-beta1, the default is now to enable the enhancer.
239553a5a1b3Sopenharmony_ci\end_layout
239653a5a1b3Sopenharmony_ci
239753a5a1b3Sopenharmony_ci\begin_layout Standard
239853a5a1b3Sopenharmony_ciAgain, once the decoder initialization is done, for every input frame:
239953a5a1b3Sopenharmony_ci\end_layout
240053a5a1b3Sopenharmony_ci
240153a5a1b3Sopenharmony_ci\begin_layout Standard
240253a5a1b3Sopenharmony_ci\begin_inset listings
240353a5a1b3Sopenharmony_ciinline false
240453a5a1b3Sopenharmony_cistatus open
240553a5a1b3Sopenharmony_ci
240653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
240753a5a1b3Sopenharmony_ci
240853a5a1b3Sopenharmony_cispeex_bits_read_from(&bits, input_bytes, nbBytes);
240953a5a1b3Sopenharmony_ci\end_layout
241053a5a1b3Sopenharmony_ci
241153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
241253a5a1b3Sopenharmony_ci
241353a5a1b3Sopenharmony_cispeex_decode_int(dec_state, &bits, output_frame);
241453a5a1b3Sopenharmony_ci\end_layout
241553a5a1b3Sopenharmony_ci
241653a5a1b3Sopenharmony_ci\end_inset
241753a5a1b3Sopenharmony_ci
241853a5a1b3Sopenharmony_ciwhere input_bytes is a 
241953a5a1b3Sopenharmony_ci\emph on
242053a5a1b3Sopenharmony_ci(char *)
242153a5a1b3Sopenharmony_ci\emph default
242253a5a1b3Sopenharmony_ci containing the bit-stream data received for a frame, 
242353a5a1b3Sopenharmony_ci\emph on
242453a5a1b3Sopenharmony_cinbBytes
242553a5a1b3Sopenharmony_ci\emph default
242653a5a1b3Sopenharmony_ci is the size (in bytes) of that bit-stream, and 
242753a5a1b3Sopenharmony_ci\emph on
242853a5a1b3Sopenharmony_cioutput_frame
242953a5a1b3Sopenharmony_ci\emph default
243053a5a1b3Sopenharmony_ci is a 
243153a5a1b3Sopenharmony_ci\emph on
243253a5a1b3Sopenharmony_ci(short *)
243353a5a1b3Sopenharmony_ci\emph default
243453a5a1b3Sopenharmony_ci and points to the area where the decoded speech frame will be written.
243553a5a1b3Sopenharmony_ci A NULL value as the second argument indicates that we don't have the bits
243653a5a1b3Sopenharmony_ci for the current frame.
243753a5a1b3Sopenharmony_ci When a frame is lost, the Speex decoder will do its best to "guess" the
243853a5a1b3Sopenharmony_ci correct signal.
243953a5a1b3Sopenharmony_ci\end_layout
244053a5a1b3Sopenharmony_ci
244153a5a1b3Sopenharmony_ci\begin_layout Standard
244253a5a1b3Sopenharmony_ciAs for the encoder, the 
244353a5a1b3Sopenharmony_ci\emph on
244453a5a1b3Sopenharmony_cispeex_decode()
244553a5a1b3Sopenharmony_ci\emph default
244653a5a1b3Sopenharmony_ci function can still be used, with a 
244753a5a1b3Sopenharmony_ci\emph on
244853a5a1b3Sopenharmony_ci(float *)
244953a5a1b3Sopenharmony_ci\emph default
245053a5a1b3Sopenharmony_ci as the output for the audio.
245153a5a1b3Sopenharmony_ci After you're done with the decoding, free all resources with:
245253a5a1b3Sopenharmony_ci\end_layout
245353a5a1b3Sopenharmony_ci
245453a5a1b3Sopenharmony_ci\begin_layout Standard
245553a5a1b3Sopenharmony_ci\begin_inset listings
245653a5a1b3Sopenharmony_ciinline false
245753a5a1b3Sopenharmony_cistatus open
245853a5a1b3Sopenharmony_ci
245953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
246053a5a1b3Sopenharmony_ci
246153a5a1b3Sopenharmony_cispeex_bits_destroy(&bits);
246253a5a1b3Sopenharmony_ci\end_layout
246353a5a1b3Sopenharmony_ci
246453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
246553a5a1b3Sopenharmony_ci
246653a5a1b3Sopenharmony_cispeex_decoder_destroy(dec_state);
246753a5a1b3Sopenharmony_ci\end_layout
246853a5a1b3Sopenharmony_ci
246953a5a1b3Sopenharmony_ci\end_inset
247053a5a1b3Sopenharmony_ci
247153a5a1b3Sopenharmony_ci
247253a5a1b3Sopenharmony_ci\end_layout
247353a5a1b3Sopenharmony_ci
247453a5a1b3Sopenharmony_ci\begin_layout Section
247553a5a1b3Sopenharmony_ciCodec Options (speex_*_ctl)
247653a5a1b3Sopenharmony_ci\begin_inset CommandInset label
247753a5a1b3Sopenharmony_ciLatexCommand label
247853a5a1b3Sopenharmony_ciname "sub:Codec-Options"
247953a5a1b3Sopenharmony_ci
248053a5a1b3Sopenharmony_ci\end_inset
248153a5a1b3Sopenharmony_ci
248253a5a1b3Sopenharmony_ci
248353a5a1b3Sopenharmony_ci\end_layout
248453a5a1b3Sopenharmony_ci
248553a5a1b3Sopenharmony_ci\begin_layout Quote
248653a5a1b3Sopenharmony_ci\align center
248753a5a1b3Sopenharmony_ci
248853a5a1b3Sopenharmony_ci\emph on
248953a5a1b3Sopenharmony_ciEntities should not be multiplied beyond necessity -- William of Ockham.
249053a5a1b3Sopenharmony_ci\end_layout
249153a5a1b3Sopenharmony_ci
249253a5a1b3Sopenharmony_ci\begin_layout Quote
249353a5a1b3Sopenharmony_ci\align center
249453a5a1b3Sopenharmony_ci
249553a5a1b3Sopenharmony_ci\emph on
249653a5a1b3Sopenharmony_ciJust because there's an option for it doesn't mean you have to turn it on
249753a5a1b3Sopenharmony_ci -- me.
249853a5a1b3Sopenharmony_ci\end_layout
249953a5a1b3Sopenharmony_ci
250053a5a1b3Sopenharmony_ci\begin_layout Standard
250153a5a1b3Sopenharmony_ciThe Speex encoder and decoder support many options and requests that can
250253a5a1b3Sopenharmony_ci be accessed through the 
250353a5a1b3Sopenharmony_ci\emph on
250453a5a1b3Sopenharmony_cispeex_encoder_ctl
250553a5a1b3Sopenharmony_ci\emph default
250653a5a1b3Sopenharmony_ci and 
250753a5a1b3Sopenharmony_ci\emph on
250853a5a1b3Sopenharmony_cispeex_decoder_ctl
250953a5a1b3Sopenharmony_ci\emph default
251053a5a1b3Sopenharmony_ci functions.
251153a5a1b3Sopenharmony_ci These functions are similar to the 
251253a5a1b3Sopenharmony_ci\emph on
251353a5a1b3Sopenharmony_ciioctl
251453a5a1b3Sopenharmony_ci\emph default
251553a5a1b3Sopenharmony_ci system call and their prototypes are:
251653a5a1b3Sopenharmony_ci\end_layout
251753a5a1b3Sopenharmony_ci
251853a5a1b3Sopenharmony_ci\begin_layout Standard
251953a5a1b3Sopenharmony_ci\begin_inset listings
252053a5a1b3Sopenharmony_ciinline false
252153a5a1b3Sopenharmony_cistatus open
252253a5a1b3Sopenharmony_ci
252353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
252453a5a1b3Sopenharmony_ci
252553a5a1b3Sopenharmony_civoid speex_encoder_ctl(void *encoder, int request, void *ptr);
252653a5a1b3Sopenharmony_ci\end_layout
252753a5a1b3Sopenharmony_ci
252853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
252953a5a1b3Sopenharmony_ci
253053a5a1b3Sopenharmony_civoid speex_decoder_ctl(void *encoder, int request, void *ptr);
253153a5a1b3Sopenharmony_ci\end_layout
253253a5a1b3Sopenharmony_ci
253353a5a1b3Sopenharmony_ci\end_inset
253453a5a1b3Sopenharmony_ci
253553a5a1b3Sopenharmony_ci
253653a5a1b3Sopenharmony_ci\end_layout
253753a5a1b3Sopenharmony_ci
253853a5a1b3Sopenharmony_ci\begin_layout Standard
253953a5a1b3Sopenharmony_ciDespite those functions, the defaults are usually good for many applications
254053a5a1b3Sopenharmony_ci and 
254153a5a1b3Sopenharmony_ci\series bold
254253a5a1b3Sopenharmony_cioptional settings should only be used when one understands them and knows
254353a5a1b3Sopenharmony_ci that they are needed
254453a5a1b3Sopenharmony_ci\series default
254553a5a1b3Sopenharmony_ci.
254653a5a1b3Sopenharmony_ci A common error is to attempt to set many unnecessary settings.
254753a5a1b3Sopenharmony_ci 
254853a5a1b3Sopenharmony_ci\end_layout
254953a5a1b3Sopenharmony_ci
255053a5a1b3Sopenharmony_ci\begin_layout Standard
255153a5a1b3Sopenharmony_ciHere is a list of the values allowed for the requests.
255253a5a1b3Sopenharmony_ci Some only apply to the encoder or the decoder.
255353a5a1b3Sopenharmony_ci Because the last argument is of type 
255453a5a1b3Sopenharmony_ci\begin_inset listings
255553a5a1b3Sopenharmony_ciinline true
255653a5a1b3Sopenharmony_cistatus collapsed
255753a5a1b3Sopenharmony_ci
255853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
255953a5a1b3Sopenharmony_ci
256053a5a1b3Sopenharmony_civoid *
256153a5a1b3Sopenharmony_ci\end_layout
256253a5a1b3Sopenharmony_ci
256353a5a1b3Sopenharmony_ci\end_inset
256453a5a1b3Sopenharmony_ci
256553a5a1b3Sopenharmony_ci, the 
256653a5a1b3Sopenharmony_ci\begin_inset listings
256753a5a1b3Sopenharmony_ciinline true
256853a5a1b3Sopenharmony_cistatus collapsed
256953a5a1b3Sopenharmony_ci
257053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
257153a5a1b3Sopenharmony_ci
257253a5a1b3Sopenharmony_ci_ctl()
257353a5a1b3Sopenharmony_ci\end_layout
257453a5a1b3Sopenharmony_ci
257553a5a1b3Sopenharmony_ci\end_inset
257653a5a1b3Sopenharmony_ci
257753a5a1b3Sopenharmony_ci functions are 
257853a5a1b3Sopenharmony_ci\series bold
257953a5a1b3Sopenharmony_cinot type safe
258053a5a1b3Sopenharmony_ci\series default
258153a5a1b3Sopenharmony_ci, and should thus be used with care.
258253a5a1b3Sopenharmony_ci The type 
258353a5a1b3Sopenharmony_ci\begin_inset listings
258453a5a1b3Sopenharmony_ciinline true
258553a5a1b3Sopenharmony_cistatus collapsed
258653a5a1b3Sopenharmony_ci
258753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
258853a5a1b3Sopenharmony_ci
258953a5a1b3Sopenharmony_cispx_int32_t
259053a5a1b3Sopenharmony_ci\end_layout
259153a5a1b3Sopenharmony_ci
259253a5a1b3Sopenharmony_ci\end_inset
259353a5a1b3Sopenharmony_ci
259453a5a1b3Sopenharmony_ci is the same as the C99 
259553a5a1b3Sopenharmony_ci\begin_inset listings
259653a5a1b3Sopenharmony_ciinline true
259753a5a1b3Sopenharmony_cistatus collapsed
259853a5a1b3Sopenharmony_ci
259953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
260053a5a1b3Sopenharmony_ci
260153a5a1b3Sopenharmony_ciint32_t
260253a5a1b3Sopenharmony_ci\end_layout
260353a5a1b3Sopenharmony_ci
260453a5a1b3Sopenharmony_ci\end_inset
260553a5a1b3Sopenharmony_ci
260653a5a1b3Sopenharmony_ci type.
260753a5a1b3Sopenharmony_ci\end_layout
260853a5a1b3Sopenharmony_ci
260953a5a1b3Sopenharmony_ci\begin_layout Description
261053a5a1b3Sopenharmony_ciSPEEX_SET_ENH
261153a5a1b3Sopenharmony_ci\begin_inset Formula $\ddagger$
261253a5a1b3Sopenharmony_ci\end_inset
261353a5a1b3Sopenharmony_ci
261453a5a1b3Sopenharmony_ci Set perceptual enhancer
261553a5a1b3Sopenharmony_ci\begin_inset Index
261653a5a1b3Sopenharmony_cistatus collapsed
261753a5a1b3Sopenharmony_ci
261853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
261953a5a1b3Sopenharmony_ciperceptual enhancement
262053a5a1b3Sopenharmony_ci\end_layout
262153a5a1b3Sopenharmony_ci
262253a5a1b3Sopenharmony_ci\end_inset
262353a5a1b3Sopenharmony_ci
262453a5a1b3Sopenharmony_ci to on (1) or off (0) (
262553a5a1b3Sopenharmony_ci\begin_inset listings
262653a5a1b3Sopenharmony_ciinline true
262753a5a1b3Sopenharmony_cistatus collapsed
262853a5a1b3Sopenharmony_ci
262953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
263053a5a1b3Sopenharmony_ci
263153a5a1b3Sopenharmony_cispx_int32_t
263253a5a1b3Sopenharmony_ci\end_layout
263353a5a1b3Sopenharmony_ci
263453a5a1b3Sopenharmony_ci\end_inset
263553a5a1b3Sopenharmony_ci
263653a5a1b3Sopenharmony_ci, default is on)
263753a5a1b3Sopenharmony_ci\end_layout
263853a5a1b3Sopenharmony_ci
263953a5a1b3Sopenharmony_ci\begin_layout Description
264053a5a1b3Sopenharmony_ciSPEEX_GET_ENH
264153a5a1b3Sopenharmony_ci\begin_inset Formula $\ddagger$
264253a5a1b3Sopenharmony_ci\end_inset
264353a5a1b3Sopenharmony_ci
264453a5a1b3Sopenharmony_ci Get perceptual enhancer status (
264553a5a1b3Sopenharmony_ci\begin_inset listings
264653a5a1b3Sopenharmony_ciinline true
264753a5a1b3Sopenharmony_cistatus collapsed
264853a5a1b3Sopenharmony_ci
264953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
265053a5a1b3Sopenharmony_ci
265153a5a1b3Sopenharmony_cispx_int32_t
265253a5a1b3Sopenharmony_ci\end_layout
265353a5a1b3Sopenharmony_ci
265453a5a1b3Sopenharmony_ci\end_inset
265553a5a1b3Sopenharmony_ci
265653a5a1b3Sopenharmony_ci)
265753a5a1b3Sopenharmony_ci\end_layout
265853a5a1b3Sopenharmony_ci
265953a5a1b3Sopenharmony_ci\begin_layout Description
266053a5a1b3Sopenharmony_ciSPEEX_GET_FRAME_SIZE Get the number of samples per frame for the current
266153a5a1b3Sopenharmony_ci mode (
266253a5a1b3Sopenharmony_ci\begin_inset listings
266353a5a1b3Sopenharmony_ciinline true
266453a5a1b3Sopenharmony_cistatus collapsed
266553a5a1b3Sopenharmony_ci
266653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
266753a5a1b3Sopenharmony_ci
266853a5a1b3Sopenharmony_cispx_int32_t
266953a5a1b3Sopenharmony_ci\end_layout
267053a5a1b3Sopenharmony_ci
267153a5a1b3Sopenharmony_ci\end_inset
267253a5a1b3Sopenharmony_ci
267353a5a1b3Sopenharmony_ci)
267453a5a1b3Sopenharmony_ci\end_layout
267553a5a1b3Sopenharmony_ci
267653a5a1b3Sopenharmony_ci\begin_layout Description
267753a5a1b3Sopenharmony_ciSPEEX_SET_QUALITY
267853a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
267953a5a1b3Sopenharmony_ci\end_inset
268053a5a1b3Sopenharmony_ci
268153a5a1b3Sopenharmony_ci Set the encoder speech quality (
268253a5a1b3Sopenharmony_ci\begin_inset listings
268353a5a1b3Sopenharmony_ciinline true
268453a5a1b3Sopenharmony_cistatus collapsed
268553a5a1b3Sopenharmony_ci
268653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
268753a5a1b3Sopenharmony_ci
268853a5a1b3Sopenharmony_cispx_int32_t
268953a5a1b3Sopenharmony_ci\end_layout
269053a5a1b3Sopenharmony_ci
269153a5a1b3Sopenharmony_ci\end_inset
269253a5a1b3Sopenharmony_ci
269353a5a1b3Sopenharmony_ci from 0 to 10, default is 8)
269453a5a1b3Sopenharmony_ci\end_layout
269553a5a1b3Sopenharmony_ci
269653a5a1b3Sopenharmony_ci\begin_layout Description
269753a5a1b3Sopenharmony_ciSPEEX_GET_QUALITY
269853a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
269953a5a1b3Sopenharmony_ci\end_inset
270053a5a1b3Sopenharmony_ci
270153a5a1b3Sopenharmony_ci Get the current encoder speech quality (
270253a5a1b3Sopenharmony_ci\begin_inset listings
270353a5a1b3Sopenharmony_ciinline true
270453a5a1b3Sopenharmony_cistatus collapsed
270553a5a1b3Sopenharmony_ci
270653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
270753a5a1b3Sopenharmony_ci
270853a5a1b3Sopenharmony_cispx_int32_t
270953a5a1b3Sopenharmony_ci\end_layout
271053a5a1b3Sopenharmony_ci
271153a5a1b3Sopenharmony_ci\end_inset
271253a5a1b3Sopenharmony_ci
271353a5a1b3Sopenharmony_ci from 0 to 10)
271453a5a1b3Sopenharmony_ci\end_layout
271553a5a1b3Sopenharmony_ci
271653a5a1b3Sopenharmony_ci\begin_layout Description
271753a5a1b3Sopenharmony_ciSPEEX_SET_MODE
271853a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
271953a5a1b3Sopenharmony_ci\end_inset
272053a5a1b3Sopenharmony_ci
272153a5a1b3Sopenharmony_ci Set the mode number, as specified in the RTP spec (
272253a5a1b3Sopenharmony_ci\begin_inset listings
272353a5a1b3Sopenharmony_ciinline true
272453a5a1b3Sopenharmony_cistatus collapsed
272553a5a1b3Sopenharmony_ci
272653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
272753a5a1b3Sopenharmony_ci
272853a5a1b3Sopenharmony_cispx_int32_t
272953a5a1b3Sopenharmony_ci\end_layout
273053a5a1b3Sopenharmony_ci
273153a5a1b3Sopenharmony_ci\end_inset
273253a5a1b3Sopenharmony_ci
273353a5a1b3Sopenharmony_ci)
273453a5a1b3Sopenharmony_ci\end_layout
273553a5a1b3Sopenharmony_ci
273653a5a1b3Sopenharmony_ci\begin_layout Description
273753a5a1b3Sopenharmony_ciSPEEX_GET_MODE
273853a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
273953a5a1b3Sopenharmony_ci\end_inset
274053a5a1b3Sopenharmony_ci
274153a5a1b3Sopenharmony_ci Get the current mode number, as specified in the RTP spec (
274253a5a1b3Sopenharmony_ci\begin_inset listings
274353a5a1b3Sopenharmony_ciinline true
274453a5a1b3Sopenharmony_cistatus collapsed
274553a5a1b3Sopenharmony_ci
274653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
274753a5a1b3Sopenharmony_ci
274853a5a1b3Sopenharmony_cispx_int32_t
274953a5a1b3Sopenharmony_ci\end_layout
275053a5a1b3Sopenharmony_ci
275153a5a1b3Sopenharmony_ci\end_inset
275253a5a1b3Sopenharmony_ci
275353a5a1b3Sopenharmony_ci)
275453a5a1b3Sopenharmony_ci\end_layout
275553a5a1b3Sopenharmony_ci
275653a5a1b3Sopenharmony_ci\begin_layout Description
275753a5a1b3Sopenharmony_ciSPEEX_SET_VBR
275853a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
275953a5a1b3Sopenharmony_ci\end_inset
276053a5a1b3Sopenharmony_ci
276153a5a1b3Sopenharmony_ci Set variable bit-rate (VBR) to on (1) or off (0) (
276253a5a1b3Sopenharmony_ci\begin_inset listings
276353a5a1b3Sopenharmony_ciinline true
276453a5a1b3Sopenharmony_cistatus collapsed
276553a5a1b3Sopenharmony_ci
276653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
276753a5a1b3Sopenharmony_ci
276853a5a1b3Sopenharmony_cispx_int32_t
276953a5a1b3Sopenharmony_ci\end_layout
277053a5a1b3Sopenharmony_ci
277153a5a1b3Sopenharmony_ci\end_inset
277253a5a1b3Sopenharmony_ci
277353a5a1b3Sopenharmony_ci, default is off)
277453a5a1b3Sopenharmony_ci\end_layout
277553a5a1b3Sopenharmony_ci
277653a5a1b3Sopenharmony_ci\begin_layout Description
277753a5a1b3Sopenharmony_ciSPEEX_GET_VBR
277853a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
277953a5a1b3Sopenharmony_ci\end_inset
278053a5a1b3Sopenharmony_ci
278153a5a1b3Sopenharmony_ci Get variable bit-rate
278253a5a1b3Sopenharmony_ci\begin_inset Index
278353a5a1b3Sopenharmony_cistatus collapsed
278453a5a1b3Sopenharmony_ci
278553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
278653a5a1b3Sopenharmony_civariable bit-rate
278753a5a1b3Sopenharmony_ci\end_layout
278853a5a1b3Sopenharmony_ci
278953a5a1b3Sopenharmony_ci\end_inset
279053a5a1b3Sopenharmony_ci
279153a5a1b3Sopenharmony_ci (VBR) status (
279253a5a1b3Sopenharmony_ci\begin_inset listings
279353a5a1b3Sopenharmony_ciinline true
279453a5a1b3Sopenharmony_cistatus collapsed
279553a5a1b3Sopenharmony_ci
279653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
279753a5a1b3Sopenharmony_ci
279853a5a1b3Sopenharmony_cispx_int32_t
279953a5a1b3Sopenharmony_ci\end_layout
280053a5a1b3Sopenharmony_ci
280153a5a1b3Sopenharmony_ci\end_inset
280253a5a1b3Sopenharmony_ci
280353a5a1b3Sopenharmony_ci)
280453a5a1b3Sopenharmony_ci\end_layout
280553a5a1b3Sopenharmony_ci
280653a5a1b3Sopenharmony_ci\begin_layout Description
280753a5a1b3Sopenharmony_ciSPEEX_SET_VBR_QUALITY
280853a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
280953a5a1b3Sopenharmony_ci\end_inset
281053a5a1b3Sopenharmony_ci
281153a5a1b3Sopenharmony_ci Set the encoder VBR speech quality (float 0.0 to 10.0, default is 8.0)
281253a5a1b3Sopenharmony_ci\end_layout
281353a5a1b3Sopenharmony_ci
281453a5a1b3Sopenharmony_ci\begin_layout Description
281553a5a1b3Sopenharmony_ciSPEEX_GET_VBR_QUALITY
281653a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
281753a5a1b3Sopenharmony_ci\end_inset
281853a5a1b3Sopenharmony_ci
281953a5a1b3Sopenharmony_ci Get the current encoder VBR speech quality (float 0 to 10)
282053a5a1b3Sopenharmony_ci\end_layout
282153a5a1b3Sopenharmony_ci
282253a5a1b3Sopenharmony_ci\begin_layout Description
282353a5a1b3Sopenharmony_ciSPEEX_SET_COMPLEXITY
282453a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
282553a5a1b3Sopenharmony_ci\end_inset
282653a5a1b3Sopenharmony_ci
282753a5a1b3Sopenharmony_ci Set the CPU resources allowed for the encoder (
282853a5a1b3Sopenharmony_ci\begin_inset listings
282953a5a1b3Sopenharmony_ciinline true
283053a5a1b3Sopenharmony_cistatus collapsed
283153a5a1b3Sopenharmony_ci
283253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
283353a5a1b3Sopenharmony_ci
283453a5a1b3Sopenharmony_cispx_int32_t
283553a5a1b3Sopenharmony_ci\end_layout
283653a5a1b3Sopenharmony_ci
283753a5a1b3Sopenharmony_ci\end_inset
283853a5a1b3Sopenharmony_ci
283953a5a1b3Sopenharmony_ci from 1 to 10, default is 2)
284053a5a1b3Sopenharmony_ci\end_layout
284153a5a1b3Sopenharmony_ci
284253a5a1b3Sopenharmony_ci\begin_layout Description
284353a5a1b3Sopenharmony_ciSPEEX_GET_COMPLEXITY
284453a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
284553a5a1b3Sopenharmony_ci\end_inset
284653a5a1b3Sopenharmony_ci
284753a5a1b3Sopenharmony_ci Get the CPU resources allowed for the encoder (
284853a5a1b3Sopenharmony_ci\begin_inset listings
284953a5a1b3Sopenharmony_ciinline true
285053a5a1b3Sopenharmony_cistatus collapsed
285153a5a1b3Sopenharmony_ci
285253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
285353a5a1b3Sopenharmony_ci
285453a5a1b3Sopenharmony_cispx_int32_t
285553a5a1b3Sopenharmony_ci\end_layout
285653a5a1b3Sopenharmony_ci
285753a5a1b3Sopenharmony_ci\end_inset
285853a5a1b3Sopenharmony_ci
285953a5a1b3Sopenharmony_ci from 1 to 10, default is 2)
286053a5a1b3Sopenharmony_ci\end_layout
286153a5a1b3Sopenharmony_ci
286253a5a1b3Sopenharmony_ci\begin_layout Description
286353a5a1b3Sopenharmony_ciSPEEX_SET_BITRATE
286453a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
286553a5a1b3Sopenharmony_ci\end_inset
286653a5a1b3Sopenharmony_ci
286753a5a1b3Sopenharmony_ci Set the bit-rate to use the closest value not exceeding the parameter (
286853a5a1b3Sopenharmony_ci\begin_inset listings
286953a5a1b3Sopenharmony_ciinline true
287053a5a1b3Sopenharmony_cistatus collapsed
287153a5a1b3Sopenharmony_ci
287253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
287353a5a1b3Sopenharmony_ci
287453a5a1b3Sopenharmony_cispx_int32_t
287553a5a1b3Sopenharmony_ci\end_layout
287653a5a1b3Sopenharmony_ci
287753a5a1b3Sopenharmony_ci\end_inset
287853a5a1b3Sopenharmony_ci
287953a5a1b3Sopenharmony_ci in bits per second)
288053a5a1b3Sopenharmony_ci\end_layout
288153a5a1b3Sopenharmony_ci
288253a5a1b3Sopenharmony_ci\begin_layout Description
288353a5a1b3Sopenharmony_ciSPEEX_GET_BITRATE Get the current bit-rate in use (
288453a5a1b3Sopenharmony_ci\begin_inset listings
288553a5a1b3Sopenharmony_ciinline true
288653a5a1b3Sopenharmony_cistatus collapsed
288753a5a1b3Sopenharmony_ci
288853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
288953a5a1b3Sopenharmony_ci
289053a5a1b3Sopenharmony_cispx_int32_t
289153a5a1b3Sopenharmony_ci\end_layout
289253a5a1b3Sopenharmony_ci
289353a5a1b3Sopenharmony_ci\end_inset
289453a5a1b3Sopenharmony_ci
289553a5a1b3Sopenharmony_ci in bits per second)
289653a5a1b3Sopenharmony_ci\end_layout
289753a5a1b3Sopenharmony_ci
289853a5a1b3Sopenharmony_ci\begin_layout Description
289953a5a1b3Sopenharmony_ciSPEEX_SET_SAMPLING_RATE Set real sampling rate (
290053a5a1b3Sopenharmony_ci\begin_inset listings
290153a5a1b3Sopenharmony_ciinline true
290253a5a1b3Sopenharmony_cistatus collapsed
290353a5a1b3Sopenharmony_ci
290453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
290553a5a1b3Sopenharmony_ci
290653a5a1b3Sopenharmony_cispx_int32_t
290753a5a1b3Sopenharmony_ci\end_layout
290853a5a1b3Sopenharmony_ci
290953a5a1b3Sopenharmony_ci\end_inset
291053a5a1b3Sopenharmony_ci
291153a5a1b3Sopenharmony_ci in Hz)
291253a5a1b3Sopenharmony_ci\end_layout
291353a5a1b3Sopenharmony_ci
291453a5a1b3Sopenharmony_ci\begin_layout Description
291553a5a1b3Sopenharmony_ciSPEEX_GET_SAMPLING_RATE Get real sampling rate (
291653a5a1b3Sopenharmony_ci\begin_inset listings
291753a5a1b3Sopenharmony_ciinline true
291853a5a1b3Sopenharmony_cistatus collapsed
291953a5a1b3Sopenharmony_ci
292053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
292153a5a1b3Sopenharmony_ci
292253a5a1b3Sopenharmony_cispx_int32_t
292353a5a1b3Sopenharmony_ci\end_layout
292453a5a1b3Sopenharmony_ci
292553a5a1b3Sopenharmony_ci\end_inset
292653a5a1b3Sopenharmony_ci
292753a5a1b3Sopenharmony_ci in Hz)
292853a5a1b3Sopenharmony_ci\end_layout
292953a5a1b3Sopenharmony_ci
293053a5a1b3Sopenharmony_ci\begin_layout Description
293153a5a1b3Sopenharmony_ciSPEEX_RESET_STATE Reset the encoder/decoder state to its original state,
293253a5a1b3Sopenharmony_ci clearing all memories (no argument)
293353a5a1b3Sopenharmony_ci\end_layout
293453a5a1b3Sopenharmony_ci
293553a5a1b3Sopenharmony_ci\begin_layout Description
293653a5a1b3Sopenharmony_ciSPEEX_SET_VAD
293753a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
293853a5a1b3Sopenharmony_ci\end_inset
293953a5a1b3Sopenharmony_ci
294053a5a1b3Sopenharmony_ci Set voice activity detection
294153a5a1b3Sopenharmony_ci\begin_inset Index
294253a5a1b3Sopenharmony_cistatus collapsed
294353a5a1b3Sopenharmony_ci
294453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
294553a5a1b3Sopenharmony_civoice activity detection
294653a5a1b3Sopenharmony_ci\end_layout
294753a5a1b3Sopenharmony_ci
294853a5a1b3Sopenharmony_ci\end_inset
294953a5a1b3Sopenharmony_ci
295053a5a1b3Sopenharmony_ci (VAD) to on (1) or off (0) (
295153a5a1b3Sopenharmony_ci\begin_inset listings
295253a5a1b3Sopenharmony_ciinline true
295353a5a1b3Sopenharmony_cistatus collapsed
295453a5a1b3Sopenharmony_ci
295553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
295653a5a1b3Sopenharmony_ci
295753a5a1b3Sopenharmony_cispx_int32_t
295853a5a1b3Sopenharmony_ci\end_layout
295953a5a1b3Sopenharmony_ci
296053a5a1b3Sopenharmony_ci\end_inset
296153a5a1b3Sopenharmony_ci
296253a5a1b3Sopenharmony_ci, default is off)
296353a5a1b3Sopenharmony_ci\end_layout
296453a5a1b3Sopenharmony_ci
296553a5a1b3Sopenharmony_ci\begin_layout Description
296653a5a1b3Sopenharmony_ciSPEEX_GET_VAD
296753a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
296853a5a1b3Sopenharmony_ci\end_inset
296953a5a1b3Sopenharmony_ci
297053a5a1b3Sopenharmony_ci Get voice activity detection (VAD) status (
297153a5a1b3Sopenharmony_ci\begin_inset listings
297253a5a1b3Sopenharmony_ciinline true
297353a5a1b3Sopenharmony_cistatus collapsed
297453a5a1b3Sopenharmony_ci
297553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
297653a5a1b3Sopenharmony_ci
297753a5a1b3Sopenharmony_cispx_int32_t
297853a5a1b3Sopenharmony_ci\end_layout
297953a5a1b3Sopenharmony_ci
298053a5a1b3Sopenharmony_ci\end_inset
298153a5a1b3Sopenharmony_ci
298253a5a1b3Sopenharmony_ci)
298353a5a1b3Sopenharmony_ci\end_layout
298453a5a1b3Sopenharmony_ci
298553a5a1b3Sopenharmony_ci\begin_layout Description
298653a5a1b3Sopenharmony_ciSPEEX_SET_DTX
298753a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
298853a5a1b3Sopenharmony_ci\end_inset
298953a5a1b3Sopenharmony_ci
299053a5a1b3Sopenharmony_ci Set discontinuous transmission
299153a5a1b3Sopenharmony_ci\begin_inset Index
299253a5a1b3Sopenharmony_cistatus collapsed
299353a5a1b3Sopenharmony_ci
299453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
299553a5a1b3Sopenharmony_cidiscontinuous transmission
299653a5a1b3Sopenharmony_ci\end_layout
299753a5a1b3Sopenharmony_ci
299853a5a1b3Sopenharmony_ci\end_inset
299953a5a1b3Sopenharmony_ci
300053a5a1b3Sopenharmony_ci (DTX) to on (1) or off (0) (
300153a5a1b3Sopenharmony_ci\begin_inset listings
300253a5a1b3Sopenharmony_ciinline true
300353a5a1b3Sopenharmony_cistatus collapsed
300453a5a1b3Sopenharmony_ci
300553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
300653a5a1b3Sopenharmony_ci
300753a5a1b3Sopenharmony_cispx_int32_t
300853a5a1b3Sopenharmony_ci\end_layout
300953a5a1b3Sopenharmony_ci
301053a5a1b3Sopenharmony_ci\end_inset
301153a5a1b3Sopenharmony_ci
301253a5a1b3Sopenharmony_ci, default is off)
301353a5a1b3Sopenharmony_ci\end_layout
301453a5a1b3Sopenharmony_ci
301553a5a1b3Sopenharmony_ci\begin_layout Description
301653a5a1b3Sopenharmony_ciSPEEX_GET_DTX
301753a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
301853a5a1b3Sopenharmony_ci\end_inset
301953a5a1b3Sopenharmony_ci
302053a5a1b3Sopenharmony_ci Get discontinuous transmission (DTX) status (
302153a5a1b3Sopenharmony_ci\begin_inset listings
302253a5a1b3Sopenharmony_ciinline true
302353a5a1b3Sopenharmony_cistatus collapsed
302453a5a1b3Sopenharmony_ci
302553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
302653a5a1b3Sopenharmony_ci
302753a5a1b3Sopenharmony_cispx_int32_t
302853a5a1b3Sopenharmony_ci\end_layout
302953a5a1b3Sopenharmony_ci
303053a5a1b3Sopenharmony_ci\end_inset
303153a5a1b3Sopenharmony_ci
303253a5a1b3Sopenharmony_ci)
303353a5a1b3Sopenharmony_ci\end_layout
303453a5a1b3Sopenharmony_ci
303553a5a1b3Sopenharmony_ci\begin_layout Description
303653a5a1b3Sopenharmony_ciSPEEX_SET_ABR
303753a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
303853a5a1b3Sopenharmony_ci\end_inset
303953a5a1b3Sopenharmony_ci
304053a5a1b3Sopenharmony_ci Set average bit-rate
304153a5a1b3Sopenharmony_ci\begin_inset Index
304253a5a1b3Sopenharmony_cistatus collapsed
304353a5a1b3Sopenharmony_ci
304453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
304553a5a1b3Sopenharmony_ciaverage bit-rate
304653a5a1b3Sopenharmony_ci\end_layout
304753a5a1b3Sopenharmony_ci
304853a5a1b3Sopenharmony_ci\end_inset
304953a5a1b3Sopenharmony_ci
305053a5a1b3Sopenharmony_ci (ABR) to a value n in bits per second (
305153a5a1b3Sopenharmony_ci\begin_inset listings
305253a5a1b3Sopenharmony_ciinline true
305353a5a1b3Sopenharmony_cistatus collapsed
305453a5a1b3Sopenharmony_ci
305553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
305653a5a1b3Sopenharmony_ci
305753a5a1b3Sopenharmony_cispx_int32_t
305853a5a1b3Sopenharmony_ci\end_layout
305953a5a1b3Sopenharmony_ci
306053a5a1b3Sopenharmony_ci\end_inset
306153a5a1b3Sopenharmony_ci
306253a5a1b3Sopenharmony_ci in bits per second)
306353a5a1b3Sopenharmony_ci\end_layout
306453a5a1b3Sopenharmony_ci
306553a5a1b3Sopenharmony_ci\begin_layout Description
306653a5a1b3Sopenharmony_ciSPEEX_GET_ABR
306753a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
306853a5a1b3Sopenharmony_ci\end_inset
306953a5a1b3Sopenharmony_ci
307053a5a1b3Sopenharmony_ci Get average bit-rate (ABR) setting (
307153a5a1b3Sopenharmony_ci\begin_inset listings
307253a5a1b3Sopenharmony_ciinline true
307353a5a1b3Sopenharmony_cistatus collapsed
307453a5a1b3Sopenharmony_ci
307553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
307653a5a1b3Sopenharmony_ci
307753a5a1b3Sopenharmony_cispx_int32_t
307853a5a1b3Sopenharmony_ci\end_layout
307953a5a1b3Sopenharmony_ci
308053a5a1b3Sopenharmony_ci\end_inset
308153a5a1b3Sopenharmony_ci
308253a5a1b3Sopenharmony_ci in bits per second)
308353a5a1b3Sopenharmony_ci\end_layout
308453a5a1b3Sopenharmony_ci
308553a5a1b3Sopenharmony_ci\begin_layout Description
308653a5a1b3Sopenharmony_ciSPEEX_SET_PLC_TUNING
308753a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
308853a5a1b3Sopenharmony_ci\end_inset
308953a5a1b3Sopenharmony_ci
309053a5a1b3Sopenharmony_ci Tell the encoder to optimize encoding for a certain percentage of packet
309153a5a1b3Sopenharmony_ci loss (
309253a5a1b3Sopenharmony_ci\begin_inset listings
309353a5a1b3Sopenharmony_ciinline true
309453a5a1b3Sopenharmony_cistatus collapsed
309553a5a1b3Sopenharmony_ci
309653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
309753a5a1b3Sopenharmony_ci
309853a5a1b3Sopenharmony_cispx_int32_t
309953a5a1b3Sopenharmony_ci\end_layout
310053a5a1b3Sopenharmony_ci
310153a5a1b3Sopenharmony_ci\end_inset
310253a5a1b3Sopenharmony_ci
310353a5a1b3Sopenharmony_ci in percent)
310453a5a1b3Sopenharmony_ci\end_layout
310553a5a1b3Sopenharmony_ci
310653a5a1b3Sopenharmony_ci\begin_layout Description
310753a5a1b3Sopenharmony_ciSPEEX_GET_PLC_TUNING
310853a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
310953a5a1b3Sopenharmony_ci\end_inset
311053a5a1b3Sopenharmony_ci
311153a5a1b3Sopenharmony_ci Get the current tuning of the encoder for PLC (
311253a5a1b3Sopenharmony_ci\begin_inset listings
311353a5a1b3Sopenharmony_ciinline true
311453a5a1b3Sopenharmony_cistatus collapsed
311553a5a1b3Sopenharmony_ci
311653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
311753a5a1b3Sopenharmony_ci
311853a5a1b3Sopenharmony_cispx_int32_t
311953a5a1b3Sopenharmony_ci\end_layout
312053a5a1b3Sopenharmony_ci
312153a5a1b3Sopenharmony_ci\end_inset
312253a5a1b3Sopenharmony_ci
312353a5a1b3Sopenharmony_ci in percent)
312453a5a1b3Sopenharmony_ci\end_layout
312553a5a1b3Sopenharmony_ci
312653a5a1b3Sopenharmony_ci\begin_layout Description
312753a5a1b3Sopenharmony_ciSPEEX_GET_LOOKAHEAD Returns the lookahead used by Speex separately for an
312853a5a1b3Sopenharmony_ci encoder and a decoder.
312953a5a1b3Sopenharmony_ci Sum encoder and decoder lookahead values to get the total codec lookahead.
313053a5a1b3Sopenharmony_ci\end_layout
313153a5a1b3Sopenharmony_ci
313253a5a1b3Sopenharmony_ci\begin_layout Description
313353a5a1b3Sopenharmony_ciSPEEX_SET_VBR_MAX_BITRATE
313453a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
313553a5a1b3Sopenharmony_ci\end_inset
313653a5a1b3Sopenharmony_ci
313753a5a1b3Sopenharmony_ci Set the maximum bit-rate allowed in VBR operation (
313853a5a1b3Sopenharmony_ci\begin_inset listings
313953a5a1b3Sopenharmony_ciinline true
314053a5a1b3Sopenharmony_cistatus collapsed
314153a5a1b3Sopenharmony_ci
314253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
314353a5a1b3Sopenharmony_ci
314453a5a1b3Sopenharmony_cispx_int32_t
314553a5a1b3Sopenharmony_ci\end_layout
314653a5a1b3Sopenharmony_ci
314753a5a1b3Sopenharmony_ci\end_inset
314853a5a1b3Sopenharmony_ci
314953a5a1b3Sopenharmony_ci in bits per second)
315053a5a1b3Sopenharmony_ci\end_layout
315153a5a1b3Sopenharmony_ci
315253a5a1b3Sopenharmony_ci\begin_layout Description
315353a5a1b3Sopenharmony_ciSPEEX_GET_VBR_MAX_BITRATE
315453a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
315553a5a1b3Sopenharmony_ci\end_inset
315653a5a1b3Sopenharmony_ci
315753a5a1b3Sopenharmony_ci Get the current maximum bit-rate allowed in VBR operation (
315853a5a1b3Sopenharmony_ci\begin_inset listings
315953a5a1b3Sopenharmony_ciinline true
316053a5a1b3Sopenharmony_cistatus collapsed
316153a5a1b3Sopenharmony_ci
316253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
316353a5a1b3Sopenharmony_ci
316453a5a1b3Sopenharmony_cispx_int32_t
316553a5a1b3Sopenharmony_ci\end_layout
316653a5a1b3Sopenharmony_ci
316753a5a1b3Sopenharmony_ci\end_inset
316853a5a1b3Sopenharmony_ci
316953a5a1b3Sopenharmony_ci in bits per second)
317053a5a1b3Sopenharmony_ci\end_layout
317153a5a1b3Sopenharmony_ci
317253a5a1b3Sopenharmony_ci\begin_layout Description
317353a5a1b3Sopenharmony_ciSPEEX_SET_HIGHPASS Set the high-pass filter on (1) or off (0) (
317453a5a1b3Sopenharmony_ci\begin_inset listings
317553a5a1b3Sopenharmony_ciinline true
317653a5a1b3Sopenharmony_cistatus collapsed
317753a5a1b3Sopenharmony_ci
317853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
317953a5a1b3Sopenharmony_ci
318053a5a1b3Sopenharmony_cispx_int32_t
318153a5a1b3Sopenharmony_ci\end_layout
318253a5a1b3Sopenharmony_ci
318353a5a1b3Sopenharmony_ci\end_inset
318453a5a1b3Sopenharmony_ci
318553a5a1b3Sopenharmony_ci, default is on)
318653a5a1b3Sopenharmony_ci\end_layout
318753a5a1b3Sopenharmony_ci
318853a5a1b3Sopenharmony_ci\begin_layout Description
318953a5a1b3Sopenharmony_ciSPEEX_GET_HIGHPASS Get the current high-pass filter status (
319053a5a1b3Sopenharmony_ci\begin_inset listings
319153a5a1b3Sopenharmony_ciinline true
319253a5a1b3Sopenharmony_cistatus collapsed
319353a5a1b3Sopenharmony_ci
319453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
319553a5a1b3Sopenharmony_ci
319653a5a1b3Sopenharmony_cispx_int32_t
319753a5a1b3Sopenharmony_ci\end_layout
319853a5a1b3Sopenharmony_ci
319953a5a1b3Sopenharmony_ci\end_inset
320053a5a1b3Sopenharmony_ci
320153a5a1b3Sopenharmony_ci)
320253a5a1b3Sopenharmony_ci\end_layout
320353a5a1b3Sopenharmony_ci
320453a5a1b3Sopenharmony_ci\begin_layout Description
320553a5a1b3Sopenharmony_ci\begin_inset Formula $\dagger$
320653a5a1b3Sopenharmony_ci\end_inset
320753a5a1b3Sopenharmony_ci
320853a5a1b3Sopenharmony_ci applies only to the encoder
320953a5a1b3Sopenharmony_ci\end_layout
321053a5a1b3Sopenharmony_ci
321153a5a1b3Sopenharmony_ci\begin_layout Description
321253a5a1b3Sopenharmony_ci\begin_inset Formula $\ddagger$
321353a5a1b3Sopenharmony_ci\end_inset
321453a5a1b3Sopenharmony_ci
321553a5a1b3Sopenharmony_ci applies only to the decoder
321653a5a1b3Sopenharmony_ci\end_layout
321753a5a1b3Sopenharmony_ci
321853a5a1b3Sopenharmony_ci\begin_layout Section
321953a5a1b3Sopenharmony_ciMode queries
322053a5a1b3Sopenharmony_ci\begin_inset CommandInset label
322153a5a1b3Sopenharmony_ciLatexCommand label
322253a5a1b3Sopenharmony_ciname "sub:Mode-queries"
322353a5a1b3Sopenharmony_ci
322453a5a1b3Sopenharmony_ci\end_inset
322553a5a1b3Sopenharmony_ci
322653a5a1b3Sopenharmony_ci
322753a5a1b3Sopenharmony_ci\end_layout
322853a5a1b3Sopenharmony_ci
322953a5a1b3Sopenharmony_ci\begin_layout Standard
323053a5a1b3Sopenharmony_ciSpeex modes have a query system similar to the speex_encoder_ctl and speex_decod
323153a5a1b3Sopenharmony_cier_ctl calls.
323253a5a1b3Sopenharmony_ci Since modes are read-only, it is only possible to get information about
323353a5a1b3Sopenharmony_ci a particular mode.
323453a5a1b3Sopenharmony_ci The function used to do that is:
323553a5a1b3Sopenharmony_ci\begin_inset listings
323653a5a1b3Sopenharmony_ciinline false
323753a5a1b3Sopenharmony_cistatus open
323853a5a1b3Sopenharmony_ci
323953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
324053a5a1b3Sopenharmony_ci
324153a5a1b3Sopenharmony_civoid speex_mode_query(SpeexMode *mode, int request, void *ptr);
324253a5a1b3Sopenharmony_ci\end_layout
324353a5a1b3Sopenharmony_ci
324453a5a1b3Sopenharmony_ci\end_inset
324553a5a1b3Sopenharmony_ci
324653a5a1b3Sopenharmony_ciThe admissible values for request are (unless otherwise note, the values
324753a5a1b3Sopenharmony_ci are returned through 
324853a5a1b3Sopenharmony_ci\emph on
324953a5a1b3Sopenharmony_ciptr
325053a5a1b3Sopenharmony_ci\emph default
325153a5a1b3Sopenharmony_ci):
325253a5a1b3Sopenharmony_ci\end_layout
325353a5a1b3Sopenharmony_ci
325453a5a1b3Sopenharmony_ci\begin_layout Description
325553a5a1b3Sopenharmony_ciSPEEX_MODE_FRAME_SIZE Get the frame size (in samples) for the mode
325653a5a1b3Sopenharmony_ci\end_layout
325753a5a1b3Sopenharmony_ci
325853a5a1b3Sopenharmony_ci\begin_layout Description
325953a5a1b3Sopenharmony_ciSPEEX_SUBMODE_BITRATE Get the bit-rate for a submode number specified through
326053a5a1b3Sopenharmony_ci 
326153a5a1b3Sopenharmony_ci\emph on
326253a5a1b3Sopenharmony_ciptr
326353a5a1b3Sopenharmony_ci\emph default
326453a5a1b3Sopenharmony_ci (integer in bps).
326553a5a1b3Sopenharmony_ci 
326653a5a1b3Sopenharmony_ci\end_layout
326753a5a1b3Sopenharmony_ci
326853a5a1b3Sopenharmony_ci\begin_layout Section
326953a5a1b3Sopenharmony_ciPacking and in-band signalling
327053a5a1b3Sopenharmony_ci\begin_inset Index
327153a5a1b3Sopenharmony_cistatus collapsed
327253a5a1b3Sopenharmony_ci
327353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
327453a5a1b3Sopenharmony_ciin-band signalling
327553a5a1b3Sopenharmony_ci\end_layout
327653a5a1b3Sopenharmony_ci
327753a5a1b3Sopenharmony_ci\end_inset
327853a5a1b3Sopenharmony_ci
327953a5a1b3Sopenharmony_ci
328053a5a1b3Sopenharmony_ci\end_layout
328153a5a1b3Sopenharmony_ci
328253a5a1b3Sopenharmony_ci\begin_layout Standard
328353a5a1b3Sopenharmony_ciSometimes it is desirable to pack more than one frame per packet (or other
328453a5a1b3Sopenharmony_ci basic unit of storage).
328553a5a1b3Sopenharmony_ci The proper way to do it is to call speex_encode 
328653a5a1b3Sopenharmony_ci\begin_inset Formula $N$
328753a5a1b3Sopenharmony_ci\end_inset
328853a5a1b3Sopenharmony_ci
328953a5a1b3Sopenharmony_ci times before writing the stream with speex_bits_write.
329053a5a1b3Sopenharmony_ci In cases where the number of frames is not determined by an out-of-band
329153a5a1b3Sopenharmony_ci mechanism, it is possible to include a terminator code.
329253a5a1b3Sopenharmony_ci That terminator consists of the code 15 (decimal) encoded with 5 bits,
329353a5a1b3Sopenharmony_ci as shown in Table 
329453a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
329553a5a1b3Sopenharmony_ciLatexCommand ref
329653a5a1b3Sopenharmony_cireference "cap:quality_vs_bps"
329753a5a1b3Sopenharmony_ci
329853a5a1b3Sopenharmony_ci\end_inset
329953a5a1b3Sopenharmony_ci
330053a5a1b3Sopenharmony_ci.
330153a5a1b3Sopenharmony_ci Note that as of version 1.0.2, calling speex_bits_write automatically inserts
330253a5a1b3Sopenharmony_ci the terminator so as to fill the last byte.
330353a5a1b3Sopenharmony_ci This doesn't involves any overhead and makes sure Speex can always detect
330453a5a1b3Sopenharmony_ci when there is no more frame in a packet.
330553a5a1b3Sopenharmony_ci\end_layout
330653a5a1b3Sopenharmony_ci
330753a5a1b3Sopenharmony_ci\begin_layout Standard
330853a5a1b3Sopenharmony_ciIt is also possible to send in-band 
330953a5a1b3Sopenharmony_ci\begin_inset Quotes eld
331053a5a1b3Sopenharmony_ci\end_inset
331153a5a1b3Sopenharmony_ci
331253a5a1b3Sopenharmony_cimessages
331353a5a1b3Sopenharmony_ci\begin_inset Quotes erd
331453a5a1b3Sopenharmony_ci\end_inset
331553a5a1b3Sopenharmony_ci
331653a5a1b3Sopenharmony_ci to the other side.
331753a5a1b3Sopenharmony_ci All these messages are encoded as 
331853a5a1b3Sopenharmony_ci\begin_inset Quotes eld
331953a5a1b3Sopenharmony_ci\end_inset
332053a5a1b3Sopenharmony_ci
332153a5a1b3Sopenharmony_cipseudo-frames
332253a5a1b3Sopenharmony_ci\begin_inset Quotes erd
332353a5a1b3Sopenharmony_ci\end_inset
332453a5a1b3Sopenharmony_ci
332553a5a1b3Sopenharmony_ci of mode 14 which contain a 4-bit message type code, followed by the message.
332653a5a1b3Sopenharmony_ci Table 
332753a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
332853a5a1b3Sopenharmony_ciLatexCommand ref
332953a5a1b3Sopenharmony_cireference "cap:In-band-signalling-codes"
333053a5a1b3Sopenharmony_ci
333153a5a1b3Sopenharmony_ci\end_inset
333253a5a1b3Sopenharmony_ci
333353a5a1b3Sopenharmony_ci lists the available codes, their meaning and the size of the message that
333453a5a1b3Sopenharmony_ci follows.
333553a5a1b3Sopenharmony_ci Most of these messages are requests that are sent to the encoder or decoder
333653a5a1b3Sopenharmony_ci on the other end, which is free to comply or ignore them.
333753a5a1b3Sopenharmony_ci By default, all in-band messages are ignored.
333853a5a1b3Sopenharmony_ci\end_layout
333953a5a1b3Sopenharmony_ci
334053a5a1b3Sopenharmony_ci\begin_layout Standard
334153a5a1b3Sopenharmony_ci\begin_inset Float table
334253a5a1b3Sopenharmony_ciplacement htbp
334353a5a1b3Sopenharmony_ciwide false
334453a5a1b3Sopenharmony_cisideways false
334553a5a1b3Sopenharmony_cistatus open
334653a5a1b3Sopenharmony_ci
334753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
334853a5a1b3Sopenharmony_ci\begin_inset ERT
334953a5a1b3Sopenharmony_cistatus collapsed
335053a5a1b3Sopenharmony_ci
335153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
335253a5a1b3Sopenharmony_ci
335353a5a1b3Sopenharmony_ci
335453a5a1b3Sopenharmony_ci\backslash
335553a5a1b3Sopenharmony_cibegin{center}
335653a5a1b3Sopenharmony_ci\end_layout
335753a5a1b3Sopenharmony_ci
335853a5a1b3Sopenharmony_ci\end_inset
335953a5a1b3Sopenharmony_ci
336053a5a1b3Sopenharmony_ci
336153a5a1b3Sopenharmony_ci\begin_inset Tabular
336253a5a1b3Sopenharmony_ci<lyxtabular version="3" rows="17" columns="3">
336353a5a1b3Sopenharmony_ci<features>
336453a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
336553a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
336653a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
336753a5a1b3Sopenharmony_ci<row>
336853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
336953a5a1b3Sopenharmony_ci\begin_inset Text
337053a5a1b3Sopenharmony_ci
337153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
337253a5a1b3Sopenharmony_ciCode
337353a5a1b3Sopenharmony_ci\end_layout
337453a5a1b3Sopenharmony_ci
337553a5a1b3Sopenharmony_ci\end_inset
337653a5a1b3Sopenharmony_ci</cell>
337753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
337853a5a1b3Sopenharmony_ci\begin_inset Text
337953a5a1b3Sopenharmony_ci
338053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
338153a5a1b3Sopenharmony_ciSize (bits)
338253a5a1b3Sopenharmony_ci\end_layout
338353a5a1b3Sopenharmony_ci
338453a5a1b3Sopenharmony_ci\end_inset
338553a5a1b3Sopenharmony_ci</cell>
338653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
338753a5a1b3Sopenharmony_ci\begin_inset Text
338853a5a1b3Sopenharmony_ci
338953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
339053a5a1b3Sopenharmony_ciContent
339153a5a1b3Sopenharmony_ci\end_layout
339253a5a1b3Sopenharmony_ci
339353a5a1b3Sopenharmony_ci\end_inset
339453a5a1b3Sopenharmony_ci</cell>
339553a5a1b3Sopenharmony_ci</row>
339653a5a1b3Sopenharmony_ci<row>
339753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
339853a5a1b3Sopenharmony_ci\begin_inset Text
339953a5a1b3Sopenharmony_ci
340053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
340153a5a1b3Sopenharmony_ci0
340253a5a1b3Sopenharmony_ci\end_layout
340353a5a1b3Sopenharmony_ci
340453a5a1b3Sopenharmony_ci\end_inset
340553a5a1b3Sopenharmony_ci</cell>
340653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
340753a5a1b3Sopenharmony_ci\begin_inset Text
340853a5a1b3Sopenharmony_ci
340953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
341053a5a1b3Sopenharmony_ci1
341153a5a1b3Sopenharmony_ci\end_layout
341253a5a1b3Sopenharmony_ci
341353a5a1b3Sopenharmony_ci\end_inset
341453a5a1b3Sopenharmony_ci</cell>
341553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
341653a5a1b3Sopenharmony_ci\begin_inset Text
341753a5a1b3Sopenharmony_ci
341853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
341953a5a1b3Sopenharmony_ciAsks decoder to set perceptual enhancement off (0) or on(1)
342053a5a1b3Sopenharmony_ci\end_layout
342153a5a1b3Sopenharmony_ci
342253a5a1b3Sopenharmony_ci\end_inset
342353a5a1b3Sopenharmony_ci</cell>
342453a5a1b3Sopenharmony_ci</row>
342553a5a1b3Sopenharmony_ci<row>
342653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
342753a5a1b3Sopenharmony_ci\begin_inset Text
342853a5a1b3Sopenharmony_ci
342953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
343053a5a1b3Sopenharmony_ci1
343153a5a1b3Sopenharmony_ci\end_layout
343253a5a1b3Sopenharmony_ci
343353a5a1b3Sopenharmony_ci\end_inset
343453a5a1b3Sopenharmony_ci</cell>
343553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
343653a5a1b3Sopenharmony_ci\begin_inset Text
343753a5a1b3Sopenharmony_ci
343853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
343953a5a1b3Sopenharmony_ci1
344053a5a1b3Sopenharmony_ci\end_layout
344153a5a1b3Sopenharmony_ci
344253a5a1b3Sopenharmony_ci\end_inset
344353a5a1b3Sopenharmony_ci</cell>
344453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
344553a5a1b3Sopenharmony_ci\begin_inset Text
344653a5a1b3Sopenharmony_ci
344753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
344853a5a1b3Sopenharmony_ciAsks (if 1) the encoder to be less 
344953a5a1b3Sopenharmony_ci\begin_inset Quotes eld
345053a5a1b3Sopenharmony_ci\end_inset
345153a5a1b3Sopenharmony_ci
345253a5a1b3Sopenharmony_ciaggressive
345353a5a1b3Sopenharmony_ci\begin_inset Quotes erd
345453a5a1b3Sopenharmony_ci\end_inset
345553a5a1b3Sopenharmony_ci
345653a5a1b3Sopenharmony_ci due to high packet loss
345753a5a1b3Sopenharmony_ci\end_layout
345853a5a1b3Sopenharmony_ci
345953a5a1b3Sopenharmony_ci\end_inset
346053a5a1b3Sopenharmony_ci</cell>
346153a5a1b3Sopenharmony_ci</row>
346253a5a1b3Sopenharmony_ci<row>
346353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
346453a5a1b3Sopenharmony_ci\begin_inset Text
346553a5a1b3Sopenharmony_ci
346653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
346753a5a1b3Sopenharmony_ci2
346853a5a1b3Sopenharmony_ci\end_layout
346953a5a1b3Sopenharmony_ci
347053a5a1b3Sopenharmony_ci\end_inset
347153a5a1b3Sopenharmony_ci</cell>
347253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
347353a5a1b3Sopenharmony_ci\begin_inset Text
347453a5a1b3Sopenharmony_ci
347553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
347653a5a1b3Sopenharmony_ci4
347753a5a1b3Sopenharmony_ci\end_layout
347853a5a1b3Sopenharmony_ci
347953a5a1b3Sopenharmony_ci\end_inset
348053a5a1b3Sopenharmony_ci</cell>
348153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
348253a5a1b3Sopenharmony_ci\begin_inset Text
348353a5a1b3Sopenharmony_ci
348453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
348553a5a1b3Sopenharmony_ciAsks encoder to switch to mode N
348653a5a1b3Sopenharmony_ci\end_layout
348753a5a1b3Sopenharmony_ci
348853a5a1b3Sopenharmony_ci\end_inset
348953a5a1b3Sopenharmony_ci</cell>
349053a5a1b3Sopenharmony_ci</row>
349153a5a1b3Sopenharmony_ci<row>
349253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
349353a5a1b3Sopenharmony_ci\begin_inset Text
349453a5a1b3Sopenharmony_ci
349553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
349653a5a1b3Sopenharmony_ci3
349753a5a1b3Sopenharmony_ci\end_layout
349853a5a1b3Sopenharmony_ci
349953a5a1b3Sopenharmony_ci\end_inset
350053a5a1b3Sopenharmony_ci</cell>
350153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
350253a5a1b3Sopenharmony_ci\begin_inset Text
350353a5a1b3Sopenharmony_ci
350453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
350553a5a1b3Sopenharmony_ci4
350653a5a1b3Sopenharmony_ci\end_layout
350753a5a1b3Sopenharmony_ci
350853a5a1b3Sopenharmony_ci\end_inset
350953a5a1b3Sopenharmony_ci</cell>
351053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
351153a5a1b3Sopenharmony_ci\begin_inset Text
351253a5a1b3Sopenharmony_ci
351353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
351453a5a1b3Sopenharmony_ciAsks encoder to switch to mode N for low-band
351553a5a1b3Sopenharmony_ci\end_layout
351653a5a1b3Sopenharmony_ci
351753a5a1b3Sopenharmony_ci\end_inset
351853a5a1b3Sopenharmony_ci</cell>
351953a5a1b3Sopenharmony_ci</row>
352053a5a1b3Sopenharmony_ci<row>
352153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
352253a5a1b3Sopenharmony_ci\begin_inset Text
352353a5a1b3Sopenharmony_ci
352453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
352553a5a1b3Sopenharmony_ci4
352653a5a1b3Sopenharmony_ci\end_layout
352753a5a1b3Sopenharmony_ci
352853a5a1b3Sopenharmony_ci\end_inset
352953a5a1b3Sopenharmony_ci</cell>
353053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
353153a5a1b3Sopenharmony_ci\begin_inset Text
353253a5a1b3Sopenharmony_ci
353353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
353453a5a1b3Sopenharmony_ci4
353553a5a1b3Sopenharmony_ci\end_layout
353653a5a1b3Sopenharmony_ci
353753a5a1b3Sopenharmony_ci\end_inset
353853a5a1b3Sopenharmony_ci</cell>
353953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
354053a5a1b3Sopenharmony_ci\begin_inset Text
354153a5a1b3Sopenharmony_ci
354253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
354353a5a1b3Sopenharmony_ciAsks encoder to switch to mode N for high-band
354453a5a1b3Sopenharmony_ci\end_layout
354553a5a1b3Sopenharmony_ci
354653a5a1b3Sopenharmony_ci\end_inset
354753a5a1b3Sopenharmony_ci</cell>
354853a5a1b3Sopenharmony_ci</row>
354953a5a1b3Sopenharmony_ci<row>
355053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
355153a5a1b3Sopenharmony_ci\begin_inset Text
355253a5a1b3Sopenharmony_ci
355353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
355453a5a1b3Sopenharmony_ci5
355553a5a1b3Sopenharmony_ci\end_layout
355653a5a1b3Sopenharmony_ci
355753a5a1b3Sopenharmony_ci\end_inset
355853a5a1b3Sopenharmony_ci</cell>
355953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
356053a5a1b3Sopenharmony_ci\begin_inset Text
356153a5a1b3Sopenharmony_ci
356253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
356353a5a1b3Sopenharmony_ci4
356453a5a1b3Sopenharmony_ci\end_layout
356553a5a1b3Sopenharmony_ci
356653a5a1b3Sopenharmony_ci\end_inset
356753a5a1b3Sopenharmony_ci</cell>
356853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
356953a5a1b3Sopenharmony_ci\begin_inset Text
357053a5a1b3Sopenharmony_ci
357153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
357253a5a1b3Sopenharmony_ciAsks encoder to switch to quality N for VBR
357353a5a1b3Sopenharmony_ci\end_layout
357453a5a1b3Sopenharmony_ci
357553a5a1b3Sopenharmony_ci\end_inset
357653a5a1b3Sopenharmony_ci</cell>
357753a5a1b3Sopenharmony_ci</row>
357853a5a1b3Sopenharmony_ci<row>
357953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
358053a5a1b3Sopenharmony_ci\begin_inset Text
358153a5a1b3Sopenharmony_ci
358253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
358353a5a1b3Sopenharmony_ci6
358453a5a1b3Sopenharmony_ci\end_layout
358553a5a1b3Sopenharmony_ci
358653a5a1b3Sopenharmony_ci\end_inset
358753a5a1b3Sopenharmony_ci</cell>
358853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
358953a5a1b3Sopenharmony_ci\begin_inset Text
359053a5a1b3Sopenharmony_ci
359153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
359253a5a1b3Sopenharmony_ci4
359353a5a1b3Sopenharmony_ci\end_layout
359453a5a1b3Sopenharmony_ci
359553a5a1b3Sopenharmony_ci\end_inset
359653a5a1b3Sopenharmony_ci</cell>
359753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
359853a5a1b3Sopenharmony_ci\begin_inset Text
359953a5a1b3Sopenharmony_ci
360053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
360153a5a1b3Sopenharmony_ciRequest acknowledge (0=no, 1=all, 2=only for in-band data)
360253a5a1b3Sopenharmony_ci\end_layout
360353a5a1b3Sopenharmony_ci
360453a5a1b3Sopenharmony_ci\end_inset
360553a5a1b3Sopenharmony_ci</cell>
360653a5a1b3Sopenharmony_ci</row>
360753a5a1b3Sopenharmony_ci<row>
360853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
360953a5a1b3Sopenharmony_ci\begin_inset Text
361053a5a1b3Sopenharmony_ci
361153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
361253a5a1b3Sopenharmony_ci7
361353a5a1b3Sopenharmony_ci\end_layout
361453a5a1b3Sopenharmony_ci
361553a5a1b3Sopenharmony_ci\end_inset
361653a5a1b3Sopenharmony_ci</cell>
361753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
361853a5a1b3Sopenharmony_ci\begin_inset Text
361953a5a1b3Sopenharmony_ci
362053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
362153a5a1b3Sopenharmony_ci4
362253a5a1b3Sopenharmony_ci\end_layout
362353a5a1b3Sopenharmony_ci
362453a5a1b3Sopenharmony_ci\end_inset
362553a5a1b3Sopenharmony_ci</cell>
362653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
362753a5a1b3Sopenharmony_ci\begin_inset Text
362853a5a1b3Sopenharmony_ci
362953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
363053a5a1b3Sopenharmony_ciAsks encoder to set CBR (0), VAD(1), DTX(3), VBR(5), VBR+DTX(7)
363153a5a1b3Sopenharmony_ci\end_layout
363253a5a1b3Sopenharmony_ci
363353a5a1b3Sopenharmony_ci\end_inset
363453a5a1b3Sopenharmony_ci</cell>
363553a5a1b3Sopenharmony_ci</row>
363653a5a1b3Sopenharmony_ci<row>
363753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
363853a5a1b3Sopenharmony_ci\begin_inset Text
363953a5a1b3Sopenharmony_ci
364053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
364153a5a1b3Sopenharmony_ci8
364253a5a1b3Sopenharmony_ci\end_layout
364353a5a1b3Sopenharmony_ci
364453a5a1b3Sopenharmony_ci\end_inset
364553a5a1b3Sopenharmony_ci</cell>
364653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
364753a5a1b3Sopenharmony_ci\begin_inset Text
364853a5a1b3Sopenharmony_ci
364953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
365053a5a1b3Sopenharmony_ci8
365153a5a1b3Sopenharmony_ci\end_layout
365253a5a1b3Sopenharmony_ci
365353a5a1b3Sopenharmony_ci\end_inset
365453a5a1b3Sopenharmony_ci</cell>
365553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
365653a5a1b3Sopenharmony_ci\begin_inset Text
365753a5a1b3Sopenharmony_ci
365853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
365953a5a1b3Sopenharmony_ciTransmit (8-bit) character to the other end
366053a5a1b3Sopenharmony_ci\end_layout
366153a5a1b3Sopenharmony_ci
366253a5a1b3Sopenharmony_ci\end_inset
366353a5a1b3Sopenharmony_ci</cell>
366453a5a1b3Sopenharmony_ci</row>
366553a5a1b3Sopenharmony_ci<row>
366653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
366753a5a1b3Sopenharmony_ci\begin_inset Text
366853a5a1b3Sopenharmony_ci
366953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
367053a5a1b3Sopenharmony_ci9
367153a5a1b3Sopenharmony_ci\end_layout
367253a5a1b3Sopenharmony_ci
367353a5a1b3Sopenharmony_ci\end_inset
367453a5a1b3Sopenharmony_ci</cell>
367553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
367653a5a1b3Sopenharmony_ci\begin_inset Text
367753a5a1b3Sopenharmony_ci
367853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
367953a5a1b3Sopenharmony_ci8
368053a5a1b3Sopenharmony_ci\end_layout
368153a5a1b3Sopenharmony_ci
368253a5a1b3Sopenharmony_ci\end_inset
368353a5a1b3Sopenharmony_ci</cell>
368453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
368553a5a1b3Sopenharmony_ci\begin_inset Text
368653a5a1b3Sopenharmony_ci
368753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
368853a5a1b3Sopenharmony_ciIntensity stereo information
368953a5a1b3Sopenharmony_ci\end_layout
369053a5a1b3Sopenharmony_ci
369153a5a1b3Sopenharmony_ci\end_inset
369253a5a1b3Sopenharmony_ci</cell>
369353a5a1b3Sopenharmony_ci</row>
369453a5a1b3Sopenharmony_ci<row>
369553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
369653a5a1b3Sopenharmony_ci\begin_inset Text
369753a5a1b3Sopenharmony_ci
369853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
369953a5a1b3Sopenharmony_ci10
370053a5a1b3Sopenharmony_ci\end_layout
370153a5a1b3Sopenharmony_ci
370253a5a1b3Sopenharmony_ci\end_inset
370353a5a1b3Sopenharmony_ci</cell>
370453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
370553a5a1b3Sopenharmony_ci\begin_inset Text
370653a5a1b3Sopenharmony_ci
370753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
370853a5a1b3Sopenharmony_ci16
370953a5a1b3Sopenharmony_ci\end_layout
371053a5a1b3Sopenharmony_ci
371153a5a1b3Sopenharmony_ci\end_inset
371253a5a1b3Sopenharmony_ci</cell>
371353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
371453a5a1b3Sopenharmony_ci\begin_inset Text
371553a5a1b3Sopenharmony_ci
371653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
371753a5a1b3Sopenharmony_ciAnnounce maximum bit-rate acceptable (N in bytes/second)
371853a5a1b3Sopenharmony_ci\end_layout
371953a5a1b3Sopenharmony_ci
372053a5a1b3Sopenharmony_ci\end_inset
372153a5a1b3Sopenharmony_ci</cell>
372253a5a1b3Sopenharmony_ci</row>
372353a5a1b3Sopenharmony_ci<row>
372453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
372553a5a1b3Sopenharmony_ci\begin_inset Text
372653a5a1b3Sopenharmony_ci
372753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
372853a5a1b3Sopenharmony_ci11
372953a5a1b3Sopenharmony_ci\end_layout
373053a5a1b3Sopenharmony_ci
373153a5a1b3Sopenharmony_ci\end_inset
373253a5a1b3Sopenharmony_ci</cell>
373353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
373453a5a1b3Sopenharmony_ci\begin_inset Text
373553a5a1b3Sopenharmony_ci
373653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
373753a5a1b3Sopenharmony_ci16
373853a5a1b3Sopenharmony_ci\end_layout
373953a5a1b3Sopenharmony_ci
374053a5a1b3Sopenharmony_ci\end_inset
374153a5a1b3Sopenharmony_ci</cell>
374253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
374353a5a1b3Sopenharmony_ci\begin_inset Text
374453a5a1b3Sopenharmony_ci
374553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
374653a5a1b3Sopenharmony_cireserved
374753a5a1b3Sopenharmony_ci\end_layout
374853a5a1b3Sopenharmony_ci
374953a5a1b3Sopenharmony_ci\end_inset
375053a5a1b3Sopenharmony_ci</cell>
375153a5a1b3Sopenharmony_ci</row>
375253a5a1b3Sopenharmony_ci<row>
375353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
375453a5a1b3Sopenharmony_ci\begin_inset Text
375553a5a1b3Sopenharmony_ci
375653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
375753a5a1b3Sopenharmony_ci12
375853a5a1b3Sopenharmony_ci\end_layout
375953a5a1b3Sopenharmony_ci
376053a5a1b3Sopenharmony_ci\end_inset
376153a5a1b3Sopenharmony_ci</cell>
376253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
376353a5a1b3Sopenharmony_ci\begin_inset Text
376453a5a1b3Sopenharmony_ci
376553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
376653a5a1b3Sopenharmony_ci32
376753a5a1b3Sopenharmony_ci\end_layout
376853a5a1b3Sopenharmony_ci
376953a5a1b3Sopenharmony_ci\end_inset
377053a5a1b3Sopenharmony_ci</cell>
377153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
377253a5a1b3Sopenharmony_ci\begin_inset Text
377353a5a1b3Sopenharmony_ci
377453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
377553a5a1b3Sopenharmony_ciAcknowledge receiving packet N
377653a5a1b3Sopenharmony_ci\end_layout
377753a5a1b3Sopenharmony_ci
377853a5a1b3Sopenharmony_ci\end_inset
377953a5a1b3Sopenharmony_ci</cell>
378053a5a1b3Sopenharmony_ci</row>
378153a5a1b3Sopenharmony_ci<row>
378253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
378353a5a1b3Sopenharmony_ci\begin_inset Text
378453a5a1b3Sopenharmony_ci
378553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
378653a5a1b3Sopenharmony_ci13
378753a5a1b3Sopenharmony_ci\end_layout
378853a5a1b3Sopenharmony_ci
378953a5a1b3Sopenharmony_ci\end_inset
379053a5a1b3Sopenharmony_ci</cell>
379153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
379253a5a1b3Sopenharmony_ci\begin_inset Text
379353a5a1b3Sopenharmony_ci
379453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
379553a5a1b3Sopenharmony_ci32
379653a5a1b3Sopenharmony_ci\end_layout
379753a5a1b3Sopenharmony_ci
379853a5a1b3Sopenharmony_ci\end_inset
379953a5a1b3Sopenharmony_ci</cell>
380053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
380153a5a1b3Sopenharmony_ci\begin_inset Text
380253a5a1b3Sopenharmony_ci
380353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
380453a5a1b3Sopenharmony_cireserved
380553a5a1b3Sopenharmony_ci\end_layout
380653a5a1b3Sopenharmony_ci
380753a5a1b3Sopenharmony_ci\end_inset
380853a5a1b3Sopenharmony_ci</cell>
380953a5a1b3Sopenharmony_ci</row>
381053a5a1b3Sopenharmony_ci<row>
381153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
381253a5a1b3Sopenharmony_ci\begin_inset Text
381353a5a1b3Sopenharmony_ci
381453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
381553a5a1b3Sopenharmony_ci14
381653a5a1b3Sopenharmony_ci\end_layout
381753a5a1b3Sopenharmony_ci
381853a5a1b3Sopenharmony_ci\end_inset
381953a5a1b3Sopenharmony_ci</cell>
382053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
382153a5a1b3Sopenharmony_ci\begin_inset Text
382253a5a1b3Sopenharmony_ci
382353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
382453a5a1b3Sopenharmony_ci64
382553a5a1b3Sopenharmony_ci\end_layout
382653a5a1b3Sopenharmony_ci
382753a5a1b3Sopenharmony_ci\end_inset
382853a5a1b3Sopenharmony_ci</cell>
382953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
383053a5a1b3Sopenharmony_ci\begin_inset Text
383153a5a1b3Sopenharmony_ci
383253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
383353a5a1b3Sopenharmony_cireserved
383453a5a1b3Sopenharmony_ci\end_layout
383553a5a1b3Sopenharmony_ci
383653a5a1b3Sopenharmony_ci\end_inset
383753a5a1b3Sopenharmony_ci</cell>
383853a5a1b3Sopenharmony_ci</row>
383953a5a1b3Sopenharmony_ci<row>
384053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
384153a5a1b3Sopenharmony_ci\begin_inset Text
384253a5a1b3Sopenharmony_ci
384353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
384453a5a1b3Sopenharmony_ci15
384553a5a1b3Sopenharmony_ci\end_layout
384653a5a1b3Sopenharmony_ci
384753a5a1b3Sopenharmony_ci\end_inset
384853a5a1b3Sopenharmony_ci</cell>
384953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
385053a5a1b3Sopenharmony_ci\begin_inset Text
385153a5a1b3Sopenharmony_ci
385253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
385353a5a1b3Sopenharmony_ci64
385453a5a1b3Sopenharmony_ci\end_layout
385553a5a1b3Sopenharmony_ci
385653a5a1b3Sopenharmony_ci\end_inset
385753a5a1b3Sopenharmony_ci</cell>
385853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
385953a5a1b3Sopenharmony_ci\begin_inset Text
386053a5a1b3Sopenharmony_ci
386153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
386253a5a1b3Sopenharmony_cireserved
386353a5a1b3Sopenharmony_ci\end_layout
386453a5a1b3Sopenharmony_ci
386553a5a1b3Sopenharmony_ci\end_inset
386653a5a1b3Sopenharmony_ci</cell>
386753a5a1b3Sopenharmony_ci</row>
386853a5a1b3Sopenharmony_ci</lyxtabular>
386953a5a1b3Sopenharmony_ci
387053a5a1b3Sopenharmony_ci\end_inset
387153a5a1b3Sopenharmony_ci
387253a5a1b3Sopenharmony_ci
387353a5a1b3Sopenharmony_ci\begin_inset ERT
387453a5a1b3Sopenharmony_cistatus collapsed
387553a5a1b3Sopenharmony_ci
387653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
387753a5a1b3Sopenharmony_ci
387853a5a1b3Sopenharmony_ci
387953a5a1b3Sopenharmony_ci\backslash
388053a5a1b3Sopenharmony_ciend{center}
388153a5a1b3Sopenharmony_ci\end_layout
388253a5a1b3Sopenharmony_ci
388353a5a1b3Sopenharmony_ci\end_inset
388453a5a1b3Sopenharmony_ci
388553a5a1b3Sopenharmony_ci
388653a5a1b3Sopenharmony_ci\end_layout
388753a5a1b3Sopenharmony_ci
388853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
388953a5a1b3Sopenharmony_ci\begin_inset Caption
389053a5a1b3Sopenharmony_ci
389153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
389253a5a1b3Sopenharmony_ciIn-band signalling codes
389353a5a1b3Sopenharmony_ci\begin_inset CommandInset label
389453a5a1b3Sopenharmony_ciLatexCommand label
389553a5a1b3Sopenharmony_ciname "cap:In-band-signalling-codes"
389653a5a1b3Sopenharmony_ci
389753a5a1b3Sopenharmony_ci\end_inset
389853a5a1b3Sopenharmony_ci
389953a5a1b3Sopenharmony_ci
390053a5a1b3Sopenharmony_ci\end_layout
390153a5a1b3Sopenharmony_ci
390253a5a1b3Sopenharmony_ci\end_inset
390353a5a1b3Sopenharmony_ci
390453a5a1b3Sopenharmony_ci
390553a5a1b3Sopenharmony_ci\end_layout
390653a5a1b3Sopenharmony_ci
390753a5a1b3Sopenharmony_ci\end_inset
390853a5a1b3Sopenharmony_ci
390953a5a1b3Sopenharmony_ci
391053a5a1b3Sopenharmony_ci\end_layout
391153a5a1b3Sopenharmony_ci
391253a5a1b3Sopenharmony_ci\begin_layout Standard
391353a5a1b3Sopenharmony_ciFinally, applications may define custom in-band messages using mode 13.
391453a5a1b3Sopenharmony_ci The size of the message in bytes is encoded with 5 bits, so that the decoder
391553a5a1b3Sopenharmony_ci can skip it if it doesn't know how to interpret it.
391653a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
391753a5a1b3Sopenharmony_ci\end_inset
391853a5a1b3Sopenharmony_ci
391953a5a1b3Sopenharmony_ci
392053a5a1b3Sopenharmony_ci\end_layout
392153a5a1b3Sopenharmony_ci
392253a5a1b3Sopenharmony_ci\begin_layout Chapter
392353a5a1b3Sopenharmony_ciSpeech Processing API (
392453a5a1b3Sopenharmony_ci\emph on
392553a5a1b3Sopenharmony_cilibspeexdsp
392653a5a1b3Sopenharmony_ci\emph default
392753a5a1b3Sopenharmony_ci)
392853a5a1b3Sopenharmony_ci\end_layout
392953a5a1b3Sopenharmony_ci
393053a5a1b3Sopenharmony_ci\begin_layout Standard
393153a5a1b3Sopenharmony_ciAs of version 1.2beta3, the non-codec parts of the Speex package are now
393253a5a1b3Sopenharmony_ci in a separate library called 
393353a5a1b3Sopenharmony_ci\emph on
393453a5a1b3Sopenharmony_cilibspeexdsp
393553a5a1b3Sopenharmony_ci\emph default
393653a5a1b3Sopenharmony_ci.
393753a5a1b3Sopenharmony_ci This library includes the preprocessor, the acoustic echo canceller, the
393853a5a1b3Sopenharmony_ci jitter buffer, and the resampler.
393953a5a1b3Sopenharmony_ci In a UNIX environment, it can be linked into a program by adding 
394053a5a1b3Sopenharmony_ci\emph on
394153a5a1b3Sopenharmony_ci-lspeexdsp -lm
394253a5a1b3Sopenharmony_ci\emph default
394353a5a1b3Sopenharmony_ci to the compiler command line.
394453a5a1b3Sopenharmony_ci Just like for libspeex, 
394553a5a1b3Sopenharmony_ci\series bold
394653a5a1b3Sopenharmony_cilibspeexdsp calls are reentrant, but not thread-safe
394753a5a1b3Sopenharmony_ci\series default
394853a5a1b3Sopenharmony_ci.
394953a5a1b3Sopenharmony_ci That means that it is fine to use calls from many threads, but 
395053a5a1b3Sopenharmony_ci\series bold
395153a5a1b3Sopenharmony_cicalls using the same state from multiple threads must be protected by mutexes
395253a5a1b3Sopenharmony_ci\series default
395353a5a1b3Sopenharmony_ci.
395453a5a1b3Sopenharmony_ci\end_layout
395553a5a1b3Sopenharmony_ci
395653a5a1b3Sopenharmony_ci\begin_layout Section
395753a5a1b3Sopenharmony_ciPreprocessor
395853a5a1b3Sopenharmony_ci\begin_inset CommandInset label
395953a5a1b3Sopenharmony_ciLatexCommand label
396053a5a1b3Sopenharmony_ciname "sub:Preprocessor"
396153a5a1b3Sopenharmony_ci
396253a5a1b3Sopenharmony_ci\end_inset
396353a5a1b3Sopenharmony_ci
396453a5a1b3Sopenharmony_ci
396553a5a1b3Sopenharmony_ci\end_layout
396653a5a1b3Sopenharmony_ci
396753a5a1b3Sopenharmony_ci\begin_layout Standard
396853a5a1b3Sopenharmony_ci\noindent
396953a5a1b3Sopenharmony_ciIn order to use the Speex preprocessor
397053a5a1b3Sopenharmony_ci\begin_inset Index
397153a5a1b3Sopenharmony_cistatus collapsed
397253a5a1b3Sopenharmony_ci
397353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
397453a5a1b3Sopenharmony_cipreprocessor
397553a5a1b3Sopenharmony_ci\end_layout
397653a5a1b3Sopenharmony_ci
397753a5a1b3Sopenharmony_ci\end_inset
397853a5a1b3Sopenharmony_ci
397953a5a1b3Sopenharmony_ci, you first need to:
398053a5a1b3Sopenharmony_ci\begin_inset listings
398153a5a1b3Sopenharmony_ciinline false
398253a5a1b3Sopenharmony_cistatus open
398353a5a1b3Sopenharmony_ci
398453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
398553a5a1b3Sopenharmony_ci
398653a5a1b3Sopenharmony_ci#include <speex/speex_preprocess.h>
398753a5a1b3Sopenharmony_ci\end_layout
398853a5a1b3Sopenharmony_ci
398953a5a1b3Sopenharmony_ci\end_inset
399053a5a1b3Sopenharmony_ci
399153a5a1b3Sopenharmony_ci
399253a5a1b3Sopenharmony_ci\end_layout
399353a5a1b3Sopenharmony_ci
399453a5a1b3Sopenharmony_ci\begin_layout Standard
399553a5a1b3Sopenharmony_ci\noindent
399653a5a1b3Sopenharmony_ciThen, a preprocessor state can be created as:
399753a5a1b3Sopenharmony_ci\begin_inset listings
399853a5a1b3Sopenharmony_ciinline false
399953a5a1b3Sopenharmony_cistatus open
400053a5a1b3Sopenharmony_ci
400153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
400253a5a1b3Sopenharmony_ci
400353a5a1b3Sopenharmony_ciSpeexPreprocessState *preprocess_state = speex_preprocess_state_init(frame_size,
400453a5a1b3Sopenharmony_ci sampling_rate);
400553a5a1b3Sopenharmony_ci\end_layout
400653a5a1b3Sopenharmony_ci
400753a5a1b3Sopenharmony_ci\end_inset
400853a5a1b3Sopenharmony_ci
400953a5a1b3Sopenharmony_ci
401053a5a1b3Sopenharmony_ci\end_layout
401153a5a1b3Sopenharmony_ci
401253a5a1b3Sopenharmony_ci\begin_layout Standard
401353a5a1b3Sopenharmony_ci\noindent
401453a5a1b3Sopenharmony_ciand it is recommended to use the same value for 
401553a5a1b3Sopenharmony_ci\family typewriter
401653a5a1b3Sopenharmony_ciframe_size
401753a5a1b3Sopenharmony_ci\family default
401853a5a1b3Sopenharmony_ci as is used by the encoder (20 
401953a5a1b3Sopenharmony_ci\emph on
402053a5a1b3Sopenharmony_cims
402153a5a1b3Sopenharmony_ci\emph default
402253a5a1b3Sopenharmony_ci).
402353a5a1b3Sopenharmony_ci\end_layout
402453a5a1b3Sopenharmony_ci
402553a5a1b3Sopenharmony_ci\begin_layout Standard
402653a5a1b3Sopenharmony_ciFor each input frame, you need to call:
402753a5a1b3Sopenharmony_ci\end_layout
402853a5a1b3Sopenharmony_ci
402953a5a1b3Sopenharmony_ci\begin_layout Standard
403053a5a1b3Sopenharmony_ci\begin_inset listings
403153a5a1b3Sopenharmony_ciinline false
403253a5a1b3Sopenharmony_cistatus open
403353a5a1b3Sopenharmony_ci
403453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
403553a5a1b3Sopenharmony_ci
403653a5a1b3Sopenharmony_cispeex_preprocess_run(preprocess_state, audio_frame);
403753a5a1b3Sopenharmony_ci\end_layout
403853a5a1b3Sopenharmony_ci
403953a5a1b3Sopenharmony_ci\end_inset
404053a5a1b3Sopenharmony_ci
404153a5a1b3Sopenharmony_ci
404253a5a1b3Sopenharmony_ci\end_layout
404353a5a1b3Sopenharmony_ci
404453a5a1b3Sopenharmony_ci\begin_layout Standard
404553a5a1b3Sopenharmony_ci\noindent
404653a5a1b3Sopenharmony_ciwhere 
404753a5a1b3Sopenharmony_ci\family typewriter
404853a5a1b3Sopenharmony_ciaudio_frame
404953a5a1b3Sopenharmony_ci\family default
405053a5a1b3Sopenharmony_ci is used both as input and output.
405153a5a1b3Sopenharmony_ci In cases where the output audio is not useful for a certain frame, it is
405253a5a1b3Sopenharmony_ci possible to use instead:
405353a5a1b3Sopenharmony_ci\end_layout
405453a5a1b3Sopenharmony_ci
405553a5a1b3Sopenharmony_ci\begin_layout Standard
405653a5a1b3Sopenharmony_ci\begin_inset listings
405753a5a1b3Sopenharmony_ciinline false
405853a5a1b3Sopenharmony_cistatus open
405953a5a1b3Sopenharmony_ci
406053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
406153a5a1b3Sopenharmony_ci
406253a5a1b3Sopenharmony_cispeex_preprocess_estimate_update(preprocess_state, audio_frame);
406353a5a1b3Sopenharmony_ci\end_layout
406453a5a1b3Sopenharmony_ci
406553a5a1b3Sopenharmony_ci\end_inset
406653a5a1b3Sopenharmony_ci
406753a5a1b3Sopenharmony_ci
406853a5a1b3Sopenharmony_ci\end_layout
406953a5a1b3Sopenharmony_ci
407053a5a1b3Sopenharmony_ci\begin_layout Standard
407153a5a1b3Sopenharmony_ci\noindent
407253a5a1b3Sopenharmony_ciThis call will update all the preprocessor internal state variables without
407353a5a1b3Sopenharmony_ci computing the output audio, thus saving some CPU cycles.
407453a5a1b3Sopenharmony_ci\end_layout
407553a5a1b3Sopenharmony_ci
407653a5a1b3Sopenharmony_ci\begin_layout Standard
407753a5a1b3Sopenharmony_ciThe behaviour of the preprocessor can be changed using:
407853a5a1b3Sopenharmony_ci\end_layout
407953a5a1b3Sopenharmony_ci
408053a5a1b3Sopenharmony_ci\begin_layout Standard
408153a5a1b3Sopenharmony_ci\begin_inset listings
408253a5a1b3Sopenharmony_ciinline false
408353a5a1b3Sopenharmony_cistatus open
408453a5a1b3Sopenharmony_ci
408553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
408653a5a1b3Sopenharmony_ci
408753a5a1b3Sopenharmony_cispeex_preprocess_ctl(preprocess_state, request, ptr);
408853a5a1b3Sopenharmony_ci\end_layout
408953a5a1b3Sopenharmony_ci
409053a5a1b3Sopenharmony_ci\end_inset
409153a5a1b3Sopenharmony_ci
409253a5a1b3Sopenharmony_ci
409353a5a1b3Sopenharmony_ci\end_layout
409453a5a1b3Sopenharmony_ci
409553a5a1b3Sopenharmony_ci\begin_layout Standard
409653a5a1b3Sopenharmony_ci\noindent
409753a5a1b3Sopenharmony_ciwhich is used in the same way as the encoder and decoder equivalent.
409853a5a1b3Sopenharmony_ci Options are listed in Section 
409953a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
410053a5a1b3Sopenharmony_ciLatexCommand ref
410153a5a1b3Sopenharmony_cireference "sub:Preprocessor-options"
410253a5a1b3Sopenharmony_ci
410353a5a1b3Sopenharmony_ci\end_inset
410453a5a1b3Sopenharmony_ci
410553a5a1b3Sopenharmony_ci.
410653a5a1b3Sopenharmony_ci\end_layout
410753a5a1b3Sopenharmony_ci
410853a5a1b3Sopenharmony_ci\begin_layout Standard
410953a5a1b3Sopenharmony_ciThe preprocessor state can be destroyed using:
411053a5a1b3Sopenharmony_ci\end_layout
411153a5a1b3Sopenharmony_ci
411253a5a1b3Sopenharmony_ci\begin_layout Standard
411353a5a1b3Sopenharmony_ci\begin_inset listings
411453a5a1b3Sopenharmony_ciinline false
411553a5a1b3Sopenharmony_cistatus open
411653a5a1b3Sopenharmony_ci
411753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
411853a5a1b3Sopenharmony_ci
411953a5a1b3Sopenharmony_cispeex_preprocess_state_destroy(preprocess_state);
412053a5a1b3Sopenharmony_ci\end_layout
412153a5a1b3Sopenharmony_ci
412253a5a1b3Sopenharmony_ci\end_inset
412353a5a1b3Sopenharmony_ci
412453a5a1b3Sopenharmony_ci
412553a5a1b3Sopenharmony_ci\end_layout
412653a5a1b3Sopenharmony_ci
412753a5a1b3Sopenharmony_ci\begin_layout Subsection
412853a5a1b3Sopenharmony_ciPreprocessor options
412953a5a1b3Sopenharmony_ci\begin_inset CommandInset label
413053a5a1b3Sopenharmony_ciLatexCommand label
413153a5a1b3Sopenharmony_ciname "sub:Preprocessor-options"
413253a5a1b3Sopenharmony_ci
413353a5a1b3Sopenharmony_ci\end_inset
413453a5a1b3Sopenharmony_ci
413553a5a1b3Sopenharmony_ci
413653a5a1b3Sopenharmony_ci\end_layout
413753a5a1b3Sopenharmony_ci
413853a5a1b3Sopenharmony_ci\begin_layout Standard
413953a5a1b3Sopenharmony_ciAs with the codec, the preprocessor also has options that can be controlled
414053a5a1b3Sopenharmony_ci using an ioctl()-like call.
414153a5a1b3Sopenharmony_ci The available options are:
414253a5a1b3Sopenharmony_ci\end_layout
414353a5a1b3Sopenharmony_ci
414453a5a1b3Sopenharmony_ci\begin_layout Description
414553a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_DENOISE Turns denoising on(1) or off(0) (
414653a5a1b3Sopenharmony_ci\begin_inset listings
414753a5a1b3Sopenharmony_ciinline true
414853a5a1b3Sopenharmony_cistatus collapsed
414953a5a1b3Sopenharmony_ci
415053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
415153a5a1b3Sopenharmony_ci
415253a5a1b3Sopenharmony_cispx_int32_t
415353a5a1b3Sopenharmony_ci\end_layout
415453a5a1b3Sopenharmony_ci
415553a5a1b3Sopenharmony_ci\end_inset
415653a5a1b3Sopenharmony_ci
415753a5a1b3Sopenharmony_ci)
415853a5a1b3Sopenharmony_ci\end_layout
415953a5a1b3Sopenharmony_ci
416053a5a1b3Sopenharmony_ci\begin_layout Description
416153a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_DENOISE Get denoising status (
416253a5a1b3Sopenharmony_ci\begin_inset listings
416353a5a1b3Sopenharmony_ciinline true
416453a5a1b3Sopenharmony_cistatus collapsed
416553a5a1b3Sopenharmony_ci
416653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
416753a5a1b3Sopenharmony_ci
416853a5a1b3Sopenharmony_cispx_int32_t
416953a5a1b3Sopenharmony_ci\end_layout
417053a5a1b3Sopenharmony_ci
417153a5a1b3Sopenharmony_ci\end_inset
417253a5a1b3Sopenharmony_ci
417353a5a1b3Sopenharmony_ci)
417453a5a1b3Sopenharmony_ci\end_layout
417553a5a1b3Sopenharmony_ci
417653a5a1b3Sopenharmony_ci\begin_layout Description
417753a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_AGC Turns automatic gain control (AGC) on(1) or off(0)
417853a5a1b3Sopenharmony_ci (
417953a5a1b3Sopenharmony_ci\begin_inset listings
418053a5a1b3Sopenharmony_ciinline true
418153a5a1b3Sopenharmony_cistatus collapsed
418253a5a1b3Sopenharmony_ci
418353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
418453a5a1b3Sopenharmony_ci
418553a5a1b3Sopenharmony_cispx_int32_t
418653a5a1b3Sopenharmony_ci\end_layout
418753a5a1b3Sopenharmony_ci
418853a5a1b3Sopenharmony_ci\end_inset
418953a5a1b3Sopenharmony_ci
419053a5a1b3Sopenharmony_ci)
419153a5a1b3Sopenharmony_ci\end_layout
419253a5a1b3Sopenharmony_ci
419353a5a1b3Sopenharmony_ci\begin_layout Description
419453a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_AGC Get AGC status (
419553a5a1b3Sopenharmony_ci\begin_inset listings
419653a5a1b3Sopenharmony_ciinline true
419753a5a1b3Sopenharmony_cistatus collapsed
419853a5a1b3Sopenharmony_ci
419953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
420053a5a1b3Sopenharmony_ci
420153a5a1b3Sopenharmony_cispx_int32_t
420253a5a1b3Sopenharmony_ci\end_layout
420353a5a1b3Sopenharmony_ci
420453a5a1b3Sopenharmony_ci\end_inset
420553a5a1b3Sopenharmony_ci
420653a5a1b3Sopenharmony_ci)
420753a5a1b3Sopenharmony_ci\end_layout
420853a5a1b3Sopenharmony_ci
420953a5a1b3Sopenharmony_ci\begin_layout Description
421053a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_VAD Turns voice activity detector (VAD) on(1) or off(0)
421153a5a1b3Sopenharmony_ci (
421253a5a1b3Sopenharmony_ci\begin_inset listings
421353a5a1b3Sopenharmony_ciinline true
421453a5a1b3Sopenharmony_cistatus collapsed
421553a5a1b3Sopenharmony_ci
421653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
421753a5a1b3Sopenharmony_ci
421853a5a1b3Sopenharmony_cispx_int32_t
421953a5a1b3Sopenharmony_ci\end_layout
422053a5a1b3Sopenharmony_ci
422153a5a1b3Sopenharmony_ci\end_inset
422253a5a1b3Sopenharmony_ci
422353a5a1b3Sopenharmony_ci)
422453a5a1b3Sopenharmony_ci\end_layout
422553a5a1b3Sopenharmony_ci
422653a5a1b3Sopenharmony_ci\begin_layout Description
422753a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_VAD Get VAD status (
422853a5a1b3Sopenharmony_ci\begin_inset listings
422953a5a1b3Sopenharmony_ciinline true
423053a5a1b3Sopenharmony_cistatus collapsed
423153a5a1b3Sopenharmony_ci
423253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
423353a5a1b3Sopenharmony_ci
423453a5a1b3Sopenharmony_cispx_int32_t
423553a5a1b3Sopenharmony_ci\end_layout
423653a5a1b3Sopenharmony_ci
423753a5a1b3Sopenharmony_ci\end_inset
423853a5a1b3Sopenharmony_ci
423953a5a1b3Sopenharmony_ci)
424053a5a1b3Sopenharmony_ci\end_layout
424153a5a1b3Sopenharmony_ci
424253a5a1b3Sopenharmony_ci\begin_layout Description
424353a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_AGC_LEVEL
424453a5a1b3Sopenharmony_ci\end_layout
424553a5a1b3Sopenharmony_ci
424653a5a1b3Sopenharmony_ci\begin_layout Description
424753a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_AGC_LEVEL
424853a5a1b3Sopenharmony_ci\end_layout
424953a5a1b3Sopenharmony_ci
425053a5a1b3Sopenharmony_ci\begin_layout Description
425153a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_DEREVERB Turns reverberation removal on(1) or off(0)
425253a5a1b3Sopenharmony_ci (
425353a5a1b3Sopenharmony_ci\begin_inset listings
425453a5a1b3Sopenharmony_ciinline true
425553a5a1b3Sopenharmony_cistatus collapsed
425653a5a1b3Sopenharmony_ci
425753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
425853a5a1b3Sopenharmony_ci
425953a5a1b3Sopenharmony_cispx_int32_t
426053a5a1b3Sopenharmony_ci\end_layout
426153a5a1b3Sopenharmony_ci
426253a5a1b3Sopenharmony_ci\end_inset
426353a5a1b3Sopenharmony_ci
426453a5a1b3Sopenharmony_ci)
426553a5a1b3Sopenharmony_ci\end_layout
426653a5a1b3Sopenharmony_ci
426753a5a1b3Sopenharmony_ci\begin_layout Description
426853a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_DEREVERB Get reverberation removal status (
426953a5a1b3Sopenharmony_ci\begin_inset listings
427053a5a1b3Sopenharmony_ciinline true
427153a5a1b3Sopenharmony_cistatus collapsed
427253a5a1b3Sopenharmony_ci
427353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
427453a5a1b3Sopenharmony_ci
427553a5a1b3Sopenharmony_cispx_int32_t
427653a5a1b3Sopenharmony_ci\end_layout
427753a5a1b3Sopenharmony_ci
427853a5a1b3Sopenharmony_ci\end_inset
427953a5a1b3Sopenharmony_ci
428053a5a1b3Sopenharmony_ci)
428153a5a1b3Sopenharmony_ci\end_layout
428253a5a1b3Sopenharmony_ci
428353a5a1b3Sopenharmony_ci\begin_layout Description
428453a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_DEREVERB_LEVEL Not working yet, do not use
428553a5a1b3Sopenharmony_ci\end_layout
428653a5a1b3Sopenharmony_ci
428753a5a1b3Sopenharmony_ci\begin_layout Description
428853a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_DEREVERB_LEVEL Not working yet, do not use
428953a5a1b3Sopenharmony_ci\end_layout
429053a5a1b3Sopenharmony_ci
429153a5a1b3Sopenharmony_ci\begin_layout Description
429253a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_DEREVERB_DECAY Not working yet, do not use
429353a5a1b3Sopenharmony_ci\end_layout
429453a5a1b3Sopenharmony_ci
429553a5a1b3Sopenharmony_ci\begin_layout Description
429653a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_DEREVERB_DECAY Not working yet, do not use
429753a5a1b3Sopenharmony_ci\end_layout
429853a5a1b3Sopenharmony_ci
429953a5a1b3Sopenharmony_ci\begin_layout Description
430053a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_PROB_START
430153a5a1b3Sopenharmony_ci\end_layout
430253a5a1b3Sopenharmony_ci
430353a5a1b3Sopenharmony_ci\begin_layout Description
430453a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_PROB_START
430553a5a1b3Sopenharmony_ci\end_layout
430653a5a1b3Sopenharmony_ci
430753a5a1b3Sopenharmony_ci\begin_layout Description
430853a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_PROB_CONTINUE
430953a5a1b3Sopenharmony_ci\end_layout
431053a5a1b3Sopenharmony_ci
431153a5a1b3Sopenharmony_ci\begin_layout Description
431253a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_PROB_CONTINUE
431353a5a1b3Sopenharmony_ci\end_layout
431453a5a1b3Sopenharmony_ci
431553a5a1b3Sopenharmony_ci\begin_layout Description
431653a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_NOISE_SUPPRESS Set maximum attenuation of the noise
431753a5a1b3Sopenharmony_ci in dB (negative 
431853a5a1b3Sopenharmony_ci\begin_inset listings
431953a5a1b3Sopenharmony_ciinline true
432053a5a1b3Sopenharmony_cistatus collapsed
432153a5a1b3Sopenharmony_ci
432253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
432353a5a1b3Sopenharmony_ci
432453a5a1b3Sopenharmony_cispx_int32_t
432553a5a1b3Sopenharmony_ci\end_layout
432653a5a1b3Sopenharmony_ci
432753a5a1b3Sopenharmony_ci\end_inset
432853a5a1b3Sopenharmony_ci
432953a5a1b3Sopenharmony_ci)
433053a5a1b3Sopenharmony_ci\end_layout
433153a5a1b3Sopenharmony_ci
433253a5a1b3Sopenharmony_ci\begin_layout Description
433353a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_NOISE_SUPPRESS Get maximum attenuation of the noise
433453a5a1b3Sopenharmony_ci in dB (negative 
433553a5a1b3Sopenharmony_ci\begin_inset listings
433653a5a1b3Sopenharmony_ciinline true
433753a5a1b3Sopenharmony_cistatus collapsed
433853a5a1b3Sopenharmony_ci
433953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
434053a5a1b3Sopenharmony_ci
434153a5a1b3Sopenharmony_cispx_int32_t
434253a5a1b3Sopenharmony_ci\end_layout
434353a5a1b3Sopenharmony_ci
434453a5a1b3Sopenharmony_ci\end_inset
434553a5a1b3Sopenharmony_ci
434653a5a1b3Sopenharmony_ci)
434753a5a1b3Sopenharmony_ci\end_layout
434853a5a1b3Sopenharmony_ci
434953a5a1b3Sopenharmony_ci\begin_layout Description
435053a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_ECHO_SUPPRESS Set maximum attenuation of the residual
435153a5a1b3Sopenharmony_ci echo in dB (negative 
435253a5a1b3Sopenharmony_ci\begin_inset listings
435353a5a1b3Sopenharmony_ciinline true
435453a5a1b3Sopenharmony_cistatus collapsed
435553a5a1b3Sopenharmony_ci
435653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
435753a5a1b3Sopenharmony_ci
435853a5a1b3Sopenharmony_cispx_int32_t
435953a5a1b3Sopenharmony_ci\end_layout
436053a5a1b3Sopenharmony_ci
436153a5a1b3Sopenharmony_ci\end_inset
436253a5a1b3Sopenharmony_ci
436353a5a1b3Sopenharmony_ci)
436453a5a1b3Sopenharmony_ci\end_layout
436553a5a1b3Sopenharmony_ci
436653a5a1b3Sopenharmony_ci\begin_layout Description
436753a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_ECHO_SUPPRESS Get maximum attenuation of the residual
436853a5a1b3Sopenharmony_ci echo in dB (negative 
436953a5a1b3Sopenharmony_ci\begin_inset listings
437053a5a1b3Sopenharmony_ciinline true
437153a5a1b3Sopenharmony_cistatus collapsed
437253a5a1b3Sopenharmony_ci
437353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
437453a5a1b3Sopenharmony_ci
437553a5a1b3Sopenharmony_cispx_int32_t
437653a5a1b3Sopenharmony_ci\end_layout
437753a5a1b3Sopenharmony_ci
437853a5a1b3Sopenharmony_ci\end_inset
437953a5a1b3Sopenharmony_ci
438053a5a1b3Sopenharmony_ci)
438153a5a1b3Sopenharmony_ci\end_layout
438253a5a1b3Sopenharmony_ci
438353a5a1b3Sopenharmony_ci\begin_layout Description
438453a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE Set maximum attenuation of the
438553a5a1b3Sopenharmony_ci echo in dB when near end is active (negative 
438653a5a1b3Sopenharmony_ci\begin_inset listings
438753a5a1b3Sopenharmony_ciinline true
438853a5a1b3Sopenharmony_cistatus collapsed
438953a5a1b3Sopenharmony_ci
439053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
439153a5a1b3Sopenharmony_ci
439253a5a1b3Sopenharmony_cispx_int32_t
439353a5a1b3Sopenharmony_ci\end_layout
439453a5a1b3Sopenharmony_ci
439553a5a1b3Sopenharmony_ci\end_inset
439653a5a1b3Sopenharmony_ci
439753a5a1b3Sopenharmony_ci)
439853a5a1b3Sopenharmony_ci\end_layout
439953a5a1b3Sopenharmony_ci
440053a5a1b3Sopenharmony_ci\begin_layout Description
440153a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_ECHO_SUPPRESS_ACTIVE Get maximum attenuation of the
440253a5a1b3Sopenharmony_ci echo in dB when near end is active (negative 
440353a5a1b3Sopenharmony_ci\begin_inset listings
440453a5a1b3Sopenharmony_ciinline true
440553a5a1b3Sopenharmony_cistatus collapsed
440653a5a1b3Sopenharmony_ci
440753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
440853a5a1b3Sopenharmony_ci
440953a5a1b3Sopenharmony_cispx_int32_t
441053a5a1b3Sopenharmony_ci\end_layout
441153a5a1b3Sopenharmony_ci
441253a5a1b3Sopenharmony_ci\end_inset
441353a5a1b3Sopenharmony_ci
441453a5a1b3Sopenharmony_ci)
441553a5a1b3Sopenharmony_ci\end_layout
441653a5a1b3Sopenharmony_ci
441753a5a1b3Sopenharmony_ci\begin_layout Description
441853a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_SET_ECHO_STATE Set the associated echo canceller for residual
441953a5a1b3Sopenharmony_ci echo suppression (pointer or NULL for no residual echo suppression)
442053a5a1b3Sopenharmony_ci\end_layout
442153a5a1b3Sopenharmony_ci
442253a5a1b3Sopenharmony_ci\begin_layout Description
442353a5a1b3Sopenharmony_ciSPEEX_PREPROCESS_GET_ECHO_STATE Get the associated echo canceller (pointer)
442453a5a1b3Sopenharmony_ci\end_layout
442553a5a1b3Sopenharmony_ci
442653a5a1b3Sopenharmony_ci\begin_layout Section
442753a5a1b3Sopenharmony_ciEcho Cancellation
442853a5a1b3Sopenharmony_ci\begin_inset CommandInset label
442953a5a1b3Sopenharmony_ciLatexCommand label
443053a5a1b3Sopenharmony_ciname "sub:Echo-Cancellation"
443153a5a1b3Sopenharmony_ci
443253a5a1b3Sopenharmony_ci\end_inset
443353a5a1b3Sopenharmony_ci
443453a5a1b3Sopenharmony_ci
443553a5a1b3Sopenharmony_ci\end_layout
443653a5a1b3Sopenharmony_ci
443753a5a1b3Sopenharmony_ci\begin_layout Standard
443853a5a1b3Sopenharmony_ciThe Speex library now includes an echo cancellation
443953a5a1b3Sopenharmony_ci\begin_inset Index
444053a5a1b3Sopenharmony_cistatus collapsed
444153a5a1b3Sopenharmony_ci
444253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
444353a5a1b3Sopenharmony_ciecho cancellation
444453a5a1b3Sopenharmony_ci\end_layout
444553a5a1b3Sopenharmony_ci
444653a5a1b3Sopenharmony_ci\end_inset
444753a5a1b3Sopenharmony_ci
444853a5a1b3Sopenharmony_ci algorithm suitable for Acoustic Echo Cancellation
444953a5a1b3Sopenharmony_ci\begin_inset Index
445053a5a1b3Sopenharmony_cistatus collapsed
445153a5a1b3Sopenharmony_ci
445253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
445353a5a1b3Sopenharmony_ciacoustic echo cancellation
445453a5a1b3Sopenharmony_ci\end_layout
445553a5a1b3Sopenharmony_ci
445653a5a1b3Sopenharmony_ci\end_inset
445753a5a1b3Sopenharmony_ci
445853a5a1b3Sopenharmony_ci (AEC).
445953a5a1b3Sopenharmony_ci In order to use the echo canceller, you first need to
446053a5a1b3Sopenharmony_ci\end_layout
446153a5a1b3Sopenharmony_ci
446253a5a1b3Sopenharmony_ci\begin_layout Standard
446353a5a1b3Sopenharmony_ci\begin_inset listings
446453a5a1b3Sopenharmony_ciinline false
446553a5a1b3Sopenharmony_cistatus open
446653a5a1b3Sopenharmony_ci
446753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
446853a5a1b3Sopenharmony_ci
446953a5a1b3Sopenharmony_ci#include <speex/speex_echo.h>
447053a5a1b3Sopenharmony_ci\end_layout
447153a5a1b3Sopenharmony_ci
447253a5a1b3Sopenharmony_ci\end_inset
447353a5a1b3Sopenharmony_ci
447453a5a1b3Sopenharmony_ci
447553a5a1b3Sopenharmony_ci\end_layout
447653a5a1b3Sopenharmony_ci
447753a5a1b3Sopenharmony_ci\begin_layout Standard
447853a5a1b3Sopenharmony_ciThen, an echo canceller state can be created by:
447953a5a1b3Sopenharmony_ci\end_layout
448053a5a1b3Sopenharmony_ci
448153a5a1b3Sopenharmony_ci\begin_layout Standard
448253a5a1b3Sopenharmony_ci\begin_inset listings
448353a5a1b3Sopenharmony_ciinline false
448453a5a1b3Sopenharmony_cistatus open
448553a5a1b3Sopenharmony_ci
448653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
448753a5a1b3Sopenharmony_ci
448853a5a1b3Sopenharmony_ciSpeexEchoState *echo_state = speex_echo_state_init(frame_size, filter_length);
448953a5a1b3Sopenharmony_ci\end_layout
449053a5a1b3Sopenharmony_ci
449153a5a1b3Sopenharmony_ci\end_inset
449253a5a1b3Sopenharmony_ci
449353a5a1b3Sopenharmony_ci
449453a5a1b3Sopenharmony_ci\end_layout
449553a5a1b3Sopenharmony_ci
449653a5a1b3Sopenharmony_ci\begin_layout Standard
449753a5a1b3Sopenharmony_ciwhere 
449853a5a1b3Sopenharmony_ci\family typewriter
449953a5a1b3Sopenharmony_ciframe_size
450053a5a1b3Sopenharmony_ci\family default
450153a5a1b3Sopenharmony_ci is the amount of data (in samples) you want to process at once and 
450253a5a1b3Sopenharmony_ci\family typewriter
450353a5a1b3Sopenharmony_cifilter_length
450453a5a1b3Sopenharmony_ci\family default
450553a5a1b3Sopenharmony_ci is the length (in samples) of the echo cancelling filter you want to use
450653a5a1b3Sopenharmony_ci (also known as 
450753a5a1b3Sopenharmony_ci\shape italic
450853a5a1b3Sopenharmony_citail length
450953a5a1b3Sopenharmony_ci\shape default
451053a5a1b3Sopenharmony_ci
451153a5a1b3Sopenharmony_ci\begin_inset Index
451253a5a1b3Sopenharmony_cistatus collapsed
451353a5a1b3Sopenharmony_ci
451453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
451553a5a1b3Sopenharmony_citail length
451653a5a1b3Sopenharmony_ci\end_layout
451753a5a1b3Sopenharmony_ci
451853a5a1b3Sopenharmony_ci\end_inset
451953a5a1b3Sopenharmony_ci
452053a5a1b3Sopenharmony_ci).
452153a5a1b3Sopenharmony_ci It is recommended to use a frame size in the order of 20 ms (or equal to
452253a5a1b3Sopenharmony_ci the codec frame size) and make sure it is easy to perform an FFT of that
452353a5a1b3Sopenharmony_ci size (powers of two are better than prime sizes).
452453a5a1b3Sopenharmony_ci The recommended tail length is approximately the third of the room reverberatio
452553a5a1b3Sopenharmony_cin time.
452653a5a1b3Sopenharmony_ci For example, in a small room, reverberation time is in the order of 300
452753a5a1b3Sopenharmony_ci ms, so a tail length of 100 ms is a good choice (800 samples at 8000 Hz
452853a5a1b3Sopenharmony_ci sampling rate).
452953a5a1b3Sopenharmony_ci\end_layout
453053a5a1b3Sopenharmony_ci
453153a5a1b3Sopenharmony_ci\begin_layout Standard
453253a5a1b3Sopenharmony_ciOnce the echo canceller state is created, audio can be processed by:
453353a5a1b3Sopenharmony_ci\end_layout
453453a5a1b3Sopenharmony_ci
453553a5a1b3Sopenharmony_ci\begin_layout Standard
453653a5a1b3Sopenharmony_ci\begin_inset listings
453753a5a1b3Sopenharmony_ciinline false
453853a5a1b3Sopenharmony_cistatus open
453953a5a1b3Sopenharmony_ci
454053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
454153a5a1b3Sopenharmony_ci
454253a5a1b3Sopenharmony_cispeex_echo_cancellation(echo_state, input_frame, echo_frame, output_frame);
454353a5a1b3Sopenharmony_ci\end_layout
454453a5a1b3Sopenharmony_ci
454553a5a1b3Sopenharmony_ci\end_inset
454653a5a1b3Sopenharmony_ci
454753a5a1b3Sopenharmony_ci
454853a5a1b3Sopenharmony_ci\end_layout
454953a5a1b3Sopenharmony_ci
455053a5a1b3Sopenharmony_ci\begin_layout Standard
455153a5a1b3Sopenharmony_ciwhere 
455253a5a1b3Sopenharmony_ci\family typewriter
455353a5a1b3Sopenharmony_ciinput_frame
455453a5a1b3Sopenharmony_ci\family default
455553a5a1b3Sopenharmony_ci is the audio as captured by the microphone, 
455653a5a1b3Sopenharmony_ci\family typewriter
455753a5a1b3Sopenharmony_ciecho_frame
455853a5a1b3Sopenharmony_ci\family default
455953a5a1b3Sopenharmony_ci is the signal that was played in the speaker (and needs to be removed)
456053a5a1b3Sopenharmony_ci and 
456153a5a1b3Sopenharmony_ci\family typewriter
456253a5a1b3Sopenharmony_cioutput_frame
456353a5a1b3Sopenharmony_ci\family default
456453a5a1b3Sopenharmony_ci is the signal with echo removed.
456553a5a1b3Sopenharmony_ci 
456653a5a1b3Sopenharmony_ci\end_layout
456753a5a1b3Sopenharmony_ci
456853a5a1b3Sopenharmony_ci\begin_layout Standard
456953a5a1b3Sopenharmony_ciOne important thing to keep in mind is the relationship between 
457053a5a1b3Sopenharmony_ci\family typewriter
457153a5a1b3Sopenharmony_ciinput_frame
457253a5a1b3Sopenharmony_ci\family default
457353a5a1b3Sopenharmony_ci and 
457453a5a1b3Sopenharmony_ci\family typewriter
457553a5a1b3Sopenharmony_ciecho_frame
457653a5a1b3Sopenharmony_ci\family default
457753a5a1b3Sopenharmony_ci.
457853a5a1b3Sopenharmony_ci It is important that, at any time, any echo that is present in the input
457953a5a1b3Sopenharmony_ci has already been sent to the echo canceller as 
458053a5a1b3Sopenharmony_ci\family typewriter
458153a5a1b3Sopenharmony_ciecho_frame
458253a5a1b3Sopenharmony_ci\family default
458353a5a1b3Sopenharmony_ci.
458453a5a1b3Sopenharmony_ci In other words, the echo canceller cannot remove a signal that it hasn't
458553a5a1b3Sopenharmony_ci yet received.
458653a5a1b3Sopenharmony_ci On the other hand, the delay between the input signal and the echo signal
458753a5a1b3Sopenharmony_ci must be small enough because otherwise part of the echo cancellation filter
458853a5a1b3Sopenharmony_ci is inefficient.
458953a5a1b3Sopenharmony_ci In the ideal case, you code would look like:
459053a5a1b3Sopenharmony_ci\begin_inset listings
459153a5a1b3Sopenharmony_cilstparams "breaklines=true"
459253a5a1b3Sopenharmony_ciinline false
459353a5a1b3Sopenharmony_cistatus open
459453a5a1b3Sopenharmony_ci
459553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
459653a5a1b3Sopenharmony_ci
459753a5a1b3Sopenharmony_ciwrite_to_soundcard(echo_frame, frame_size);
459853a5a1b3Sopenharmony_ci\end_layout
459953a5a1b3Sopenharmony_ci
460053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
460153a5a1b3Sopenharmony_ci
460253a5a1b3Sopenharmony_ciread_from_soundcard(input_frame, frame_size);
460353a5a1b3Sopenharmony_ci\end_layout
460453a5a1b3Sopenharmony_ci
460553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
460653a5a1b3Sopenharmony_ci
460753a5a1b3Sopenharmony_cispeex_echo_cancellation(echo_state, input_frame, echo_frame, output_frame);
460853a5a1b3Sopenharmony_ci\end_layout
460953a5a1b3Sopenharmony_ci
461053a5a1b3Sopenharmony_ci\end_inset
461153a5a1b3Sopenharmony_ci
461253a5a1b3Sopenharmony_ci
461353a5a1b3Sopenharmony_ci\end_layout
461453a5a1b3Sopenharmony_ci
461553a5a1b3Sopenharmony_ci\begin_layout Standard
461653a5a1b3Sopenharmony_ciIf you wish to further reduce the echo present in the signal, you can do
461753a5a1b3Sopenharmony_ci so by associating the echo canceller to the preprocessor (see Section 
461853a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
461953a5a1b3Sopenharmony_ciLatexCommand ref
462053a5a1b3Sopenharmony_cireference "sub:Preprocessor"
462153a5a1b3Sopenharmony_ci
462253a5a1b3Sopenharmony_ci\end_inset
462353a5a1b3Sopenharmony_ci
462453a5a1b3Sopenharmony_ci).
462553a5a1b3Sopenharmony_ci This is done by calling:
462653a5a1b3Sopenharmony_ci\begin_inset listings
462753a5a1b3Sopenharmony_cilstparams "breaklines=true"
462853a5a1b3Sopenharmony_ciinline false
462953a5a1b3Sopenharmony_cistatus open
463053a5a1b3Sopenharmony_ci
463153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
463253a5a1b3Sopenharmony_ci
463353a5a1b3Sopenharmony_cispeex_preprocess_ctl(preprocess_state, SPEEX_PREPROCESS_SET_ECHO_STATE,echo_stat
463453a5a1b3Sopenharmony_cie);
463553a5a1b3Sopenharmony_ci\end_layout
463653a5a1b3Sopenharmony_ci
463753a5a1b3Sopenharmony_ci\end_inset
463853a5a1b3Sopenharmony_ci
463953a5a1b3Sopenharmony_ciin the initialisation.
464053a5a1b3Sopenharmony_ci\end_layout
464153a5a1b3Sopenharmony_ci
464253a5a1b3Sopenharmony_ci\begin_layout Standard
464353a5a1b3Sopenharmony_ciAs of version 1.2-beta2, there is an alternative, simpler API that can be
464453a5a1b3Sopenharmony_ci used instead of 
464553a5a1b3Sopenharmony_ci\emph on
464653a5a1b3Sopenharmony_cispeex_echo_cancellation()
464753a5a1b3Sopenharmony_ci\emph default
464853a5a1b3Sopenharmony_ci.
464953a5a1b3Sopenharmony_ci When audio capture and playback are handled asynchronously (e.g.
465053a5a1b3Sopenharmony_ci in different threads or using the 
465153a5a1b3Sopenharmony_ci\emph on
465253a5a1b3Sopenharmony_cipoll()
465353a5a1b3Sopenharmony_ci\emph default
465453a5a1b3Sopenharmony_ci or 
465553a5a1b3Sopenharmony_ci\emph on
465653a5a1b3Sopenharmony_ciselect()
465753a5a1b3Sopenharmony_ci\emph default
465853a5a1b3Sopenharmony_ci system call), it can be difficult to keep track of what input_frame comes
465953a5a1b3Sopenharmony_ci with what echo_frame.
466053a5a1b3Sopenharmony_ci Instead, the playback context/thread can simply call:
466153a5a1b3Sopenharmony_ci\end_layout
466253a5a1b3Sopenharmony_ci
466353a5a1b3Sopenharmony_ci\begin_layout Standard
466453a5a1b3Sopenharmony_ci\begin_inset listings
466553a5a1b3Sopenharmony_ciinline false
466653a5a1b3Sopenharmony_cistatus open
466753a5a1b3Sopenharmony_ci
466853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
466953a5a1b3Sopenharmony_ci
467053a5a1b3Sopenharmony_cispeex_echo_playback(echo_state, echo_frame);
467153a5a1b3Sopenharmony_ci\end_layout
467253a5a1b3Sopenharmony_ci
467353a5a1b3Sopenharmony_ci\end_inset
467453a5a1b3Sopenharmony_ci
467553a5a1b3Sopenharmony_ci
467653a5a1b3Sopenharmony_ci\end_layout
467753a5a1b3Sopenharmony_ci
467853a5a1b3Sopenharmony_ci\begin_layout Standard
467953a5a1b3Sopenharmony_cievery time an audio frame is played.
468053a5a1b3Sopenharmony_ci Then, the capture context/thread calls:
468153a5a1b3Sopenharmony_ci\end_layout
468253a5a1b3Sopenharmony_ci
468353a5a1b3Sopenharmony_ci\begin_layout Standard
468453a5a1b3Sopenharmony_ci\begin_inset listings
468553a5a1b3Sopenharmony_ciinline false
468653a5a1b3Sopenharmony_cistatus open
468753a5a1b3Sopenharmony_ci
468853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
468953a5a1b3Sopenharmony_ci
469053a5a1b3Sopenharmony_cispeex_echo_capture(echo_state, input_frame, output_frame);
469153a5a1b3Sopenharmony_ci\end_layout
469253a5a1b3Sopenharmony_ci
469353a5a1b3Sopenharmony_ci\end_inset
469453a5a1b3Sopenharmony_ci
469553a5a1b3Sopenharmony_ci
469653a5a1b3Sopenharmony_ci\end_layout
469753a5a1b3Sopenharmony_ci
469853a5a1b3Sopenharmony_ci\begin_layout Standard
469953a5a1b3Sopenharmony_cifor every frame captured.
470053a5a1b3Sopenharmony_ci Internally, 
470153a5a1b3Sopenharmony_ci\emph on
470253a5a1b3Sopenharmony_cispeex_echo_playback()
470353a5a1b3Sopenharmony_ci\emph default
470453a5a1b3Sopenharmony_ci simply buffers the playback frame so it can be used by 
470553a5a1b3Sopenharmony_ci\emph on
470653a5a1b3Sopenharmony_cispeex_echo_capture()
470753a5a1b3Sopenharmony_ci\emph default
470853a5a1b3Sopenharmony_ci to call 
470953a5a1b3Sopenharmony_ci\emph on
471053a5a1b3Sopenharmony_cispeex_echo_cancel()
471153a5a1b3Sopenharmony_ci\emph default
471253a5a1b3Sopenharmony_ci.
471353a5a1b3Sopenharmony_ci A side effect of using this alternate API is that the playback audio is
471453a5a1b3Sopenharmony_ci delayed by two frames, which is the normal delay caused by the soundcard.
471553a5a1b3Sopenharmony_ci When capture and playback are already synchronised, 
471653a5a1b3Sopenharmony_ci\emph on
471753a5a1b3Sopenharmony_cispeex_echo_cancellation()
471853a5a1b3Sopenharmony_ci\emph default
471953a5a1b3Sopenharmony_ci is preferable since it gives better control on the exact input/echo timing.
472053a5a1b3Sopenharmony_ci\end_layout
472153a5a1b3Sopenharmony_ci
472253a5a1b3Sopenharmony_ci\begin_layout Standard
472353a5a1b3Sopenharmony_ciThe echo cancellation state can be destroyed with:
472453a5a1b3Sopenharmony_ci\end_layout
472553a5a1b3Sopenharmony_ci
472653a5a1b3Sopenharmony_ci\begin_layout Standard
472753a5a1b3Sopenharmony_ci\begin_inset listings
472853a5a1b3Sopenharmony_ciinline false
472953a5a1b3Sopenharmony_cistatus open
473053a5a1b3Sopenharmony_ci
473153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
473253a5a1b3Sopenharmony_ci
473353a5a1b3Sopenharmony_cispeex_echo_state_destroy(echo_state);
473453a5a1b3Sopenharmony_ci\end_layout
473553a5a1b3Sopenharmony_ci
473653a5a1b3Sopenharmony_ci\end_inset
473753a5a1b3Sopenharmony_ci
473853a5a1b3Sopenharmony_ci
473953a5a1b3Sopenharmony_ci\end_layout
474053a5a1b3Sopenharmony_ci
474153a5a1b3Sopenharmony_ci\begin_layout Standard
474253a5a1b3Sopenharmony_ciIt is also possible to reset the state of the echo canceller so it can be
474353a5a1b3Sopenharmony_ci reused without the need to create another state with:
474453a5a1b3Sopenharmony_ci\end_layout
474553a5a1b3Sopenharmony_ci
474653a5a1b3Sopenharmony_ci\begin_layout Standard
474753a5a1b3Sopenharmony_ci\begin_inset listings
474853a5a1b3Sopenharmony_ciinline false
474953a5a1b3Sopenharmony_cistatus open
475053a5a1b3Sopenharmony_ci
475153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
475253a5a1b3Sopenharmony_ci
475353a5a1b3Sopenharmony_cispeex_echo_state_reset(echo_state);
475453a5a1b3Sopenharmony_ci\end_layout
475553a5a1b3Sopenharmony_ci
475653a5a1b3Sopenharmony_ci\end_inset
475753a5a1b3Sopenharmony_ci
475853a5a1b3Sopenharmony_ci
475953a5a1b3Sopenharmony_ci\end_layout
476053a5a1b3Sopenharmony_ci
476153a5a1b3Sopenharmony_ci\begin_layout Subsection
476253a5a1b3Sopenharmony_ciTroubleshooting
476353a5a1b3Sopenharmony_ci\end_layout
476453a5a1b3Sopenharmony_ci
476553a5a1b3Sopenharmony_ci\begin_layout Standard
476653a5a1b3Sopenharmony_ciThere are several things that may prevent the echo canceller from working
476753a5a1b3Sopenharmony_ci properly.
476853a5a1b3Sopenharmony_ci One of them is a bug (or something suboptimal) in the code, but there are
476953a5a1b3Sopenharmony_ci many others you should consider first
477053a5a1b3Sopenharmony_ci\end_layout
477153a5a1b3Sopenharmony_ci
477253a5a1b3Sopenharmony_ci\begin_layout Itemize
477353a5a1b3Sopenharmony_ciUsing a different soundcard to do the capture and plaback will 
477453a5a1b3Sopenharmony_ci\series bold
477553a5a1b3Sopenharmony_cinot
477653a5a1b3Sopenharmony_ci\series default
477753a5a1b3Sopenharmony_ci work, regardless of what you may think.
477853a5a1b3Sopenharmony_ci The only exception to that is if the two cards can be made to have their
477953a5a1b3Sopenharmony_ci sampling clock 
478053a5a1b3Sopenharmony_ci\begin_inset Quotes eld
478153a5a1b3Sopenharmony_ci\end_inset
478253a5a1b3Sopenharmony_ci
478353a5a1b3Sopenharmony_cilocked
478453a5a1b3Sopenharmony_ci\begin_inset Quotes erd
478553a5a1b3Sopenharmony_ci\end_inset
478653a5a1b3Sopenharmony_ci
478753a5a1b3Sopenharmony_ci on the same clock source.
478853a5a1b3Sopenharmony_ci If not, the clocks will always have a small amount of drift, which will
478953a5a1b3Sopenharmony_ci prevent the echo canceller from adapting.
479053a5a1b3Sopenharmony_ci\end_layout
479153a5a1b3Sopenharmony_ci
479253a5a1b3Sopenharmony_ci\begin_layout Itemize
479353a5a1b3Sopenharmony_ciThe delay between the record and playback signals must be minimal.
479453a5a1b3Sopenharmony_ci Any signal played has to 
479553a5a1b3Sopenharmony_ci\begin_inset Quotes eld
479653a5a1b3Sopenharmony_ci\end_inset
479753a5a1b3Sopenharmony_ci
479853a5a1b3Sopenharmony_ciappear
479953a5a1b3Sopenharmony_ci\begin_inset Quotes erd
480053a5a1b3Sopenharmony_ci\end_inset
480153a5a1b3Sopenharmony_ci
480253a5a1b3Sopenharmony_ci on the playback (far end) signal slightly before the echo canceller 
480353a5a1b3Sopenharmony_ci\begin_inset Quotes eld
480453a5a1b3Sopenharmony_ci\end_inset
480553a5a1b3Sopenharmony_ci
480653a5a1b3Sopenharmony_cisees
480753a5a1b3Sopenharmony_ci\begin_inset Quotes erd
480853a5a1b3Sopenharmony_ci\end_inset
480953a5a1b3Sopenharmony_ci
481053a5a1b3Sopenharmony_ci it in the near end signal, but excessive delay means that part of the filter
481153a5a1b3Sopenharmony_ci length is wasted.
481253a5a1b3Sopenharmony_ci In the worst situations, the delay is such that it is longer than the filter
481353a5a1b3Sopenharmony_ci length, in which case, no echo can be cancelled.
481453a5a1b3Sopenharmony_ci\end_layout
481553a5a1b3Sopenharmony_ci
481653a5a1b3Sopenharmony_ci\begin_layout Itemize
481753a5a1b3Sopenharmony_ciWhen it comes to echo tail length (filter length), longer is 
481853a5a1b3Sopenharmony_ci\series bold
481953a5a1b3Sopenharmony_cinot
482053a5a1b3Sopenharmony_ci\series default
482153a5a1b3Sopenharmony_ci better.
482253a5a1b3Sopenharmony_ci Actually, the longer the tail length, the longer it takes for the filter
482353a5a1b3Sopenharmony_ci to adapt.
482453a5a1b3Sopenharmony_ci Of course, a tail length that is too short will not cancel enough echo,
482553a5a1b3Sopenharmony_ci but the most common problem seen is that people set a very long tail length
482653a5a1b3Sopenharmony_ci and then wonder why no echo is being cancelled.
482753a5a1b3Sopenharmony_ci\end_layout
482853a5a1b3Sopenharmony_ci
482953a5a1b3Sopenharmony_ci\begin_layout Itemize
483053a5a1b3Sopenharmony_ciNon-linear distortion cannot (by definition) be modeled by the linear adaptive
483153a5a1b3Sopenharmony_ci filter used in the echo canceller and thus cannot be cancelled.
483253a5a1b3Sopenharmony_ci Use good audio gear and avoid saturation/clipping.
483353a5a1b3Sopenharmony_ci\end_layout
483453a5a1b3Sopenharmony_ci
483553a5a1b3Sopenharmony_ci\begin_layout Standard
483653a5a1b3Sopenharmony_ciAlso useful is reading 
483753a5a1b3Sopenharmony_ci\emph on
483853a5a1b3Sopenharmony_ciEcho Cancellation Demystified
483953a5a1b3Sopenharmony_ci\emph default
484053a5a1b3Sopenharmony_ci by Alexey Frunze
484153a5a1b3Sopenharmony_ci\begin_inset Foot
484253a5a1b3Sopenharmony_cistatus collapsed
484353a5a1b3Sopenharmony_ci
484453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
484553a5a1b3Sopenharmony_cihttp://www.embeddedstar.com/articles/2003/7/article20030720-1.html
484653a5a1b3Sopenharmony_ci\end_layout
484753a5a1b3Sopenharmony_ci
484853a5a1b3Sopenharmony_ci\end_inset
484953a5a1b3Sopenharmony_ci
485053a5a1b3Sopenharmony_ci, which explains the fundamental principles of echo cancellation.
485153a5a1b3Sopenharmony_ci The details of the algorithm described in the article are different, but
485253a5a1b3Sopenharmony_ci the general ideas of echo cancellation through adaptive filters are the
485353a5a1b3Sopenharmony_ci same.
485453a5a1b3Sopenharmony_ci\end_layout
485553a5a1b3Sopenharmony_ci
485653a5a1b3Sopenharmony_ci\begin_layout Standard
485753a5a1b3Sopenharmony_ciAs of version 1.2beta2, a new 
485853a5a1b3Sopenharmony_ci\family typewriter
485953a5a1b3Sopenharmony_ciecho_diagnostic.m
486053a5a1b3Sopenharmony_ci\family default
486153a5a1b3Sopenharmony_ci tool is included in the source distribution.
486253a5a1b3Sopenharmony_ci The first step is to define DUMP_ECHO_CANCEL_DATA during the build.
486353a5a1b3Sopenharmony_ci This causes the echo canceller to automatically save the near-end, far-end
486453a5a1b3Sopenharmony_ci and output signals to files (aec_rec.sw aec_play.sw and aec_out.sw).
486553a5a1b3Sopenharmony_ci These are exactly what the AEC receives and outputs.
486653a5a1b3Sopenharmony_ci From there, it is necessary to start Octave and type:
486753a5a1b3Sopenharmony_ci\end_layout
486853a5a1b3Sopenharmony_ci
486953a5a1b3Sopenharmony_ci\begin_layout Standard
487053a5a1b3Sopenharmony_ci\begin_inset listings
487153a5a1b3Sopenharmony_cilstparams "language=Matlab"
487253a5a1b3Sopenharmony_ciinline false
487353a5a1b3Sopenharmony_cistatus open
487453a5a1b3Sopenharmony_ci
487553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
487653a5a1b3Sopenharmony_ci
487753a5a1b3Sopenharmony_ciecho_diagnostic('aec_rec.sw', 'aec_play.sw', 'aec_diagnostic.sw', 1024);
487853a5a1b3Sopenharmony_ci\end_layout
487953a5a1b3Sopenharmony_ci
488053a5a1b3Sopenharmony_ci\end_inset
488153a5a1b3Sopenharmony_ci
488253a5a1b3Sopenharmony_ci
488353a5a1b3Sopenharmony_ci\end_layout
488453a5a1b3Sopenharmony_ci
488553a5a1b3Sopenharmony_ci\begin_layout Standard
488653a5a1b3Sopenharmony_ciThe value of 1024 is the filter length and can be changed.
488753a5a1b3Sopenharmony_ci There will be some (hopefully) useful messages printed and echo cancelled
488853a5a1b3Sopenharmony_ci audio will be saved to aec_diagnostic.sw .
488953a5a1b3Sopenharmony_ci If even that output is bad (almost no cancellation) then there is  probably
489053a5a1b3Sopenharmony_ci problem with the playback or recording process.
489153a5a1b3Sopenharmony_ci\end_layout
489253a5a1b3Sopenharmony_ci
489353a5a1b3Sopenharmony_ci\begin_layout Section
489453a5a1b3Sopenharmony_ciJitter Buffer
489553a5a1b3Sopenharmony_ci\end_layout
489653a5a1b3Sopenharmony_ci
489753a5a1b3Sopenharmony_ci\begin_layout Standard
489853a5a1b3Sopenharmony_ciThe jitter buffer can be enabled by including:
489953a5a1b3Sopenharmony_ci\begin_inset listings
490053a5a1b3Sopenharmony_cilstparams "breaklines=true"
490153a5a1b3Sopenharmony_ciinline false
490253a5a1b3Sopenharmony_cistatus open
490353a5a1b3Sopenharmony_ci
490453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
490553a5a1b3Sopenharmony_ci
490653a5a1b3Sopenharmony_ci#include <speex/speex_jitter.h>
490753a5a1b3Sopenharmony_ci\end_layout
490853a5a1b3Sopenharmony_ci
490953a5a1b3Sopenharmony_ci\end_inset
491053a5a1b3Sopenharmony_ci
491153a5a1b3Sopenharmony_ci and a new jitter buffer state can be initialised by:
491253a5a1b3Sopenharmony_ci\end_layout
491353a5a1b3Sopenharmony_ci
491453a5a1b3Sopenharmony_ci\begin_layout Standard
491553a5a1b3Sopenharmony_ci\begin_inset listings
491653a5a1b3Sopenharmony_cilstparams "breaklines=true"
491753a5a1b3Sopenharmony_ciinline false
491853a5a1b3Sopenharmony_cistatus open
491953a5a1b3Sopenharmony_ci
492053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
492153a5a1b3Sopenharmony_ci
492253a5a1b3Sopenharmony_ciJitterBuffer *state = jitter_buffer_init(step);
492353a5a1b3Sopenharmony_ci\end_layout
492453a5a1b3Sopenharmony_ci
492553a5a1b3Sopenharmony_ci\end_inset
492653a5a1b3Sopenharmony_ci
492753a5a1b3Sopenharmony_ci
492853a5a1b3Sopenharmony_ci\end_layout
492953a5a1b3Sopenharmony_ci
493053a5a1b3Sopenharmony_ci\begin_layout Standard
493153a5a1b3Sopenharmony_ciwhere the 
493253a5a1b3Sopenharmony_ci\begin_inset listings
493353a5a1b3Sopenharmony_ciinline true
493453a5a1b3Sopenharmony_cistatus collapsed
493553a5a1b3Sopenharmony_ci
493653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
493753a5a1b3Sopenharmony_ci
493853a5a1b3Sopenharmony_cistep
493953a5a1b3Sopenharmony_ci\end_layout
494053a5a1b3Sopenharmony_ci
494153a5a1b3Sopenharmony_ci\end_inset
494253a5a1b3Sopenharmony_ci
494353a5a1b3Sopenharmony_ci argument is the default time step (in timestamp units) used for adjusting
494453a5a1b3Sopenharmony_ci the delay and doing concealment.
494553a5a1b3Sopenharmony_ci A value of 1 is always correct, but higher values may be more convenient
494653a5a1b3Sopenharmony_ci sometimes.
494753a5a1b3Sopenharmony_ci For example, if you are only able to do concealment on 20ms frames, there
494853a5a1b3Sopenharmony_ci is no point in the jitter buffer asking you to do it on one sample.
494953a5a1b3Sopenharmony_ci Another example is that for video, it makes no sense to adjust the delay
495053a5a1b3Sopenharmony_ci by less than a full frame.
495153a5a1b3Sopenharmony_ci The value provided can always be changed at a later time.
495253a5a1b3Sopenharmony_ci\end_layout
495353a5a1b3Sopenharmony_ci
495453a5a1b3Sopenharmony_ci\begin_layout Standard
495553a5a1b3Sopenharmony_ciThe jitter buffer API is based on the 
495653a5a1b3Sopenharmony_ci\begin_inset listings
495753a5a1b3Sopenharmony_ciinline true
495853a5a1b3Sopenharmony_cistatus open
495953a5a1b3Sopenharmony_ci
496053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
496153a5a1b3Sopenharmony_ci
496253a5a1b3Sopenharmony_ciJitterBufferPacket
496353a5a1b3Sopenharmony_ci\end_layout
496453a5a1b3Sopenharmony_ci
496553a5a1b3Sopenharmony_ci\end_inset
496653a5a1b3Sopenharmony_ci
496753a5a1b3Sopenharmony_ci type, which is defined as:
496853a5a1b3Sopenharmony_ci\begin_inset listings
496953a5a1b3Sopenharmony_ciinline false
497053a5a1b3Sopenharmony_cistatus open
497153a5a1b3Sopenharmony_ci
497253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
497353a5a1b3Sopenharmony_ci
497453a5a1b3Sopenharmony_citypedef struct {
497553a5a1b3Sopenharmony_ci\end_layout
497653a5a1b3Sopenharmony_ci
497753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
497853a5a1b3Sopenharmony_ci
497953a5a1b3Sopenharmony_ci   char        *data;       /* Data bytes contained in the packet */
498053a5a1b3Sopenharmony_ci\end_layout
498153a5a1b3Sopenharmony_ci
498253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
498353a5a1b3Sopenharmony_ci
498453a5a1b3Sopenharmony_ci   spx_uint32_t len;        /* Length of the packet in bytes */
498553a5a1b3Sopenharmony_ci\end_layout
498653a5a1b3Sopenharmony_ci
498753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
498853a5a1b3Sopenharmony_ci
498953a5a1b3Sopenharmony_ci   spx_uint32_t timestamp;  /* Timestamp for the packet */
499053a5a1b3Sopenharmony_ci\end_layout
499153a5a1b3Sopenharmony_ci
499253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
499353a5a1b3Sopenharmony_ci
499453a5a1b3Sopenharmony_ci   spx_uint32_t span;       /* Time covered by the packet (timestamp units)
499553a5a1b3Sopenharmony_ci */
499653a5a1b3Sopenharmony_ci\end_layout
499753a5a1b3Sopenharmony_ci
499853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
499953a5a1b3Sopenharmony_ci
500053a5a1b3Sopenharmony_ci} JitterBufferPacket; 
500153a5a1b3Sopenharmony_ci\end_layout
500253a5a1b3Sopenharmony_ci
500353a5a1b3Sopenharmony_ci\end_inset
500453a5a1b3Sopenharmony_ci
500553a5a1b3Sopenharmony_ci
500653a5a1b3Sopenharmony_ci\end_layout
500753a5a1b3Sopenharmony_ci
500853a5a1b3Sopenharmony_ci\begin_layout Standard
500953a5a1b3Sopenharmony_ciAs an example, for audio the timestamp field would be what is obtained from
501053a5a1b3Sopenharmony_ci the RTP timestamp field and the span would be the number of samples that
501153a5a1b3Sopenharmony_ci are encoded in the packet.
501253a5a1b3Sopenharmony_ci For Speex narrowband, span would be 160 if only one frame is included in
501353a5a1b3Sopenharmony_ci the packet.
501453a5a1b3Sopenharmony_ci 
501553a5a1b3Sopenharmony_ci\end_layout
501653a5a1b3Sopenharmony_ci
501753a5a1b3Sopenharmony_ci\begin_layout Standard
501853a5a1b3Sopenharmony_ciWhen a packet arrives, it need to be inserter into the jitter buffer by:
501953a5a1b3Sopenharmony_ci\begin_inset listings
502053a5a1b3Sopenharmony_ciinline false
502153a5a1b3Sopenharmony_cistatus open
502253a5a1b3Sopenharmony_ci
502353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
502453a5a1b3Sopenharmony_ci
502553a5a1b3Sopenharmony_ciJitterBufferPacket packet;
502653a5a1b3Sopenharmony_ci\end_layout
502753a5a1b3Sopenharmony_ci
502853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
502953a5a1b3Sopenharmony_ci
503053a5a1b3Sopenharmony_ci/* Fill in each field in the packet struct */
503153a5a1b3Sopenharmony_ci\end_layout
503253a5a1b3Sopenharmony_ci
503353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
503453a5a1b3Sopenharmony_ci
503553a5a1b3Sopenharmony_cijitter_buffer_put(state, &packet);
503653a5a1b3Sopenharmony_ci\end_layout
503753a5a1b3Sopenharmony_ci
503853a5a1b3Sopenharmony_ci\end_inset
503953a5a1b3Sopenharmony_ci
504053a5a1b3Sopenharmony_ci
504153a5a1b3Sopenharmony_ci\end_layout
504253a5a1b3Sopenharmony_ci
504353a5a1b3Sopenharmony_ci\begin_layout Standard
504453a5a1b3Sopenharmony_ciWhen the decoder is ready to decode a packet the packet to be decoded can
504553a5a1b3Sopenharmony_ci be obtained by: 
504653a5a1b3Sopenharmony_ci\begin_inset listings
504753a5a1b3Sopenharmony_ciinline false
504853a5a1b3Sopenharmony_cistatus open
504953a5a1b3Sopenharmony_ci
505053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
505153a5a1b3Sopenharmony_ci
505253a5a1b3Sopenharmony_ciint start_offset;
505353a5a1b3Sopenharmony_ci\end_layout
505453a5a1b3Sopenharmony_ci
505553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
505653a5a1b3Sopenharmony_ci
505753a5a1b3Sopenharmony_cierr = jitter_buffer_get(state, &packet, desired_span, &start_offset);
505853a5a1b3Sopenharmony_ci\end_layout
505953a5a1b3Sopenharmony_ci
506053a5a1b3Sopenharmony_ci\end_inset
506153a5a1b3Sopenharmony_ci
506253a5a1b3Sopenharmony_ci
506353a5a1b3Sopenharmony_ci\end_layout
506453a5a1b3Sopenharmony_ci
506553a5a1b3Sopenharmony_ci\begin_layout Standard
506653a5a1b3Sopenharmony_ciIf 
506753a5a1b3Sopenharmony_ci\begin_inset listings
506853a5a1b3Sopenharmony_ciinline true
506953a5a1b3Sopenharmony_cistatus open
507053a5a1b3Sopenharmony_ci
507153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
507253a5a1b3Sopenharmony_ci
507353a5a1b3Sopenharmony_cijitter_buffer_put()
507453a5a1b3Sopenharmony_ci\end_layout
507553a5a1b3Sopenharmony_ci
507653a5a1b3Sopenharmony_ci\end_inset
507753a5a1b3Sopenharmony_ci
507853a5a1b3Sopenharmony_ci and 
507953a5a1b3Sopenharmony_ci\begin_inset listings
508053a5a1b3Sopenharmony_ciinline true
508153a5a1b3Sopenharmony_cistatus collapsed
508253a5a1b3Sopenharmony_ci
508353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
508453a5a1b3Sopenharmony_ci
508553a5a1b3Sopenharmony_cijitter_buffer_get()
508653a5a1b3Sopenharmony_ci\end_layout
508753a5a1b3Sopenharmony_ci
508853a5a1b3Sopenharmony_ci\end_inset
508953a5a1b3Sopenharmony_ci
509053a5a1b3Sopenharmony_ci are called from different threads, then 
509153a5a1b3Sopenharmony_ci\series bold
509253a5a1b3Sopenharmony_ciyou need to protect the jitter buffer state with a mutex
509353a5a1b3Sopenharmony_ci\series default
509453a5a1b3Sopenharmony_ci.
509553a5a1b3Sopenharmony_ci 
509653a5a1b3Sopenharmony_ci\end_layout
509753a5a1b3Sopenharmony_ci
509853a5a1b3Sopenharmony_ci\begin_layout Standard
509953a5a1b3Sopenharmony_ciBecause the jitter buffer is designed not to use an explicit timer, it needs
510053a5a1b3Sopenharmony_ci to be told about the time explicitly.
510153a5a1b3Sopenharmony_ci This is done by calling: 
510253a5a1b3Sopenharmony_ci\begin_inset listings
510353a5a1b3Sopenharmony_ciinline false
510453a5a1b3Sopenharmony_cistatus open
510553a5a1b3Sopenharmony_ci
510653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
510753a5a1b3Sopenharmony_ci
510853a5a1b3Sopenharmony_cijitter_buffer_tick(state);
510953a5a1b3Sopenharmony_ci\end_layout
511053a5a1b3Sopenharmony_ci
511153a5a1b3Sopenharmony_ci\end_inset
511253a5a1b3Sopenharmony_ci
511353a5a1b3Sopenharmony_ci
511453a5a1b3Sopenharmony_ci\end_layout
511553a5a1b3Sopenharmony_ci
511653a5a1b3Sopenharmony_ci\begin_layout Standard
511753a5a1b3Sopenharmony_ciThis needs to be done periodically in the playing thread.
511853a5a1b3Sopenharmony_ci This will be the last jitter buffer call before going to sleep (until more
511953a5a1b3Sopenharmony_ci data is played back).
512053a5a1b3Sopenharmony_ci In some cases, it may be preferable to use 
512153a5a1b3Sopenharmony_ci\begin_inset listings
512253a5a1b3Sopenharmony_ciinline false
512353a5a1b3Sopenharmony_cistatus open
512453a5a1b3Sopenharmony_ci
512553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
512653a5a1b3Sopenharmony_ci
512753a5a1b3Sopenharmony_cijitter_buffer_remaining_span(state, remaining);
512853a5a1b3Sopenharmony_ci\end_layout
512953a5a1b3Sopenharmony_ci
513053a5a1b3Sopenharmony_ci\end_inset
513153a5a1b3Sopenharmony_ci
513253a5a1b3Sopenharmony_ci
513353a5a1b3Sopenharmony_ci\end_layout
513453a5a1b3Sopenharmony_ci
513553a5a1b3Sopenharmony_ci\begin_layout Standard
513653a5a1b3Sopenharmony_ciThe second argument is used to specify that we are still holding data that
513753a5a1b3Sopenharmony_ci has not been written to the playback device.
513853a5a1b3Sopenharmony_ci For instance, if 256 samples were needed by the soundcard (specified by
513953a5a1b3Sopenharmony_ci 
514053a5a1b3Sopenharmony_ci\begin_inset listings
514153a5a1b3Sopenharmony_ciinline true
514253a5a1b3Sopenharmony_cistatus collapsed
514353a5a1b3Sopenharmony_ci
514453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
514553a5a1b3Sopenharmony_ci
514653a5a1b3Sopenharmony_cidesired_span
514753a5a1b3Sopenharmony_ci\end_layout
514853a5a1b3Sopenharmony_ci
514953a5a1b3Sopenharmony_ci\end_inset
515053a5a1b3Sopenharmony_ci
515153a5a1b3Sopenharmony_ci), but 
515253a5a1b3Sopenharmony_ci\begin_inset listings
515353a5a1b3Sopenharmony_ciinline true
515453a5a1b3Sopenharmony_cistatus collapsed
515553a5a1b3Sopenharmony_ci
515653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
515753a5a1b3Sopenharmony_ci
515853a5a1b3Sopenharmony_cijitter_buffer_get()
515953a5a1b3Sopenharmony_ci\end_layout
516053a5a1b3Sopenharmony_ci
516153a5a1b3Sopenharmony_ci\end_inset
516253a5a1b3Sopenharmony_ci
516353a5a1b3Sopenharmony_ci returned 320 samples, we would have 
516453a5a1b3Sopenharmony_ci\begin_inset listings
516553a5a1b3Sopenharmony_ciinline true
516653a5a1b3Sopenharmony_cistatus open
516753a5a1b3Sopenharmony_ci
516853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
516953a5a1b3Sopenharmony_ci
517053a5a1b3Sopenharmony_ciremaining=64
517153a5a1b3Sopenharmony_ci\end_layout
517253a5a1b3Sopenharmony_ci
517353a5a1b3Sopenharmony_ci\end_inset
517453a5a1b3Sopenharmony_ci
517553a5a1b3Sopenharmony_ci.
517653a5a1b3Sopenharmony_ci\end_layout
517753a5a1b3Sopenharmony_ci
517853a5a1b3Sopenharmony_ci\begin_layout Section
517953a5a1b3Sopenharmony_ciResampler
518053a5a1b3Sopenharmony_ci\end_layout
518153a5a1b3Sopenharmony_ci
518253a5a1b3Sopenharmony_ci\begin_layout Standard
518353a5a1b3Sopenharmony_ciSpeex includes a resampling modules.
518453a5a1b3Sopenharmony_ci To make use of the resampler, it is necessary to include its header file:
518553a5a1b3Sopenharmony_ci\end_layout
518653a5a1b3Sopenharmony_ci
518753a5a1b3Sopenharmony_ci\begin_layout Standard
518853a5a1b3Sopenharmony_ci\begin_inset listings
518953a5a1b3Sopenharmony_ciinline false
519053a5a1b3Sopenharmony_cistatus open
519153a5a1b3Sopenharmony_ci
519253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
519353a5a1b3Sopenharmony_ci
519453a5a1b3Sopenharmony_ci#include <speex/speex_resampler.h>
519553a5a1b3Sopenharmony_ci\end_layout
519653a5a1b3Sopenharmony_ci
519753a5a1b3Sopenharmony_ci\end_inset
519853a5a1b3Sopenharmony_ci
519953a5a1b3Sopenharmony_ci
520053a5a1b3Sopenharmony_ci\end_layout
520153a5a1b3Sopenharmony_ci
520253a5a1b3Sopenharmony_ci\begin_layout Standard
520353a5a1b3Sopenharmony_ciFor each stream that is to be resampled, it is necessary to create a resampler
520453a5a1b3Sopenharmony_ci state with:
520553a5a1b3Sopenharmony_ci\end_layout
520653a5a1b3Sopenharmony_ci
520753a5a1b3Sopenharmony_ci\begin_layout Standard
520853a5a1b3Sopenharmony_ci\begin_inset listings
520953a5a1b3Sopenharmony_ciinline false
521053a5a1b3Sopenharmony_cistatus open
521153a5a1b3Sopenharmony_ci
521253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
521353a5a1b3Sopenharmony_ci
521453a5a1b3Sopenharmony_ciSpeexResamplerState *resampler;
521553a5a1b3Sopenharmony_ci\end_layout
521653a5a1b3Sopenharmony_ci
521753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
521853a5a1b3Sopenharmony_ci
521953a5a1b3Sopenharmony_ciresampler = speex_resampler_init(nb_channels, input_rate, output_rate, quality,
522053a5a1b3Sopenharmony_ci &err);
522153a5a1b3Sopenharmony_ci\end_layout
522253a5a1b3Sopenharmony_ci
522353a5a1b3Sopenharmony_ci\end_inset
522453a5a1b3Sopenharmony_ci
522553a5a1b3Sopenharmony_ci
522653a5a1b3Sopenharmony_ci\end_layout
522753a5a1b3Sopenharmony_ci
522853a5a1b3Sopenharmony_ci\begin_layout Standard
522953a5a1b3Sopenharmony_ciwhere 
523053a5a1b3Sopenharmony_ci\begin_inset listings
523153a5a1b3Sopenharmony_ciinline true
523253a5a1b3Sopenharmony_cistatus collapsed
523353a5a1b3Sopenharmony_ci
523453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
523553a5a1b3Sopenharmony_ci
523653a5a1b3Sopenharmony_cinb_channels
523753a5a1b3Sopenharmony_ci\end_layout
523853a5a1b3Sopenharmony_ci
523953a5a1b3Sopenharmony_ci\end_inset
524053a5a1b3Sopenharmony_ci
524153a5a1b3Sopenharmony_ci is the number of channels that will be used (either interleaved or non-interlea
524253a5a1b3Sopenharmony_cived), 
524353a5a1b3Sopenharmony_ci\begin_inset listings
524453a5a1b3Sopenharmony_ciinline true
524553a5a1b3Sopenharmony_cistatus collapsed
524653a5a1b3Sopenharmony_ci
524753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
524853a5a1b3Sopenharmony_ci
524953a5a1b3Sopenharmony_ciinput_rate
525053a5a1b3Sopenharmony_ci\end_layout
525153a5a1b3Sopenharmony_ci
525253a5a1b3Sopenharmony_ci\end_inset
525353a5a1b3Sopenharmony_ci
525453a5a1b3Sopenharmony_ci is the sampling rate of the input stream, 
525553a5a1b3Sopenharmony_ci\begin_inset listings
525653a5a1b3Sopenharmony_ciinline true
525753a5a1b3Sopenharmony_cistatus collapsed
525853a5a1b3Sopenharmony_ci
525953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
526053a5a1b3Sopenharmony_ci
526153a5a1b3Sopenharmony_cioutput_rate
526253a5a1b3Sopenharmony_ci\end_layout
526353a5a1b3Sopenharmony_ci
526453a5a1b3Sopenharmony_ci\end_inset
526553a5a1b3Sopenharmony_ci
526653a5a1b3Sopenharmony_ci is the sampling rate of the output stream and 
526753a5a1b3Sopenharmony_ci\begin_inset listings
526853a5a1b3Sopenharmony_ciinline true
526953a5a1b3Sopenharmony_cistatus collapsed
527053a5a1b3Sopenharmony_ci
527153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
527253a5a1b3Sopenharmony_ci
527353a5a1b3Sopenharmony_ciquality
527453a5a1b3Sopenharmony_ci\end_layout
527553a5a1b3Sopenharmony_ci
527653a5a1b3Sopenharmony_ci\end_inset
527753a5a1b3Sopenharmony_ci
527853a5a1b3Sopenharmony_ci is the requested quality setting (0 to 10).
527953a5a1b3Sopenharmony_ci The quality parameter is useful for controlling the quality/complexity/latency
528053a5a1b3Sopenharmony_ci tradeoff.
528153a5a1b3Sopenharmony_ci Using a higher quality setting means less noise/aliasing, a higher complexity
528253a5a1b3Sopenharmony_ci and a higher latency.
528353a5a1b3Sopenharmony_ci Usually, a quality of 3 is acceptable for most desktop uses and quality
528453a5a1b3Sopenharmony_ci 10 is mostly recommended for pro audio work.
528553a5a1b3Sopenharmony_ci Quality 0 usually has a decent sound (certainly better than using linear
528653a5a1b3Sopenharmony_ci interpolation resampling), but artifacts may be heard.
528753a5a1b3Sopenharmony_ci\end_layout
528853a5a1b3Sopenharmony_ci
528953a5a1b3Sopenharmony_ci\begin_layout Standard
529053a5a1b3Sopenharmony_ciThe actual resampling is performed using
529153a5a1b3Sopenharmony_ci\end_layout
529253a5a1b3Sopenharmony_ci
529353a5a1b3Sopenharmony_ci\begin_layout Standard
529453a5a1b3Sopenharmony_ci\begin_inset listings
529553a5a1b3Sopenharmony_ciinline false
529653a5a1b3Sopenharmony_cistatus open
529753a5a1b3Sopenharmony_ci
529853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
529953a5a1b3Sopenharmony_ci
530053a5a1b3Sopenharmony_cierr = speex_resampler_process_int(resampler, channelID, in, &in_length,
530153a5a1b3Sopenharmony_ci out, &out_length);
530253a5a1b3Sopenharmony_ci\end_layout
530353a5a1b3Sopenharmony_ci
530453a5a1b3Sopenharmony_ci\end_inset
530553a5a1b3Sopenharmony_ci
530653a5a1b3Sopenharmony_ciwhere 
530753a5a1b3Sopenharmony_ci\begin_inset listings
530853a5a1b3Sopenharmony_ciinline true
530953a5a1b3Sopenharmony_cistatus collapsed
531053a5a1b3Sopenharmony_ci
531153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
531253a5a1b3Sopenharmony_ci
531353a5a1b3Sopenharmony_cichannelID
531453a5a1b3Sopenharmony_ci\end_layout
531553a5a1b3Sopenharmony_ci
531653a5a1b3Sopenharmony_ci\end_inset
531753a5a1b3Sopenharmony_ci
531853a5a1b3Sopenharmony_ci is the ID of the channel to be processed.
531953a5a1b3Sopenharmony_ci For a mono stream, use 0.
532053a5a1b3Sopenharmony_ci The 
532153a5a1b3Sopenharmony_ci\emph on
532253a5a1b3Sopenharmony_ciin
532353a5a1b3Sopenharmony_ci\emph default
532453a5a1b3Sopenharmony_ci pointer points to the first sample of the input buffer for the selected
532553a5a1b3Sopenharmony_ci channel and 
532653a5a1b3Sopenharmony_ci\begin_inset listings
532753a5a1b3Sopenharmony_ciinline true
532853a5a1b3Sopenharmony_cistatus collapsed
532953a5a1b3Sopenharmony_ci
533053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
533153a5a1b3Sopenharmony_ci
533253a5a1b3Sopenharmony_ciout
533353a5a1b3Sopenharmony_ci\end_layout
533453a5a1b3Sopenharmony_ci
533553a5a1b3Sopenharmony_ci\end_inset
533653a5a1b3Sopenharmony_ci
533753a5a1b3Sopenharmony_ci points to the first sample of the output.
533853a5a1b3Sopenharmony_ci The size of the input and output buffers are specified by 
533953a5a1b3Sopenharmony_ci\begin_inset listings
534053a5a1b3Sopenharmony_ciinline true
534153a5a1b3Sopenharmony_cistatus collapsed
534253a5a1b3Sopenharmony_ci
534353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
534453a5a1b3Sopenharmony_ci
534553a5a1b3Sopenharmony_ciin_length
534653a5a1b3Sopenharmony_ci\end_layout
534753a5a1b3Sopenharmony_ci
534853a5a1b3Sopenharmony_ci\end_inset
534953a5a1b3Sopenharmony_ci
535053a5a1b3Sopenharmony_ci and 
535153a5a1b3Sopenharmony_ci\begin_inset listings
535253a5a1b3Sopenharmony_ciinline true
535353a5a1b3Sopenharmony_cistatus collapsed
535453a5a1b3Sopenharmony_ci
535553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
535653a5a1b3Sopenharmony_ci
535753a5a1b3Sopenharmony_ciout_length
535853a5a1b3Sopenharmony_ci\end_layout
535953a5a1b3Sopenharmony_ci
536053a5a1b3Sopenharmony_ci\end_inset
536153a5a1b3Sopenharmony_ci
536253a5a1b3Sopenharmony_ci respectively.
536353a5a1b3Sopenharmony_ci Upon completion, these values are replaced by the number of samples read
536453a5a1b3Sopenharmony_ci and written by the resampler.
536553a5a1b3Sopenharmony_ci Unless an error occurs, either all input samples will be read or all output
536653a5a1b3Sopenharmony_ci samples will be written to (or both).
536753a5a1b3Sopenharmony_ci For floating-point samples, the function 
536853a5a1b3Sopenharmony_ci\begin_inset listings
536953a5a1b3Sopenharmony_ciinline true
537053a5a1b3Sopenharmony_cistatus open
537153a5a1b3Sopenharmony_ci
537253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
537353a5a1b3Sopenharmony_ci
537453a5a1b3Sopenharmony_cispeex_resampler_process_float()
537553a5a1b3Sopenharmony_ci\end_layout
537653a5a1b3Sopenharmony_ci
537753a5a1b3Sopenharmony_ci\end_inset
537853a5a1b3Sopenharmony_ci
537953a5a1b3Sopenharmony_ci behaves similarly.
538053a5a1b3Sopenharmony_ci\end_layout
538153a5a1b3Sopenharmony_ci
538253a5a1b3Sopenharmony_ci\begin_layout Standard
538353a5a1b3Sopenharmony_ciIt is also possible to process multiple channels at once.
538453a5a1b3Sopenharmony_ci To do that, you can use speex_resampler_process_interleaved_int() or 
538553a5a1b3Sopenharmony_ci\begin_inset listings
538653a5a1b3Sopenharmony_ciinline true
538753a5a1b3Sopenharmony_cistatus open
538853a5a1b3Sopenharmony_ci
538953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
539053a5a1b3Sopenharmony_ci
539153a5a1b3Sopenharmony_cispeex_resampler_process_interleaved_float()
539253a5a1b3Sopenharmony_ci\end_layout
539353a5a1b3Sopenharmony_ci
539453a5a1b3Sopenharmony_ci\end_inset
539553a5a1b3Sopenharmony_ci
539653a5a1b3Sopenharmony_ci.
539753a5a1b3Sopenharmony_ci The arguments are the same except that there is no 
539853a5a1b3Sopenharmony_ci\begin_inset listings
539953a5a1b3Sopenharmony_ciinline true
540053a5a1b3Sopenharmony_cistatus collapsed
540153a5a1b3Sopenharmony_ci
540253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
540353a5a1b3Sopenharmony_ci
540453a5a1b3Sopenharmony_cichannelID
540553a5a1b3Sopenharmony_ci\end_layout
540653a5a1b3Sopenharmony_ci
540753a5a1b3Sopenharmony_ci\end_inset
540853a5a1b3Sopenharmony_ci
540953a5a1b3Sopenharmony_ci argument.
541053a5a1b3Sopenharmony_ci Note that the 
541153a5a1b3Sopenharmony_ci\series bold
541253a5a1b3Sopenharmony_cilength parameters are per-channel
541353a5a1b3Sopenharmony_ci\series default
541453a5a1b3Sopenharmony_ci.
541553a5a1b3Sopenharmony_ci So if you have 1024 samples for each of 4 channels, you pass 1024 and not
541653a5a1b3Sopenharmony_ci 4096.
541753a5a1b3Sopenharmony_ci\end_layout
541853a5a1b3Sopenharmony_ci
541953a5a1b3Sopenharmony_ci\begin_layout Standard
542053a5a1b3Sopenharmony_ciThe resampler allows changing the quality and input/output sampling frequencies
542153a5a1b3Sopenharmony_ci on the fly without glitches.
542253a5a1b3Sopenharmony_ci This can be done with calls such as 
542353a5a1b3Sopenharmony_ci\begin_inset listings
542453a5a1b3Sopenharmony_ciinline true
542553a5a1b3Sopenharmony_cistatus open
542653a5a1b3Sopenharmony_ci
542753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
542853a5a1b3Sopenharmony_ci
542953a5a1b3Sopenharmony_cispeex_resampler_set_quality()
543053a5a1b3Sopenharmony_ci\end_layout
543153a5a1b3Sopenharmony_ci
543253a5a1b3Sopenharmony_ci\end_inset
543353a5a1b3Sopenharmony_ci
543453a5a1b3Sopenharmony_ci and 
543553a5a1b3Sopenharmony_ci\begin_inset listings
543653a5a1b3Sopenharmony_ciinline true
543753a5a1b3Sopenharmony_cistatus open
543853a5a1b3Sopenharmony_ci
543953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
544053a5a1b3Sopenharmony_ci
544153a5a1b3Sopenharmony_cispeex_resampler_set_rate()
544253a5a1b3Sopenharmony_ci\end_layout
544353a5a1b3Sopenharmony_ci
544453a5a1b3Sopenharmony_ci\end_inset
544553a5a1b3Sopenharmony_ci
544653a5a1b3Sopenharmony_ci.
544753a5a1b3Sopenharmony_ci The only side effect is that a new filter will have to be recomputed, consuming
544853a5a1b3Sopenharmony_ci many CPU cycles.
544953a5a1b3Sopenharmony_ci 
545053a5a1b3Sopenharmony_ci\end_layout
545153a5a1b3Sopenharmony_ci
545253a5a1b3Sopenharmony_ci\begin_layout Standard
545353a5a1b3Sopenharmony_ciWhen resampling a file, it is often desirable to have the output file perfectly
545453a5a1b3Sopenharmony_ci synchronised with the input.
545553a5a1b3Sopenharmony_ci To do that, you need to call 
545653a5a1b3Sopenharmony_ci\begin_inset listings
545753a5a1b3Sopenharmony_ciinline true
545853a5a1b3Sopenharmony_cistatus open
545953a5a1b3Sopenharmony_ci
546053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
546153a5a1b3Sopenharmony_ci
546253a5a1b3Sopenharmony_cispeex_resampler_skip_zeros()
546353a5a1b3Sopenharmony_ci\end_layout
546453a5a1b3Sopenharmony_ci
546553a5a1b3Sopenharmony_ci\end_inset
546653a5a1b3Sopenharmony_ci
546753a5a1b3Sopenharmony_ci 
546853a5a1b3Sopenharmony_ci\series bold
546953a5a1b3Sopenharmony_cibefore
547053a5a1b3Sopenharmony_ci\series default
547153a5a1b3Sopenharmony_ci you start processing any samples.
547253a5a1b3Sopenharmony_ci For real-time applications (e.g.
547353a5a1b3Sopenharmony_ci VoIP), it is not recommended to do that as the first process frame will
547453a5a1b3Sopenharmony_ci be shorter to compensate for the delay (the skipped zeros).
547553a5a1b3Sopenharmony_ci Instead, in real-time applications you may want to know how many delay
547653a5a1b3Sopenharmony_ci is introduced by the resampler.
547753a5a1b3Sopenharmony_ci This can be done at run-time with 
547853a5a1b3Sopenharmony_ci\begin_inset listings
547953a5a1b3Sopenharmony_ciinline true
548053a5a1b3Sopenharmony_cistatus open
548153a5a1b3Sopenharmony_ci
548253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
548353a5a1b3Sopenharmony_ci
548453a5a1b3Sopenharmony_cispeex_resampler_get_input_latency()
548553a5a1b3Sopenharmony_ci\end_layout
548653a5a1b3Sopenharmony_ci
548753a5a1b3Sopenharmony_ci\end_inset
548853a5a1b3Sopenharmony_ci
548953a5a1b3Sopenharmony_ci and 
549053a5a1b3Sopenharmony_ci\begin_inset listings
549153a5a1b3Sopenharmony_ciinline true
549253a5a1b3Sopenharmony_cistatus open
549353a5a1b3Sopenharmony_ci
549453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
549553a5a1b3Sopenharmony_ci
549653a5a1b3Sopenharmony_cispeex_resampler_get_output_latency()
549753a5a1b3Sopenharmony_ci\end_layout
549853a5a1b3Sopenharmony_ci
549953a5a1b3Sopenharmony_ci\end_inset
550053a5a1b3Sopenharmony_ci
550153a5a1b3Sopenharmony_ci functions.
550253a5a1b3Sopenharmony_ci First function returns delay measured in samples at input samplerate, while
550353a5a1b3Sopenharmony_ci second returns delay measured in samples at output samplerate.
550453a5a1b3Sopenharmony_ci\end_layout
550553a5a1b3Sopenharmony_ci
550653a5a1b3Sopenharmony_ci\begin_layout Standard
550753a5a1b3Sopenharmony_ciTo destroy a resampler state, just call 
550853a5a1b3Sopenharmony_ci\begin_inset listings
550953a5a1b3Sopenharmony_ciinline true
551053a5a1b3Sopenharmony_cistatus open
551153a5a1b3Sopenharmony_ci
551253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
551353a5a1b3Sopenharmony_ci
551453a5a1b3Sopenharmony_cispeex_resampler_destroy()
551553a5a1b3Sopenharmony_ci\end_layout
551653a5a1b3Sopenharmony_ci
551753a5a1b3Sopenharmony_ci\end_inset
551853a5a1b3Sopenharmony_ci
551953a5a1b3Sopenharmony_ci.
552053a5a1b3Sopenharmony_ci\end_layout
552153a5a1b3Sopenharmony_ci
552253a5a1b3Sopenharmony_ci\begin_layout Section
552353a5a1b3Sopenharmony_ciRing Buffer
552453a5a1b3Sopenharmony_ci\end_layout
552553a5a1b3Sopenharmony_ci
552653a5a1b3Sopenharmony_ci\begin_layout Standard
552753a5a1b3Sopenharmony_ciIn some cases, it is necessary to interface components that use different
552853a5a1b3Sopenharmony_ci block sizes.
552953a5a1b3Sopenharmony_ci For example, it is possible that the soundcard does not support reading/writing
553053a5a1b3Sopenharmony_ci in blocks of 20
553153a5a1b3Sopenharmony_ci\begin_inset space ~
553253a5a1b3Sopenharmony_ci\end_inset
553353a5a1b3Sopenharmony_ci
553453a5a1b3Sopenharmony_cims or sometimes, complicated resampling ratios mean that the blocks don't
553553a5a1b3Sopenharmony_ci always have the same time.
553653a5a1b3Sopenharmony_ci In thoses cases, it is often necessary to buffer a bit of audio using a
553753a5a1b3Sopenharmony_ci ring buffer.
553853a5a1b3Sopenharmony_ci\end_layout
553953a5a1b3Sopenharmony_ci
554053a5a1b3Sopenharmony_ci\begin_layout Standard
554153a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
554253a5a1b3Sopenharmony_ci\end_inset
554353a5a1b3Sopenharmony_ci
554453a5a1b3Sopenharmony_ci
554553a5a1b3Sopenharmony_ci\end_layout
554653a5a1b3Sopenharmony_ci
554753a5a1b3Sopenharmony_ci\begin_layout Chapter
554853a5a1b3Sopenharmony_ciFormats and standards
554953a5a1b3Sopenharmony_ci\begin_inset Index
555053a5a1b3Sopenharmony_cistatus collapsed
555153a5a1b3Sopenharmony_ci
555253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
555353a5a1b3Sopenharmony_cistandards
555453a5a1b3Sopenharmony_ci\end_layout
555553a5a1b3Sopenharmony_ci
555653a5a1b3Sopenharmony_ci\end_inset
555753a5a1b3Sopenharmony_ci
555853a5a1b3Sopenharmony_ci
555953a5a1b3Sopenharmony_ci\begin_inset CommandInset label
556053a5a1b3Sopenharmony_ciLatexCommand label
556153a5a1b3Sopenharmony_ciname "sec:Formats-and-standards"
556253a5a1b3Sopenharmony_ci
556353a5a1b3Sopenharmony_ci\end_inset
556453a5a1b3Sopenharmony_ci
556553a5a1b3Sopenharmony_ci
556653a5a1b3Sopenharmony_ci\end_layout
556753a5a1b3Sopenharmony_ci
556853a5a1b3Sopenharmony_ci\begin_layout Standard
556953a5a1b3Sopenharmony_ciSpeex can encode speech in both narrowband and wideband and provides different
557053a5a1b3Sopenharmony_ci bit-rates.
557153a5a1b3Sopenharmony_ci However, not all features need to be supported by a certain implementation
557253a5a1b3Sopenharmony_ci or device.
557353a5a1b3Sopenharmony_ci In order to be called 
557453a5a1b3Sopenharmony_ci\begin_inset Quotes eld
557553a5a1b3Sopenharmony_ci\end_inset
557653a5a1b3Sopenharmony_ci
557753a5a1b3Sopenharmony_ciSpeex compatible
557853a5a1b3Sopenharmony_ci\begin_inset Quotes erd
557953a5a1b3Sopenharmony_ci\end_inset
558053a5a1b3Sopenharmony_ci
558153a5a1b3Sopenharmony_ci (whatever that means), an implementation must implement at least a basic
558253a5a1b3Sopenharmony_ci set of features.
558353a5a1b3Sopenharmony_ci\end_layout
558453a5a1b3Sopenharmony_ci
558553a5a1b3Sopenharmony_ci\begin_layout Standard
558653a5a1b3Sopenharmony_ciAt the minimum, all narrowband modes of operation MUST be supported at the
558753a5a1b3Sopenharmony_ci decoder.
558853a5a1b3Sopenharmony_ci This includes the decoding of a wideband bit-stream by the narrowband decoder
558953a5a1b3Sopenharmony_ci\begin_inset Foot
559053a5a1b3Sopenharmony_cistatus collapsed
559153a5a1b3Sopenharmony_ci
559253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
559353a5a1b3Sopenharmony_ciThe wideband bit-stream contains an embedded narrowband bit-stream which
559453a5a1b3Sopenharmony_ci can be decoded alone
559553a5a1b3Sopenharmony_ci\end_layout
559653a5a1b3Sopenharmony_ci
559753a5a1b3Sopenharmony_ci\end_inset
559853a5a1b3Sopenharmony_ci
559953a5a1b3Sopenharmony_ci.
560053a5a1b3Sopenharmony_ci If present, a wideband decoder MUST be able to decode a narrowband stream,
560153a5a1b3Sopenharmony_ci and MAY either be able to decode all wideband modes or be able to decode
560253a5a1b3Sopenharmony_ci the embedded narrowband part of all modes (which includes ignoring the
560353a5a1b3Sopenharmony_ci high-band bits).
560453a5a1b3Sopenharmony_ci\end_layout
560553a5a1b3Sopenharmony_ci
560653a5a1b3Sopenharmony_ci\begin_layout Standard
560753a5a1b3Sopenharmony_ciFor encoders, at least one narrowband or wideband mode MUST be supported.
560853a5a1b3Sopenharmony_ci The main reason why all encoding modes do not have to be supported is that
560953a5a1b3Sopenharmony_ci some platforms may not be able to handle the complexity of encoding in
561053a5a1b3Sopenharmony_ci some modes.
561153a5a1b3Sopenharmony_ci\end_layout
561253a5a1b3Sopenharmony_ci
561353a5a1b3Sopenharmony_ci\begin_layout Section
561453a5a1b3Sopenharmony_ciRTP
561553a5a1b3Sopenharmony_ci\begin_inset Index
561653a5a1b3Sopenharmony_cistatus collapsed
561753a5a1b3Sopenharmony_ci
561853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
561953a5a1b3Sopenharmony_ciRTP
562053a5a1b3Sopenharmony_ci\end_layout
562153a5a1b3Sopenharmony_ci
562253a5a1b3Sopenharmony_ci\end_inset
562353a5a1b3Sopenharmony_ci
562453a5a1b3Sopenharmony_ci Payload Format 
562553a5a1b3Sopenharmony_ci\end_layout
562653a5a1b3Sopenharmony_ci
562753a5a1b3Sopenharmony_ci\begin_layout Standard
562853a5a1b3Sopenharmony_ciThe RTP payload draft is included in appendix 
562953a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
563053a5a1b3Sopenharmony_ciLatexCommand ref
563153a5a1b3Sopenharmony_cireference "sec:IETF-draft"
563253a5a1b3Sopenharmony_ci
563353a5a1b3Sopenharmony_ci\end_inset
563453a5a1b3Sopenharmony_ci
563553a5a1b3Sopenharmony_ci and the latest version is available at 
563653a5a1b3Sopenharmony_ci\begin_inset Flex URL
563753a5a1b3Sopenharmony_cistatus collapsed
563853a5a1b3Sopenharmony_ci
563953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
564053a5a1b3Sopenharmony_ci
564153a5a1b3Sopenharmony_cihttp://www.speex.org/drafts/latest
564253a5a1b3Sopenharmony_ci\end_layout
564353a5a1b3Sopenharmony_ci
564453a5a1b3Sopenharmony_ci\end_inset
564553a5a1b3Sopenharmony_ci
564653a5a1b3Sopenharmony_ci.
564753a5a1b3Sopenharmony_ci This draft has been sent (2003/02/26) to the Internet Engineering Task
564853a5a1b3Sopenharmony_ci Force (IETF) and will be discussed at the March 18th meeting in San Francisco.
564953a5a1b3Sopenharmony_ci 
565053a5a1b3Sopenharmony_ci\end_layout
565153a5a1b3Sopenharmony_ci
565253a5a1b3Sopenharmony_ci\begin_layout Section
565353a5a1b3Sopenharmony_ciMIME Type
565453a5a1b3Sopenharmony_ci\end_layout
565553a5a1b3Sopenharmony_ci
565653a5a1b3Sopenharmony_ci\begin_layout Standard
565753a5a1b3Sopenharmony_ciFor now, you should use the MIME type audio/x-speex for Speex-in-Ogg.
565853a5a1b3Sopenharmony_ci We will apply for type 
565953a5a1b3Sopenharmony_ci\family typewriter
566053a5a1b3Sopenharmony_ciaudio/speex
566153a5a1b3Sopenharmony_ci\family default
566253a5a1b3Sopenharmony_ci in the near future.
566353a5a1b3Sopenharmony_ci\end_layout
566453a5a1b3Sopenharmony_ci
566553a5a1b3Sopenharmony_ci\begin_layout Section
566653a5a1b3Sopenharmony_ciOgg
566753a5a1b3Sopenharmony_ci\begin_inset Index
566853a5a1b3Sopenharmony_cistatus collapsed
566953a5a1b3Sopenharmony_ci
567053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
567153a5a1b3Sopenharmony_ciOgg
567253a5a1b3Sopenharmony_ci\end_layout
567353a5a1b3Sopenharmony_ci
567453a5a1b3Sopenharmony_ci\end_inset
567553a5a1b3Sopenharmony_ci
567653a5a1b3Sopenharmony_ci file format
567753a5a1b3Sopenharmony_ci\end_layout
567853a5a1b3Sopenharmony_ci
567953a5a1b3Sopenharmony_ci\begin_layout Standard
568053a5a1b3Sopenharmony_ciSpeex bit-streams can be stored in Ogg files.
568153a5a1b3Sopenharmony_ci In this case, the first packet of the Ogg file contains the Speex header
568253a5a1b3Sopenharmony_ci described in table 
568353a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
568453a5a1b3Sopenharmony_ciLatexCommand ref
568553a5a1b3Sopenharmony_cireference "cap:ogg_speex_header"
568653a5a1b3Sopenharmony_ci
568753a5a1b3Sopenharmony_ci\end_inset
568853a5a1b3Sopenharmony_ci
568953a5a1b3Sopenharmony_ci.
569053a5a1b3Sopenharmony_ci All integer fields in the headers are stored as little-endian.
569153a5a1b3Sopenharmony_ci The 
569253a5a1b3Sopenharmony_ci\family typewriter
569353a5a1b3Sopenharmony_cispeex_string
569453a5a1b3Sopenharmony_ci\family default
569553a5a1b3Sopenharmony_ci field must contain the 
569653a5a1b3Sopenharmony_ci\begin_inset Quotes eld
569753a5a1b3Sopenharmony_ci\end_inset
569853a5a1b3Sopenharmony_ci
569953a5a1b3Sopenharmony_ci
570053a5a1b3Sopenharmony_ci\family typewriter
570153a5a1b3Sopenharmony_ciSpeex
570253a5a1b3Sopenharmony_ci\family default
570353a5a1b3Sopenharmony_ci
570453a5a1b3Sopenharmony_ci\begin_inset space ~
570553a5a1b3Sopenharmony_ci\end_inset
570653a5a1b3Sopenharmony_ci
570753a5a1b3Sopenharmony_ci
570853a5a1b3Sopenharmony_ci\begin_inset space ~
570953a5a1b3Sopenharmony_ci\end_inset
571053a5a1b3Sopenharmony_ci
571153a5a1b3Sopenharmony_ci
571253a5a1b3Sopenharmony_ci\begin_inset space ~
571353a5a1b3Sopenharmony_ci\end_inset
571453a5a1b3Sopenharmony_ci
571553a5a1b3Sopenharmony_ci
571653a5a1b3Sopenharmony_ci\begin_inset Quotes erd
571753a5a1b3Sopenharmony_ci\end_inset
571853a5a1b3Sopenharmony_ci
571953a5a1b3Sopenharmony_ci (with 3 trailing spaces), which identifies the bit-stream.
572053a5a1b3Sopenharmony_ci The next field, 
572153a5a1b3Sopenharmony_ci\family typewriter
572253a5a1b3Sopenharmony_cispeex_version
572353a5a1b3Sopenharmony_ci\family default
572453a5a1b3Sopenharmony_ci contains the version of Speex that encoded the file.
572553a5a1b3Sopenharmony_ci For now, refer to speex_header.[ch] for more info.
572653a5a1b3Sopenharmony_ci The 
572753a5a1b3Sopenharmony_ci\emph on
572853a5a1b3Sopenharmony_cibeginning of stream
572953a5a1b3Sopenharmony_ci\emph default
573053a5a1b3Sopenharmony_ci (
573153a5a1b3Sopenharmony_ci\family typewriter
573253a5a1b3Sopenharmony_cib_o_s
573353a5a1b3Sopenharmony_ci\family default
573453a5a1b3Sopenharmony_ci) flag is set to 1 for the header.
573553a5a1b3Sopenharmony_ci The header packet has 
573653a5a1b3Sopenharmony_ci\family typewriter
573753a5a1b3Sopenharmony_cipacketno=0
573853a5a1b3Sopenharmony_ci\family default
573953a5a1b3Sopenharmony_ci and 
574053a5a1b3Sopenharmony_ci\family typewriter
574153a5a1b3Sopenharmony_cigranulepos=0
574253a5a1b3Sopenharmony_ci\family default
574353a5a1b3Sopenharmony_ci.
574453a5a1b3Sopenharmony_ci\end_layout
574553a5a1b3Sopenharmony_ci
574653a5a1b3Sopenharmony_ci\begin_layout Standard
574753a5a1b3Sopenharmony_ciThe second packet contains the Speex comment header.
574853a5a1b3Sopenharmony_ci The format used is the Vorbis comment format described here: http://www.xiph.org/
574953a5a1b3Sopenharmony_ciogg/vorbis/doc/v-comment.html .
575053a5a1b3Sopenharmony_ci This packet has 
575153a5a1b3Sopenharmony_ci\family typewriter
575253a5a1b3Sopenharmony_cipacketno=1
575353a5a1b3Sopenharmony_ci\family default
575453a5a1b3Sopenharmony_ci and 
575553a5a1b3Sopenharmony_ci\family typewriter
575653a5a1b3Sopenharmony_cigranulepos=0
575753a5a1b3Sopenharmony_ci\family default
575853a5a1b3Sopenharmony_ci.
575953a5a1b3Sopenharmony_ci\end_layout
576053a5a1b3Sopenharmony_ci
576153a5a1b3Sopenharmony_ci\begin_layout Standard
576253a5a1b3Sopenharmony_ciThe third and subsequent packets each contain one or more (number found
576353a5a1b3Sopenharmony_ci in header) Speex frames.
576453a5a1b3Sopenharmony_ci These are identified with 
576553a5a1b3Sopenharmony_ci\family typewriter
576653a5a1b3Sopenharmony_cipacketno
576753a5a1b3Sopenharmony_ci\family default
576853a5a1b3Sopenharmony_ci starting from 2 and the 
576953a5a1b3Sopenharmony_ci\family typewriter
577053a5a1b3Sopenharmony_cigranulepos
577153a5a1b3Sopenharmony_ci\family default
577253a5a1b3Sopenharmony_ci is the number of the last sample encoded in that packet.
577353a5a1b3Sopenharmony_ci The last of these packets has the 
577453a5a1b3Sopenharmony_ci\emph on
577553a5a1b3Sopenharmony_ciend of stream
577653a5a1b3Sopenharmony_ci\emph default
577753a5a1b3Sopenharmony_ci (
577853a5a1b3Sopenharmony_ci\family typewriter
577953a5a1b3Sopenharmony_cie_o_s
578053a5a1b3Sopenharmony_ci\family default
578153a5a1b3Sopenharmony_ci) flag is set to 1.
578253a5a1b3Sopenharmony_ci\end_layout
578353a5a1b3Sopenharmony_ci
578453a5a1b3Sopenharmony_ci\begin_layout Standard
578553a5a1b3Sopenharmony_ci\begin_inset Float table
578653a5a1b3Sopenharmony_ciplacement htbp
578753a5a1b3Sopenharmony_ciwide true
578853a5a1b3Sopenharmony_cisideways false
578953a5a1b3Sopenharmony_cistatus open
579053a5a1b3Sopenharmony_ci
579153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
579253a5a1b3Sopenharmony_ci\begin_inset ERT
579353a5a1b3Sopenharmony_cistatus collapsed
579453a5a1b3Sopenharmony_ci
579553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
579653a5a1b3Sopenharmony_ci
579753a5a1b3Sopenharmony_ci
579853a5a1b3Sopenharmony_ci\backslash
579953a5a1b3Sopenharmony_cibegin{center}
580053a5a1b3Sopenharmony_ci\end_layout
580153a5a1b3Sopenharmony_ci
580253a5a1b3Sopenharmony_ci\end_inset
580353a5a1b3Sopenharmony_ci
580453a5a1b3Sopenharmony_ci
580553a5a1b3Sopenharmony_ci\begin_inset Tabular
580653a5a1b3Sopenharmony_ci<lyxtabular version="3" rows="16" columns="3">
580753a5a1b3Sopenharmony_ci<features>
580853a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
580953a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
581053a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
581153a5a1b3Sopenharmony_ci<row>
581253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
581353a5a1b3Sopenharmony_ci\begin_inset Text
581453a5a1b3Sopenharmony_ci
581553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
581653a5a1b3Sopenharmony_ciField
581753a5a1b3Sopenharmony_ci\end_layout
581853a5a1b3Sopenharmony_ci
581953a5a1b3Sopenharmony_ci\end_inset
582053a5a1b3Sopenharmony_ci</cell>
582153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
582253a5a1b3Sopenharmony_ci\begin_inset Text
582353a5a1b3Sopenharmony_ci
582453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
582553a5a1b3Sopenharmony_ciType
582653a5a1b3Sopenharmony_ci\end_layout
582753a5a1b3Sopenharmony_ci
582853a5a1b3Sopenharmony_ci\end_inset
582953a5a1b3Sopenharmony_ci</cell>
583053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
583153a5a1b3Sopenharmony_ci\begin_inset Text
583253a5a1b3Sopenharmony_ci
583353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
583453a5a1b3Sopenharmony_ciSize
583553a5a1b3Sopenharmony_ci\end_layout
583653a5a1b3Sopenharmony_ci
583753a5a1b3Sopenharmony_ci\end_inset
583853a5a1b3Sopenharmony_ci</cell>
583953a5a1b3Sopenharmony_ci</row>
584053a5a1b3Sopenharmony_ci<row>
584153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
584253a5a1b3Sopenharmony_ci\begin_inset Text
584353a5a1b3Sopenharmony_ci
584453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
584553a5a1b3Sopenharmony_cispeex_string
584653a5a1b3Sopenharmony_ci\end_layout
584753a5a1b3Sopenharmony_ci
584853a5a1b3Sopenharmony_ci\end_inset
584953a5a1b3Sopenharmony_ci</cell>
585053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
585153a5a1b3Sopenharmony_ci\begin_inset Text
585253a5a1b3Sopenharmony_ci
585353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
585453a5a1b3Sopenharmony_cichar[]
585553a5a1b3Sopenharmony_ci\end_layout
585653a5a1b3Sopenharmony_ci
585753a5a1b3Sopenharmony_ci\end_inset
585853a5a1b3Sopenharmony_ci</cell>
585953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
586053a5a1b3Sopenharmony_ci\begin_inset Text
586153a5a1b3Sopenharmony_ci
586253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
586353a5a1b3Sopenharmony_ci8
586453a5a1b3Sopenharmony_ci\end_layout
586553a5a1b3Sopenharmony_ci
586653a5a1b3Sopenharmony_ci\end_inset
586753a5a1b3Sopenharmony_ci</cell>
586853a5a1b3Sopenharmony_ci</row>
586953a5a1b3Sopenharmony_ci<row>
587053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
587153a5a1b3Sopenharmony_ci\begin_inset Text
587253a5a1b3Sopenharmony_ci
587353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
587453a5a1b3Sopenharmony_cispeex_version
587553a5a1b3Sopenharmony_ci\end_layout
587653a5a1b3Sopenharmony_ci
587753a5a1b3Sopenharmony_ci\end_inset
587853a5a1b3Sopenharmony_ci</cell>
587953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
588053a5a1b3Sopenharmony_ci\begin_inset Text
588153a5a1b3Sopenharmony_ci
588253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
588353a5a1b3Sopenharmony_cichar[]
588453a5a1b3Sopenharmony_ci\end_layout
588553a5a1b3Sopenharmony_ci
588653a5a1b3Sopenharmony_ci\end_inset
588753a5a1b3Sopenharmony_ci</cell>
588853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
588953a5a1b3Sopenharmony_ci\begin_inset Text
589053a5a1b3Sopenharmony_ci
589153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
589253a5a1b3Sopenharmony_ci20
589353a5a1b3Sopenharmony_ci\end_layout
589453a5a1b3Sopenharmony_ci
589553a5a1b3Sopenharmony_ci\end_inset
589653a5a1b3Sopenharmony_ci</cell>
589753a5a1b3Sopenharmony_ci</row>
589853a5a1b3Sopenharmony_ci<row>
589953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
590053a5a1b3Sopenharmony_ci\begin_inset Text
590153a5a1b3Sopenharmony_ci
590253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
590353a5a1b3Sopenharmony_cispeex_version_id
590453a5a1b3Sopenharmony_ci\end_layout
590553a5a1b3Sopenharmony_ci
590653a5a1b3Sopenharmony_ci\end_inset
590753a5a1b3Sopenharmony_ci</cell>
590853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
590953a5a1b3Sopenharmony_ci\begin_inset Text
591053a5a1b3Sopenharmony_ci
591153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
591253a5a1b3Sopenharmony_ciint
591353a5a1b3Sopenharmony_ci\end_layout
591453a5a1b3Sopenharmony_ci
591553a5a1b3Sopenharmony_ci\end_inset
591653a5a1b3Sopenharmony_ci</cell>
591753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
591853a5a1b3Sopenharmony_ci\begin_inset Text
591953a5a1b3Sopenharmony_ci
592053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
592153a5a1b3Sopenharmony_ci4
592253a5a1b3Sopenharmony_ci\end_layout
592353a5a1b3Sopenharmony_ci
592453a5a1b3Sopenharmony_ci\end_inset
592553a5a1b3Sopenharmony_ci</cell>
592653a5a1b3Sopenharmony_ci</row>
592753a5a1b3Sopenharmony_ci<row>
592853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
592953a5a1b3Sopenharmony_ci\begin_inset Text
593053a5a1b3Sopenharmony_ci
593153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
593253a5a1b3Sopenharmony_ciheader_size
593353a5a1b3Sopenharmony_ci\end_layout
593453a5a1b3Sopenharmony_ci
593553a5a1b3Sopenharmony_ci\end_inset
593653a5a1b3Sopenharmony_ci</cell>
593753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
593853a5a1b3Sopenharmony_ci\begin_inset Text
593953a5a1b3Sopenharmony_ci
594053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
594153a5a1b3Sopenharmony_ciint
594253a5a1b3Sopenharmony_ci\end_layout
594353a5a1b3Sopenharmony_ci
594453a5a1b3Sopenharmony_ci\end_inset
594553a5a1b3Sopenharmony_ci</cell>
594653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
594753a5a1b3Sopenharmony_ci\begin_inset Text
594853a5a1b3Sopenharmony_ci
594953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
595053a5a1b3Sopenharmony_ci4
595153a5a1b3Sopenharmony_ci\end_layout
595253a5a1b3Sopenharmony_ci
595353a5a1b3Sopenharmony_ci\end_inset
595453a5a1b3Sopenharmony_ci</cell>
595553a5a1b3Sopenharmony_ci</row>
595653a5a1b3Sopenharmony_ci<row>
595753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
595853a5a1b3Sopenharmony_ci\begin_inset Text
595953a5a1b3Sopenharmony_ci
596053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
596153a5a1b3Sopenharmony_cirate
596253a5a1b3Sopenharmony_ci\end_layout
596353a5a1b3Sopenharmony_ci
596453a5a1b3Sopenharmony_ci\end_inset
596553a5a1b3Sopenharmony_ci</cell>
596653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
596753a5a1b3Sopenharmony_ci\begin_inset Text
596853a5a1b3Sopenharmony_ci
596953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
597053a5a1b3Sopenharmony_ciint
597153a5a1b3Sopenharmony_ci\end_layout
597253a5a1b3Sopenharmony_ci
597353a5a1b3Sopenharmony_ci\end_inset
597453a5a1b3Sopenharmony_ci</cell>
597553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
597653a5a1b3Sopenharmony_ci\begin_inset Text
597753a5a1b3Sopenharmony_ci
597853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
597953a5a1b3Sopenharmony_ci4
598053a5a1b3Sopenharmony_ci\end_layout
598153a5a1b3Sopenharmony_ci
598253a5a1b3Sopenharmony_ci\end_inset
598353a5a1b3Sopenharmony_ci</cell>
598453a5a1b3Sopenharmony_ci</row>
598553a5a1b3Sopenharmony_ci<row>
598653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
598753a5a1b3Sopenharmony_ci\begin_inset Text
598853a5a1b3Sopenharmony_ci
598953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
599053a5a1b3Sopenharmony_cimode
599153a5a1b3Sopenharmony_ci\end_layout
599253a5a1b3Sopenharmony_ci
599353a5a1b3Sopenharmony_ci\end_inset
599453a5a1b3Sopenharmony_ci</cell>
599553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
599653a5a1b3Sopenharmony_ci\begin_inset Text
599753a5a1b3Sopenharmony_ci
599853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
599953a5a1b3Sopenharmony_ciint
600053a5a1b3Sopenharmony_ci\end_layout
600153a5a1b3Sopenharmony_ci
600253a5a1b3Sopenharmony_ci\end_inset
600353a5a1b3Sopenharmony_ci</cell>
600453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
600553a5a1b3Sopenharmony_ci\begin_inset Text
600653a5a1b3Sopenharmony_ci
600753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
600853a5a1b3Sopenharmony_ci4
600953a5a1b3Sopenharmony_ci\end_layout
601053a5a1b3Sopenharmony_ci
601153a5a1b3Sopenharmony_ci\end_inset
601253a5a1b3Sopenharmony_ci</cell>
601353a5a1b3Sopenharmony_ci</row>
601453a5a1b3Sopenharmony_ci<row>
601553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
601653a5a1b3Sopenharmony_ci\begin_inset Text
601753a5a1b3Sopenharmony_ci
601853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
601953a5a1b3Sopenharmony_cimode_bitstream_version
602053a5a1b3Sopenharmony_ci\end_layout
602153a5a1b3Sopenharmony_ci
602253a5a1b3Sopenharmony_ci\end_inset
602353a5a1b3Sopenharmony_ci</cell>
602453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
602553a5a1b3Sopenharmony_ci\begin_inset Text
602653a5a1b3Sopenharmony_ci
602753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
602853a5a1b3Sopenharmony_ciint
602953a5a1b3Sopenharmony_ci\end_layout
603053a5a1b3Sopenharmony_ci
603153a5a1b3Sopenharmony_ci\end_inset
603253a5a1b3Sopenharmony_ci</cell>
603353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
603453a5a1b3Sopenharmony_ci\begin_inset Text
603553a5a1b3Sopenharmony_ci
603653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
603753a5a1b3Sopenharmony_ci4
603853a5a1b3Sopenharmony_ci\end_layout
603953a5a1b3Sopenharmony_ci
604053a5a1b3Sopenharmony_ci\end_inset
604153a5a1b3Sopenharmony_ci</cell>
604253a5a1b3Sopenharmony_ci</row>
604353a5a1b3Sopenharmony_ci<row>
604453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
604553a5a1b3Sopenharmony_ci\begin_inset Text
604653a5a1b3Sopenharmony_ci
604753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
604853a5a1b3Sopenharmony_cinb_channels
604953a5a1b3Sopenharmony_ci\end_layout
605053a5a1b3Sopenharmony_ci
605153a5a1b3Sopenharmony_ci\end_inset
605253a5a1b3Sopenharmony_ci</cell>
605353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
605453a5a1b3Sopenharmony_ci\begin_inset Text
605553a5a1b3Sopenharmony_ci
605653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
605753a5a1b3Sopenharmony_ciint
605853a5a1b3Sopenharmony_ci\end_layout
605953a5a1b3Sopenharmony_ci
606053a5a1b3Sopenharmony_ci\end_inset
606153a5a1b3Sopenharmony_ci</cell>
606253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
606353a5a1b3Sopenharmony_ci\begin_inset Text
606453a5a1b3Sopenharmony_ci
606553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
606653a5a1b3Sopenharmony_ci4
606753a5a1b3Sopenharmony_ci\end_layout
606853a5a1b3Sopenharmony_ci
606953a5a1b3Sopenharmony_ci\end_inset
607053a5a1b3Sopenharmony_ci</cell>
607153a5a1b3Sopenharmony_ci</row>
607253a5a1b3Sopenharmony_ci<row>
607353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
607453a5a1b3Sopenharmony_ci\begin_inset Text
607553a5a1b3Sopenharmony_ci
607653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
607753a5a1b3Sopenharmony_cibitrate
607853a5a1b3Sopenharmony_ci\end_layout
607953a5a1b3Sopenharmony_ci
608053a5a1b3Sopenharmony_ci\end_inset
608153a5a1b3Sopenharmony_ci</cell>
608253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
608353a5a1b3Sopenharmony_ci\begin_inset Text
608453a5a1b3Sopenharmony_ci
608553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
608653a5a1b3Sopenharmony_ciint
608753a5a1b3Sopenharmony_ci\end_layout
608853a5a1b3Sopenharmony_ci
608953a5a1b3Sopenharmony_ci\end_inset
609053a5a1b3Sopenharmony_ci</cell>
609153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
609253a5a1b3Sopenharmony_ci\begin_inset Text
609353a5a1b3Sopenharmony_ci
609453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
609553a5a1b3Sopenharmony_ci4
609653a5a1b3Sopenharmony_ci\end_layout
609753a5a1b3Sopenharmony_ci
609853a5a1b3Sopenharmony_ci\end_inset
609953a5a1b3Sopenharmony_ci</cell>
610053a5a1b3Sopenharmony_ci</row>
610153a5a1b3Sopenharmony_ci<row>
610253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
610353a5a1b3Sopenharmony_ci\begin_inset Text
610453a5a1b3Sopenharmony_ci
610553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
610653a5a1b3Sopenharmony_ciframe_size
610753a5a1b3Sopenharmony_ci\end_layout
610853a5a1b3Sopenharmony_ci
610953a5a1b3Sopenharmony_ci\end_inset
611053a5a1b3Sopenharmony_ci</cell>
611153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
611253a5a1b3Sopenharmony_ci\begin_inset Text
611353a5a1b3Sopenharmony_ci
611453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
611553a5a1b3Sopenharmony_ciint
611653a5a1b3Sopenharmony_ci\end_layout
611753a5a1b3Sopenharmony_ci
611853a5a1b3Sopenharmony_ci\end_inset
611953a5a1b3Sopenharmony_ci</cell>
612053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
612153a5a1b3Sopenharmony_ci\begin_inset Text
612253a5a1b3Sopenharmony_ci
612353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
612453a5a1b3Sopenharmony_ci4
612553a5a1b3Sopenharmony_ci\end_layout
612653a5a1b3Sopenharmony_ci
612753a5a1b3Sopenharmony_ci\end_inset
612853a5a1b3Sopenharmony_ci</cell>
612953a5a1b3Sopenharmony_ci</row>
613053a5a1b3Sopenharmony_ci<row>
613153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
613253a5a1b3Sopenharmony_ci\begin_inset Text
613353a5a1b3Sopenharmony_ci
613453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
613553a5a1b3Sopenharmony_civbr
613653a5a1b3Sopenharmony_ci\end_layout
613753a5a1b3Sopenharmony_ci
613853a5a1b3Sopenharmony_ci\end_inset
613953a5a1b3Sopenharmony_ci</cell>
614053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
614153a5a1b3Sopenharmony_ci\begin_inset Text
614253a5a1b3Sopenharmony_ci
614353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
614453a5a1b3Sopenharmony_ciint
614553a5a1b3Sopenharmony_ci\end_layout
614653a5a1b3Sopenharmony_ci
614753a5a1b3Sopenharmony_ci\end_inset
614853a5a1b3Sopenharmony_ci</cell>
614953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
615053a5a1b3Sopenharmony_ci\begin_inset Text
615153a5a1b3Sopenharmony_ci
615253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
615353a5a1b3Sopenharmony_ci4
615453a5a1b3Sopenharmony_ci\end_layout
615553a5a1b3Sopenharmony_ci
615653a5a1b3Sopenharmony_ci\end_inset
615753a5a1b3Sopenharmony_ci</cell>
615853a5a1b3Sopenharmony_ci</row>
615953a5a1b3Sopenharmony_ci<row>
616053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
616153a5a1b3Sopenharmony_ci\begin_inset Text
616253a5a1b3Sopenharmony_ci
616353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
616453a5a1b3Sopenharmony_ciframes_per_packet
616553a5a1b3Sopenharmony_ci\end_layout
616653a5a1b3Sopenharmony_ci
616753a5a1b3Sopenharmony_ci\end_inset
616853a5a1b3Sopenharmony_ci</cell>
616953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
617053a5a1b3Sopenharmony_ci\begin_inset Text
617153a5a1b3Sopenharmony_ci
617253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
617353a5a1b3Sopenharmony_ciint
617453a5a1b3Sopenharmony_ci\end_layout
617553a5a1b3Sopenharmony_ci
617653a5a1b3Sopenharmony_ci\end_inset
617753a5a1b3Sopenharmony_ci</cell>
617853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
617953a5a1b3Sopenharmony_ci\begin_inset Text
618053a5a1b3Sopenharmony_ci
618153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
618253a5a1b3Sopenharmony_ci4
618353a5a1b3Sopenharmony_ci\end_layout
618453a5a1b3Sopenharmony_ci
618553a5a1b3Sopenharmony_ci\end_inset
618653a5a1b3Sopenharmony_ci</cell>
618753a5a1b3Sopenharmony_ci</row>
618853a5a1b3Sopenharmony_ci<row>
618953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
619053a5a1b3Sopenharmony_ci\begin_inset Text
619153a5a1b3Sopenharmony_ci
619253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
619353a5a1b3Sopenharmony_ciextra_headers
619453a5a1b3Sopenharmony_ci\end_layout
619553a5a1b3Sopenharmony_ci
619653a5a1b3Sopenharmony_ci\end_inset
619753a5a1b3Sopenharmony_ci</cell>
619853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
619953a5a1b3Sopenharmony_ci\begin_inset Text
620053a5a1b3Sopenharmony_ci
620153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
620253a5a1b3Sopenharmony_ciint
620353a5a1b3Sopenharmony_ci\end_layout
620453a5a1b3Sopenharmony_ci
620553a5a1b3Sopenharmony_ci\end_inset
620653a5a1b3Sopenharmony_ci</cell>
620753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
620853a5a1b3Sopenharmony_ci\begin_inset Text
620953a5a1b3Sopenharmony_ci
621053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
621153a5a1b3Sopenharmony_ci4
621253a5a1b3Sopenharmony_ci\end_layout
621353a5a1b3Sopenharmony_ci
621453a5a1b3Sopenharmony_ci\end_inset
621553a5a1b3Sopenharmony_ci</cell>
621653a5a1b3Sopenharmony_ci</row>
621753a5a1b3Sopenharmony_ci<row>
621853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
621953a5a1b3Sopenharmony_ci\begin_inset Text
622053a5a1b3Sopenharmony_ci
622153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
622253a5a1b3Sopenharmony_cireserved1
622353a5a1b3Sopenharmony_ci\end_layout
622453a5a1b3Sopenharmony_ci
622553a5a1b3Sopenharmony_ci\end_inset
622653a5a1b3Sopenharmony_ci</cell>
622753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
622853a5a1b3Sopenharmony_ci\begin_inset Text
622953a5a1b3Sopenharmony_ci
623053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
623153a5a1b3Sopenharmony_ciint
623253a5a1b3Sopenharmony_ci\end_layout
623353a5a1b3Sopenharmony_ci
623453a5a1b3Sopenharmony_ci\end_inset
623553a5a1b3Sopenharmony_ci</cell>
623653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
623753a5a1b3Sopenharmony_ci\begin_inset Text
623853a5a1b3Sopenharmony_ci
623953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
624053a5a1b3Sopenharmony_ci4
624153a5a1b3Sopenharmony_ci\end_layout
624253a5a1b3Sopenharmony_ci
624353a5a1b3Sopenharmony_ci\end_inset
624453a5a1b3Sopenharmony_ci</cell>
624553a5a1b3Sopenharmony_ci</row>
624653a5a1b3Sopenharmony_ci<row>
624753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
624853a5a1b3Sopenharmony_ci\begin_inset Text
624953a5a1b3Sopenharmony_ci
625053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
625153a5a1b3Sopenharmony_cireserved2
625253a5a1b3Sopenharmony_ci\end_layout
625353a5a1b3Sopenharmony_ci
625453a5a1b3Sopenharmony_ci\end_inset
625553a5a1b3Sopenharmony_ci</cell>
625653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
625753a5a1b3Sopenharmony_ci\begin_inset Text
625853a5a1b3Sopenharmony_ci
625953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
626053a5a1b3Sopenharmony_ciint
626153a5a1b3Sopenharmony_ci\end_layout
626253a5a1b3Sopenharmony_ci
626353a5a1b3Sopenharmony_ci\end_inset
626453a5a1b3Sopenharmony_ci</cell>
626553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
626653a5a1b3Sopenharmony_ci\begin_inset Text
626753a5a1b3Sopenharmony_ci
626853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
626953a5a1b3Sopenharmony_ci4
627053a5a1b3Sopenharmony_ci\end_layout
627153a5a1b3Sopenharmony_ci
627253a5a1b3Sopenharmony_ci\end_inset
627353a5a1b3Sopenharmony_ci</cell>
627453a5a1b3Sopenharmony_ci</row>
627553a5a1b3Sopenharmony_ci</lyxtabular>
627653a5a1b3Sopenharmony_ci
627753a5a1b3Sopenharmony_ci\end_inset
627853a5a1b3Sopenharmony_ci
627953a5a1b3Sopenharmony_ci
628053a5a1b3Sopenharmony_ci\begin_inset ERT
628153a5a1b3Sopenharmony_cistatus collapsed
628253a5a1b3Sopenharmony_ci
628353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
628453a5a1b3Sopenharmony_ci
628553a5a1b3Sopenharmony_ci
628653a5a1b3Sopenharmony_ci\backslash
628753a5a1b3Sopenharmony_ciend{center}
628853a5a1b3Sopenharmony_ci\end_layout
628953a5a1b3Sopenharmony_ci
629053a5a1b3Sopenharmony_ci\end_inset
629153a5a1b3Sopenharmony_ci
629253a5a1b3Sopenharmony_ci
629353a5a1b3Sopenharmony_ci\end_layout
629453a5a1b3Sopenharmony_ci
629553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
629653a5a1b3Sopenharmony_ci\begin_inset Caption
629753a5a1b3Sopenharmony_ci
629853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
629953a5a1b3Sopenharmony_ciOgg/Speex header packet
630053a5a1b3Sopenharmony_ci\begin_inset CommandInset label
630153a5a1b3Sopenharmony_ciLatexCommand label
630253a5a1b3Sopenharmony_ciname "cap:ogg_speex_header"
630353a5a1b3Sopenharmony_ci
630453a5a1b3Sopenharmony_ci\end_inset
630553a5a1b3Sopenharmony_ci
630653a5a1b3Sopenharmony_ci
630753a5a1b3Sopenharmony_ci\end_layout
630853a5a1b3Sopenharmony_ci
630953a5a1b3Sopenharmony_ci\end_inset
631053a5a1b3Sopenharmony_ci
631153a5a1b3Sopenharmony_ci
631253a5a1b3Sopenharmony_ci\end_layout
631353a5a1b3Sopenharmony_ci
631453a5a1b3Sopenharmony_ci\end_inset
631553a5a1b3Sopenharmony_ci
631653a5a1b3Sopenharmony_ci
631753a5a1b3Sopenharmony_ci\end_layout
631853a5a1b3Sopenharmony_ci
631953a5a1b3Sopenharmony_ci\begin_layout Standard
632053a5a1b3Sopenharmony_ci\begin_inset ERT
632153a5a1b3Sopenharmony_cistatus collapsed
632253a5a1b3Sopenharmony_ci
632353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
632453a5a1b3Sopenharmony_ci
632553a5a1b3Sopenharmony_ci
632653a5a1b3Sopenharmony_ci\backslash
632753a5a1b3Sopenharmony_ciclearpage
632853a5a1b3Sopenharmony_ci\end_layout
632953a5a1b3Sopenharmony_ci
633053a5a1b3Sopenharmony_ci\end_inset
633153a5a1b3Sopenharmony_ci
633253a5a1b3Sopenharmony_ci
633353a5a1b3Sopenharmony_ci\end_layout
633453a5a1b3Sopenharmony_ci
633553a5a1b3Sopenharmony_ci\begin_layout Chapter
633653a5a1b3Sopenharmony_ciIntroduction to CELP Coding
633753a5a1b3Sopenharmony_ci\begin_inset Index
633853a5a1b3Sopenharmony_cistatus collapsed
633953a5a1b3Sopenharmony_ci
634053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
634153a5a1b3Sopenharmony_ciCELP
634253a5a1b3Sopenharmony_ci\end_layout
634353a5a1b3Sopenharmony_ci
634453a5a1b3Sopenharmony_ci\end_inset
634553a5a1b3Sopenharmony_ci
634653a5a1b3Sopenharmony_ci
634753a5a1b3Sopenharmony_ci\begin_inset CommandInset label
634853a5a1b3Sopenharmony_ciLatexCommand label
634953a5a1b3Sopenharmony_ciname "sec:Introduction-to-CELP"
635053a5a1b3Sopenharmony_ci
635153a5a1b3Sopenharmony_ci\end_inset
635253a5a1b3Sopenharmony_ci
635353a5a1b3Sopenharmony_ci
635453a5a1b3Sopenharmony_ci\end_layout
635553a5a1b3Sopenharmony_ci
635653a5a1b3Sopenharmony_ci\begin_layout Quote
635753a5a1b3Sopenharmony_ci\align center
635853a5a1b3Sopenharmony_ci
635953a5a1b3Sopenharmony_ci\emph on
636053a5a1b3Sopenharmony_ciDo not meddle in the affairs of poles, for they are subtle and quick to
636153a5a1b3Sopenharmony_ci leave the unit circle.
636253a5a1b3Sopenharmony_ci\end_layout
636353a5a1b3Sopenharmony_ci
636453a5a1b3Sopenharmony_ci\begin_layout Standard
636553a5a1b3Sopenharmony_ciSpeex is based on CELP, which stands for Code Excited Linear Prediction.
636653a5a1b3Sopenharmony_ci This section attempts to introduce the principles behind CELP, so if you
636753a5a1b3Sopenharmony_ci are already familiar with CELP, you can safely skip to section 
636853a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
636953a5a1b3Sopenharmony_ciLatexCommand ref
637053a5a1b3Sopenharmony_cireference "sec:Speex-narrowband-mode"
637153a5a1b3Sopenharmony_ci
637253a5a1b3Sopenharmony_ci\end_inset
637353a5a1b3Sopenharmony_ci
637453a5a1b3Sopenharmony_ci.
637553a5a1b3Sopenharmony_ci The CELP technique is based on three ideas:
637653a5a1b3Sopenharmony_ci\end_layout
637753a5a1b3Sopenharmony_ci
637853a5a1b3Sopenharmony_ci\begin_layout Enumerate
637953a5a1b3Sopenharmony_ciThe use of a linear prediction (LP) model to model the vocal tract
638053a5a1b3Sopenharmony_ci\end_layout
638153a5a1b3Sopenharmony_ci
638253a5a1b3Sopenharmony_ci\begin_layout Enumerate
638353a5a1b3Sopenharmony_ciThe use of (adaptive and fixed) codebook entries as input (excitation) of
638453a5a1b3Sopenharmony_ci the LP model
638553a5a1b3Sopenharmony_ci\end_layout
638653a5a1b3Sopenharmony_ci
638753a5a1b3Sopenharmony_ci\begin_layout Enumerate
638853a5a1b3Sopenharmony_ciThe search performed in closed-loop in a 
638953a5a1b3Sopenharmony_ci\begin_inset Quotes eld
639053a5a1b3Sopenharmony_ci\end_inset
639153a5a1b3Sopenharmony_ci
639253a5a1b3Sopenharmony_ciperceptually weighted domain
639353a5a1b3Sopenharmony_ci\begin_inset Quotes erd
639453a5a1b3Sopenharmony_ci\end_inset
639553a5a1b3Sopenharmony_ci
639653a5a1b3Sopenharmony_ci
639753a5a1b3Sopenharmony_ci\end_layout
639853a5a1b3Sopenharmony_ci
639953a5a1b3Sopenharmony_ci\begin_layout Standard
640053a5a1b3Sopenharmony_ciThis section describes the basic ideas behind CELP.
640153a5a1b3Sopenharmony_ci This is still a work in progress.
640253a5a1b3Sopenharmony_ci\end_layout
640353a5a1b3Sopenharmony_ci
640453a5a1b3Sopenharmony_ci\begin_layout Section
640553a5a1b3Sopenharmony_ciSource-Filter Model of Speech Prediction
640653a5a1b3Sopenharmony_ci\end_layout
640753a5a1b3Sopenharmony_ci
640853a5a1b3Sopenharmony_ci\begin_layout Standard
640953a5a1b3Sopenharmony_ciThe source-filter model of speech production assumes that the vocal cords
641053a5a1b3Sopenharmony_ci are the source of spectrally flat sound (the excitation signal), and that
641153a5a1b3Sopenharmony_ci the vocal tract acts as a filter to spectrally shape the various sounds
641253a5a1b3Sopenharmony_ci of speech.
641353a5a1b3Sopenharmony_ci While still an approximation, the model is widely used in speech coding
641453a5a1b3Sopenharmony_ci because of its simplicity.Its use is also the reason why most speech codecs
641553a5a1b3Sopenharmony_ci (Speex included) perform badly on music signals.
641653a5a1b3Sopenharmony_ci The different phonemes can be distinguished by their excitation (source)
641753a5a1b3Sopenharmony_ci and spectral shape (filter).
641853a5a1b3Sopenharmony_ci Voiced sounds (e.g.
641953a5a1b3Sopenharmony_ci vowels) have an excitation signal that is periodic and that can be approximated
642053a5a1b3Sopenharmony_ci by an impulse train in the time domain or by regularly-spaced harmonics
642153a5a1b3Sopenharmony_ci in the frequency domain.
642253a5a1b3Sopenharmony_ci On the other hand, fricatives (such as the "s", "sh" and "f" sounds) have
642353a5a1b3Sopenharmony_ci an excitation signal that is similar to white Gaussian noise.
642453a5a1b3Sopenharmony_ci So called voice fricatives (such as "z" and "v") have excitation signal
642553a5a1b3Sopenharmony_ci composed of an harmonic part and a noisy part.
642653a5a1b3Sopenharmony_ci\end_layout
642753a5a1b3Sopenharmony_ci
642853a5a1b3Sopenharmony_ci\begin_layout Standard
642953a5a1b3Sopenharmony_ciThe source-filter model is usually tied with the use of Linear prediction.
643053a5a1b3Sopenharmony_ci The CELP model is based on source-filter model, as can be seen from the
643153a5a1b3Sopenharmony_ci CELP decoder illustrated in Figure 
643253a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
643353a5a1b3Sopenharmony_ciLatexCommand ref
643453a5a1b3Sopenharmony_cireference "fig:The-CELP-model"
643553a5a1b3Sopenharmony_ci
643653a5a1b3Sopenharmony_ci\end_inset
643753a5a1b3Sopenharmony_ci
643853a5a1b3Sopenharmony_ci.
643953a5a1b3Sopenharmony_ci 
644053a5a1b3Sopenharmony_ci\end_layout
644153a5a1b3Sopenharmony_ci
644253a5a1b3Sopenharmony_ci\begin_layout Standard
644353a5a1b3Sopenharmony_ci\begin_inset Float figure
644453a5a1b3Sopenharmony_ciwide false
644553a5a1b3Sopenharmony_cisideways false
644653a5a1b3Sopenharmony_cistatus open
644753a5a1b3Sopenharmony_ci
644853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
644953a5a1b3Sopenharmony_ci\begin_inset ERT
645053a5a1b3Sopenharmony_cistatus collapsed
645153a5a1b3Sopenharmony_ci
645253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
645353a5a1b3Sopenharmony_ci
645453a5a1b3Sopenharmony_ci
645553a5a1b3Sopenharmony_ci\backslash
645653a5a1b3Sopenharmony_cibegin{center}
645753a5a1b3Sopenharmony_ci\end_layout
645853a5a1b3Sopenharmony_ci
645953a5a1b3Sopenharmony_ci\end_inset
646053a5a1b3Sopenharmony_ci
646153a5a1b3Sopenharmony_ci
646253a5a1b3Sopenharmony_ci\begin_inset Graphics
646353a5a1b3Sopenharmony_ci	filename celp_decoder.eps
646453a5a1b3Sopenharmony_ci	width 45page%
646553a5a1b3Sopenharmony_ci	keepAspectRatio
646653a5a1b3Sopenharmony_ci
646753a5a1b3Sopenharmony_ci\end_inset
646853a5a1b3Sopenharmony_ci
646953a5a1b3Sopenharmony_ci
647053a5a1b3Sopenharmony_ci\begin_inset ERT
647153a5a1b3Sopenharmony_cistatus collapsed
647253a5a1b3Sopenharmony_ci
647353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
647453a5a1b3Sopenharmony_ci
647553a5a1b3Sopenharmony_ci
647653a5a1b3Sopenharmony_ci\backslash
647753a5a1b3Sopenharmony_ciend{center}
647853a5a1b3Sopenharmony_ci\end_layout
647953a5a1b3Sopenharmony_ci
648053a5a1b3Sopenharmony_ci\end_inset
648153a5a1b3Sopenharmony_ci
648253a5a1b3Sopenharmony_ci
648353a5a1b3Sopenharmony_ci\end_layout
648453a5a1b3Sopenharmony_ci
648553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
648653a5a1b3Sopenharmony_ci\begin_inset Caption
648753a5a1b3Sopenharmony_ci
648853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
648953a5a1b3Sopenharmony_ciThe CELP model of speech synthesis (decoder)
649053a5a1b3Sopenharmony_ci\begin_inset CommandInset label
649153a5a1b3Sopenharmony_ciLatexCommand label
649253a5a1b3Sopenharmony_ciname "fig:The-CELP-model"
649353a5a1b3Sopenharmony_ci
649453a5a1b3Sopenharmony_ci\end_inset
649553a5a1b3Sopenharmony_ci
649653a5a1b3Sopenharmony_ci 
649753a5a1b3Sopenharmony_ci\end_layout
649853a5a1b3Sopenharmony_ci
649953a5a1b3Sopenharmony_ci\end_inset
650053a5a1b3Sopenharmony_ci
650153a5a1b3Sopenharmony_ci
650253a5a1b3Sopenharmony_ci\end_layout
650353a5a1b3Sopenharmony_ci
650453a5a1b3Sopenharmony_ci\end_inset
650553a5a1b3Sopenharmony_ci
650653a5a1b3Sopenharmony_ci
650753a5a1b3Sopenharmony_ci\end_layout
650853a5a1b3Sopenharmony_ci
650953a5a1b3Sopenharmony_ci\begin_layout Section
651053a5a1b3Sopenharmony_ciLinear Prediction Coefficients (LPC)
651153a5a1b3Sopenharmony_ci\begin_inset Index
651253a5a1b3Sopenharmony_cistatus collapsed
651353a5a1b3Sopenharmony_ci
651453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
651553a5a1b3Sopenharmony_cilinear prediction
651653a5a1b3Sopenharmony_ci\end_layout
651753a5a1b3Sopenharmony_ci
651853a5a1b3Sopenharmony_ci\end_inset
651953a5a1b3Sopenharmony_ci
652053a5a1b3Sopenharmony_ci
652153a5a1b3Sopenharmony_ci\end_layout
652253a5a1b3Sopenharmony_ci
652353a5a1b3Sopenharmony_ci\begin_layout Standard
652453a5a1b3Sopenharmony_ciLinear prediction is at the base of many speech coding techniques, including
652553a5a1b3Sopenharmony_ci CELP.
652653a5a1b3Sopenharmony_ci The idea behind it is to predict the signal 
652753a5a1b3Sopenharmony_ci\begin_inset Formula $x[n]$
652853a5a1b3Sopenharmony_ci\end_inset
652953a5a1b3Sopenharmony_ci
653053a5a1b3Sopenharmony_ci using a linear combination of its past samples:
653153a5a1b3Sopenharmony_ci\end_layout
653253a5a1b3Sopenharmony_ci
653353a5a1b3Sopenharmony_ci\begin_layout Standard
653453a5a1b3Sopenharmony_ci\begin_inset Formula \[
653553a5a1b3Sopenharmony_ciy[n]=\sum_{i=1}^{N}a_{i}x[n-i]\]
653653a5a1b3Sopenharmony_ci
653753a5a1b3Sopenharmony_ci\end_inset
653853a5a1b3Sopenharmony_ci
653953a5a1b3Sopenharmony_ciwhere 
654053a5a1b3Sopenharmony_ci\begin_inset Formula $y[n]$
654153a5a1b3Sopenharmony_ci\end_inset
654253a5a1b3Sopenharmony_ci
654353a5a1b3Sopenharmony_ci is the linear prediction of 
654453a5a1b3Sopenharmony_ci\begin_inset Formula $x[n]$
654553a5a1b3Sopenharmony_ci\end_inset
654653a5a1b3Sopenharmony_ci
654753a5a1b3Sopenharmony_ci.
654853a5a1b3Sopenharmony_ci The prediction error is thus given by:
654953a5a1b3Sopenharmony_ci\begin_inset Formula \[
655053a5a1b3Sopenharmony_cie[n]=x[n]-y[n]=x[n]-\sum_{i=1}^{N}a_{i}x[n-i]\]
655153a5a1b3Sopenharmony_ci
655253a5a1b3Sopenharmony_ci\end_inset
655353a5a1b3Sopenharmony_ci
655453a5a1b3Sopenharmony_ci
655553a5a1b3Sopenharmony_ci\end_layout
655653a5a1b3Sopenharmony_ci
655753a5a1b3Sopenharmony_ci\begin_layout Standard
655853a5a1b3Sopenharmony_ciThe goal of the LPC analysis is to find the best prediction coefficients
655953a5a1b3Sopenharmony_ci 
656053a5a1b3Sopenharmony_ci\begin_inset Formula $a_{i}$
656153a5a1b3Sopenharmony_ci\end_inset
656253a5a1b3Sopenharmony_ci
656353a5a1b3Sopenharmony_ci which minimize the quadratic error function:
656453a5a1b3Sopenharmony_ci\begin_inset Formula \[
656553a5a1b3Sopenharmony_ciE=\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}\]
656653a5a1b3Sopenharmony_ci
656753a5a1b3Sopenharmony_ci\end_inset
656853a5a1b3Sopenharmony_ci
656953a5a1b3Sopenharmony_ciThat can be done by making all derivatives 
657053a5a1b3Sopenharmony_ci\begin_inset Formula $\frac{\partial E}{\partial a_{i}}$
657153a5a1b3Sopenharmony_ci\end_inset
657253a5a1b3Sopenharmony_ci
657353a5a1b3Sopenharmony_ci equal to zero:
657453a5a1b3Sopenharmony_ci\begin_inset Formula \[
657553a5a1b3Sopenharmony_ci\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\]
657653a5a1b3Sopenharmony_ci
657753a5a1b3Sopenharmony_ci\end_inset
657853a5a1b3Sopenharmony_ci
657953a5a1b3Sopenharmony_ci
658053a5a1b3Sopenharmony_ci\end_layout
658153a5a1b3Sopenharmony_ci
658253a5a1b3Sopenharmony_ci\begin_layout Standard
658353a5a1b3Sopenharmony_ciFor an order 
658453a5a1b3Sopenharmony_ci\begin_inset Formula $N$
658553a5a1b3Sopenharmony_ci\end_inset
658653a5a1b3Sopenharmony_ci
658753a5a1b3Sopenharmony_ci filter, the filter coefficients 
658853a5a1b3Sopenharmony_ci\begin_inset Formula $a_{i}$
658953a5a1b3Sopenharmony_ci\end_inset
659053a5a1b3Sopenharmony_ci
659153a5a1b3Sopenharmony_ci are found by solving the system 
659253a5a1b3Sopenharmony_ci\begin_inset Formula $N\times N$
659353a5a1b3Sopenharmony_ci\end_inset
659453a5a1b3Sopenharmony_ci
659553a5a1b3Sopenharmony_ci linear system 
659653a5a1b3Sopenharmony_ci\begin_inset Formula $\mathbf{Ra}=\mathbf{r}$
659753a5a1b3Sopenharmony_ci\end_inset
659853a5a1b3Sopenharmony_ci
659953a5a1b3Sopenharmony_ci, where
660053a5a1b3Sopenharmony_ci\begin_inset Formula \[
660153a5a1b3Sopenharmony_ci\mathbf{R}=\left[\begin{array}{cccc}
660253a5a1b3Sopenharmony_ciR(0) & R(1) & \cdots & R(N-1)\\
660353a5a1b3Sopenharmony_ciR(1) & R(0) & \cdots & R(N-2)\\
660453a5a1b3Sopenharmony_ci\vdots & \vdots & \ddots & \vdots\\
660553a5a1b3Sopenharmony_ciR(N-1) & R(N-2) & \cdots & R(0)\end{array}\right]\]
660653a5a1b3Sopenharmony_ci
660753a5a1b3Sopenharmony_ci\end_inset
660853a5a1b3Sopenharmony_ci
660953a5a1b3Sopenharmony_ci
661053a5a1b3Sopenharmony_ci\begin_inset Formula \[
661153a5a1b3Sopenharmony_ci\mathbf{r}=\left[\begin{array}{c}
661253a5a1b3Sopenharmony_ciR(1)\\
661353a5a1b3Sopenharmony_ciR(2)\\
661453a5a1b3Sopenharmony_ci\vdots\\
661553a5a1b3Sopenharmony_ciR(N)\end{array}\right]\]
661653a5a1b3Sopenharmony_ci
661753a5a1b3Sopenharmony_ci\end_inset
661853a5a1b3Sopenharmony_ci
661953a5a1b3Sopenharmony_ciwith 
662053a5a1b3Sopenharmony_ci\begin_inset Formula $R(m)$
662153a5a1b3Sopenharmony_ci\end_inset
662253a5a1b3Sopenharmony_ci
662353a5a1b3Sopenharmony_ci, the auto-correlation
662453a5a1b3Sopenharmony_ci\begin_inset Index
662553a5a1b3Sopenharmony_cistatus collapsed
662653a5a1b3Sopenharmony_ci
662753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
662853a5a1b3Sopenharmony_ciauto-correlation
662953a5a1b3Sopenharmony_ci\end_layout
663053a5a1b3Sopenharmony_ci
663153a5a1b3Sopenharmony_ci\end_inset
663253a5a1b3Sopenharmony_ci
663353a5a1b3Sopenharmony_ci of the signal 
663453a5a1b3Sopenharmony_ci\begin_inset Formula $x[n]$
663553a5a1b3Sopenharmony_ci\end_inset
663653a5a1b3Sopenharmony_ci
663753a5a1b3Sopenharmony_ci, computed as:
663853a5a1b3Sopenharmony_ci\end_layout
663953a5a1b3Sopenharmony_ci
664053a5a1b3Sopenharmony_ci\begin_layout Standard
664153a5a1b3Sopenharmony_ci\begin_inset Formula \[
664253a5a1b3Sopenharmony_ciR(m)=\sum_{i=0}^{N-1}x[i]x[i-m]\]
664353a5a1b3Sopenharmony_ci
664453a5a1b3Sopenharmony_ci\end_inset
664553a5a1b3Sopenharmony_ci
664653a5a1b3Sopenharmony_ci
664753a5a1b3Sopenharmony_ci\end_layout
664853a5a1b3Sopenharmony_ci
664953a5a1b3Sopenharmony_ci\begin_layout Standard
665053a5a1b3Sopenharmony_ciBecause 
665153a5a1b3Sopenharmony_ci\begin_inset Formula $\mathbf{R}$
665253a5a1b3Sopenharmony_ci\end_inset
665353a5a1b3Sopenharmony_ci
665453a5a1b3Sopenharmony_ci is Hermitian Toeplitz, the Levinson-Durbin
665553a5a1b3Sopenharmony_ci\begin_inset Index
665653a5a1b3Sopenharmony_cistatus collapsed
665753a5a1b3Sopenharmony_ci
665853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
665953a5a1b3Sopenharmony_ciLevinson-Durbin
666053a5a1b3Sopenharmony_ci\end_layout
666153a5a1b3Sopenharmony_ci
666253a5a1b3Sopenharmony_ci\end_inset
666353a5a1b3Sopenharmony_ci
666453a5a1b3Sopenharmony_ci algorithm can be used, making the solution to the problem 
666553a5a1b3Sopenharmony_ci\begin_inset Formula $\mathcal{O}\left(N^{2}\right)$
666653a5a1b3Sopenharmony_ci\end_inset
666753a5a1b3Sopenharmony_ci
666853a5a1b3Sopenharmony_ci instead of 
666953a5a1b3Sopenharmony_ci\begin_inset Formula $\mathcal{O}\left(N^{3}\right)$
667053a5a1b3Sopenharmony_ci\end_inset
667153a5a1b3Sopenharmony_ci
667253a5a1b3Sopenharmony_ci.
667353a5a1b3Sopenharmony_ci Also, it can be proven that all the roots of 
667453a5a1b3Sopenharmony_ci\begin_inset Formula $A(z)$
667553a5a1b3Sopenharmony_ci\end_inset
667653a5a1b3Sopenharmony_ci
667753a5a1b3Sopenharmony_ci are within the unit circle, which means that 
667853a5a1b3Sopenharmony_ci\begin_inset Formula $1/A(z)$
667953a5a1b3Sopenharmony_ci\end_inset
668053a5a1b3Sopenharmony_ci
668153a5a1b3Sopenharmony_ci is always stable.
668253a5a1b3Sopenharmony_ci This is in theory; in practice because of finite precision, there are two
668353a5a1b3Sopenharmony_ci commonly used techniques to make sure we have a stable filter.
668453a5a1b3Sopenharmony_ci First, we multiply 
668553a5a1b3Sopenharmony_ci\begin_inset Formula $R(0)$
668653a5a1b3Sopenharmony_ci\end_inset
668753a5a1b3Sopenharmony_ci
668853a5a1b3Sopenharmony_ci by a number slightly above one (such as 1.0001), which is equivalent to
668953a5a1b3Sopenharmony_ci adding noise to the signal.
669053a5a1b3Sopenharmony_ci Also, we can apply a window to the auto-correlation, which is equivalent
669153a5a1b3Sopenharmony_ci to filtering in the frequency domain, reducing sharp resonances.
669253a5a1b3Sopenharmony_ci\end_layout
669353a5a1b3Sopenharmony_ci
669453a5a1b3Sopenharmony_ci\begin_layout Section
669553a5a1b3Sopenharmony_ciPitch Prediction
669653a5a1b3Sopenharmony_ci\begin_inset Index
669753a5a1b3Sopenharmony_cistatus collapsed
669853a5a1b3Sopenharmony_ci
669953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
670053a5a1b3Sopenharmony_cipitch
670153a5a1b3Sopenharmony_ci\end_layout
670253a5a1b3Sopenharmony_ci
670353a5a1b3Sopenharmony_ci\end_inset
670453a5a1b3Sopenharmony_ci
670553a5a1b3Sopenharmony_ci
670653a5a1b3Sopenharmony_ci\end_layout
670753a5a1b3Sopenharmony_ci
670853a5a1b3Sopenharmony_ci\begin_layout Standard
670953a5a1b3Sopenharmony_ciDuring voiced segments, the speech signal is periodic, so it is possible
671053a5a1b3Sopenharmony_ci to take advantage of that property by approximating the excitation signal
671153a5a1b3Sopenharmony_ci 
671253a5a1b3Sopenharmony_ci\begin_inset Formula $e[n]$
671353a5a1b3Sopenharmony_ci\end_inset
671453a5a1b3Sopenharmony_ci
671553a5a1b3Sopenharmony_ci by a gain times the past of the excitation:
671653a5a1b3Sopenharmony_ci\end_layout
671753a5a1b3Sopenharmony_ci
671853a5a1b3Sopenharmony_ci\begin_layout Standard
671953a5a1b3Sopenharmony_ci\begin_inset Formula \[
672053a5a1b3Sopenharmony_cie[n]\simeq p[n]=\beta e[n-T]\ ,\]
672153a5a1b3Sopenharmony_ci
672253a5a1b3Sopenharmony_ci\end_inset
672353a5a1b3Sopenharmony_ci
672453a5a1b3Sopenharmony_ciwhere 
672553a5a1b3Sopenharmony_ci\begin_inset Formula $T$
672653a5a1b3Sopenharmony_ci\end_inset
672753a5a1b3Sopenharmony_ci
672853a5a1b3Sopenharmony_ci is the pitch period, 
672953a5a1b3Sopenharmony_ci\begin_inset Formula $\beta$
673053a5a1b3Sopenharmony_ci\end_inset
673153a5a1b3Sopenharmony_ci
673253a5a1b3Sopenharmony_ci is the pitch gain.
673353a5a1b3Sopenharmony_ci We call that long-term prediction since the excitation is predicted from
673453a5a1b3Sopenharmony_ci 
673553a5a1b3Sopenharmony_ci\begin_inset Formula $e[n-T]$
673653a5a1b3Sopenharmony_ci\end_inset
673753a5a1b3Sopenharmony_ci
673853a5a1b3Sopenharmony_ci with 
673953a5a1b3Sopenharmony_ci\begin_inset Formula $T\gg N$
674053a5a1b3Sopenharmony_ci\end_inset
674153a5a1b3Sopenharmony_ci
674253a5a1b3Sopenharmony_ci.
674353a5a1b3Sopenharmony_ci\end_layout
674453a5a1b3Sopenharmony_ci
674553a5a1b3Sopenharmony_ci\begin_layout Section
674653a5a1b3Sopenharmony_ciInnovation Codebook
674753a5a1b3Sopenharmony_ci\end_layout
674853a5a1b3Sopenharmony_ci
674953a5a1b3Sopenharmony_ci\begin_layout Standard
675053a5a1b3Sopenharmony_ciThe final excitation 
675153a5a1b3Sopenharmony_ci\begin_inset Formula $e[n]$
675253a5a1b3Sopenharmony_ci\end_inset
675353a5a1b3Sopenharmony_ci
675453a5a1b3Sopenharmony_ci will be the sum of the pitch prediction and an 
675553a5a1b3Sopenharmony_ci\emph on
675653a5a1b3Sopenharmony_ciinnovation
675753a5a1b3Sopenharmony_ci\emph default
675853a5a1b3Sopenharmony_ci signal 
675953a5a1b3Sopenharmony_ci\begin_inset Formula $c[n]$
676053a5a1b3Sopenharmony_ci\end_inset
676153a5a1b3Sopenharmony_ci
676253a5a1b3Sopenharmony_ci taken from a fixed codebook, hence the name 
676353a5a1b3Sopenharmony_ci\emph on
676453a5a1b3Sopenharmony_ciCode
676553a5a1b3Sopenharmony_ci\emph default
676653a5a1b3Sopenharmony_ci Excited Linear Prediction.
676753a5a1b3Sopenharmony_ci The final excitation is given by
676853a5a1b3Sopenharmony_ci\end_layout
676953a5a1b3Sopenharmony_ci
677053a5a1b3Sopenharmony_ci\begin_layout Standard
677153a5a1b3Sopenharmony_ci\begin_inset Formula \[
677253a5a1b3Sopenharmony_cie[n]=p[n]+c[n]=\beta e[n-T]+c[n]\ .\]
677353a5a1b3Sopenharmony_ci
677453a5a1b3Sopenharmony_ci\end_inset
677553a5a1b3Sopenharmony_ci
677653a5a1b3Sopenharmony_ciThe quantization of 
677753a5a1b3Sopenharmony_ci\begin_inset Formula $c[n]$
677853a5a1b3Sopenharmony_ci\end_inset
677953a5a1b3Sopenharmony_ci
678053a5a1b3Sopenharmony_ci is where most of the bits in a CELP codec are allocated.
678153a5a1b3Sopenharmony_ci It represents the information that couldn't be obtained either from linear
678253a5a1b3Sopenharmony_ci prediction or pitch prediction.
678353a5a1b3Sopenharmony_ci In the 
678453a5a1b3Sopenharmony_ci\emph on
678553a5a1b3Sopenharmony_ciz
678653a5a1b3Sopenharmony_ci\emph default
678753a5a1b3Sopenharmony_ci-domain we can represent the final signal 
678853a5a1b3Sopenharmony_ci\begin_inset Formula $X(z)$
678953a5a1b3Sopenharmony_ci\end_inset
679053a5a1b3Sopenharmony_ci
679153a5a1b3Sopenharmony_ci as
679253a5a1b3Sopenharmony_ci\begin_inset Formula \[
679353a5a1b3Sopenharmony_ciX(z)=\frac{C(z)}{A(z)\left(1-\beta z^{-T}\right)}\]
679453a5a1b3Sopenharmony_ci
679553a5a1b3Sopenharmony_ci\end_inset
679653a5a1b3Sopenharmony_ci
679753a5a1b3Sopenharmony_ci
679853a5a1b3Sopenharmony_ci\end_layout
679953a5a1b3Sopenharmony_ci
680053a5a1b3Sopenharmony_ci\begin_layout Section
680153a5a1b3Sopenharmony_ciNoise Weighting
680253a5a1b3Sopenharmony_ci\begin_inset Index
680353a5a1b3Sopenharmony_cistatus collapsed
680453a5a1b3Sopenharmony_ci
680553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
680653a5a1b3Sopenharmony_cierror weighting
680753a5a1b3Sopenharmony_ci\end_layout
680853a5a1b3Sopenharmony_ci
680953a5a1b3Sopenharmony_ci\end_inset
681053a5a1b3Sopenharmony_ci
681153a5a1b3Sopenharmony_ci
681253a5a1b3Sopenharmony_ci\begin_inset Index
681353a5a1b3Sopenharmony_cistatus collapsed
681453a5a1b3Sopenharmony_ci
681553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
681653a5a1b3Sopenharmony_cianalysis-by-synthesis
681753a5a1b3Sopenharmony_ci\end_layout
681853a5a1b3Sopenharmony_ci
681953a5a1b3Sopenharmony_ci\end_inset
682053a5a1b3Sopenharmony_ci
682153a5a1b3Sopenharmony_ci
682253a5a1b3Sopenharmony_ci\end_layout
682353a5a1b3Sopenharmony_ci
682453a5a1b3Sopenharmony_ci\begin_layout Standard
682553a5a1b3Sopenharmony_ciMost (if not all) modern audio codecs attempt to 
682653a5a1b3Sopenharmony_ci\begin_inset Quotes eld
682753a5a1b3Sopenharmony_ci\end_inset
682853a5a1b3Sopenharmony_ci
682953a5a1b3Sopenharmony_cishape
683053a5a1b3Sopenharmony_ci\begin_inset Quotes erd
683153a5a1b3Sopenharmony_ci\end_inset
683253a5a1b3Sopenharmony_ci
683353a5a1b3Sopenharmony_ci the noise so that it appears mostly in the frequency regions where the
683453a5a1b3Sopenharmony_ci ear cannot detect it.
683553a5a1b3Sopenharmony_ci For example, the ear is more tolerant to noise in parts of the spectrum
683653a5a1b3Sopenharmony_ci that are louder and 
683753a5a1b3Sopenharmony_ci\emph on
683853a5a1b3Sopenharmony_civice versa
683953a5a1b3Sopenharmony_ci\emph default
684053a5a1b3Sopenharmony_ci.
684153a5a1b3Sopenharmony_ci In order to maximize speech quality, CELP codecs minimize the mean square
684253a5a1b3Sopenharmony_ci of the error (noise) in the perceptually weighted domain.
684353a5a1b3Sopenharmony_ci This means that a perceptual noise weighting filter 
684453a5a1b3Sopenharmony_ci\begin_inset Formula $W(z)$
684553a5a1b3Sopenharmony_ci\end_inset
684653a5a1b3Sopenharmony_ci
684753a5a1b3Sopenharmony_ci is applied to the error signal in the encoder.
684853a5a1b3Sopenharmony_ci In most CELP codecs, 
684953a5a1b3Sopenharmony_ci\begin_inset Formula $W(z)$
685053a5a1b3Sopenharmony_ci\end_inset
685153a5a1b3Sopenharmony_ci
685253a5a1b3Sopenharmony_ci is a pole-zero weighting filter derived from the linear prediction coefficients
685353a5a1b3Sopenharmony_ci (LPC), generally using bandwidth expansion.
685453a5a1b3Sopenharmony_ci Let the spectral envelope be represented by the synthesis filter 
685553a5a1b3Sopenharmony_ci\begin_inset Formula $1/A(z)$
685653a5a1b3Sopenharmony_ci\end_inset
685753a5a1b3Sopenharmony_ci
685853a5a1b3Sopenharmony_ci, CELP codecs typically derive the noise weighting filter as 
685953a5a1b3Sopenharmony_ci\begin_inset Formula \begin{equation}
686053a5a1b3Sopenharmony_ciW(z)=\frac{A(z/\gamma_{1})}{A(z/\gamma_{2})}\ ,\label{eq:gamma-weighting}\end{equation}
686153a5a1b3Sopenharmony_ci
686253a5a1b3Sopenharmony_ci\end_inset
686353a5a1b3Sopenharmony_ci
686453a5a1b3Sopenharmony_ciwhere 
686553a5a1b3Sopenharmony_ci\begin_inset Formula $\gamma_{1}=0.9$
686653a5a1b3Sopenharmony_ci\end_inset
686753a5a1b3Sopenharmony_ci
686853a5a1b3Sopenharmony_ci and 
686953a5a1b3Sopenharmony_ci\begin_inset Formula $\gamma_{2}=0.6$
687053a5a1b3Sopenharmony_ci\end_inset
687153a5a1b3Sopenharmony_ci
687253a5a1b3Sopenharmony_ci in the Speex reference implementation.
687353a5a1b3Sopenharmony_ci If a filter 
687453a5a1b3Sopenharmony_ci\begin_inset Formula $A(z)$
687553a5a1b3Sopenharmony_ci\end_inset
687653a5a1b3Sopenharmony_ci
687753a5a1b3Sopenharmony_ci has (complex) poles at 
687853a5a1b3Sopenharmony_ci\begin_inset Formula $p_{i}$
687953a5a1b3Sopenharmony_ci\end_inset
688053a5a1b3Sopenharmony_ci
688153a5a1b3Sopenharmony_ci in the 
688253a5a1b3Sopenharmony_ci\begin_inset Formula $z$
688353a5a1b3Sopenharmony_ci\end_inset
688453a5a1b3Sopenharmony_ci
688553a5a1b3Sopenharmony_ci-plane, the filter 
688653a5a1b3Sopenharmony_ci\begin_inset Formula $A(z/\gamma)$
688753a5a1b3Sopenharmony_ci\end_inset
688853a5a1b3Sopenharmony_ci
688953a5a1b3Sopenharmony_ci will have its poles at 
689053a5a1b3Sopenharmony_ci\begin_inset Formula $p'_{i}=\gamma p_{i}$
689153a5a1b3Sopenharmony_ci\end_inset
689253a5a1b3Sopenharmony_ci
689353a5a1b3Sopenharmony_ci, making it a flatter version of 
689453a5a1b3Sopenharmony_ci\begin_inset Formula $A(z)$
689553a5a1b3Sopenharmony_ci\end_inset
689653a5a1b3Sopenharmony_ci
689753a5a1b3Sopenharmony_ci.
689853a5a1b3Sopenharmony_ci\end_layout
689953a5a1b3Sopenharmony_ci
690053a5a1b3Sopenharmony_ci\begin_layout Standard
690153a5a1b3Sopenharmony_ciThe weighting filter is applied to the error signal used to optimize the
690253a5a1b3Sopenharmony_ci codebook search through analysis-by-synthesis (AbS).
690353a5a1b3Sopenharmony_ci This results in a spectral shape of the noise that tends towards 
690453a5a1b3Sopenharmony_ci\begin_inset Formula $1/W(z)$
690553a5a1b3Sopenharmony_ci\end_inset
690653a5a1b3Sopenharmony_ci
690753a5a1b3Sopenharmony_ci.
690853a5a1b3Sopenharmony_ci While the simplicity of the model has been an important reason for the
690953a5a1b3Sopenharmony_ci success of CELP, it remains that 
691053a5a1b3Sopenharmony_ci\begin_inset Formula $W(z)$
691153a5a1b3Sopenharmony_ci\end_inset
691253a5a1b3Sopenharmony_ci
691353a5a1b3Sopenharmony_ci is a very rough approximation for the perceptually optimal noise weighting
691453a5a1b3Sopenharmony_ci function.
691553a5a1b3Sopenharmony_ci Fig.
691653a5a1b3Sopenharmony_ci 
691753a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
691853a5a1b3Sopenharmony_ciLatexCommand ref
691953a5a1b3Sopenharmony_cireference "cap:Standard-noise-shaping"
692053a5a1b3Sopenharmony_ci
692153a5a1b3Sopenharmony_ci\end_inset
692253a5a1b3Sopenharmony_ci
692353a5a1b3Sopenharmony_ci illustrates the noise shaping that results from Eq.
692453a5a1b3Sopenharmony_ci 
692553a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
692653a5a1b3Sopenharmony_ciLatexCommand ref
692753a5a1b3Sopenharmony_cireference "eq:gamma-weighting"
692853a5a1b3Sopenharmony_ci
692953a5a1b3Sopenharmony_ci\end_inset
693053a5a1b3Sopenharmony_ci
693153a5a1b3Sopenharmony_ci.
693253a5a1b3Sopenharmony_ci Throughout this paper, we refer to 
693353a5a1b3Sopenharmony_ci\begin_inset Formula $W(z)$
693453a5a1b3Sopenharmony_ci\end_inset
693553a5a1b3Sopenharmony_ci
693653a5a1b3Sopenharmony_ci as the noise weighting filter and to 
693753a5a1b3Sopenharmony_ci\begin_inset Formula $1/W(z)$
693853a5a1b3Sopenharmony_ci\end_inset
693953a5a1b3Sopenharmony_ci
694053a5a1b3Sopenharmony_ci as the noise shaping filter (or curve).
694153a5a1b3Sopenharmony_ci\end_layout
694253a5a1b3Sopenharmony_ci
694353a5a1b3Sopenharmony_ci\begin_layout Standard
694453a5a1b3Sopenharmony_ci\begin_inset Float figure
694553a5a1b3Sopenharmony_ciwide false
694653a5a1b3Sopenharmony_cisideways false
694753a5a1b3Sopenharmony_cistatus open
694853a5a1b3Sopenharmony_ci
694953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
695053a5a1b3Sopenharmony_ci\begin_inset ERT
695153a5a1b3Sopenharmony_cistatus collapsed
695253a5a1b3Sopenharmony_ci
695353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
695453a5a1b3Sopenharmony_ci
695553a5a1b3Sopenharmony_ci
695653a5a1b3Sopenharmony_ci\backslash
695753a5a1b3Sopenharmony_cibegin{center}
695853a5a1b3Sopenharmony_ci\end_layout
695953a5a1b3Sopenharmony_ci
696053a5a1b3Sopenharmony_ci\end_inset
696153a5a1b3Sopenharmony_ci
696253a5a1b3Sopenharmony_ci
696353a5a1b3Sopenharmony_ci\begin_inset Graphics
696453a5a1b3Sopenharmony_ci	filename ref_shaping.eps
696553a5a1b3Sopenharmony_ci	width 45page%
696653a5a1b3Sopenharmony_ci	keepAspectRatio
696753a5a1b3Sopenharmony_ci
696853a5a1b3Sopenharmony_ci\end_inset
696953a5a1b3Sopenharmony_ci
697053a5a1b3Sopenharmony_ci
697153a5a1b3Sopenharmony_ci\begin_inset ERT
697253a5a1b3Sopenharmony_cistatus collapsed
697353a5a1b3Sopenharmony_ci
697453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
697553a5a1b3Sopenharmony_ci
697653a5a1b3Sopenharmony_ci
697753a5a1b3Sopenharmony_ci\backslash
697853a5a1b3Sopenharmony_ciend{center}
697953a5a1b3Sopenharmony_ci\end_layout
698053a5a1b3Sopenharmony_ci
698153a5a1b3Sopenharmony_ci\end_inset
698253a5a1b3Sopenharmony_ci
698353a5a1b3Sopenharmony_ci
698453a5a1b3Sopenharmony_ci\end_layout
698553a5a1b3Sopenharmony_ci
698653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
698753a5a1b3Sopenharmony_ci\begin_inset Caption
698853a5a1b3Sopenharmony_ci
698953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
699053a5a1b3Sopenharmony_ciStandard noise shaping in CELP.
699153a5a1b3Sopenharmony_ci Arbitrary y-axis offset.
699253a5a1b3Sopenharmony_ci\begin_inset CommandInset label
699353a5a1b3Sopenharmony_ciLatexCommand label
699453a5a1b3Sopenharmony_ciname "cap:Standard-noise-shaping"
699553a5a1b3Sopenharmony_ci
699653a5a1b3Sopenharmony_ci\end_inset
699753a5a1b3Sopenharmony_ci
699853a5a1b3Sopenharmony_ci
699953a5a1b3Sopenharmony_ci\end_layout
700053a5a1b3Sopenharmony_ci
700153a5a1b3Sopenharmony_ci\end_inset
700253a5a1b3Sopenharmony_ci
700353a5a1b3Sopenharmony_ci
700453a5a1b3Sopenharmony_ci\end_layout
700553a5a1b3Sopenharmony_ci
700653a5a1b3Sopenharmony_ci\end_inset
700753a5a1b3Sopenharmony_ci
700853a5a1b3Sopenharmony_ci
700953a5a1b3Sopenharmony_ci\end_layout
701053a5a1b3Sopenharmony_ci
701153a5a1b3Sopenharmony_ci\begin_layout Section
701253a5a1b3Sopenharmony_ciAnalysis-by-Synthesis
701353a5a1b3Sopenharmony_ci\end_layout
701453a5a1b3Sopenharmony_ci
701553a5a1b3Sopenharmony_ci\begin_layout Standard
701653a5a1b3Sopenharmony_ciOne of the main principles behind CELP is called Analysis-by-Synthesis (AbS),
701753a5a1b3Sopenharmony_ci meaning that the encoding (analysis) is performed by perceptually optimising
701853a5a1b3Sopenharmony_ci the decoded (synthesis) signal in a closed loop.
701953a5a1b3Sopenharmony_ci In theory, the best CELP stream would be produced by trying all possible
702053a5a1b3Sopenharmony_ci bit combinations and selecting the one that produces the best-sounding
702153a5a1b3Sopenharmony_ci decoded signal.
702253a5a1b3Sopenharmony_ci This is obviously not possible in practice for two reasons: the required
702353a5a1b3Sopenharmony_ci complexity is beyond any currently available hardware and the 
702453a5a1b3Sopenharmony_ci\begin_inset Quotes eld
702553a5a1b3Sopenharmony_ci\end_inset
702653a5a1b3Sopenharmony_ci
702753a5a1b3Sopenharmony_cibest sounding
702853a5a1b3Sopenharmony_ci\begin_inset Quotes erd
702953a5a1b3Sopenharmony_ci\end_inset
703053a5a1b3Sopenharmony_ci
703153a5a1b3Sopenharmony_ci selection criterion implies a human listener.
703253a5a1b3Sopenharmony_ci 
703353a5a1b3Sopenharmony_ci\end_layout
703453a5a1b3Sopenharmony_ci
703553a5a1b3Sopenharmony_ci\begin_layout Standard
703653a5a1b3Sopenharmony_ciIn order to achieve real-time encoding using limited computing resources,
703753a5a1b3Sopenharmony_ci the CELP optimisation is broken down into smaller, more manageable, sequential
703853a5a1b3Sopenharmony_ci searches using the perceptual weighting function described earlier.
703953a5a1b3Sopenharmony_ci\end_layout
704053a5a1b3Sopenharmony_ci
704153a5a1b3Sopenharmony_ci\begin_layout Standard
704253a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
704353a5a1b3Sopenharmony_ci\end_inset
704453a5a1b3Sopenharmony_ci
704553a5a1b3Sopenharmony_ci
704653a5a1b3Sopenharmony_ci\end_layout
704753a5a1b3Sopenharmony_ci
704853a5a1b3Sopenharmony_ci\begin_layout Chapter
704953a5a1b3Sopenharmony_ciThe Speex Decoder Specification
705053a5a1b3Sopenharmony_ci\end_layout
705153a5a1b3Sopenharmony_ci
705253a5a1b3Sopenharmony_ci\begin_layout Section
705353a5a1b3Sopenharmony_ciNarrowband decoder
705453a5a1b3Sopenharmony_ci\end_layout
705553a5a1b3Sopenharmony_ci
705653a5a1b3Sopenharmony_ci\begin_layout Standard
705753a5a1b3Sopenharmony_ci<Insert decoder figure here>
705853a5a1b3Sopenharmony_ci\end_layout
705953a5a1b3Sopenharmony_ci
706053a5a1b3Sopenharmony_ci\begin_layout Subsection
706153a5a1b3Sopenharmony_ciNarrowband modes
706253a5a1b3Sopenharmony_ci\end_layout
706353a5a1b3Sopenharmony_ci
706453a5a1b3Sopenharmony_ci\begin_layout Standard
706553a5a1b3Sopenharmony_ciThere are 7 different narrowband bit-rates defined for Speex, ranging from
706653a5a1b3Sopenharmony_ci 250 bps to 24.6 kbps, although the modes below 5.9 kbps should not be used
706753a5a1b3Sopenharmony_ci for speech.
706853a5a1b3Sopenharmony_ci The bit-allocation for each mode is detailed in table 
706953a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
707053a5a1b3Sopenharmony_ciLatexCommand ref
707153a5a1b3Sopenharmony_cireference "cap:bits-narrowband"
707253a5a1b3Sopenharmony_ci
707353a5a1b3Sopenharmony_ci\end_inset
707453a5a1b3Sopenharmony_ci
707553a5a1b3Sopenharmony_ci.
707653a5a1b3Sopenharmony_ci Each frame starts with the mode ID encoded with 4 bits which allows a range
707753a5a1b3Sopenharmony_ci from 0 to 15, though only the first 7 values are used (the others are reserved).
707853a5a1b3Sopenharmony_ci The parameters are listed in the table in the order they are packed in
707953a5a1b3Sopenharmony_ci the bit-stream.
708053a5a1b3Sopenharmony_ci All frame-based parameters are packed before sub-frame parameters.
708153a5a1b3Sopenharmony_ci The parameters for a certain sub-frame are all packed before the following
708253a5a1b3Sopenharmony_ci sub-frame is packed.
708353a5a1b3Sopenharmony_ci The 
708453a5a1b3Sopenharmony_ci\begin_inset Quotes eld
708553a5a1b3Sopenharmony_ci\end_inset
708653a5a1b3Sopenharmony_ci
708753a5a1b3Sopenharmony_ciOL
708853a5a1b3Sopenharmony_ci\begin_inset Quotes erd
708953a5a1b3Sopenharmony_ci\end_inset
709053a5a1b3Sopenharmony_ci
709153a5a1b3Sopenharmony_ci in the parameter description means that the parameter is an open loop estimatio
709253a5a1b3Sopenharmony_cin based on the whole frame.
709353a5a1b3Sopenharmony_ci\end_layout
709453a5a1b3Sopenharmony_ci
709553a5a1b3Sopenharmony_ci\begin_layout Standard
709653a5a1b3Sopenharmony_ci\begin_inset Float table
709753a5a1b3Sopenharmony_ciplacement h
709853a5a1b3Sopenharmony_ciwide true
709953a5a1b3Sopenharmony_cisideways false
710053a5a1b3Sopenharmony_cistatus open
710153a5a1b3Sopenharmony_ci
710253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
710353a5a1b3Sopenharmony_ci\begin_inset ERT
710453a5a1b3Sopenharmony_cistatus collapsed
710553a5a1b3Sopenharmony_ci
710653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
710753a5a1b3Sopenharmony_ci
710853a5a1b3Sopenharmony_ci
710953a5a1b3Sopenharmony_ci\backslash
711053a5a1b3Sopenharmony_cibegin{center}
711153a5a1b3Sopenharmony_ci\end_layout
711253a5a1b3Sopenharmony_ci
711353a5a1b3Sopenharmony_ci\end_inset
711453a5a1b3Sopenharmony_ci
711553a5a1b3Sopenharmony_ci
711653a5a1b3Sopenharmony_ci\begin_inset Tabular
711753a5a1b3Sopenharmony_ci<lyxtabular version="3" rows="12" columns="11">
711853a5a1b3Sopenharmony_ci<features>
711953a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712053a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712153a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712253a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712353a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712453a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712553a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712653a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712753a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712853a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
712953a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
713053a5a1b3Sopenharmony_ci<row>
713153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
713253a5a1b3Sopenharmony_ci\begin_inset Text
713353a5a1b3Sopenharmony_ci
713453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
713553a5a1b3Sopenharmony_ciParameter
713653a5a1b3Sopenharmony_ci\end_layout
713753a5a1b3Sopenharmony_ci
713853a5a1b3Sopenharmony_ci\end_inset
713953a5a1b3Sopenharmony_ci</cell>
714053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
714153a5a1b3Sopenharmony_ci\begin_inset Text
714253a5a1b3Sopenharmony_ci
714353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
714453a5a1b3Sopenharmony_ciUpdate rate
714553a5a1b3Sopenharmony_ci\end_layout
714653a5a1b3Sopenharmony_ci
714753a5a1b3Sopenharmony_ci\end_inset
714853a5a1b3Sopenharmony_ci</cell>
714953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
715053a5a1b3Sopenharmony_ci\begin_inset Text
715153a5a1b3Sopenharmony_ci
715253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
715353a5a1b3Sopenharmony_ci0
715453a5a1b3Sopenharmony_ci\end_layout
715553a5a1b3Sopenharmony_ci
715653a5a1b3Sopenharmony_ci\end_inset
715753a5a1b3Sopenharmony_ci</cell>
715853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
715953a5a1b3Sopenharmony_ci\begin_inset Text
716053a5a1b3Sopenharmony_ci
716153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
716253a5a1b3Sopenharmony_ci1
716353a5a1b3Sopenharmony_ci\end_layout
716453a5a1b3Sopenharmony_ci
716553a5a1b3Sopenharmony_ci\end_inset
716653a5a1b3Sopenharmony_ci</cell>
716753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
716853a5a1b3Sopenharmony_ci\begin_inset Text
716953a5a1b3Sopenharmony_ci
717053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
717153a5a1b3Sopenharmony_ci2
717253a5a1b3Sopenharmony_ci\end_layout
717353a5a1b3Sopenharmony_ci
717453a5a1b3Sopenharmony_ci\end_inset
717553a5a1b3Sopenharmony_ci</cell>
717653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
717753a5a1b3Sopenharmony_ci\begin_inset Text
717853a5a1b3Sopenharmony_ci
717953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
718053a5a1b3Sopenharmony_ci3
718153a5a1b3Sopenharmony_ci\end_layout
718253a5a1b3Sopenharmony_ci
718353a5a1b3Sopenharmony_ci\end_inset
718453a5a1b3Sopenharmony_ci</cell>
718553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
718653a5a1b3Sopenharmony_ci\begin_inset Text
718753a5a1b3Sopenharmony_ci
718853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
718953a5a1b3Sopenharmony_ci4
719053a5a1b3Sopenharmony_ci\end_layout
719153a5a1b3Sopenharmony_ci
719253a5a1b3Sopenharmony_ci\end_inset
719353a5a1b3Sopenharmony_ci</cell>
719453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
719553a5a1b3Sopenharmony_ci\begin_inset Text
719653a5a1b3Sopenharmony_ci
719753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
719853a5a1b3Sopenharmony_ci5
719953a5a1b3Sopenharmony_ci\end_layout
720053a5a1b3Sopenharmony_ci
720153a5a1b3Sopenharmony_ci\end_inset
720253a5a1b3Sopenharmony_ci</cell>
720353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
720453a5a1b3Sopenharmony_ci\begin_inset Text
720553a5a1b3Sopenharmony_ci
720653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
720753a5a1b3Sopenharmony_ci6
720853a5a1b3Sopenharmony_ci\end_layout
720953a5a1b3Sopenharmony_ci
721053a5a1b3Sopenharmony_ci\end_inset
721153a5a1b3Sopenharmony_ci</cell>
721253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
721353a5a1b3Sopenharmony_ci\begin_inset Text
721453a5a1b3Sopenharmony_ci
721553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
721653a5a1b3Sopenharmony_ci7
721753a5a1b3Sopenharmony_ci\end_layout
721853a5a1b3Sopenharmony_ci
721953a5a1b3Sopenharmony_ci\end_inset
722053a5a1b3Sopenharmony_ci</cell>
722153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
722253a5a1b3Sopenharmony_ci\begin_inset Text
722353a5a1b3Sopenharmony_ci
722453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
722553a5a1b3Sopenharmony_ci8
722653a5a1b3Sopenharmony_ci\end_layout
722753a5a1b3Sopenharmony_ci
722853a5a1b3Sopenharmony_ci\end_inset
722953a5a1b3Sopenharmony_ci</cell>
723053a5a1b3Sopenharmony_ci</row>
723153a5a1b3Sopenharmony_ci<row>
723253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
723353a5a1b3Sopenharmony_ci\begin_inset Text
723453a5a1b3Sopenharmony_ci
723553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
723653a5a1b3Sopenharmony_ciWideband bit
723753a5a1b3Sopenharmony_ci\end_layout
723853a5a1b3Sopenharmony_ci
723953a5a1b3Sopenharmony_ci\end_inset
724053a5a1b3Sopenharmony_ci</cell>
724153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
724253a5a1b3Sopenharmony_ci\begin_inset Text
724353a5a1b3Sopenharmony_ci
724453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
724553a5a1b3Sopenharmony_ciframe
724653a5a1b3Sopenharmony_ci\end_layout
724753a5a1b3Sopenharmony_ci
724853a5a1b3Sopenharmony_ci\end_inset
724953a5a1b3Sopenharmony_ci</cell>
725053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
725153a5a1b3Sopenharmony_ci\begin_inset Text
725253a5a1b3Sopenharmony_ci
725353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
725453a5a1b3Sopenharmony_ci1
725553a5a1b3Sopenharmony_ci\end_layout
725653a5a1b3Sopenharmony_ci
725753a5a1b3Sopenharmony_ci\end_inset
725853a5a1b3Sopenharmony_ci</cell>
725953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
726053a5a1b3Sopenharmony_ci\begin_inset Text
726153a5a1b3Sopenharmony_ci
726253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
726353a5a1b3Sopenharmony_ci1
726453a5a1b3Sopenharmony_ci\end_layout
726553a5a1b3Sopenharmony_ci
726653a5a1b3Sopenharmony_ci\end_inset
726753a5a1b3Sopenharmony_ci</cell>
726853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
726953a5a1b3Sopenharmony_ci\begin_inset Text
727053a5a1b3Sopenharmony_ci
727153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
727253a5a1b3Sopenharmony_ci1
727353a5a1b3Sopenharmony_ci\end_layout
727453a5a1b3Sopenharmony_ci
727553a5a1b3Sopenharmony_ci\end_inset
727653a5a1b3Sopenharmony_ci</cell>
727753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
727853a5a1b3Sopenharmony_ci\begin_inset Text
727953a5a1b3Sopenharmony_ci
728053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
728153a5a1b3Sopenharmony_ci1
728253a5a1b3Sopenharmony_ci\end_layout
728353a5a1b3Sopenharmony_ci
728453a5a1b3Sopenharmony_ci\end_inset
728553a5a1b3Sopenharmony_ci</cell>
728653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
728753a5a1b3Sopenharmony_ci\begin_inset Text
728853a5a1b3Sopenharmony_ci
728953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
729053a5a1b3Sopenharmony_ci1
729153a5a1b3Sopenharmony_ci\end_layout
729253a5a1b3Sopenharmony_ci
729353a5a1b3Sopenharmony_ci\end_inset
729453a5a1b3Sopenharmony_ci</cell>
729553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
729653a5a1b3Sopenharmony_ci\begin_inset Text
729753a5a1b3Sopenharmony_ci
729853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
729953a5a1b3Sopenharmony_ci1
730053a5a1b3Sopenharmony_ci\end_layout
730153a5a1b3Sopenharmony_ci
730253a5a1b3Sopenharmony_ci\end_inset
730353a5a1b3Sopenharmony_ci</cell>
730453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
730553a5a1b3Sopenharmony_ci\begin_inset Text
730653a5a1b3Sopenharmony_ci
730753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
730853a5a1b3Sopenharmony_ci1
730953a5a1b3Sopenharmony_ci\end_layout
731053a5a1b3Sopenharmony_ci
731153a5a1b3Sopenharmony_ci\end_inset
731253a5a1b3Sopenharmony_ci</cell>
731353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
731453a5a1b3Sopenharmony_ci\begin_inset Text
731553a5a1b3Sopenharmony_ci
731653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
731753a5a1b3Sopenharmony_ci1
731853a5a1b3Sopenharmony_ci\end_layout
731953a5a1b3Sopenharmony_ci
732053a5a1b3Sopenharmony_ci\end_inset
732153a5a1b3Sopenharmony_ci</cell>
732253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
732353a5a1b3Sopenharmony_ci\begin_inset Text
732453a5a1b3Sopenharmony_ci
732553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
732653a5a1b3Sopenharmony_ci1
732753a5a1b3Sopenharmony_ci\end_layout
732853a5a1b3Sopenharmony_ci
732953a5a1b3Sopenharmony_ci\end_inset
733053a5a1b3Sopenharmony_ci</cell>
733153a5a1b3Sopenharmony_ci</row>
733253a5a1b3Sopenharmony_ci<row>
733353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
733453a5a1b3Sopenharmony_ci\begin_inset Text
733553a5a1b3Sopenharmony_ci
733653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
733753a5a1b3Sopenharmony_ciMode ID
733853a5a1b3Sopenharmony_ci\end_layout
733953a5a1b3Sopenharmony_ci
734053a5a1b3Sopenharmony_ci\end_inset
734153a5a1b3Sopenharmony_ci</cell>
734253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
734353a5a1b3Sopenharmony_ci\begin_inset Text
734453a5a1b3Sopenharmony_ci
734553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
734653a5a1b3Sopenharmony_ciframe
734753a5a1b3Sopenharmony_ci\end_layout
734853a5a1b3Sopenharmony_ci
734953a5a1b3Sopenharmony_ci\end_inset
735053a5a1b3Sopenharmony_ci</cell>
735153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
735253a5a1b3Sopenharmony_ci\begin_inset Text
735353a5a1b3Sopenharmony_ci
735453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
735553a5a1b3Sopenharmony_ci4
735653a5a1b3Sopenharmony_ci\end_layout
735753a5a1b3Sopenharmony_ci
735853a5a1b3Sopenharmony_ci\end_inset
735953a5a1b3Sopenharmony_ci</cell>
736053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
736153a5a1b3Sopenharmony_ci\begin_inset Text
736253a5a1b3Sopenharmony_ci
736353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
736453a5a1b3Sopenharmony_ci4
736553a5a1b3Sopenharmony_ci\end_layout
736653a5a1b3Sopenharmony_ci
736753a5a1b3Sopenharmony_ci\end_inset
736853a5a1b3Sopenharmony_ci</cell>
736953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
737053a5a1b3Sopenharmony_ci\begin_inset Text
737153a5a1b3Sopenharmony_ci
737253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
737353a5a1b3Sopenharmony_ci4
737453a5a1b3Sopenharmony_ci\end_layout
737553a5a1b3Sopenharmony_ci
737653a5a1b3Sopenharmony_ci\end_inset
737753a5a1b3Sopenharmony_ci</cell>
737853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
737953a5a1b3Sopenharmony_ci\begin_inset Text
738053a5a1b3Sopenharmony_ci
738153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
738253a5a1b3Sopenharmony_ci4
738353a5a1b3Sopenharmony_ci\end_layout
738453a5a1b3Sopenharmony_ci
738553a5a1b3Sopenharmony_ci\end_inset
738653a5a1b3Sopenharmony_ci</cell>
738753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
738853a5a1b3Sopenharmony_ci\begin_inset Text
738953a5a1b3Sopenharmony_ci
739053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
739153a5a1b3Sopenharmony_ci4
739253a5a1b3Sopenharmony_ci\end_layout
739353a5a1b3Sopenharmony_ci
739453a5a1b3Sopenharmony_ci\end_inset
739553a5a1b3Sopenharmony_ci</cell>
739653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
739753a5a1b3Sopenharmony_ci\begin_inset Text
739853a5a1b3Sopenharmony_ci
739953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
740053a5a1b3Sopenharmony_ci4
740153a5a1b3Sopenharmony_ci\end_layout
740253a5a1b3Sopenharmony_ci
740353a5a1b3Sopenharmony_ci\end_inset
740453a5a1b3Sopenharmony_ci</cell>
740553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
740653a5a1b3Sopenharmony_ci\begin_inset Text
740753a5a1b3Sopenharmony_ci
740853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
740953a5a1b3Sopenharmony_ci4
741053a5a1b3Sopenharmony_ci\end_layout
741153a5a1b3Sopenharmony_ci
741253a5a1b3Sopenharmony_ci\end_inset
741353a5a1b3Sopenharmony_ci</cell>
741453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
741553a5a1b3Sopenharmony_ci\begin_inset Text
741653a5a1b3Sopenharmony_ci
741753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
741853a5a1b3Sopenharmony_ci4
741953a5a1b3Sopenharmony_ci\end_layout
742053a5a1b3Sopenharmony_ci
742153a5a1b3Sopenharmony_ci\end_inset
742253a5a1b3Sopenharmony_ci</cell>
742353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
742453a5a1b3Sopenharmony_ci\begin_inset Text
742553a5a1b3Sopenharmony_ci
742653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
742753a5a1b3Sopenharmony_ci4
742853a5a1b3Sopenharmony_ci\end_layout
742953a5a1b3Sopenharmony_ci
743053a5a1b3Sopenharmony_ci\end_inset
743153a5a1b3Sopenharmony_ci</cell>
743253a5a1b3Sopenharmony_ci</row>
743353a5a1b3Sopenharmony_ci<row>
743453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
743553a5a1b3Sopenharmony_ci\begin_inset Text
743653a5a1b3Sopenharmony_ci
743753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
743853a5a1b3Sopenharmony_ciLSP
743953a5a1b3Sopenharmony_ci\end_layout
744053a5a1b3Sopenharmony_ci
744153a5a1b3Sopenharmony_ci\end_inset
744253a5a1b3Sopenharmony_ci</cell>
744353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
744453a5a1b3Sopenharmony_ci\begin_inset Text
744553a5a1b3Sopenharmony_ci
744653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
744753a5a1b3Sopenharmony_ciframe
744853a5a1b3Sopenharmony_ci\end_layout
744953a5a1b3Sopenharmony_ci
745053a5a1b3Sopenharmony_ci\end_inset
745153a5a1b3Sopenharmony_ci</cell>
745253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
745353a5a1b3Sopenharmony_ci\begin_inset Text
745453a5a1b3Sopenharmony_ci
745553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
745653a5a1b3Sopenharmony_ci0
745753a5a1b3Sopenharmony_ci\end_layout
745853a5a1b3Sopenharmony_ci
745953a5a1b3Sopenharmony_ci\end_inset
746053a5a1b3Sopenharmony_ci</cell>
746153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
746253a5a1b3Sopenharmony_ci\begin_inset Text
746353a5a1b3Sopenharmony_ci
746453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
746553a5a1b3Sopenharmony_ci18
746653a5a1b3Sopenharmony_ci\end_layout
746753a5a1b3Sopenharmony_ci
746853a5a1b3Sopenharmony_ci\end_inset
746953a5a1b3Sopenharmony_ci</cell>
747053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
747153a5a1b3Sopenharmony_ci\begin_inset Text
747253a5a1b3Sopenharmony_ci
747353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
747453a5a1b3Sopenharmony_ci18
747553a5a1b3Sopenharmony_ci\end_layout
747653a5a1b3Sopenharmony_ci
747753a5a1b3Sopenharmony_ci\end_inset
747853a5a1b3Sopenharmony_ci</cell>
747953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
748053a5a1b3Sopenharmony_ci\begin_inset Text
748153a5a1b3Sopenharmony_ci
748253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
748353a5a1b3Sopenharmony_ci18
748453a5a1b3Sopenharmony_ci\end_layout
748553a5a1b3Sopenharmony_ci
748653a5a1b3Sopenharmony_ci\end_inset
748753a5a1b3Sopenharmony_ci</cell>
748853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
748953a5a1b3Sopenharmony_ci\begin_inset Text
749053a5a1b3Sopenharmony_ci
749153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
749253a5a1b3Sopenharmony_ci18
749353a5a1b3Sopenharmony_ci\end_layout
749453a5a1b3Sopenharmony_ci
749553a5a1b3Sopenharmony_ci\end_inset
749653a5a1b3Sopenharmony_ci</cell>
749753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
749853a5a1b3Sopenharmony_ci\begin_inset Text
749953a5a1b3Sopenharmony_ci
750053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
750153a5a1b3Sopenharmony_ci30
750253a5a1b3Sopenharmony_ci\end_layout
750353a5a1b3Sopenharmony_ci
750453a5a1b3Sopenharmony_ci\end_inset
750553a5a1b3Sopenharmony_ci</cell>
750653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
750753a5a1b3Sopenharmony_ci\begin_inset Text
750853a5a1b3Sopenharmony_ci
750953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
751053a5a1b3Sopenharmony_ci30
751153a5a1b3Sopenharmony_ci\end_layout
751253a5a1b3Sopenharmony_ci
751353a5a1b3Sopenharmony_ci\end_inset
751453a5a1b3Sopenharmony_ci</cell>
751553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
751653a5a1b3Sopenharmony_ci\begin_inset Text
751753a5a1b3Sopenharmony_ci
751853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
751953a5a1b3Sopenharmony_ci30
752053a5a1b3Sopenharmony_ci\end_layout
752153a5a1b3Sopenharmony_ci
752253a5a1b3Sopenharmony_ci\end_inset
752353a5a1b3Sopenharmony_ci</cell>
752453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
752553a5a1b3Sopenharmony_ci\begin_inset Text
752653a5a1b3Sopenharmony_ci
752753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
752853a5a1b3Sopenharmony_ci18
752953a5a1b3Sopenharmony_ci\end_layout
753053a5a1b3Sopenharmony_ci
753153a5a1b3Sopenharmony_ci\end_inset
753253a5a1b3Sopenharmony_ci</cell>
753353a5a1b3Sopenharmony_ci</row>
753453a5a1b3Sopenharmony_ci<row>
753553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
753653a5a1b3Sopenharmony_ci\begin_inset Text
753753a5a1b3Sopenharmony_ci
753853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
753953a5a1b3Sopenharmony_ciOL pitch
754053a5a1b3Sopenharmony_ci\end_layout
754153a5a1b3Sopenharmony_ci
754253a5a1b3Sopenharmony_ci\end_inset
754353a5a1b3Sopenharmony_ci</cell>
754453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
754553a5a1b3Sopenharmony_ci\begin_inset Text
754653a5a1b3Sopenharmony_ci
754753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
754853a5a1b3Sopenharmony_ciframe
754953a5a1b3Sopenharmony_ci\end_layout
755053a5a1b3Sopenharmony_ci
755153a5a1b3Sopenharmony_ci\end_inset
755253a5a1b3Sopenharmony_ci</cell>
755353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
755453a5a1b3Sopenharmony_ci\begin_inset Text
755553a5a1b3Sopenharmony_ci
755653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
755753a5a1b3Sopenharmony_ci0
755853a5a1b3Sopenharmony_ci\end_layout
755953a5a1b3Sopenharmony_ci
756053a5a1b3Sopenharmony_ci\end_inset
756153a5a1b3Sopenharmony_ci</cell>
756253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
756353a5a1b3Sopenharmony_ci\begin_inset Text
756453a5a1b3Sopenharmony_ci
756553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
756653a5a1b3Sopenharmony_ci7
756753a5a1b3Sopenharmony_ci\end_layout
756853a5a1b3Sopenharmony_ci
756953a5a1b3Sopenharmony_ci\end_inset
757053a5a1b3Sopenharmony_ci</cell>
757153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
757253a5a1b3Sopenharmony_ci\begin_inset Text
757353a5a1b3Sopenharmony_ci
757453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
757553a5a1b3Sopenharmony_ci7
757653a5a1b3Sopenharmony_ci\end_layout
757753a5a1b3Sopenharmony_ci
757853a5a1b3Sopenharmony_ci\end_inset
757953a5a1b3Sopenharmony_ci</cell>
758053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
758153a5a1b3Sopenharmony_ci\begin_inset Text
758253a5a1b3Sopenharmony_ci
758353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
758453a5a1b3Sopenharmony_ci0
758553a5a1b3Sopenharmony_ci\end_layout
758653a5a1b3Sopenharmony_ci
758753a5a1b3Sopenharmony_ci\end_inset
758853a5a1b3Sopenharmony_ci</cell>
758953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
759053a5a1b3Sopenharmony_ci\begin_inset Text
759153a5a1b3Sopenharmony_ci
759253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
759353a5a1b3Sopenharmony_ci0
759453a5a1b3Sopenharmony_ci\end_layout
759553a5a1b3Sopenharmony_ci
759653a5a1b3Sopenharmony_ci\end_inset
759753a5a1b3Sopenharmony_ci</cell>
759853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
759953a5a1b3Sopenharmony_ci\begin_inset Text
760053a5a1b3Sopenharmony_ci
760153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
760253a5a1b3Sopenharmony_ci0
760353a5a1b3Sopenharmony_ci\end_layout
760453a5a1b3Sopenharmony_ci
760553a5a1b3Sopenharmony_ci\end_inset
760653a5a1b3Sopenharmony_ci</cell>
760753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
760853a5a1b3Sopenharmony_ci\begin_inset Text
760953a5a1b3Sopenharmony_ci
761053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
761153a5a1b3Sopenharmony_ci0
761253a5a1b3Sopenharmony_ci\end_layout
761353a5a1b3Sopenharmony_ci
761453a5a1b3Sopenharmony_ci\end_inset
761553a5a1b3Sopenharmony_ci</cell>
761653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
761753a5a1b3Sopenharmony_ci\begin_inset Text
761853a5a1b3Sopenharmony_ci
761953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
762053a5a1b3Sopenharmony_ci0
762153a5a1b3Sopenharmony_ci\end_layout
762253a5a1b3Sopenharmony_ci
762353a5a1b3Sopenharmony_ci\end_inset
762453a5a1b3Sopenharmony_ci</cell>
762553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
762653a5a1b3Sopenharmony_ci\begin_inset Text
762753a5a1b3Sopenharmony_ci
762853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
762953a5a1b3Sopenharmony_ci7
763053a5a1b3Sopenharmony_ci\end_layout
763153a5a1b3Sopenharmony_ci
763253a5a1b3Sopenharmony_ci\end_inset
763353a5a1b3Sopenharmony_ci</cell>
763453a5a1b3Sopenharmony_ci</row>
763553a5a1b3Sopenharmony_ci<row>
763653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
763753a5a1b3Sopenharmony_ci\begin_inset Text
763853a5a1b3Sopenharmony_ci
763953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
764053a5a1b3Sopenharmony_ciOL pitch gain
764153a5a1b3Sopenharmony_ci\end_layout
764253a5a1b3Sopenharmony_ci
764353a5a1b3Sopenharmony_ci\end_inset
764453a5a1b3Sopenharmony_ci</cell>
764553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
764653a5a1b3Sopenharmony_ci\begin_inset Text
764753a5a1b3Sopenharmony_ci
764853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
764953a5a1b3Sopenharmony_ciframe
765053a5a1b3Sopenharmony_ci\end_layout
765153a5a1b3Sopenharmony_ci
765253a5a1b3Sopenharmony_ci\end_inset
765353a5a1b3Sopenharmony_ci</cell>
765453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
765553a5a1b3Sopenharmony_ci\begin_inset Text
765653a5a1b3Sopenharmony_ci
765753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
765853a5a1b3Sopenharmony_ci0
765953a5a1b3Sopenharmony_ci\end_layout
766053a5a1b3Sopenharmony_ci
766153a5a1b3Sopenharmony_ci\end_inset
766253a5a1b3Sopenharmony_ci</cell>
766353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
766453a5a1b3Sopenharmony_ci\begin_inset Text
766553a5a1b3Sopenharmony_ci
766653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
766753a5a1b3Sopenharmony_ci4
766853a5a1b3Sopenharmony_ci\end_layout
766953a5a1b3Sopenharmony_ci
767053a5a1b3Sopenharmony_ci\end_inset
767153a5a1b3Sopenharmony_ci</cell>
767253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
767353a5a1b3Sopenharmony_ci\begin_inset Text
767453a5a1b3Sopenharmony_ci
767553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
767653a5a1b3Sopenharmony_ci0
767753a5a1b3Sopenharmony_ci\end_layout
767853a5a1b3Sopenharmony_ci
767953a5a1b3Sopenharmony_ci\end_inset
768053a5a1b3Sopenharmony_ci</cell>
768153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
768253a5a1b3Sopenharmony_ci\begin_inset Text
768353a5a1b3Sopenharmony_ci
768453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
768553a5a1b3Sopenharmony_ci0
768653a5a1b3Sopenharmony_ci\end_layout
768753a5a1b3Sopenharmony_ci
768853a5a1b3Sopenharmony_ci\end_inset
768953a5a1b3Sopenharmony_ci</cell>
769053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
769153a5a1b3Sopenharmony_ci\begin_inset Text
769253a5a1b3Sopenharmony_ci
769353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
769453a5a1b3Sopenharmony_ci0
769553a5a1b3Sopenharmony_ci\end_layout
769653a5a1b3Sopenharmony_ci
769753a5a1b3Sopenharmony_ci\end_inset
769853a5a1b3Sopenharmony_ci</cell>
769953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
770053a5a1b3Sopenharmony_ci\begin_inset Text
770153a5a1b3Sopenharmony_ci
770253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
770353a5a1b3Sopenharmony_ci0
770453a5a1b3Sopenharmony_ci\end_layout
770553a5a1b3Sopenharmony_ci
770653a5a1b3Sopenharmony_ci\end_inset
770753a5a1b3Sopenharmony_ci</cell>
770853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
770953a5a1b3Sopenharmony_ci\begin_inset Text
771053a5a1b3Sopenharmony_ci
771153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
771253a5a1b3Sopenharmony_ci0
771353a5a1b3Sopenharmony_ci\end_layout
771453a5a1b3Sopenharmony_ci
771553a5a1b3Sopenharmony_ci\end_inset
771653a5a1b3Sopenharmony_ci</cell>
771753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
771853a5a1b3Sopenharmony_ci\begin_inset Text
771953a5a1b3Sopenharmony_ci
772053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
772153a5a1b3Sopenharmony_ci0
772253a5a1b3Sopenharmony_ci\end_layout
772353a5a1b3Sopenharmony_ci
772453a5a1b3Sopenharmony_ci\end_inset
772553a5a1b3Sopenharmony_ci</cell>
772653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
772753a5a1b3Sopenharmony_ci\begin_inset Text
772853a5a1b3Sopenharmony_ci
772953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
773053a5a1b3Sopenharmony_ci4
773153a5a1b3Sopenharmony_ci\end_layout
773253a5a1b3Sopenharmony_ci
773353a5a1b3Sopenharmony_ci\end_inset
773453a5a1b3Sopenharmony_ci</cell>
773553a5a1b3Sopenharmony_ci</row>
773653a5a1b3Sopenharmony_ci<row>
773753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
773853a5a1b3Sopenharmony_ci\begin_inset Text
773953a5a1b3Sopenharmony_ci
774053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
774153a5a1b3Sopenharmony_ciOL Exc gain
774253a5a1b3Sopenharmony_ci\end_layout
774353a5a1b3Sopenharmony_ci
774453a5a1b3Sopenharmony_ci\end_inset
774553a5a1b3Sopenharmony_ci</cell>
774653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
774753a5a1b3Sopenharmony_ci\begin_inset Text
774853a5a1b3Sopenharmony_ci
774953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
775053a5a1b3Sopenharmony_ciframe
775153a5a1b3Sopenharmony_ci\end_layout
775253a5a1b3Sopenharmony_ci
775353a5a1b3Sopenharmony_ci\end_inset
775453a5a1b3Sopenharmony_ci</cell>
775553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
775653a5a1b3Sopenharmony_ci\begin_inset Text
775753a5a1b3Sopenharmony_ci
775853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
775953a5a1b3Sopenharmony_ci0
776053a5a1b3Sopenharmony_ci\end_layout
776153a5a1b3Sopenharmony_ci
776253a5a1b3Sopenharmony_ci\end_inset
776353a5a1b3Sopenharmony_ci</cell>
776453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
776553a5a1b3Sopenharmony_ci\begin_inset Text
776653a5a1b3Sopenharmony_ci
776753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
776853a5a1b3Sopenharmony_ci5
776953a5a1b3Sopenharmony_ci\end_layout
777053a5a1b3Sopenharmony_ci
777153a5a1b3Sopenharmony_ci\end_inset
777253a5a1b3Sopenharmony_ci</cell>
777353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
777453a5a1b3Sopenharmony_ci\begin_inset Text
777553a5a1b3Sopenharmony_ci
777653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
777753a5a1b3Sopenharmony_ci5
777853a5a1b3Sopenharmony_ci\end_layout
777953a5a1b3Sopenharmony_ci
778053a5a1b3Sopenharmony_ci\end_inset
778153a5a1b3Sopenharmony_ci</cell>
778253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
778353a5a1b3Sopenharmony_ci\begin_inset Text
778453a5a1b3Sopenharmony_ci
778553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
778653a5a1b3Sopenharmony_ci5
778753a5a1b3Sopenharmony_ci\end_layout
778853a5a1b3Sopenharmony_ci
778953a5a1b3Sopenharmony_ci\end_inset
779053a5a1b3Sopenharmony_ci</cell>
779153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
779253a5a1b3Sopenharmony_ci\begin_inset Text
779353a5a1b3Sopenharmony_ci
779453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
779553a5a1b3Sopenharmony_ci5
779653a5a1b3Sopenharmony_ci\end_layout
779753a5a1b3Sopenharmony_ci
779853a5a1b3Sopenharmony_ci\end_inset
779953a5a1b3Sopenharmony_ci</cell>
780053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
780153a5a1b3Sopenharmony_ci\begin_inset Text
780253a5a1b3Sopenharmony_ci
780353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
780453a5a1b3Sopenharmony_ci5
780553a5a1b3Sopenharmony_ci\end_layout
780653a5a1b3Sopenharmony_ci
780753a5a1b3Sopenharmony_ci\end_inset
780853a5a1b3Sopenharmony_ci</cell>
780953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
781053a5a1b3Sopenharmony_ci\begin_inset Text
781153a5a1b3Sopenharmony_ci
781253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
781353a5a1b3Sopenharmony_ci5
781453a5a1b3Sopenharmony_ci\end_layout
781553a5a1b3Sopenharmony_ci
781653a5a1b3Sopenharmony_ci\end_inset
781753a5a1b3Sopenharmony_ci</cell>
781853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
781953a5a1b3Sopenharmony_ci\begin_inset Text
782053a5a1b3Sopenharmony_ci
782153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
782253a5a1b3Sopenharmony_ci5
782353a5a1b3Sopenharmony_ci\end_layout
782453a5a1b3Sopenharmony_ci
782553a5a1b3Sopenharmony_ci\end_inset
782653a5a1b3Sopenharmony_ci</cell>
782753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
782853a5a1b3Sopenharmony_ci\begin_inset Text
782953a5a1b3Sopenharmony_ci
783053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
783153a5a1b3Sopenharmony_ci5
783253a5a1b3Sopenharmony_ci\end_layout
783353a5a1b3Sopenharmony_ci
783453a5a1b3Sopenharmony_ci\end_inset
783553a5a1b3Sopenharmony_ci</cell>
783653a5a1b3Sopenharmony_ci</row>
783753a5a1b3Sopenharmony_ci<row>
783853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
783953a5a1b3Sopenharmony_ci\begin_inset Text
784053a5a1b3Sopenharmony_ci
784153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
784253a5a1b3Sopenharmony_ciFine pitch
784353a5a1b3Sopenharmony_ci\end_layout
784453a5a1b3Sopenharmony_ci
784553a5a1b3Sopenharmony_ci\end_inset
784653a5a1b3Sopenharmony_ci</cell>
784753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
784853a5a1b3Sopenharmony_ci\begin_inset Text
784953a5a1b3Sopenharmony_ci
785053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
785153a5a1b3Sopenharmony_cisub-frame
785253a5a1b3Sopenharmony_ci\end_layout
785353a5a1b3Sopenharmony_ci
785453a5a1b3Sopenharmony_ci\end_inset
785553a5a1b3Sopenharmony_ci</cell>
785653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
785753a5a1b3Sopenharmony_ci\begin_inset Text
785853a5a1b3Sopenharmony_ci
785953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
786053a5a1b3Sopenharmony_ci0
786153a5a1b3Sopenharmony_ci\end_layout
786253a5a1b3Sopenharmony_ci
786353a5a1b3Sopenharmony_ci\end_inset
786453a5a1b3Sopenharmony_ci</cell>
786553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
786653a5a1b3Sopenharmony_ci\begin_inset Text
786753a5a1b3Sopenharmony_ci
786853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
786953a5a1b3Sopenharmony_ci0
787053a5a1b3Sopenharmony_ci\end_layout
787153a5a1b3Sopenharmony_ci
787253a5a1b3Sopenharmony_ci\end_inset
787353a5a1b3Sopenharmony_ci</cell>
787453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
787553a5a1b3Sopenharmony_ci\begin_inset Text
787653a5a1b3Sopenharmony_ci
787753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
787853a5a1b3Sopenharmony_ci0
787953a5a1b3Sopenharmony_ci\end_layout
788053a5a1b3Sopenharmony_ci
788153a5a1b3Sopenharmony_ci\end_inset
788253a5a1b3Sopenharmony_ci</cell>
788353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
788453a5a1b3Sopenharmony_ci\begin_inset Text
788553a5a1b3Sopenharmony_ci
788653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
788753a5a1b3Sopenharmony_ci7
788853a5a1b3Sopenharmony_ci\end_layout
788953a5a1b3Sopenharmony_ci
789053a5a1b3Sopenharmony_ci\end_inset
789153a5a1b3Sopenharmony_ci</cell>
789253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
789353a5a1b3Sopenharmony_ci\begin_inset Text
789453a5a1b3Sopenharmony_ci
789553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
789653a5a1b3Sopenharmony_ci7
789753a5a1b3Sopenharmony_ci\end_layout
789853a5a1b3Sopenharmony_ci
789953a5a1b3Sopenharmony_ci\end_inset
790053a5a1b3Sopenharmony_ci</cell>
790153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
790253a5a1b3Sopenharmony_ci\begin_inset Text
790353a5a1b3Sopenharmony_ci
790453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
790553a5a1b3Sopenharmony_ci7
790653a5a1b3Sopenharmony_ci\end_layout
790753a5a1b3Sopenharmony_ci
790853a5a1b3Sopenharmony_ci\end_inset
790953a5a1b3Sopenharmony_ci</cell>
791053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
791153a5a1b3Sopenharmony_ci\begin_inset Text
791253a5a1b3Sopenharmony_ci
791353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
791453a5a1b3Sopenharmony_ci7
791553a5a1b3Sopenharmony_ci\end_layout
791653a5a1b3Sopenharmony_ci
791753a5a1b3Sopenharmony_ci\end_inset
791853a5a1b3Sopenharmony_ci</cell>
791953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
792053a5a1b3Sopenharmony_ci\begin_inset Text
792153a5a1b3Sopenharmony_ci
792253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
792353a5a1b3Sopenharmony_ci7
792453a5a1b3Sopenharmony_ci\end_layout
792553a5a1b3Sopenharmony_ci
792653a5a1b3Sopenharmony_ci\end_inset
792753a5a1b3Sopenharmony_ci</cell>
792853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
792953a5a1b3Sopenharmony_ci\begin_inset Text
793053a5a1b3Sopenharmony_ci
793153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
793253a5a1b3Sopenharmony_ci0
793353a5a1b3Sopenharmony_ci\end_layout
793453a5a1b3Sopenharmony_ci
793553a5a1b3Sopenharmony_ci\end_inset
793653a5a1b3Sopenharmony_ci</cell>
793753a5a1b3Sopenharmony_ci</row>
793853a5a1b3Sopenharmony_ci<row>
793953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
794053a5a1b3Sopenharmony_ci\begin_inset Text
794153a5a1b3Sopenharmony_ci
794253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
794353a5a1b3Sopenharmony_ciPitch gain
794453a5a1b3Sopenharmony_ci\end_layout
794553a5a1b3Sopenharmony_ci
794653a5a1b3Sopenharmony_ci\end_inset
794753a5a1b3Sopenharmony_ci</cell>
794853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
794953a5a1b3Sopenharmony_ci\begin_inset Text
795053a5a1b3Sopenharmony_ci
795153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
795253a5a1b3Sopenharmony_cisub-frame
795353a5a1b3Sopenharmony_ci\end_layout
795453a5a1b3Sopenharmony_ci
795553a5a1b3Sopenharmony_ci\end_inset
795653a5a1b3Sopenharmony_ci</cell>
795753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
795853a5a1b3Sopenharmony_ci\begin_inset Text
795953a5a1b3Sopenharmony_ci
796053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
796153a5a1b3Sopenharmony_ci0
796253a5a1b3Sopenharmony_ci\end_layout
796353a5a1b3Sopenharmony_ci
796453a5a1b3Sopenharmony_ci\end_inset
796553a5a1b3Sopenharmony_ci</cell>
796653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
796753a5a1b3Sopenharmony_ci\begin_inset Text
796853a5a1b3Sopenharmony_ci
796953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
797053a5a1b3Sopenharmony_ci0
797153a5a1b3Sopenharmony_ci\end_layout
797253a5a1b3Sopenharmony_ci
797353a5a1b3Sopenharmony_ci\end_inset
797453a5a1b3Sopenharmony_ci</cell>
797553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
797653a5a1b3Sopenharmony_ci\begin_inset Text
797753a5a1b3Sopenharmony_ci
797853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
797953a5a1b3Sopenharmony_ci5
798053a5a1b3Sopenharmony_ci\end_layout
798153a5a1b3Sopenharmony_ci
798253a5a1b3Sopenharmony_ci\end_inset
798353a5a1b3Sopenharmony_ci</cell>
798453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
798553a5a1b3Sopenharmony_ci\begin_inset Text
798653a5a1b3Sopenharmony_ci
798753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
798853a5a1b3Sopenharmony_ci5
798953a5a1b3Sopenharmony_ci\end_layout
799053a5a1b3Sopenharmony_ci
799153a5a1b3Sopenharmony_ci\end_inset
799253a5a1b3Sopenharmony_ci</cell>
799353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
799453a5a1b3Sopenharmony_ci\begin_inset Text
799553a5a1b3Sopenharmony_ci
799653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
799753a5a1b3Sopenharmony_ci5
799853a5a1b3Sopenharmony_ci\end_layout
799953a5a1b3Sopenharmony_ci
800053a5a1b3Sopenharmony_ci\end_inset
800153a5a1b3Sopenharmony_ci</cell>
800253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
800353a5a1b3Sopenharmony_ci\begin_inset Text
800453a5a1b3Sopenharmony_ci
800553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
800653a5a1b3Sopenharmony_ci7
800753a5a1b3Sopenharmony_ci\end_layout
800853a5a1b3Sopenharmony_ci
800953a5a1b3Sopenharmony_ci\end_inset
801053a5a1b3Sopenharmony_ci</cell>
801153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
801253a5a1b3Sopenharmony_ci\begin_inset Text
801353a5a1b3Sopenharmony_ci
801453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
801553a5a1b3Sopenharmony_ci7
801653a5a1b3Sopenharmony_ci\end_layout
801753a5a1b3Sopenharmony_ci
801853a5a1b3Sopenharmony_ci\end_inset
801953a5a1b3Sopenharmony_ci</cell>
802053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
802153a5a1b3Sopenharmony_ci\begin_inset Text
802253a5a1b3Sopenharmony_ci
802353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
802453a5a1b3Sopenharmony_ci7
802553a5a1b3Sopenharmony_ci\end_layout
802653a5a1b3Sopenharmony_ci
802753a5a1b3Sopenharmony_ci\end_inset
802853a5a1b3Sopenharmony_ci</cell>
802953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
803053a5a1b3Sopenharmony_ci\begin_inset Text
803153a5a1b3Sopenharmony_ci
803253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
803353a5a1b3Sopenharmony_ci0
803453a5a1b3Sopenharmony_ci\end_layout
803553a5a1b3Sopenharmony_ci
803653a5a1b3Sopenharmony_ci\end_inset
803753a5a1b3Sopenharmony_ci</cell>
803853a5a1b3Sopenharmony_ci</row>
803953a5a1b3Sopenharmony_ci<row>
804053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
804153a5a1b3Sopenharmony_ci\begin_inset Text
804253a5a1b3Sopenharmony_ci
804353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
804453a5a1b3Sopenharmony_ciInnovation gain
804553a5a1b3Sopenharmony_ci\end_layout
804653a5a1b3Sopenharmony_ci
804753a5a1b3Sopenharmony_ci\end_inset
804853a5a1b3Sopenharmony_ci</cell>
804953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
805053a5a1b3Sopenharmony_ci\begin_inset Text
805153a5a1b3Sopenharmony_ci
805253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
805353a5a1b3Sopenharmony_cisub-frame
805453a5a1b3Sopenharmony_ci\end_layout
805553a5a1b3Sopenharmony_ci
805653a5a1b3Sopenharmony_ci\end_inset
805753a5a1b3Sopenharmony_ci</cell>
805853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
805953a5a1b3Sopenharmony_ci\begin_inset Text
806053a5a1b3Sopenharmony_ci
806153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
806253a5a1b3Sopenharmony_ci0
806353a5a1b3Sopenharmony_ci\end_layout
806453a5a1b3Sopenharmony_ci
806553a5a1b3Sopenharmony_ci\end_inset
806653a5a1b3Sopenharmony_ci</cell>
806753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
806853a5a1b3Sopenharmony_ci\begin_inset Text
806953a5a1b3Sopenharmony_ci
807053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
807153a5a1b3Sopenharmony_ci1
807253a5a1b3Sopenharmony_ci\end_layout
807353a5a1b3Sopenharmony_ci
807453a5a1b3Sopenharmony_ci\end_inset
807553a5a1b3Sopenharmony_ci</cell>
807653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
807753a5a1b3Sopenharmony_ci\begin_inset Text
807853a5a1b3Sopenharmony_ci
807953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
808053a5a1b3Sopenharmony_ci0
808153a5a1b3Sopenharmony_ci\end_layout
808253a5a1b3Sopenharmony_ci
808353a5a1b3Sopenharmony_ci\end_inset
808453a5a1b3Sopenharmony_ci</cell>
808553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
808653a5a1b3Sopenharmony_ci\begin_inset Text
808753a5a1b3Sopenharmony_ci
808853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
808953a5a1b3Sopenharmony_ci1
809053a5a1b3Sopenharmony_ci\end_layout
809153a5a1b3Sopenharmony_ci
809253a5a1b3Sopenharmony_ci\end_inset
809353a5a1b3Sopenharmony_ci</cell>
809453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
809553a5a1b3Sopenharmony_ci\begin_inset Text
809653a5a1b3Sopenharmony_ci
809753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
809853a5a1b3Sopenharmony_ci1
809953a5a1b3Sopenharmony_ci\end_layout
810053a5a1b3Sopenharmony_ci
810153a5a1b3Sopenharmony_ci\end_inset
810253a5a1b3Sopenharmony_ci</cell>
810353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
810453a5a1b3Sopenharmony_ci\begin_inset Text
810553a5a1b3Sopenharmony_ci
810653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
810753a5a1b3Sopenharmony_ci3
810853a5a1b3Sopenharmony_ci\end_layout
810953a5a1b3Sopenharmony_ci
811053a5a1b3Sopenharmony_ci\end_inset
811153a5a1b3Sopenharmony_ci</cell>
811253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
811353a5a1b3Sopenharmony_ci\begin_inset Text
811453a5a1b3Sopenharmony_ci
811553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
811653a5a1b3Sopenharmony_ci3
811753a5a1b3Sopenharmony_ci\end_layout
811853a5a1b3Sopenharmony_ci
811953a5a1b3Sopenharmony_ci\end_inset
812053a5a1b3Sopenharmony_ci</cell>
812153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
812253a5a1b3Sopenharmony_ci\begin_inset Text
812353a5a1b3Sopenharmony_ci
812453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
812553a5a1b3Sopenharmony_ci3
812653a5a1b3Sopenharmony_ci\end_layout
812753a5a1b3Sopenharmony_ci
812853a5a1b3Sopenharmony_ci\end_inset
812953a5a1b3Sopenharmony_ci</cell>
813053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
813153a5a1b3Sopenharmony_ci\begin_inset Text
813253a5a1b3Sopenharmony_ci
813353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
813453a5a1b3Sopenharmony_ci0
813553a5a1b3Sopenharmony_ci\end_layout
813653a5a1b3Sopenharmony_ci
813753a5a1b3Sopenharmony_ci\end_inset
813853a5a1b3Sopenharmony_ci</cell>
813953a5a1b3Sopenharmony_ci</row>
814053a5a1b3Sopenharmony_ci<row>
814153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
814253a5a1b3Sopenharmony_ci\begin_inset Text
814353a5a1b3Sopenharmony_ci
814453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
814553a5a1b3Sopenharmony_ciInnovation VQ
814653a5a1b3Sopenharmony_ci\end_layout
814753a5a1b3Sopenharmony_ci
814853a5a1b3Sopenharmony_ci\end_inset
814953a5a1b3Sopenharmony_ci</cell>
815053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
815153a5a1b3Sopenharmony_ci\begin_inset Text
815253a5a1b3Sopenharmony_ci
815353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
815453a5a1b3Sopenharmony_cisub-frame
815553a5a1b3Sopenharmony_ci\end_layout
815653a5a1b3Sopenharmony_ci
815753a5a1b3Sopenharmony_ci\end_inset
815853a5a1b3Sopenharmony_ci</cell>
815953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
816053a5a1b3Sopenharmony_ci\begin_inset Text
816153a5a1b3Sopenharmony_ci
816253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
816353a5a1b3Sopenharmony_ci0
816453a5a1b3Sopenharmony_ci\end_layout
816553a5a1b3Sopenharmony_ci
816653a5a1b3Sopenharmony_ci\end_inset
816753a5a1b3Sopenharmony_ci</cell>
816853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
816953a5a1b3Sopenharmony_ci\begin_inset Text
817053a5a1b3Sopenharmony_ci
817153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
817253a5a1b3Sopenharmony_ci0
817353a5a1b3Sopenharmony_ci\end_layout
817453a5a1b3Sopenharmony_ci
817553a5a1b3Sopenharmony_ci\end_inset
817653a5a1b3Sopenharmony_ci</cell>
817753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
817853a5a1b3Sopenharmony_ci\begin_inset Text
817953a5a1b3Sopenharmony_ci
818053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
818153a5a1b3Sopenharmony_ci16
818253a5a1b3Sopenharmony_ci\end_layout
818353a5a1b3Sopenharmony_ci
818453a5a1b3Sopenharmony_ci\end_inset
818553a5a1b3Sopenharmony_ci</cell>
818653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
818753a5a1b3Sopenharmony_ci\begin_inset Text
818853a5a1b3Sopenharmony_ci
818953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
819053a5a1b3Sopenharmony_ci20
819153a5a1b3Sopenharmony_ci\end_layout
819253a5a1b3Sopenharmony_ci
819353a5a1b3Sopenharmony_ci\end_inset
819453a5a1b3Sopenharmony_ci</cell>
819553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
819653a5a1b3Sopenharmony_ci\begin_inset Text
819753a5a1b3Sopenharmony_ci
819853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
819953a5a1b3Sopenharmony_ci35
820053a5a1b3Sopenharmony_ci\end_layout
820153a5a1b3Sopenharmony_ci
820253a5a1b3Sopenharmony_ci\end_inset
820353a5a1b3Sopenharmony_ci</cell>
820453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
820553a5a1b3Sopenharmony_ci\begin_inset Text
820653a5a1b3Sopenharmony_ci
820753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
820853a5a1b3Sopenharmony_ci48
820953a5a1b3Sopenharmony_ci\end_layout
821053a5a1b3Sopenharmony_ci
821153a5a1b3Sopenharmony_ci\end_inset
821253a5a1b3Sopenharmony_ci</cell>
821353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
821453a5a1b3Sopenharmony_ci\begin_inset Text
821553a5a1b3Sopenharmony_ci
821653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
821753a5a1b3Sopenharmony_ci64
821853a5a1b3Sopenharmony_ci\end_layout
821953a5a1b3Sopenharmony_ci
822053a5a1b3Sopenharmony_ci\end_inset
822153a5a1b3Sopenharmony_ci</cell>
822253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
822353a5a1b3Sopenharmony_ci\begin_inset Text
822453a5a1b3Sopenharmony_ci
822553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
822653a5a1b3Sopenharmony_ci96
822753a5a1b3Sopenharmony_ci\end_layout
822853a5a1b3Sopenharmony_ci
822953a5a1b3Sopenharmony_ci\end_inset
823053a5a1b3Sopenharmony_ci</cell>
823153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
823253a5a1b3Sopenharmony_ci\begin_inset Text
823353a5a1b3Sopenharmony_ci
823453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
823553a5a1b3Sopenharmony_ci10
823653a5a1b3Sopenharmony_ci\end_layout
823753a5a1b3Sopenharmony_ci
823853a5a1b3Sopenharmony_ci\end_inset
823953a5a1b3Sopenharmony_ci</cell>
824053a5a1b3Sopenharmony_ci</row>
824153a5a1b3Sopenharmony_ci<row>
824253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
824353a5a1b3Sopenharmony_ci\begin_inset Text
824453a5a1b3Sopenharmony_ci
824553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
824653a5a1b3Sopenharmony_ciTotal
824753a5a1b3Sopenharmony_ci\end_layout
824853a5a1b3Sopenharmony_ci
824953a5a1b3Sopenharmony_ci\end_inset
825053a5a1b3Sopenharmony_ci</cell>
825153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
825253a5a1b3Sopenharmony_ci\begin_inset Text
825353a5a1b3Sopenharmony_ci
825453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
825553a5a1b3Sopenharmony_ciframe
825653a5a1b3Sopenharmony_ci\end_layout
825753a5a1b3Sopenharmony_ci
825853a5a1b3Sopenharmony_ci\end_inset
825953a5a1b3Sopenharmony_ci</cell>
826053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
826153a5a1b3Sopenharmony_ci\begin_inset Text
826253a5a1b3Sopenharmony_ci
826353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
826453a5a1b3Sopenharmony_ci5
826553a5a1b3Sopenharmony_ci\end_layout
826653a5a1b3Sopenharmony_ci
826753a5a1b3Sopenharmony_ci\end_inset
826853a5a1b3Sopenharmony_ci</cell>
826953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
827053a5a1b3Sopenharmony_ci\begin_inset Text
827153a5a1b3Sopenharmony_ci
827253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
827353a5a1b3Sopenharmony_ci43
827453a5a1b3Sopenharmony_ci\end_layout
827553a5a1b3Sopenharmony_ci
827653a5a1b3Sopenharmony_ci\end_inset
827753a5a1b3Sopenharmony_ci</cell>
827853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
827953a5a1b3Sopenharmony_ci\begin_inset Text
828053a5a1b3Sopenharmony_ci
828153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
828253a5a1b3Sopenharmony_ci119
828353a5a1b3Sopenharmony_ci\end_layout
828453a5a1b3Sopenharmony_ci
828553a5a1b3Sopenharmony_ci\end_inset
828653a5a1b3Sopenharmony_ci</cell>
828753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
828853a5a1b3Sopenharmony_ci\begin_inset Text
828953a5a1b3Sopenharmony_ci
829053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
829153a5a1b3Sopenharmony_ci160
829253a5a1b3Sopenharmony_ci\end_layout
829353a5a1b3Sopenharmony_ci
829453a5a1b3Sopenharmony_ci\end_inset
829553a5a1b3Sopenharmony_ci</cell>
829653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
829753a5a1b3Sopenharmony_ci\begin_inset Text
829853a5a1b3Sopenharmony_ci
829953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
830053a5a1b3Sopenharmony_ci220
830153a5a1b3Sopenharmony_ci\end_layout
830253a5a1b3Sopenharmony_ci
830353a5a1b3Sopenharmony_ci\end_inset
830453a5a1b3Sopenharmony_ci</cell>
830553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
830653a5a1b3Sopenharmony_ci\begin_inset Text
830753a5a1b3Sopenharmony_ci
830853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
830953a5a1b3Sopenharmony_ci300
831053a5a1b3Sopenharmony_ci\end_layout
831153a5a1b3Sopenharmony_ci
831253a5a1b3Sopenharmony_ci\end_inset
831353a5a1b3Sopenharmony_ci</cell>
831453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
831553a5a1b3Sopenharmony_ci\begin_inset Text
831653a5a1b3Sopenharmony_ci
831753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
831853a5a1b3Sopenharmony_ci364
831953a5a1b3Sopenharmony_ci\end_layout
832053a5a1b3Sopenharmony_ci
832153a5a1b3Sopenharmony_ci\end_inset
832253a5a1b3Sopenharmony_ci</cell>
832353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
832453a5a1b3Sopenharmony_ci\begin_inset Text
832553a5a1b3Sopenharmony_ci
832653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
832753a5a1b3Sopenharmony_ci492
832853a5a1b3Sopenharmony_ci\end_layout
832953a5a1b3Sopenharmony_ci
833053a5a1b3Sopenharmony_ci\end_inset
833153a5a1b3Sopenharmony_ci</cell>
833253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
833353a5a1b3Sopenharmony_ci\begin_inset Text
833453a5a1b3Sopenharmony_ci
833553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
833653a5a1b3Sopenharmony_ci79
833753a5a1b3Sopenharmony_ci\end_layout
833853a5a1b3Sopenharmony_ci
833953a5a1b3Sopenharmony_ci\end_inset
834053a5a1b3Sopenharmony_ci</cell>
834153a5a1b3Sopenharmony_ci</row>
834253a5a1b3Sopenharmony_ci</lyxtabular>
834353a5a1b3Sopenharmony_ci
834453a5a1b3Sopenharmony_ci\end_inset
834553a5a1b3Sopenharmony_ci
834653a5a1b3Sopenharmony_ci
834753a5a1b3Sopenharmony_ci\begin_inset ERT
834853a5a1b3Sopenharmony_cistatus collapsed
834953a5a1b3Sopenharmony_ci
835053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
835153a5a1b3Sopenharmony_ci
835253a5a1b3Sopenharmony_ci
835353a5a1b3Sopenharmony_ci\backslash
835453a5a1b3Sopenharmony_ciend{center}
835553a5a1b3Sopenharmony_ci\end_layout
835653a5a1b3Sopenharmony_ci
835753a5a1b3Sopenharmony_ci\end_inset
835853a5a1b3Sopenharmony_ci
835953a5a1b3Sopenharmony_ci
836053a5a1b3Sopenharmony_ci\end_layout
836153a5a1b3Sopenharmony_ci
836253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
836353a5a1b3Sopenharmony_ci\begin_inset Caption
836453a5a1b3Sopenharmony_ci
836553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
836653a5a1b3Sopenharmony_ciBit allocation for narrowband modes
836753a5a1b3Sopenharmony_ci\begin_inset CommandInset label
836853a5a1b3Sopenharmony_ciLatexCommand label
836953a5a1b3Sopenharmony_ciname "cap:bits-narrowband"
837053a5a1b3Sopenharmony_ci
837153a5a1b3Sopenharmony_ci\end_inset
837253a5a1b3Sopenharmony_ci
837353a5a1b3Sopenharmony_ci
837453a5a1b3Sopenharmony_ci\end_layout
837553a5a1b3Sopenharmony_ci
837653a5a1b3Sopenharmony_ci\end_inset
837753a5a1b3Sopenharmony_ci
837853a5a1b3Sopenharmony_ci
837953a5a1b3Sopenharmony_ci\end_layout
838053a5a1b3Sopenharmony_ci
838153a5a1b3Sopenharmony_ci\end_inset
838253a5a1b3Sopenharmony_ci
838353a5a1b3Sopenharmony_ci
838453a5a1b3Sopenharmony_ci\end_layout
838553a5a1b3Sopenharmony_ci
838653a5a1b3Sopenharmony_ci\begin_layout Subsection
838753a5a1b3Sopenharmony_ciLSP decoding
838853a5a1b3Sopenharmony_ci\end_layout
838953a5a1b3Sopenharmony_ci
839053a5a1b3Sopenharmony_ci\begin_layout Standard
839153a5a1b3Sopenharmony_ciDepending on the mode, LSP parameters are encoded using either 18 bits or
839253a5a1b3Sopenharmony_ci 30 bits.
839353a5a1b3Sopenharmony_ci\end_layout
839453a5a1b3Sopenharmony_ci
839553a5a1b3Sopenharmony_ci\begin_layout Standard
839653a5a1b3Sopenharmony_ciInterpolation
839753a5a1b3Sopenharmony_ci\end_layout
839853a5a1b3Sopenharmony_ci
839953a5a1b3Sopenharmony_ci\begin_layout Standard
840053a5a1b3Sopenharmony_ciSafe margin
840153a5a1b3Sopenharmony_ci\end_layout
840253a5a1b3Sopenharmony_ci
840353a5a1b3Sopenharmony_ci\begin_layout Subsection
840453a5a1b3Sopenharmony_ciAdaptive codebook
840553a5a1b3Sopenharmony_ci\end_layout
840653a5a1b3Sopenharmony_ci
840753a5a1b3Sopenharmony_ci\begin_layout Standard
840853a5a1b3Sopenharmony_ciFor rates of 8 kbit/s and above, the pitch period is encoded for each subframe.
840953a5a1b3Sopenharmony_ci The real period is 
841053a5a1b3Sopenharmony_ci\begin_inset Formula $T=p_{i}+17$
841153a5a1b3Sopenharmony_ci\end_inset
841253a5a1b3Sopenharmony_ci
841353a5a1b3Sopenharmony_ci where 
841453a5a1b3Sopenharmony_ci\begin_inset Formula $p_{i}$
841553a5a1b3Sopenharmony_ci\end_inset
841653a5a1b3Sopenharmony_ci
841753a5a1b3Sopenharmony_ci is a value encoded with 7 bits and 17 corresponds to the minimum pitch.
841853a5a1b3Sopenharmony_ci The maximum period is 144.
841953a5a1b3Sopenharmony_ci At 5.95 kbit/s (mode 2), the pitch period is similarly encoded, but only
842053a5a1b3Sopenharmony_ci once for the frame.
842153a5a1b3Sopenharmony_ci Each sub-frame then has a 2-bit offset that is added to the pitch value
842253a5a1b3Sopenharmony_ci of the frame.
842353a5a1b3Sopenharmony_ci In that case, the pitch for each sub-frame is equal to 
842453a5a1b3Sopenharmony_ci\begin_inset Formula $T-1+offset$
842553a5a1b3Sopenharmony_ci\end_inset
842653a5a1b3Sopenharmony_ci
842753a5a1b3Sopenharmony_ci.
842853a5a1b3Sopenharmony_ci For rates below 5.95 kbit/s, only the per-frame pitch is used and the pitch
842953a5a1b3Sopenharmony_ci is constant for all sub-frames.
843053a5a1b3Sopenharmony_ci\end_layout
843153a5a1b3Sopenharmony_ci
843253a5a1b3Sopenharmony_ci\begin_layout Standard
843353a5a1b3Sopenharmony_ciSpeex uses a 3-tap predictor for rates of 5.95 kbit/s and above.
843453a5a1b3Sopenharmony_ci The three gain values are obtained from a 5-bit or a 7-bit codebook, depending
843553a5a1b3Sopenharmony_ci on the mode.
843653a5a1b3Sopenharmony_ci  
843753a5a1b3Sopenharmony_ci\end_layout
843853a5a1b3Sopenharmony_ci
843953a5a1b3Sopenharmony_ci\begin_layout Subsection
844053a5a1b3Sopenharmony_ciInnovation codebook
844153a5a1b3Sopenharmony_ci\end_layout
844253a5a1b3Sopenharmony_ci
844353a5a1b3Sopenharmony_ci\begin_layout Standard
844453a5a1b3Sopenharmony_ciSplit codebook, size and entries depend on bit-rate
844553a5a1b3Sopenharmony_ci\end_layout
844653a5a1b3Sopenharmony_ci
844753a5a1b3Sopenharmony_ci\begin_layout Standard
844853a5a1b3Sopenharmony_cia 5-bit gain is encoder on a per-frame basis
844953a5a1b3Sopenharmony_ci\end_layout
845053a5a1b3Sopenharmony_ci
845153a5a1b3Sopenharmony_ci\begin_layout Standard
845253a5a1b3Sopenharmony_ciDepending on the mode, higher resolution per sub-frame
845353a5a1b3Sopenharmony_ci\end_layout
845453a5a1b3Sopenharmony_ci
845553a5a1b3Sopenharmony_ci\begin_layout Standard
845653a5a1b3Sopenharmony_ciinnovation sub-vectors concatenated, gain applied
845753a5a1b3Sopenharmony_ci\end_layout
845853a5a1b3Sopenharmony_ci
845953a5a1b3Sopenharmony_ci\begin_layout Subsection
846053a5a1b3Sopenharmony_ciPerceptual enhancement
846153a5a1b3Sopenharmony_ci\end_layout
846253a5a1b3Sopenharmony_ci
846353a5a1b3Sopenharmony_ci\begin_layout Standard
846453a5a1b3Sopenharmony_ciOptional, implementation-defined.
846553a5a1b3Sopenharmony_ci 
846653a5a1b3Sopenharmony_ci\end_layout
846753a5a1b3Sopenharmony_ci
846853a5a1b3Sopenharmony_ci\begin_layout Subsection
846953a5a1b3Sopenharmony_ciBit-stream definition
847053a5a1b3Sopenharmony_ci\end_layout
847153a5a1b3Sopenharmony_ci
847253a5a1b3Sopenharmony_ci\begin_layout Standard
847353a5a1b3Sopenharmony_ciThis section defines the bit-stream that is transmitted on the wire.
847453a5a1b3Sopenharmony_ci One speex packet consist of 1 frame header and 4 sub-frames:
847553a5a1b3Sopenharmony_ci\end_layout
847653a5a1b3Sopenharmony_ci
847753a5a1b3Sopenharmony_ci\begin_layout Standard
847853a5a1b3Sopenharmony_ci\begin_inset Tabular
847953a5a1b3Sopenharmony_ci<lyxtabular version="3" rows="1" columns="5">
848053a5a1b3Sopenharmony_ci<features>
848153a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
848253a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
848353a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
848453a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
848553a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
848653a5a1b3Sopenharmony_ci<row>
848753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
848853a5a1b3Sopenharmony_ci\begin_inset Text
848953a5a1b3Sopenharmony_ci
849053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
849153a5a1b3Sopenharmony_ciFrame Header
849253a5a1b3Sopenharmony_ci\end_layout
849353a5a1b3Sopenharmony_ci
849453a5a1b3Sopenharmony_ci\end_inset
849553a5a1b3Sopenharmony_ci</cell>
849653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
849753a5a1b3Sopenharmony_ci\begin_inset Text
849853a5a1b3Sopenharmony_ci
849953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
850053a5a1b3Sopenharmony_ciSubframe 1
850153a5a1b3Sopenharmony_ci\end_layout
850253a5a1b3Sopenharmony_ci
850353a5a1b3Sopenharmony_ci\end_inset
850453a5a1b3Sopenharmony_ci</cell>
850553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
850653a5a1b3Sopenharmony_ci\begin_inset Text
850753a5a1b3Sopenharmony_ci
850853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
850953a5a1b3Sopenharmony_ciSubframe2
851053a5a1b3Sopenharmony_ci\end_layout
851153a5a1b3Sopenharmony_ci
851253a5a1b3Sopenharmony_ci\end_inset
851353a5a1b3Sopenharmony_ci</cell>
851453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
851553a5a1b3Sopenharmony_ci\begin_inset Text
851653a5a1b3Sopenharmony_ci
851753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
851853a5a1b3Sopenharmony_ciSubframe 3
851953a5a1b3Sopenharmony_ci\end_layout
852053a5a1b3Sopenharmony_ci
852153a5a1b3Sopenharmony_ci\end_inset
852253a5a1b3Sopenharmony_ci</cell>
852353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
852453a5a1b3Sopenharmony_ci\begin_inset Text
852553a5a1b3Sopenharmony_ci
852653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
852753a5a1b3Sopenharmony_ciSubframe 4
852853a5a1b3Sopenharmony_ci\end_layout
852953a5a1b3Sopenharmony_ci
853053a5a1b3Sopenharmony_ci\end_inset
853153a5a1b3Sopenharmony_ci</cell>
853253a5a1b3Sopenharmony_ci</row>
853353a5a1b3Sopenharmony_ci</lyxtabular>
853453a5a1b3Sopenharmony_ci
853553a5a1b3Sopenharmony_ci\end_inset
853653a5a1b3Sopenharmony_ci
853753a5a1b3Sopenharmony_ci
853853a5a1b3Sopenharmony_ci\end_layout
853953a5a1b3Sopenharmony_ci
854053a5a1b3Sopenharmony_ci\begin_layout Standard
854153a5a1b3Sopenharmony_ciThe frame header is variable length, depending on decoding mode and submode.
854253a5a1b3Sopenharmony_ci The narrowband frame header is defined as follows:
854353a5a1b3Sopenharmony_ci\end_layout
854453a5a1b3Sopenharmony_ci
854553a5a1b3Sopenharmony_ci\begin_layout Standard
854653a5a1b3Sopenharmony_ci\begin_inset Tabular
854753a5a1b3Sopenharmony_ci<lyxtabular version="3" rows="1" columns="6">
854853a5a1b3Sopenharmony_ci<features>
854953a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
855053a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
855153a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
855253a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
855353a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
855453a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
855553a5a1b3Sopenharmony_ci<row>
855653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
855753a5a1b3Sopenharmony_ci\begin_inset Text
855853a5a1b3Sopenharmony_ci
855953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
856053a5a1b3Sopenharmony_ciwb bit
856153a5a1b3Sopenharmony_ci\end_layout
856253a5a1b3Sopenharmony_ci
856353a5a1b3Sopenharmony_ci\end_inset
856453a5a1b3Sopenharmony_ci</cell>
856553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
856653a5a1b3Sopenharmony_ci\begin_inset Text
856753a5a1b3Sopenharmony_ci
856853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
856953a5a1b3Sopenharmony_cimodeid
857053a5a1b3Sopenharmony_ci\end_layout
857153a5a1b3Sopenharmony_ci
857253a5a1b3Sopenharmony_ci\end_inset
857353a5a1b3Sopenharmony_ci</cell>
857453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
857553a5a1b3Sopenharmony_ci\begin_inset Text
857653a5a1b3Sopenharmony_ci
857753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
857853a5a1b3Sopenharmony_ciLSP
857953a5a1b3Sopenharmony_ci\end_layout
858053a5a1b3Sopenharmony_ci
858153a5a1b3Sopenharmony_ci\end_inset
858253a5a1b3Sopenharmony_ci</cell>
858353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
858453a5a1b3Sopenharmony_ci\begin_inset Text
858553a5a1b3Sopenharmony_ci
858653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
858753a5a1b3Sopenharmony_ciOL-pitch
858853a5a1b3Sopenharmony_ci\end_layout
858953a5a1b3Sopenharmony_ci
859053a5a1b3Sopenharmony_ci\end_inset
859153a5a1b3Sopenharmony_ci</cell>
859253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
859353a5a1b3Sopenharmony_ci\begin_inset Text
859453a5a1b3Sopenharmony_ci
859553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
859653a5a1b3Sopenharmony_ciOL-pitchgain
859753a5a1b3Sopenharmony_ci\end_layout
859853a5a1b3Sopenharmony_ci
859953a5a1b3Sopenharmony_ci\end_inset
860053a5a1b3Sopenharmony_ci</cell>
860153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
860253a5a1b3Sopenharmony_ci\begin_inset Text
860353a5a1b3Sopenharmony_ci
860453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
860553a5a1b3Sopenharmony_ciOL ExcGain
860653a5a1b3Sopenharmony_ci\end_layout
860753a5a1b3Sopenharmony_ci
860853a5a1b3Sopenharmony_ci\end_inset
860953a5a1b3Sopenharmony_ci</cell>
861053a5a1b3Sopenharmony_ci</row>
861153a5a1b3Sopenharmony_ci</lyxtabular>
861253a5a1b3Sopenharmony_ci
861353a5a1b3Sopenharmony_ci\end_inset
861453a5a1b3Sopenharmony_ci
861553a5a1b3Sopenharmony_ci
861653a5a1b3Sopenharmony_ci\end_layout
861753a5a1b3Sopenharmony_ci
861853a5a1b3Sopenharmony_ci\begin_layout Standard
861953a5a1b3Sopenharmony_ciwb-bit: Wideband bit (1 bit) 0=narrowband, 1=wideband
862053a5a1b3Sopenharmony_ci\end_layout
862153a5a1b3Sopenharmony_ci
862253a5a1b3Sopenharmony_ci\begin_layout Standard
862353a5a1b3Sopenharmony_cimodeid: Mode identifier (4 bits)
862453a5a1b3Sopenharmony_ci\end_layout
862553a5a1b3Sopenharmony_ci
862653a5a1b3Sopenharmony_ci\begin_layout Standard
862753a5a1b3Sopenharmony_ciLSP: Line Spectral Pairs (0, 18 or 30 bits)
862853a5a1b3Sopenharmony_ci\end_layout
862953a5a1b3Sopenharmony_ci
863053a5a1b3Sopenharmony_ci\begin_layout Standard
863153a5a1b3Sopenharmony_ciOL-pitch: Open Loop Pitch (0 or 7 bits)
863253a5a1b3Sopenharmony_ci\end_layout
863353a5a1b3Sopenharmony_ci
863453a5a1b3Sopenharmony_ci\begin_layout Standard
863553a5a1b3Sopenharmony_ciOL-pitchgain: Open Loop Pitch Gain (0 or 4 bits)
863653a5a1b3Sopenharmony_ci\end_layout
863753a5a1b3Sopenharmony_ci
863853a5a1b3Sopenharmony_ci\begin_layout Standard
863953a5a1b3Sopenharmony_ciOL-ExcGain: Open Loop Excitation Gain (0 or 5 bits)
864053a5a1b3Sopenharmony_ci\end_layout
864153a5a1b3Sopenharmony_ci
864253a5a1b3Sopenharmony_ci\begin_layout Standard
864353a5a1b3Sopenharmony_ci...
864453a5a1b3Sopenharmony_ci\end_layout
864553a5a1b3Sopenharmony_ci
864653a5a1b3Sopenharmony_ci\begin_layout Standard
864753a5a1b3Sopenharmony_ciEach subframe is defined as follows:
864853a5a1b3Sopenharmony_ci\end_layout
864953a5a1b3Sopenharmony_ci
865053a5a1b3Sopenharmony_ci\begin_layout Standard
865153a5a1b3Sopenharmony_ci\begin_inset Tabular
865253a5a1b3Sopenharmony_ci<lyxtabular version="3" rows="1" columns="4">
865353a5a1b3Sopenharmony_ci<features>
865453a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
865553a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
865653a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
865753a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0">
865853a5a1b3Sopenharmony_ci<row>
865953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
866053a5a1b3Sopenharmony_ci\begin_inset Text
866153a5a1b3Sopenharmony_ci
866253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
866353a5a1b3Sopenharmony_ciFinePitch
866453a5a1b3Sopenharmony_ci\end_layout
866553a5a1b3Sopenharmony_ci
866653a5a1b3Sopenharmony_ci\end_inset
866753a5a1b3Sopenharmony_ci</cell>
866853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
866953a5a1b3Sopenharmony_ci\begin_inset Text
867053a5a1b3Sopenharmony_ci
867153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
867253a5a1b3Sopenharmony_ciPitchGain
867353a5a1b3Sopenharmony_ci\end_layout
867453a5a1b3Sopenharmony_ci
867553a5a1b3Sopenharmony_ci\end_inset
867653a5a1b3Sopenharmony_ci</cell>
867753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
867853a5a1b3Sopenharmony_ci\begin_inset Text
867953a5a1b3Sopenharmony_ci
868053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
868153a5a1b3Sopenharmony_ciInnovationGain
868253a5a1b3Sopenharmony_ci\end_layout
868353a5a1b3Sopenharmony_ci
868453a5a1b3Sopenharmony_ci\end_inset
868553a5a1b3Sopenharmony_ci</cell>
868653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
868753a5a1b3Sopenharmony_ci\begin_inset Text
868853a5a1b3Sopenharmony_ci
868953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
869053a5a1b3Sopenharmony_ciInnovation VQ
869153a5a1b3Sopenharmony_ci\end_layout
869253a5a1b3Sopenharmony_ci
869353a5a1b3Sopenharmony_ci\end_inset
869453a5a1b3Sopenharmony_ci</cell>
869553a5a1b3Sopenharmony_ci</row>
869653a5a1b3Sopenharmony_ci</lyxtabular>
869753a5a1b3Sopenharmony_ci
869853a5a1b3Sopenharmony_ci\end_inset
869953a5a1b3Sopenharmony_ci
870053a5a1b3Sopenharmony_ci
870153a5a1b3Sopenharmony_ci\end_layout
870253a5a1b3Sopenharmony_ci
870353a5a1b3Sopenharmony_ci\begin_layout Standard
870453a5a1b3Sopenharmony_ciFinePitch: (0 or 7 bits)
870553a5a1b3Sopenharmony_ci\end_layout
870653a5a1b3Sopenharmony_ci
870753a5a1b3Sopenharmony_ci\begin_layout Standard
870853a5a1b3Sopenharmony_ciPitchGain: (0, 5, or 7 bits)
870953a5a1b3Sopenharmony_ci\end_layout
871053a5a1b3Sopenharmony_ci
871153a5a1b3Sopenharmony_ci\begin_layout Standard
871253a5a1b3Sopenharmony_ciInnovation Gain: (0, 1, 3 bits)
871353a5a1b3Sopenharmony_ci\end_layout
871453a5a1b3Sopenharmony_ci
871553a5a1b3Sopenharmony_ci\begin_layout Standard
871653a5a1b3Sopenharmony_ciInnovation VQ: (0-96 bits)
871753a5a1b3Sopenharmony_ci\end_layout
871853a5a1b3Sopenharmony_ci
871953a5a1b3Sopenharmony_ci\begin_layout Standard
872053a5a1b3Sopenharmony_ci...
872153a5a1b3Sopenharmony_ci\end_layout
872253a5a1b3Sopenharmony_ci
872353a5a1b3Sopenharmony_ci\begin_layout Subsection
872453a5a1b3Sopenharmony_ciSample decoder
872553a5a1b3Sopenharmony_ci\end_layout
872653a5a1b3Sopenharmony_ci
872753a5a1b3Sopenharmony_ci\begin_layout Standard
872853a5a1b3Sopenharmony_ciThis section contains some sample source code, showing how a basic Speex
872953a5a1b3Sopenharmony_ci decoder can be implemented.
873053a5a1b3Sopenharmony_ci The sample decoder is narrowband submode 3 only, and with no advanced features
873153a5a1b3Sopenharmony_ci like enhancement, vbr etc.
873253a5a1b3Sopenharmony_ci\end_layout
873353a5a1b3Sopenharmony_ci
873453a5a1b3Sopenharmony_ci\begin_layout Standard
873553a5a1b3Sopenharmony_ci...
873653a5a1b3Sopenharmony_ci\end_layout
873753a5a1b3Sopenharmony_ci
873853a5a1b3Sopenharmony_ci\begin_layout Subsection
873953a5a1b3Sopenharmony_ciLookup tables
874053a5a1b3Sopenharmony_ci\end_layout
874153a5a1b3Sopenharmony_ci
874253a5a1b3Sopenharmony_ci\begin_layout Standard
874353a5a1b3Sopenharmony_ciThe Speex decoder includes a set of lookup tables and codebooks, which are
874453a5a1b3Sopenharmony_ci used to convert between values of different domains.
874553a5a1b3Sopenharmony_ci This includes:
874653a5a1b3Sopenharmony_ci\end_layout
874753a5a1b3Sopenharmony_ci
874853a5a1b3Sopenharmony_ci\begin_layout Standard
874953a5a1b3Sopenharmony_ci- Excitation 10x16 (3200 bps)
875053a5a1b3Sopenharmony_ci\end_layout
875153a5a1b3Sopenharmony_ci
875253a5a1b3Sopenharmony_ci\begin_layout Standard
875353a5a1b3Sopenharmony_ci- Excitation 10x32 (4000 bps)
875453a5a1b3Sopenharmony_ci\end_layout
875553a5a1b3Sopenharmony_ci
875653a5a1b3Sopenharmony_ci\begin_layout Standard
875753a5a1b3Sopenharmony_ci- Excitation 20x32 (2000 bps)
875853a5a1b3Sopenharmony_ci\end_layout
875953a5a1b3Sopenharmony_ci
876053a5a1b3Sopenharmony_ci\begin_layout Standard
876153a5a1b3Sopenharmony_ci- Excitation 5x256 (12800 bps)
876253a5a1b3Sopenharmony_ci\end_layout
876353a5a1b3Sopenharmony_ci
876453a5a1b3Sopenharmony_ci\begin_layout Standard
876553a5a1b3Sopenharmony_ci- Excitation 5x64 (9600 bps)
876653a5a1b3Sopenharmony_ci\end_layout
876753a5a1b3Sopenharmony_ci
876853a5a1b3Sopenharmony_ci\begin_layout Standard
876953a5a1b3Sopenharmony_ci- Excitation 8x128 (7000 bps)
877053a5a1b3Sopenharmony_ci\end_layout
877153a5a1b3Sopenharmony_ci
877253a5a1b3Sopenharmony_ci\begin_layout Standard
877353a5a1b3Sopenharmony_ci- Codebook for 3-tap pitch prediction gain (Normal and Low Bitrate)
877453a5a1b3Sopenharmony_ci\end_layout
877553a5a1b3Sopenharmony_ci
877653a5a1b3Sopenharmony_ci\begin_layout Standard
877753a5a1b3Sopenharmony_ci- Codebook for LSPs in narrowband CELP mode
877853a5a1b3Sopenharmony_ci\end_layout
877953a5a1b3Sopenharmony_ci
878053a5a1b3Sopenharmony_ci\begin_layout Standard
878153a5a1b3Sopenharmony_ci...
878253a5a1b3Sopenharmony_ci\end_layout
878353a5a1b3Sopenharmony_ci
878453a5a1b3Sopenharmony_ci\begin_layout Standard
878553a5a1b3Sopenharmony_ciThe exact lookup tables are included here for reference.
878653a5a1b3Sopenharmony_ci\end_layout
878753a5a1b3Sopenharmony_ci
878853a5a1b3Sopenharmony_ci\begin_layout Section
878953a5a1b3Sopenharmony_ciWideband embedded decoder
879053a5a1b3Sopenharmony_ci\end_layout
879153a5a1b3Sopenharmony_ci
879253a5a1b3Sopenharmony_ci\begin_layout Standard
879353a5a1b3Sopenharmony_ciQMF filter.
879453a5a1b3Sopenharmony_ci Narrowband signal decoded using narrowband decoder
879553a5a1b3Sopenharmony_ci\end_layout
879653a5a1b3Sopenharmony_ci
879753a5a1b3Sopenharmony_ci\begin_layout Standard
879853a5a1b3Sopenharmony_ciFor the high band, the decoder is similar to the narrowband decoder, with
879953a5a1b3Sopenharmony_ci the main difference being that there is no adaptive codebook.
880053a5a1b3Sopenharmony_ci\end_layout
880153a5a1b3Sopenharmony_ci
880253a5a1b3Sopenharmony_ci\begin_layout Standard
880353a5a1b3Sopenharmony_ciGain is per-subframe
880453a5a1b3Sopenharmony_ci\end_layout
880553a5a1b3Sopenharmony_ci
880653a5a1b3Sopenharmony_ci\begin_layout Chapter
880753a5a1b3Sopenharmony_ciSpeex narrowband mode
880853a5a1b3Sopenharmony_ci\begin_inset CommandInset label
880953a5a1b3Sopenharmony_ciLatexCommand label
881053a5a1b3Sopenharmony_ciname "sec:Speex-narrowband-mode"
881153a5a1b3Sopenharmony_ci
881253a5a1b3Sopenharmony_ci\end_inset
881353a5a1b3Sopenharmony_ci
881453a5a1b3Sopenharmony_ci
881553a5a1b3Sopenharmony_ci\begin_inset Index
881653a5a1b3Sopenharmony_cistatus collapsed
881753a5a1b3Sopenharmony_ci
881853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
881953a5a1b3Sopenharmony_cinarrowband
882053a5a1b3Sopenharmony_ci\end_layout
882153a5a1b3Sopenharmony_ci
882253a5a1b3Sopenharmony_ci\end_inset
882353a5a1b3Sopenharmony_ci
882453a5a1b3Sopenharmony_ci
882553a5a1b3Sopenharmony_ci\end_layout
882653a5a1b3Sopenharmony_ci
882753a5a1b3Sopenharmony_ci\begin_layout Standard
882853a5a1b3Sopenharmony_ciThis section looks at how Speex works for narrowband (
882953a5a1b3Sopenharmony_ci\begin_inset Formula $8\:\mathrm{kHz}$
883053a5a1b3Sopenharmony_ci\end_inset
883153a5a1b3Sopenharmony_ci
883253a5a1b3Sopenharmony_ci sampling rate) operation.
883353a5a1b3Sopenharmony_ci The frame size for this mode is 
883453a5a1b3Sopenharmony_ci\begin_inset Formula $20\:\mathrm{ms}$
883553a5a1b3Sopenharmony_ci\end_inset
883653a5a1b3Sopenharmony_ci
883753a5a1b3Sopenharmony_ci, corresponding to 160 samples.
883853a5a1b3Sopenharmony_ci Each frame is also subdivided into 4 sub-frames of 40 samples each.
883953a5a1b3Sopenharmony_ci\end_layout
884053a5a1b3Sopenharmony_ci
884153a5a1b3Sopenharmony_ci\begin_layout Standard
884253a5a1b3Sopenharmony_ciAlso many design decisions were based on the original goals and assumptions:
884353a5a1b3Sopenharmony_ci\end_layout
884453a5a1b3Sopenharmony_ci
884553a5a1b3Sopenharmony_ci\begin_layout Itemize
884653a5a1b3Sopenharmony_ciMinimizing the amount of information extracted from past frames (for robustness
884753a5a1b3Sopenharmony_ci to packet loss)
884853a5a1b3Sopenharmony_ci\end_layout
884953a5a1b3Sopenharmony_ci
885053a5a1b3Sopenharmony_ci\begin_layout Itemize
885153a5a1b3Sopenharmony_ciDynamically-selectable codebooks (LSP, pitch and innovation)
885253a5a1b3Sopenharmony_ci\end_layout
885353a5a1b3Sopenharmony_ci
885453a5a1b3Sopenharmony_ci\begin_layout Itemize
885553a5a1b3Sopenharmony_cisub-vector fixed (innovation) codebooks
885653a5a1b3Sopenharmony_ci\end_layout
885753a5a1b3Sopenharmony_ci
885853a5a1b3Sopenharmony_ci\begin_layout Section
885953a5a1b3Sopenharmony_ciWhole-Frame Analysis
886053a5a1b3Sopenharmony_ci\begin_inset Index
886153a5a1b3Sopenharmony_cistatus collapsed
886253a5a1b3Sopenharmony_ci
886353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
886453a5a1b3Sopenharmony_cilinear prediction
886553a5a1b3Sopenharmony_ci\end_layout
886653a5a1b3Sopenharmony_ci
886753a5a1b3Sopenharmony_ci\end_inset
886853a5a1b3Sopenharmony_ci
886953a5a1b3Sopenharmony_ci
887053a5a1b3Sopenharmony_ci\end_layout
887153a5a1b3Sopenharmony_ci
887253a5a1b3Sopenharmony_ci\begin_layout Standard
887353a5a1b3Sopenharmony_ciIn narrowband, Speex frames are 20 ms long (160 samples) and are subdivided
887453a5a1b3Sopenharmony_ci in 4 sub-frames of 5 ms each (40 samples).
887553a5a1b3Sopenharmony_ci For most narrowband bit-rates (8 kbps and above), the only parameters encoded
887653a5a1b3Sopenharmony_ci at the frame level are the Line Spectral Pairs (LSP) and a global excitation
887753a5a1b3Sopenharmony_ci gain 
887853a5a1b3Sopenharmony_ci\begin_inset Formula $g_{frame}$
887953a5a1b3Sopenharmony_ci\end_inset
888053a5a1b3Sopenharmony_ci
888153a5a1b3Sopenharmony_ci, as shown in Fig.
888253a5a1b3Sopenharmony_ci 
888353a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
888453a5a1b3Sopenharmony_ciLatexCommand ref
888553a5a1b3Sopenharmony_cireference "cap:Frame-open-loop-analysis"
888653a5a1b3Sopenharmony_ci
888753a5a1b3Sopenharmony_ci\end_inset
888853a5a1b3Sopenharmony_ci
888953a5a1b3Sopenharmony_ci.
889053a5a1b3Sopenharmony_ci All other parameters are encoded at the sub-frame level.
889153a5a1b3Sopenharmony_ci\end_layout
889253a5a1b3Sopenharmony_ci
889353a5a1b3Sopenharmony_ci\begin_layout Standard
889453a5a1b3Sopenharmony_ciLinear prediction analysis is performed once per frame using an asymmetric
889553a5a1b3Sopenharmony_ci Hamming window centered on the fourth sub-frame.
889653a5a1b3Sopenharmony_ci Because linear prediction coefficients (LPC) are not robust to quantization,
889753a5a1b3Sopenharmony_ci they are first converted to line spectral pairs (LSP)
889853a5a1b3Sopenharmony_ci\begin_inset Index
889953a5a1b3Sopenharmony_cistatus collapsed
890053a5a1b3Sopenharmony_ci
890153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
890253a5a1b3Sopenharmony_ciline spectral pair
890353a5a1b3Sopenharmony_ci\end_layout
890453a5a1b3Sopenharmony_ci
890553a5a1b3Sopenharmony_ci\end_inset
890653a5a1b3Sopenharmony_ci
890753a5a1b3Sopenharmony_ci.
890853a5a1b3Sopenharmony_ci The LSP's are considered to be associated to the 
890953a5a1b3Sopenharmony_ci\begin_inset Formula $4^{th}$
891053a5a1b3Sopenharmony_ci\end_inset
891153a5a1b3Sopenharmony_ci
891253a5a1b3Sopenharmony_ci sub-frames and the LSP's associated to the first 3 sub-frames are linearly
891353a5a1b3Sopenharmony_ci interpolated using the current and previous LSP coefficients.
891453a5a1b3Sopenharmony_ci The LSP coefficients and converted back to the LPC filter 
891553a5a1b3Sopenharmony_ci\begin_inset Formula $\hat{A}(z)$
891653a5a1b3Sopenharmony_ci\end_inset
891753a5a1b3Sopenharmony_ci
891853a5a1b3Sopenharmony_ci.
891953a5a1b3Sopenharmony_ci The non-quantized interpolated filter is denoted 
892053a5a1b3Sopenharmony_ci\begin_inset Formula $A(z)$
892153a5a1b3Sopenharmony_ci\end_inset
892253a5a1b3Sopenharmony_ci
892353a5a1b3Sopenharmony_ci and can be used for the weighting filter 
892453a5a1b3Sopenharmony_ci\begin_inset Formula $W(z)$
892553a5a1b3Sopenharmony_ci\end_inset
892653a5a1b3Sopenharmony_ci
892753a5a1b3Sopenharmony_ci because it does not need to be available to the decoder.
892853a5a1b3Sopenharmony_ci 
892953a5a1b3Sopenharmony_ci\end_layout
893053a5a1b3Sopenharmony_ci
893153a5a1b3Sopenharmony_ci\begin_layout Standard
893253a5a1b3Sopenharmony_ciTo make Speex more robust to packet loss, no prediction is applied on the
893353a5a1b3Sopenharmony_ci LSP coefficients prior to quantization.
893453a5a1b3Sopenharmony_ci The LSPs are encoded using vector quantization (VQ) with 30 bits for higher
893553a5a1b3Sopenharmony_ci quality modes and 18 bits for lower quality.
893653a5a1b3Sopenharmony_ci\end_layout
893753a5a1b3Sopenharmony_ci
893853a5a1b3Sopenharmony_ci\begin_layout Standard
893953a5a1b3Sopenharmony_ci\begin_inset Float figure
894053a5a1b3Sopenharmony_ciwide false
894153a5a1b3Sopenharmony_cisideways false
894253a5a1b3Sopenharmony_cistatus open
894353a5a1b3Sopenharmony_ci
894453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
894553a5a1b3Sopenharmony_ci\begin_inset ERT
894653a5a1b3Sopenharmony_cistatus collapsed
894753a5a1b3Sopenharmony_ci
894853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
894953a5a1b3Sopenharmony_ci
895053a5a1b3Sopenharmony_ci
895153a5a1b3Sopenharmony_ci\backslash
895253a5a1b3Sopenharmony_cibegin{center}
895353a5a1b3Sopenharmony_ci\end_layout
895453a5a1b3Sopenharmony_ci
895553a5a1b3Sopenharmony_ci\end_inset
895653a5a1b3Sopenharmony_ci
895753a5a1b3Sopenharmony_ci
895853a5a1b3Sopenharmony_ci\begin_inset Graphics
895953a5a1b3Sopenharmony_ci	filename speex_analysis.eps
896053a5a1b3Sopenharmony_ci	width 35page%
896153a5a1b3Sopenharmony_ci
896253a5a1b3Sopenharmony_ci\end_inset
896353a5a1b3Sopenharmony_ci
896453a5a1b3Sopenharmony_ci
896553a5a1b3Sopenharmony_ci\begin_inset ERT
896653a5a1b3Sopenharmony_cistatus collapsed
896753a5a1b3Sopenharmony_ci
896853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
896953a5a1b3Sopenharmony_ci
897053a5a1b3Sopenharmony_ci
897153a5a1b3Sopenharmony_ci\backslash
897253a5a1b3Sopenharmony_ciend{center}
897353a5a1b3Sopenharmony_ci\end_layout
897453a5a1b3Sopenharmony_ci
897553a5a1b3Sopenharmony_ci\end_inset
897653a5a1b3Sopenharmony_ci
897753a5a1b3Sopenharmony_ci
897853a5a1b3Sopenharmony_ci\end_layout
897953a5a1b3Sopenharmony_ci
898053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
898153a5a1b3Sopenharmony_ci\begin_inset Caption
898253a5a1b3Sopenharmony_ci
898353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
898453a5a1b3Sopenharmony_ciFrame open-loop analysis
898553a5a1b3Sopenharmony_ci\begin_inset CommandInset label
898653a5a1b3Sopenharmony_ciLatexCommand label
898753a5a1b3Sopenharmony_ciname "cap:Frame-open-loop-analysis"
898853a5a1b3Sopenharmony_ci
898953a5a1b3Sopenharmony_ci\end_inset
899053a5a1b3Sopenharmony_ci
899153a5a1b3Sopenharmony_ci
899253a5a1b3Sopenharmony_ci\end_layout
899353a5a1b3Sopenharmony_ci
899453a5a1b3Sopenharmony_ci\end_inset
899553a5a1b3Sopenharmony_ci
899653a5a1b3Sopenharmony_ci
899753a5a1b3Sopenharmony_ci\end_layout
899853a5a1b3Sopenharmony_ci
899953a5a1b3Sopenharmony_ci\end_inset
900053a5a1b3Sopenharmony_ci
900153a5a1b3Sopenharmony_ci
900253a5a1b3Sopenharmony_ci\end_layout
900353a5a1b3Sopenharmony_ci
900453a5a1b3Sopenharmony_ci\begin_layout Section
900553a5a1b3Sopenharmony_ciSub-Frame Analysis-by-Synthesis
900653a5a1b3Sopenharmony_ci\end_layout
900753a5a1b3Sopenharmony_ci
900853a5a1b3Sopenharmony_ci\begin_layout Standard
900953a5a1b3Sopenharmony_ci\begin_inset Float figure
901053a5a1b3Sopenharmony_ciwide false
901153a5a1b3Sopenharmony_cisideways false
901253a5a1b3Sopenharmony_cistatus open
901353a5a1b3Sopenharmony_ci
901453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
901553a5a1b3Sopenharmony_ci\begin_inset ERT
901653a5a1b3Sopenharmony_cistatus collapsed
901753a5a1b3Sopenharmony_ci
901853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
901953a5a1b3Sopenharmony_ci
902053a5a1b3Sopenharmony_ci
902153a5a1b3Sopenharmony_ci\backslash
902253a5a1b3Sopenharmony_cibegin{center}
902353a5a1b3Sopenharmony_ci\end_layout
902453a5a1b3Sopenharmony_ci
902553a5a1b3Sopenharmony_ci\end_inset
902653a5a1b3Sopenharmony_ci
902753a5a1b3Sopenharmony_ci
902853a5a1b3Sopenharmony_ci\begin_inset Graphics
902953a5a1b3Sopenharmony_ci	filename speex_abs.eps
903053a5a1b3Sopenharmony_ci	lyxscale 75
903153a5a1b3Sopenharmony_ci	width 40page%
903253a5a1b3Sopenharmony_ci
903353a5a1b3Sopenharmony_ci\end_inset
903453a5a1b3Sopenharmony_ci
903553a5a1b3Sopenharmony_ci
903653a5a1b3Sopenharmony_ci\begin_inset ERT
903753a5a1b3Sopenharmony_cistatus collapsed
903853a5a1b3Sopenharmony_ci
903953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
904053a5a1b3Sopenharmony_ci
904153a5a1b3Sopenharmony_ci
904253a5a1b3Sopenharmony_ci\backslash
904353a5a1b3Sopenharmony_ciend{center}
904453a5a1b3Sopenharmony_ci\end_layout
904553a5a1b3Sopenharmony_ci
904653a5a1b3Sopenharmony_ci\end_inset
904753a5a1b3Sopenharmony_ci
904853a5a1b3Sopenharmony_ci
904953a5a1b3Sopenharmony_ci\end_layout
905053a5a1b3Sopenharmony_ci
905153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
905253a5a1b3Sopenharmony_ci\begin_inset Caption
905353a5a1b3Sopenharmony_ci
905453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
905553a5a1b3Sopenharmony_ciAnalysis-by-synthesis closed-loop optimization on a sub-frame.
905653a5a1b3Sopenharmony_ci\begin_inset CommandInset label
905753a5a1b3Sopenharmony_ciLatexCommand label
905853a5a1b3Sopenharmony_ciname "cap:Sub-frame-AbS"
905953a5a1b3Sopenharmony_ci
906053a5a1b3Sopenharmony_ci\end_inset
906153a5a1b3Sopenharmony_ci
906253a5a1b3Sopenharmony_ci
906353a5a1b3Sopenharmony_ci\end_layout
906453a5a1b3Sopenharmony_ci
906553a5a1b3Sopenharmony_ci\end_inset
906653a5a1b3Sopenharmony_ci
906753a5a1b3Sopenharmony_ci
906853a5a1b3Sopenharmony_ci\end_layout
906953a5a1b3Sopenharmony_ci
907053a5a1b3Sopenharmony_ci\end_inset
907153a5a1b3Sopenharmony_ci
907253a5a1b3Sopenharmony_ci
907353a5a1b3Sopenharmony_ci\end_layout
907453a5a1b3Sopenharmony_ci
907553a5a1b3Sopenharmony_ci\begin_layout Standard
907653a5a1b3Sopenharmony_ciThe analysis-by-synthesis (AbS) encoder loop is described in Fig.
907753a5a1b3Sopenharmony_ci 
907853a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
907953a5a1b3Sopenharmony_ciLatexCommand ref
908053a5a1b3Sopenharmony_cireference "cap:Sub-frame-AbS"
908153a5a1b3Sopenharmony_ci
908253a5a1b3Sopenharmony_ci\end_inset
908353a5a1b3Sopenharmony_ci
908453a5a1b3Sopenharmony_ci.
908553a5a1b3Sopenharmony_ci There are three main aspects where Speex significantly differs from most
908653a5a1b3Sopenharmony_ci other CELP codecs.
908753a5a1b3Sopenharmony_ci First, while most recent CELP codecs make use of fractional pitch estimation
908853a5a1b3Sopenharmony_ci with a single gain, Speex uses an integer to encode the pitch period, but
908953a5a1b3Sopenharmony_ci uses a 3-tap predictor (3 gains).
909053a5a1b3Sopenharmony_ci The adaptive codebook contribution 
909153a5a1b3Sopenharmony_ci\begin_inset Formula $e_{a}[n]$
909253a5a1b3Sopenharmony_ci\end_inset
909353a5a1b3Sopenharmony_ci
909453a5a1b3Sopenharmony_ci can thus be expressed as:
909553a5a1b3Sopenharmony_ci\begin_inset Formula \begin{equation}
909653a5a1b3Sopenharmony_cie_{a}[n]=g_{0}e[n-T-1]+g_{1}e[n-T]+g_{2}e[n-T+1]\label{eq:adaptive-3tap}\end{equation}
909753a5a1b3Sopenharmony_ci
909853a5a1b3Sopenharmony_ci\end_inset
909953a5a1b3Sopenharmony_ci
910053a5a1b3Sopenharmony_ciwhere 
910153a5a1b3Sopenharmony_ci\begin_inset Formula $g_{0}$
910253a5a1b3Sopenharmony_ci\end_inset
910353a5a1b3Sopenharmony_ci
910453a5a1b3Sopenharmony_ci, 
910553a5a1b3Sopenharmony_ci\begin_inset Formula $g_{1}$
910653a5a1b3Sopenharmony_ci\end_inset
910753a5a1b3Sopenharmony_ci
910853a5a1b3Sopenharmony_ci and 
910953a5a1b3Sopenharmony_ci\begin_inset Formula $g_{2}$
911053a5a1b3Sopenharmony_ci\end_inset
911153a5a1b3Sopenharmony_ci
911253a5a1b3Sopenharmony_ci are the jointly quantized pitch gains and 
911353a5a1b3Sopenharmony_ci\begin_inset Formula $e[n]$
911453a5a1b3Sopenharmony_ci\end_inset
911553a5a1b3Sopenharmony_ci
911653a5a1b3Sopenharmony_ci is the codec excitation memory.
911753a5a1b3Sopenharmony_ci It is worth noting that when the pitch is smaller than the sub-frame size,
911853a5a1b3Sopenharmony_ci we repeat the excitation at a period 
911953a5a1b3Sopenharmony_ci\begin_inset Formula $T$
912053a5a1b3Sopenharmony_ci\end_inset
912153a5a1b3Sopenharmony_ci
912253a5a1b3Sopenharmony_ci.
912353a5a1b3Sopenharmony_ci For example, when 
912453a5a1b3Sopenharmony_ci\begin_inset Formula $n-T+1\geq0$
912553a5a1b3Sopenharmony_ci\end_inset
912653a5a1b3Sopenharmony_ci
912753a5a1b3Sopenharmony_ci, we use 
912853a5a1b3Sopenharmony_ci\begin_inset Formula $n-2T+1$
912953a5a1b3Sopenharmony_ci\end_inset
913053a5a1b3Sopenharmony_ci
913153a5a1b3Sopenharmony_ci instead.
913253a5a1b3Sopenharmony_ci In most modes, the pitch period is encoded with 7 bits in the 
913353a5a1b3Sopenharmony_ci\begin_inset Formula $\left[17,144\right]$
913453a5a1b3Sopenharmony_ci\end_inset
913553a5a1b3Sopenharmony_ci
913653a5a1b3Sopenharmony_ci range and the 
913753a5a1b3Sopenharmony_ci\begin_inset Formula $\beta_{i}$
913853a5a1b3Sopenharmony_ci\end_inset
913953a5a1b3Sopenharmony_ci
914053a5a1b3Sopenharmony_ci coefficients are vector-quantized using 7 bits at higher bit-rates (15
914153a5a1b3Sopenharmony_ci kbps narrowband and above) and 5 bits at lower bit-rates (11 kbps narrowband
914253a5a1b3Sopenharmony_ci and below).
914353a5a1b3Sopenharmony_ci\end_layout
914453a5a1b3Sopenharmony_ci
914553a5a1b3Sopenharmony_ci\begin_layout Standard
914653a5a1b3Sopenharmony_ciMany current CELP codecs use moving average (MA) prediction to encode the
914753a5a1b3Sopenharmony_ci fixed codebook gain.
914853a5a1b3Sopenharmony_ci This provides slightly better coding at the expense of introducing a dependency
914953a5a1b3Sopenharmony_ci on previously encoded frames.
915053a5a1b3Sopenharmony_ci A second difference is that Speex encodes the fixed codebook gain as the
915153a5a1b3Sopenharmony_ci product of the global excitation gain 
915253a5a1b3Sopenharmony_ci\begin_inset Formula $g_{frame}$
915353a5a1b3Sopenharmony_ci\end_inset
915453a5a1b3Sopenharmony_ci
915553a5a1b3Sopenharmony_ci with a sub-frame gain corrections 
915653a5a1b3Sopenharmony_ci\begin_inset Formula $g_{subf}$
915753a5a1b3Sopenharmony_ci\end_inset
915853a5a1b3Sopenharmony_ci
915953a5a1b3Sopenharmony_ci.
916053a5a1b3Sopenharmony_ci This increases robustness to packet loss by eliminating the inter-frame
916153a5a1b3Sopenharmony_ci dependency.
916253a5a1b3Sopenharmony_ci The sub-frame gain correction is encoded before the fixed codebook is searched
916353a5a1b3Sopenharmony_ci (not closed-loop optimized) and uses between 0 and 3 bits per sub-frame,
916453a5a1b3Sopenharmony_ci depending on the bit-rate.
916553a5a1b3Sopenharmony_ci\end_layout
916653a5a1b3Sopenharmony_ci
916753a5a1b3Sopenharmony_ci\begin_layout Standard
916853a5a1b3Sopenharmony_ciThe third difference is that Speex uses sub-vector quantization of the innovatio
916953a5a1b3Sopenharmony_cin (fixed codebook) signal instead of an algebraic codebook.
917053a5a1b3Sopenharmony_ci Each sub-frame is divided into sub-vectors of lengths ranging between 5
917153a5a1b3Sopenharmony_ci and 20 samples.
917253a5a1b3Sopenharmony_ci Each sub-vector is chosen from a bitrate-dependent codebook and all sub-vectors
917353a5a1b3Sopenharmony_ci are concatenated to form a sub-frame.
917453a5a1b3Sopenharmony_ci As an example, the 3.95 kbps mode uses a sub-vector size of 20 samples with
917553a5a1b3Sopenharmony_ci 32 entries in the codebook (5 bits).
917653a5a1b3Sopenharmony_ci This means that the innovation is encoded with 10 bits per sub-frame, or
917753a5a1b3Sopenharmony_ci 2000 bps.
917853a5a1b3Sopenharmony_ci On the other hand, the 18.2 kbps mode uses a sub-vector size of 5 samples
917953a5a1b3Sopenharmony_ci with 256 entries in the codebook (8 bits), so the innovation uses 64 bits
918053a5a1b3Sopenharmony_ci per sub-frame, or 12800 bps.
918153a5a1b3Sopenharmony_ci 
918253a5a1b3Sopenharmony_ci\end_layout
918353a5a1b3Sopenharmony_ci
918453a5a1b3Sopenharmony_ci\begin_layout Section
918553a5a1b3Sopenharmony_ciBit-rates
918653a5a1b3Sopenharmony_ci\end_layout
918753a5a1b3Sopenharmony_ci
918853a5a1b3Sopenharmony_ci\begin_layout Standard
918953a5a1b3Sopenharmony_ciSo far, no MOS (Mean Opinion Score
919053a5a1b3Sopenharmony_ci\begin_inset Index
919153a5a1b3Sopenharmony_cistatus collapsed
919253a5a1b3Sopenharmony_ci
919353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
919453a5a1b3Sopenharmony_cimean opinion score
919553a5a1b3Sopenharmony_ci\end_layout
919653a5a1b3Sopenharmony_ci
919753a5a1b3Sopenharmony_ci\end_inset
919853a5a1b3Sopenharmony_ci
919953a5a1b3Sopenharmony_ci) subjective evaluation has been performed for Speex.
920053a5a1b3Sopenharmony_ci In order to give an idea of the quality achievable with it, table 
920153a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
920253a5a1b3Sopenharmony_ciLatexCommand ref
920353a5a1b3Sopenharmony_cireference "cap:quality_vs_bps"
920453a5a1b3Sopenharmony_ci
920553a5a1b3Sopenharmony_ci\end_inset
920653a5a1b3Sopenharmony_ci
920753a5a1b3Sopenharmony_ci presents my own subjective opinion on it.
920853a5a1b3Sopenharmony_ci It should be noted that different people will perceive the quality differently
920953a5a1b3Sopenharmony_ci and that the person that designed the codec often has a bias (one way or
921053a5a1b3Sopenharmony_ci another) when it comes to subjective evaluation.
921153a5a1b3Sopenharmony_ci Last thing, it should be noted that for most codecs (including Speex) encoding
921253a5a1b3Sopenharmony_ci quality sometimes varies depending on the input.
921353a5a1b3Sopenharmony_ci Note that the complexity is only approximate (within 0.5 mflops and using
921453a5a1b3Sopenharmony_ci the lowest complexity setting).
921553a5a1b3Sopenharmony_ci Decoding requires approximately 0.5 mflops
921653a5a1b3Sopenharmony_ci\begin_inset Index
921753a5a1b3Sopenharmony_cistatus collapsed
921853a5a1b3Sopenharmony_ci
921953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
922053a5a1b3Sopenharmony_cicomplexity
922153a5a1b3Sopenharmony_ci\end_layout
922253a5a1b3Sopenharmony_ci
922353a5a1b3Sopenharmony_ci\end_inset
922453a5a1b3Sopenharmony_ci
922553a5a1b3Sopenharmony_ci in most modes (1 mflops with perceptual enhancement).
922653a5a1b3Sopenharmony_ci\end_layout
922753a5a1b3Sopenharmony_ci
922853a5a1b3Sopenharmony_ci\begin_layout Standard
922953a5a1b3Sopenharmony_ci\begin_inset Float table
923053a5a1b3Sopenharmony_ciplacement h
923153a5a1b3Sopenharmony_ciwide true
923253a5a1b3Sopenharmony_cisideways false
923353a5a1b3Sopenharmony_cistatus open
923453a5a1b3Sopenharmony_ci
923553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
923653a5a1b3Sopenharmony_ci\begin_inset ERT
923753a5a1b3Sopenharmony_cistatus collapsed
923853a5a1b3Sopenharmony_ci
923953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
924053a5a1b3Sopenharmony_ci
924153a5a1b3Sopenharmony_ci
924253a5a1b3Sopenharmony_ci\backslash
924353a5a1b3Sopenharmony_cibegin{center}
924453a5a1b3Sopenharmony_ci\end_layout
924553a5a1b3Sopenharmony_ci
924653a5a1b3Sopenharmony_ci\end_inset
924753a5a1b3Sopenharmony_ci
924853a5a1b3Sopenharmony_ci
924953a5a1b3Sopenharmony_ci\begin_inset Tabular
925053a5a1b3Sopenharmony_ci<lyxtabular version="3" rows="17" columns="5">
925153a5a1b3Sopenharmony_ci<features>
925253a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
925353a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
925453a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
925553a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
925653a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
925753a5a1b3Sopenharmony_ci<row>
925853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
925953a5a1b3Sopenharmony_ci\begin_inset Text
926053a5a1b3Sopenharmony_ci
926153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
926253a5a1b3Sopenharmony_ciMode
926353a5a1b3Sopenharmony_ci\end_layout
926453a5a1b3Sopenharmony_ci
926553a5a1b3Sopenharmony_ci\end_inset
926653a5a1b3Sopenharmony_ci</cell>
926753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
926853a5a1b3Sopenharmony_ci\begin_inset Text
926953a5a1b3Sopenharmony_ci
927053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
927153a5a1b3Sopenharmony_ciQuality
927253a5a1b3Sopenharmony_ci\end_layout
927353a5a1b3Sopenharmony_ci
927453a5a1b3Sopenharmony_ci\end_inset
927553a5a1b3Sopenharmony_ci</cell>
927653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
927753a5a1b3Sopenharmony_ci\begin_inset Text
927853a5a1b3Sopenharmony_ci
927953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
928053a5a1b3Sopenharmony_ciBit-rate
928153a5a1b3Sopenharmony_ci\begin_inset Index
928253a5a1b3Sopenharmony_cistatus collapsed
928353a5a1b3Sopenharmony_ci
928453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
928553a5a1b3Sopenharmony_cibit-rate
928653a5a1b3Sopenharmony_ci\end_layout
928753a5a1b3Sopenharmony_ci
928853a5a1b3Sopenharmony_ci\end_inset
928953a5a1b3Sopenharmony_ci
929053a5a1b3Sopenharmony_ci (bps)
929153a5a1b3Sopenharmony_ci\end_layout
929253a5a1b3Sopenharmony_ci
929353a5a1b3Sopenharmony_ci\end_inset
929453a5a1b3Sopenharmony_ci</cell>
929553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
929653a5a1b3Sopenharmony_ci\begin_inset Text
929753a5a1b3Sopenharmony_ci
929853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
929953a5a1b3Sopenharmony_cimflops
930053a5a1b3Sopenharmony_ci\begin_inset Index
930153a5a1b3Sopenharmony_cistatus collapsed
930253a5a1b3Sopenharmony_ci
930353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
930453a5a1b3Sopenharmony_cicomplexity
930553a5a1b3Sopenharmony_ci\end_layout
930653a5a1b3Sopenharmony_ci
930753a5a1b3Sopenharmony_ci\end_inset
930853a5a1b3Sopenharmony_ci
930953a5a1b3Sopenharmony_ci
931053a5a1b3Sopenharmony_ci\end_layout
931153a5a1b3Sopenharmony_ci
931253a5a1b3Sopenharmony_ci\end_inset
931353a5a1b3Sopenharmony_ci</cell>
931453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
931553a5a1b3Sopenharmony_ci\begin_inset Text
931653a5a1b3Sopenharmony_ci
931753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
931853a5a1b3Sopenharmony_ciQuality/description
931953a5a1b3Sopenharmony_ci\end_layout
932053a5a1b3Sopenharmony_ci
932153a5a1b3Sopenharmony_ci\end_inset
932253a5a1b3Sopenharmony_ci</cell>
932353a5a1b3Sopenharmony_ci</row>
932453a5a1b3Sopenharmony_ci<row>
932553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
932653a5a1b3Sopenharmony_ci\begin_inset Text
932753a5a1b3Sopenharmony_ci
932853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
932953a5a1b3Sopenharmony_ci0
933053a5a1b3Sopenharmony_ci\end_layout
933153a5a1b3Sopenharmony_ci
933253a5a1b3Sopenharmony_ci\end_inset
933353a5a1b3Sopenharmony_ci</cell>
933453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
933553a5a1b3Sopenharmony_ci\begin_inset Text
933653a5a1b3Sopenharmony_ci
933753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
933853a5a1b3Sopenharmony_ci-
933953a5a1b3Sopenharmony_ci\end_layout
934053a5a1b3Sopenharmony_ci
934153a5a1b3Sopenharmony_ci\end_inset
934253a5a1b3Sopenharmony_ci</cell>
934353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
934453a5a1b3Sopenharmony_ci\begin_inset Text
934553a5a1b3Sopenharmony_ci
934653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
934753a5a1b3Sopenharmony_ci250
934853a5a1b3Sopenharmony_ci\end_layout
934953a5a1b3Sopenharmony_ci
935053a5a1b3Sopenharmony_ci\end_inset
935153a5a1b3Sopenharmony_ci</cell>
935253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
935353a5a1b3Sopenharmony_ci\begin_inset Text
935453a5a1b3Sopenharmony_ci
935553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
935653a5a1b3Sopenharmony_ci0
935753a5a1b3Sopenharmony_ci\end_layout
935853a5a1b3Sopenharmony_ci
935953a5a1b3Sopenharmony_ci\end_inset
936053a5a1b3Sopenharmony_ci</cell>
936153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
936253a5a1b3Sopenharmony_ci\begin_inset Text
936353a5a1b3Sopenharmony_ci
936453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
936553a5a1b3Sopenharmony_ciNo transmission (DTX)
936653a5a1b3Sopenharmony_ci\end_layout
936753a5a1b3Sopenharmony_ci
936853a5a1b3Sopenharmony_ci\end_inset
936953a5a1b3Sopenharmony_ci</cell>
937053a5a1b3Sopenharmony_ci</row>
937153a5a1b3Sopenharmony_ci<row>
937253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
937353a5a1b3Sopenharmony_ci\begin_inset Text
937453a5a1b3Sopenharmony_ci
937553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
937653a5a1b3Sopenharmony_ci1
937753a5a1b3Sopenharmony_ci\end_layout
937853a5a1b3Sopenharmony_ci
937953a5a1b3Sopenharmony_ci\end_inset
938053a5a1b3Sopenharmony_ci</cell>
938153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
938253a5a1b3Sopenharmony_ci\begin_inset Text
938353a5a1b3Sopenharmony_ci
938453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
938553a5a1b3Sopenharmony_ci0
938653a5a1b3Sopenharmony_ci\end_layout
938753a5a1b3Sopenharmony_ci
938853a5a1b3Sopenharmony_ci\end_inset
938953a5a1b3Sopenharmony_ci</cell>
939053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
939153a5a1b3Sopenharmony_ci\begin_inset Text
939253a5a1b3Sopenharmony_ci
939353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
939453a5a1b3Sopenharmony_ci2,150
939553a5a1b3Sopenharmony_ci\end_layout
939653a5a1b3Sopenharmony_ci
939753a5a1b3Sopenharmony_ci\end_inset
939853a5a1b3Sopenharmony_ci</cell>
939953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
940053a5a1b3Sopenharmony_ci\begin_inset Text
940153a5a1b3Sopenharmony_ci
940253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
940353a5a1b3Sopenharmony_ci6
940453a5a1b3Sopenharmony_ci\end_layout
940553a5a1b3Sopenharmony_ci
940653a5a1b3Sopenharmony_ci\end_inset
940753a5a1b3Sopenharmony_ci</cell>
940853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
940953a5a1b3Sopenharmony_ci\begin_inset Text
941053a5a1b3Sopenharmony_ci
941153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
941253a5a1b3Sopenharmony_ciVocoder (mostly for comfort noise)
941353a5a1b3Sopenharmony_ci\end_layout
941453a5a1b3Sopenharmony_ci
941553a5a1b3Sopenharmony_ci\end_inset
941653a5a1b3Sopenharmony_ci</cell>
941753a5a1b3Sopenharmony_ci</row>
941853a5a1b3Sopenharmony_ci<row>
941953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
942053a5a1b3Sopenharmony_ci\begin_inset Text
942153a5a1b3Sopenharmony_ci
942253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
942353a5a1b3Sopenharmony_ci2
942453a5a1b3Sopenharmony_ci\end_layout
942553a5a1b3Sopenharmony_ci
942653a5a1b3Sopenharmony_ci\end_inset
942753a5a1b3Sopenharmony_ci</cell>
942853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
942953a5a1b3Sopenharmony_ci\begin_inset Text
943053a5a1b3Sopenharmony_ci
943153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
943253a5a1b3Sopenharmony_ci2
943353a5a1b3Sopenharmony_ci\end_layout
943453a5a1b3Sopenharmony_ci
943553a5a1b3Sopenharmony_ci\end_inset
943653a5a1b3Sopenharmony_ci</cell>
943753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
943853a5a1b3Sopenharmony_ci\begin_inset Text
943953a5a1b3Sopenharmony_ci
944053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
944153a5a1b3Sopenharmony_ci5,950
944253a5a1b3Sopenharmony_ci\end_layout
944353a5a1b3Sopenharmony_ci
944453a5a1b3Sopenharmony_ci\end_inset
944553a5a1b3Sopenharmony_ci</cell>
944653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
944753a5a1b3Sopenharmony_ci\begin_inset Text
944853a5a1b3Sopenharmony_ci
944953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
945053a5a1b3Sopenharmony_ci9
945153a5a1b3Sopenharmony_ci\end_layout
945253a5a1b3Sopenharmony_ci
945353a5a1b3Sopenharmony_ci\end_inset
945453a5a1b3Sopenharmony_ci</cell>
945553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
945653a5a1b3Sopenharmony_ci\begin_inset Text
945753a5a1b3Sopenharmony_ci
945853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
945953a5a1b3Sopenharmony_ciVery noticeable artifacts/noise, good intelligibility
946053a5a1b3Sopenharmony_ci\end_layout
946153a5a1b3Sopenharmony_ci
946253a5a1b3Sopenharmony_ci\end_inset
946353a5a1b3Sopenharmony_ci</cell>
946453a5a1b3Sopenharmony_ci</row>
946553a5a1b3Sopenharmony_ci<row>
946653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
946753a5a1b3Sopenharmony_ci\begin_inset Text
946853a5a1b3Sopenharmony_ci
946953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
947053a5a1b3Sopenharmony_ci3
947153a5a1b3Sopenharmony_ci\end_layout
947253a5a1b3Sopenharmony_ci
947353a5a1b3Sopenharmony_ci\end_inset
947453a5a1b3Sopenharmony_ci</cell>
947553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
947653a5a1b3Sopenharmony_ci\begin_inset Text
947753a5a1b3Sopenharmony_ci
947853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
947953a5a1b3Sopenharmony_ci3-4
948053a5a1b3Sopenharmony_ci\end_layout
948153a5a1b3Sopenharmony_ci
948253a5a1b3Sopenharmony_ci\end_inset
948353a5a1b3Sopenharmony_ci</cell>
948453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
948553a5a1b3Sopenharmony_ci\begin_inset Text
948653a5a1b3Sopenharmony_ci
948753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
948853a5a1b3Sopenharmony_ci8,000
948953a5a1b3Sopenharmony_ci\end_layout
949053a5a1b3Sopenharmony_ci
949153a5a1b3Sopenharmony_ci\end_inset
949253a5a1b3Sopenharmony_ci</cell>
949353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
949453a5a1b3Sopenharmony_ci\begin_inset Text
949553a5a1b3Sopenharmony_ci
949653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
949753a5a1b3Sopenharmony_ci10
949853a5a1b3Sopenharmony_ci\end_layout
949953a5a1b3Sopenharmony_ci
950053a5a1b3Sopenharmony_ci\end_inset
950153a5a1b3Sopenharmony_ci</cell>
950253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
950353a5a1b3Sopenharmony_ci\begin_inset Text
950453a5a1b3Sopenharmony_ci
950553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
950653a5a1b3Sopenharmony_ciArtifacts/noise sometimes noticeable
950753a5a1b3Sopenharmony_ci\end_layout
950853a5a1b3Sopenharmony_ci
950953a5a1b3Sopenharmony_ci\end_inset
951053a5a1b3Sopenharmony_ci</cell>
951153a5a1b3Sopenharmony_ci</row>
951253a5a1b3Sopenharmony_ci<row>
951353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
951453a5a1b3Sopenharmony_ci\begin_inset Text
951553a5a1b3Sopenharmony_ci
951653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
951753a5a1b3Sopenharmony_ci4
951853a5a1b3Sopenharmony_ci\end_layout
951953a5a1b3Sopenharmony_ci
952053a5a1b3Sopenharmony_ci\end_inset
952153a5a1b3Sopenharmony_ci</cell>
952253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
952353a5a1b3Sopenharmony_ci\begin_inset Text
952453a5a1b3Sopenharmony_ci
952553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
952653a5a1b3Sopenharmony_ci5-6
952753a5a1b3Sopenharmony_ci\end_layout
952853a5a1b3Sopenharmony_ci
952953a5a1b3Sopenharmony_ci\end_inset
953053a5a1b3Sopenharmony_ci</cell>
953153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
953253a5a1b3Sopenharmony_ci\begin_inset Text
953353a5a1b3Sopenharmony_ci
953453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
953553a5a1b3Sopenharmony_ci11,000
953653a5a1b3Sopenharmony_ci\end_layout
953753a5a1b3Sopenharmony_ci
953853a5a1b3Sopenharmony_ci\end_inset
953953a5a1b3Sopenharmony_ci</cell>
954053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
954153a5a1b3Sopenharmony_ci\begin_inset Text
954253a5a1b3Sopenharmony_ci
954353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
954453a5a1b3Sopenharmony_ci14
954553a5a1b3Sopenharmony_ci\end_layout
954653a5a1b3Sopenharmony_ci
954753a5a1b3Sopenharmony_ci\end_inset
954853a5a1b3Sopenharmony_ci</cell>
954953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
955053a5a1b3Sopenharmony_ci\begin_inset Text
955153a5a1b3Sopenharmony_ci
955253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
955353a5a1b3Sopenharmony_ciArtifacts usually noticeable only with headphones
955453a5a1b3Sopenharmony_ci\end_layout
955553a5a1b3Sopenharmony_ci
955653a5a1b3Sopenharmony_ci\end_inset
955753a5a1b3Sopenharmony_ci</cell>
955853a5a1b3Sopenharmony_ci</row>
955953a5a1b3Sopenharmony_ci<row>
956053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
956153a5a1b3Sopenharmony_ci\begin_inset Text
956253a5a1b3Sopenharmony_ci
956353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
956453a5a1b3Sopenharmony_ci5
956553a5a1b3Sopenharmony_ci\end_layout
956653a5a1b3Sopenharmony_ci
956753a5a1b3Sopenharmony_ci\end_inset
956853a5a1b3Sopenharmony_ci</cell>
956953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
957053a5a1b3Sopenharmony_ci\begin_inset Text
957153a5a1b3Sopenharmony_ci
957253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
957353a5a1b3Sopenharmony_ci7-8
957453a5a1b3Sopenharmony_ci\end_layout
957553a5a1b3Sopenharmony_ci
957653a5a1b3Sopenharmony_ci\end_inset
957753a5a1b3Sopenharmony_ci</cell>
957853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
957953a5a1b3Sopenharmony_ci\begin_inset Text
958053a5a1b3Sopenharmony_ci
958153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
958253a5a1b3Sopenharmony_ci15,000
958353a5a1b3Sopenharmony_ci\end_layout
958453a5a1b3Sopenharmony_ci
958553a5a1b3Sopenharmony_ci\end_inset
958653a5a1b3Sopenharmony_ci</cell>
958753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
958853a5a1b3Sopenharmony_ci\begin_inset Text
958953a5a1b3Sopenharmony_ci
959053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
959153a5a1b3Sopenharmony_ci11
959253a5a1b3Sopenharmony_ci\end_layout
959353a5a1b3Sopenharmony_ci
959453a5a1b3Sopenharmony_ci\end_inset
959553a5a1b3Sopenharmony_ci</cell>
959653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
959753a5a1b3Sopenharmony_ci\begin_inset Text
959853a5a1b3Sopenharmony_ci
959953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
960053a5a1b3Sopenharmony_ciNeed good headphones to tell the difference
960153a5a1b3Sopenharmony_ci\end_layout
960253a5a1b3Sopenharmony_ci
960353a5a1b3Sopenharmony_ci\end_inset
960453a5a1b3Sopenharmony_ci</cell>
960553a5a1b3Sopenharmony_ci</row>
960653a5a1b3Sopenharmony_ci<row>
960753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
960853a5a1b3Sopenharmony_ci\begin_inset Text
960953a5a1b3Sopenharmony_ci
961053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
961153a5a1b3Sopenharmony_ci6
961253a5a1b3Sopenharmony_ci\end_layout
961353a5a1b3Sopenharmony_ci
961453a5a1b3Sopenharmony_ci\end_inset
961553a5a1b3Sopenharmony_ci</cell>
961653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
961753a5a1b3Sopenharmony_ci\begin_inset Text
961853a5a1b3Sopenharmony_ci
961953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
962053a5a1b3Sopenharmony_ci9
962153a5a1b3Sopenharmony_ci\end_layout
962253a5a1b3Sopenharmony_ci
962353a5a1b3Sopenharmony_ci\end_inset
962453a5a1b3Sopenharmony_ci</cell>
962553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
962653a5a1b3Sopenharmony_ci\begin_inset Text
962753a5a1b3Sopenharmony_ci
962853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
962953a5a1b3Sopenharmony_ci18,200
963053a5a1b3Sopenharmony_ci\end_layout
963153a5a1b3Sopenharmony_ci
963253a5a1b3Sopenharmony_ci\end_inset
963353a5a1b3Sopenharmony_ci</cell>
963453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
963553a5a1b3Sopenharmony_ci\begin_inset Text
963653a5a1b3Sopenharmony_ci
963753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
963853a5a1b3Sopenharmony_ci17.5
963953a5a1b3Sopenharmony_ci\end_layout
964053a5a1b3Sopenharmony_ci
964153a5a1b3Sopenharmony_ci\end_inset
964253a5a1b3Sopenharmony_ci</cell>
964353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
964453a5a1b3Sopenharmony_ci\begin_inset Text
964553a5a1b3Sopenharmony_ci
964653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
964753a5a1b3Sopenharmony_ciHard to tell the difference even with good headphones
964853a5a1b3Sopenharmony_ci\end_layout
964953a5a1b3Sopenharmony_ci
965053a5a1b3Sopenharmony_ci\end_inset
965153a5a1b3Sopenharmony_ci</cell>
965253a5a1b3Sopenharmony_ci</row>
965353a5a1b3Sopenharmony_ci<row>
965453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
965553a5a1b3Sopenharmony_ci\begin_inset Text
965653a5a1b3Sopenharmony_ci
965753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
965853a5a1b3Sopenharmony_ci7
965953a5a1b3Sopenharmony_ci\end_layout
966053a5a1b3Sopenharmony_ci
966153a5a1b3Sopenharmony_ci\end_inset
966253a5a1b3Sopenharmony_ci</cell>
966353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
966453a5a1b3Sopenharmony_ci\begin_inset Text
966553a5a1b3Sopenharmony_ci
966653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
966753a5a1b3Sopenharmony_ci10
966853a5a1b3Sopenharmony_ci\end_layout
966953a5a1b3Sopenharmony_ci
967053a5a1b3Sopenharmony_ci\end_inset
967153a5a1b3Sopenharmony_ci</cell>
967253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
967353a5a1b3Sopenharmony_ci\begin_inset Text
967453a5a1b3Sopenharmony_ci
967553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
967653a5a1b3Sopenharmony_ci24,600
967753a5a1b3Sopenharmony_ci\end_layout
967853a5a1b3Sopenharmony_ci
967953a5a1b3Sopenharmony_ci\end_inset
968053a5a1b3Sopenharmony_ci</cell>
968153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
968253a5a1b3Sopenharmony_ci\begin_inset Text
968353a5a1b3Sopenharmony_ci
968453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
968553a5a1b3Sopenharmony_ci14.5
968653a5a1b3Sopenharmony_ci\end_layout
968753a5a1b3Sopenharmony_ci
968853a5a1b3Sopenharmony_ci\end_inset
968953a5a1b3Sopenharmony_ci</cell>
969053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
969153a5a1b3Sopenharmony_ci\begin_inset Text
969253a5a1b3Sopenharmony_ci
969353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
969453a5a1b3Sopenharmony_ciCompletely transparent for voice, good quality music
969553a5a1b3Sopenharmony_ci\end_layout
969653a5a1b3Sopenharmony_ci
969753a5a1b3Sopenharmony_ci\end_inset
969853a5a1b3Sopenharmony_ci</cell>
969953a5a1b3Sopenharmony_ci</row>
970053a5a1b3Sopenharmony_ci<row>
970153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
970253a5a1b3Sopenharmony_ci\begin_inset Text
970353a5a1b3Sopenharmony_ci
970453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
970553a5a1b3Sopenharmony_ci8
970653a5a1b3Sopenharmony_ci\end_layout
970753a5a1b3Sopenharmony_ci
970853a5a1b3Sopenharmony_ci\end_inset
970953a5a1b3Sopenharmony_ci</cell>
971053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
971153a5a1b3Sopenharmony_ci\begin_inset Text
971253a5a1b3Sopenharmony_ci
971353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
971453a5a1b3Sopenharmony_ci1
971553a5a1b3Sopenharmony_ci\end_layout
971653a5a1b3Sopenharmony_ci
971753a5a1b3Sopenharmony_ci\end_inset
971853a5a1b3Sopenharmony_ci</cell>
971953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
972053a5a1b3Sopenharmony_ci\begin_inset Text
972153a5a1b3Sopenharmony_ci
972253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
972353a5a1b3Sopenharmony_ci3,950
972453a5a1b3Sopenharmony_ci\end_layout
972553a5a1b3Sopenharmony_ci
972653a5a1b3Sopenharmony_ci\end_inset
972753a5a1b3Sopenharmony_ci</cell>
972853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
972953a5a1b3Sopenharmony_ci\begin_inset Text
973053a5a1b3Sopenharmony_ci
973153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
973253a5a1b3Sopenharmony_ci10.5
973353a5a1b3Sopenharmony_ci\end_layout
973453a5a1b3Sopenharmony_ci
973553a5a1b3Sopenharmony_ci\end_inset
973653a5a1b3Sopenharmony_ci</cell>
973753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
973853a5a1b3Sopenharmony_ci\begin_inset Text
973953a5a1b3Sopenharmony_ci
974053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
974153a5a1b3Sopenharmony_ciVery noticeable artifacts/noise, good intelligibility
974253a5a1b3Sopenharmony_ci\end_layout
974353a5a1b3Sopenharmony_ci
974453a5a1b3Sopenharmony_ci\end_inset
974553a5a1b3Sopenharmony_ci</cell>
974653a5a1b3Sopenharmony_ci</row>
974753a5a1b3Sopenharmony_ci<row>
974853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
974953a5a1b3Sopenharmony_ci\begin_inset Text
975053a5a1b3Sopenharmony_ci
975153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
975253a5a1b3Sopenharmony_ci9
975353a5a1b3Sopenharmony_ci\end_layout
975453a5a1b3Sopenharmony_ci
975553a5a1b3Sopenharmony_ci\end_inset
975653a5a1b3Sopenharmony_ci</cell>
975753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
975853a5a1b3Sopenharmony_ci\begin_inset Text
975953a5a1b3Sopenharmony_ci
976053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
976153a5a1b3Sopenharmony_ci-
976253a5a1b3Sopenharmony_ci\end_layout
976353a5a1b3Sopenharmony_ci
976453a5a1b3Sopenharmony_ci\end_inset
976553a5a1b3Sopenharmony_ci</cell>
976653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
976753a5a1b3Sopenharmony_ci\begin_inset Text
976853a5a1b3Sopenharmony_ci
976953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
977053a5a1b3Sopenharmony_ci-
977153a5a1b3Sopenharmony_ci\end_layout
977253a5a1b3Sopenharmony_ci
977353a5a1b3Sopenharmony_ci\end_inset
977453a5a1b3Sopenharmony_ci</cell>
977553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
977653a5a1b3Sopenharmony_ci\begin_inset Text
977753a5a1b3Sopenharmony_ci
977853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
977953a5a1b3Sopenharmony_ci-
978053a5a1b3Sopenharmony_ci\end_layout
978153a5a1b3Sopenharmony_ci
978253a5a1b3Sopenharmony_ci\end_inset
978353a5a1b3Sopenharmony_ci</cell>
978453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
978553a5a1b3Sopenharmony_ci\begin_inset Text
978653a5a1b3Sopenharmony_ci
978753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
978853a5a1b3Sopenharmony_cireserved
978953a5a1b3Sopenharmony_ci\end_layout
979053a5a1b3Sopenharmony_ci
979153a5a1b3Sopenharmony_ci\end_inset
979253a5a1b3Sopenharmony_ci</cell>
979353a5a1b3Sopenharmony_ci</row>
979453a5a1b3Sopenharmony_ci<row>
979553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
979653a5a1b3Sopenharmony_ci\begin_inset Text
979753a5a1b3Sopenharmony_ci
979853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
979953a5a1b3Sopenharmony_ci10
980053a5a1b3Sopenharmony_ci\end_layout
980153a5a1b3Sopenharmony_ci
980253a5a1b3Sopenharmony_ci\end_inset
980353a5a1b3Sopenharmony_ci</cell>
980453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
980553a5a1b3Sopenharmony_ci\begin_inset Text
980653a5a1b3Sopenharmony_ci
980753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
980853a5a1b3Sopenharmony_ci-
980953a5a1b3Sopenharmony_ci\end_layout
981053a5a1b3Sopenharmony_ci
981153a5a1b3Sopenharmony_ci\end_inset
981253a5a1b3Sopenharmony_ci</cell>
981353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
981453a5a1b3Sopenharmony_ci\begin_inset Text
981553a5a1b3Sopenharmony_ci
981653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
981753a5a1b3Sopenharmony_ci-
981853a5a1b3Sopenharmony_ci\end_layout
981953a5a1b3Sopenharmony_ci
982053a5a1b3Sopenharmony_ci\end_inset
982153a5a1b3Sopenharmony_ci</cell>
982253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
982353a5a1b3Sopenharmony_ci\begin_inset Text
982453a5a1b3Sopenharmony_ci
982553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
982653a5a1b3Sopenharmony_ci-
982753a5a1b3Sopenharmony_ci\end_layout
982853a5a1b3Sopenharmony_ci
982953a5a1b3Sopenharmony_ci\end_inset
983053a5a1b3Sopenharmony_ci</cell>
983153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
983253a5a1b3Sopenharmony_ci\begin_inset Text
983353a5a1b3Sopenharmony_ci
983453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
983553a5a1b3Sopenharmony_cireserved
983653a5a1b3Sopenharmony_ci\end_layout
983753a5a1b3Sopenharmony_ci
983853a5a1b3Sopenharmony_ci\end_inset
983953a5a1b3Sopenharmony_ci</cell>
984053a5a1b3Sopenharmony_ci</row>
984153a5a1b3Sopenharmony_ci<row>
984253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
984353a5a1b3Sopenharmony_ci\begin_inset Text
984453a5a1b3Sopenharmony_ci
984553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
984653a5a1b3Sopenharmony_ci11
984753a5a1b3Sopenharmony_ci\end_layout
984853a5a1b3Sopenharmony_ci
984953a5a1b3Sopenharmony_ci\end_inset
985053a5a1b3Sopenharmony_ci</cell>
985153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
985253a5a1b3Sopenharmony_ci\begin_inset Text
985353a5a1b3Sopenharmony_ci
985453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
985553a5a1b3Sopenharmony_ci-
985653a5a1b3Sopenharmony_ci\end_layout
985753a5a1b3Sopenharmony_ci
985853a5a1b3Sopenharmony_ci\end_inset
985953a5a1b3Sopenharmony_ci</cell>
986053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
986153a5a1b3Sopenharmony_ci\begin_inset Text
986253a5a1b3Sopenharmony_ci
986353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
986453a5a1b3Sopenharmony_ci-
986553a5a1b3Sopenharmony_ci\end_layout
986653a5a1b3Sopenharmony_ci
986753a5a1b3Sopenharmony_ci\end_inset
986853a5a1b3Sopenharmony_ci</cell>
986953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
987053a5a1b3Sopenharmony_ci\begin_inset Text
987153a5a1b3Sopenharmony_ci
987253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
987353a5a1b3Sopenharmony_ci-
987453a5a1b3Sopenharmony_ci\end_layout
987553a5a1b3Sopenharmony_ci
987653a5a1b3Sopenharmony_ci\end_inset
987753a5a1b3Sopenharmony_ci</cell>
987853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
987953a5a1b3Sopenharmony_ci\begin_inset Text
988053a5a1b3Sopenharmony_ci
988153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
988253a5a1b3Sopenharmony_cireserved
988353a5a1b3Sopenharmony_ci\end_layout
988453a5a1b3Sopenharmony_ci
988553a5a1b3Sopenharmony_ci\end_inset
988653a5a1b3Sopenharmony_ci</cell>
988753a5a1b3Sopenharmony_ci</row>
988853a5a1b3Sopenharmony_ci<row>
988953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
989053a5a1b3Sopenharmony_ci\begin_inset Text
989153a5a1b3Sopenharmony_ci
989253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
989353a5a1b3Sopenharmony_ci12
989453a5a1b3Sopenharmony_ci\end_layout
989553a5a1b3Sopenharmony_ci
989653a5a1b3Sopenharmony_ci\end_inset
989753a5a1b3Sopenharmony_ci</cell>
989853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
989953a5a1b3Sopenharmony_ci\begin_inset Text
990053a5a1b3Sopenharmony_ci
990153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
990253a5a1b3Sopenharmony_ci-
990353a5a1b3Sopenharmony_ci\end_layout
990453a5a1b3Sopenharmony_ci
990553a5a1b3Sopenharmony_ci\end_inset
990653a5a1b3Sopenharmony_ci</cell>
990753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
990853a5a1b3Sopenharmony_ci\begin_inset Text
990953a5a1b3Sopenharmony_ci
991053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
991153a5a1b3Sopenharmony_ci-
991253a5a1b3Sopenharmony_ci\end_layout
991353a5a1b3Sopenharmony_ci
991453a5a1b3Sopenharmony_ci\end_inset
991553a5a1b3Sopenharmony_ci</cell>
991653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
991753a5a1b3Sopenharmony_ci\begin_inset Text
991853a5a1b3Sopenharmony_ci
991953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
992053a5a1b3Sopenharmony_ci-
992153a5a1b3Sopenharmony_ci\end_layout
992253a5a1b3Sopenharmony_ci
992353a5a1b3Sopenharmony_ci\end_inset
992453a5a1b3Sopenharmony_ci</cell>
992553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
992653a5a1b3Sopenharmony_ci\begin_inset Text
992753a5a1b3Sopenharmony_ci
992853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
992953a5a1b3Sopenharmony_cireserved
993053a5a1b3Sopenharmony_ci\end_layout
993153a5a1b3Sopenharmony_ci
993253a5a1b3Sopenharmony_ci\end_inset
993353a5a1b3Sopenharmony_ci</cell>
993453a5a1b3Sopenharmony_ci</row>
993553a5a1b3Sopenharmony_ci<row>
993653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
993753a5a1b3Sopenharmony_ci\begin_inset Text
993853a5a1b3Sopenharmony_ci
993953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
994053a5a1b3Sopenharmony_ci13
994153a5a1b3Sopenharmony_ci\end_layout
994253a5a1b3Sopenharmony_ci
994353a5a1b3Sopenharmony_ci\end_inset
994453a5a1b3Sopenharmony_ci</cell>
994553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
994653a5a1b3Sopenharmony_ci\begin_inset Text
994753a5a1b3Sopenharmony_ci
994853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
994953a5a1b3Sopenharmony_ci-
995053a5a1b3Sopenharmony_ci\end_layout
995153a5a1b3Sopenharmony_ci
995253a5a1b3Sopenharmony_ci\end_inset
995353a5a1b3Sopenharmony_ci</cell>
995453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
995553a5a1b3Sopenharmony_ci\begin_inset Text
995653a5a1b3Sopenharmony_ci
995753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
995853a5a1b3Sopenharmony_ci-
995953a5a1b3Sopenharmony_ci\end_layout
996053a5a1b3Sopenharmony_ci
996153a5a1b3Sopenharmony_ci\end_inset
996253a5a1b3Sopenharmony_ci</cell>
996353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
996453a5a1b3Sopenharmony_ci\begin_inset Text
996553a5a1b3Sopenharmony_ci
996653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
996753a5a1b3Sopenharmony_ci-
996853a5a1b3Sopenharmony_ci\end_layout
996953a5a1b3Sopenharmony_ci
997053a5a1b3Sopenharmony_ci\end_inset
997153a5a1b3Sopenharmony_ci</cell>
997253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
997353a5a1b3Sopenharmony_ci\begin_inset Text
997453a5a1b3Sopenharmony_ci
997553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
997653a5a1b3Sopenharmony_ciApplication-defined, interpreted by callback or skipped
997753a5a1b3Sopenharmony_ci\end_layout
997853a5a1b3Sopenharmony_ci
997953a5a1b3Sopenharmony_ci\end_inset
998053a5a1b3Sopenharmony_ci</cell>
998153a5a1b3Sopenharmony_ci</row>
998253a5a1b3Sopenharmony_ci<row>
998353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
998453a5a1b3Sopenharmony_ci\begin_inset Text
998553a5a1b3Sopenharmony_ci
998653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
998753a5a1b3Sopenharmony_ci14
998853a5a1b3Sopenharmony_ci\end_layout
998953a5a1b3Sopenharmony_ci
999053a5a1b3Sopenharmony_ci\end_inset
999153a5a1b3Sopenharmony_ci</cell>
999253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
999353a5a1b3Sopenharmony_ci\begin_inset Text
999453a5a1b3Sopenharmony_ci
999553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
999653a5a1b3Sopenharmony_ci-
999753a5a1b3Sopenharmony_ci\end_layout
999853a5a1b3Sopenharmony_ci
999953a5a1b3Sopenharmony_ci\end_inset
1000053a5a1b3Sopenharmony_ci</cell>
1000153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1000253a5a1b3Sopenharmony_ci\begin_inset Text
1000353a5a1b3Sopenharmony_ci
1000453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1000553a5a1b3Sopenharmony_ci-
1000653a5a1b3Sopenharmony_ci\end_layout
1000753a5a1b3Sopenharmony_ci
1000853a5a1b3Sopenharmony_ci\end_inset
1000953a5a1b3Sopenharmony_ci</cell>
1001053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1001153a5a1b3Sopenharmony_ci\begin_inset Text
1001253a5a1b3Sopenharmony_ci
1001353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1001453a5a1b3Sopenharmony_ci-
1001553a5a1b3Sopenharmony_ci\end_layout
1001653a5a1b3Sopenharmony_ci
1001753a5a1b3Sopenharmony_ci\end_inset
1001853a5a1b3Sopenharmony_ci</cell>
1001953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1002053a5a1b3Sopenharmony_ci\begin_inset Text
1002153a5a1b3Sopenharmony_ci
1002253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1002353a5a1b3Sopenharmony_ciSpeex in-band signaling
1002453a5a1b3Sopenharmony_ci\end_layout
1002553a5a1b3Sopenharmony_ci
1002653a5a1b3Sopenharmony_ci\end_inset
1002753a5a1b3Sopenharmony_ci</cell>
1002853a5a1b3Sopenharmony_ci</row>
1002953a5a1b3Sopenharmony_ci<row>
1003053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1003153a5a1b3Sopenharmony_ci\begin_inset Text
1003253a5a1b3Sopenharmony_ci
1003353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1003453a5a1b3Sopenharmony_ci15
1003553a5a1b3Sopenharmony_ci\end_layout
1003653a5a1b3Sopenharmony_ci
1003753a5a1b3Sopenharmony_ci\end_inset
1003853a5a1b3Sopenharmony_ci</cell>
1003953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1004053a5a1b3Sopenharmony_ci\begin_inset Text
1004153a5a1b3Sopenharmony_ci
1004253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1004353a5a1b3Sopenharmony_ci-
1004453a5a1b3Sopenharmony_ci\end_layout
1004553a5a1b3Sopenharmony_ci
1004653a5a1b3Sopenharmony_ci\end_inset
1004753a5a1b3Sopenharmony_ci</cell>
1004853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1004953a5a1b3Sopenharmony_ci\begin_inset Text
1005053a5a1b3Sopenharmony_ci
1005153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1005253a5a1b3Sopenharmony_ci-
1005353a5a1b3Sopenharmony_ci\end_layout
1005453a5a1b3Sopenharmony_ci
1005553a5a1b3Sopenharmony_ci\end_inset
1005653a5a1b3Sopenharmony_ci</cell>
1005753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1005853a5a1b3Sopenharmony_ci\begin_inset Text
1005953a5a1b3Sopenharmony_ci
1006053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1006153a5a1b3Sopenharmony_ci-
1006253a5a1b3Sopenharmony_ci\end_layout
1006353a5a1b3Sopenharmony_ci
1006453a5a1b3Sopenharmony_ci\end_inset
1006553a5a1b3Sopenharmony_ci</cell>
1006653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1006753a5a1b3Sopenharmony_ci\begin_inset Text
1006853a5a1b3Sopenharmony_ci
1006953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1007053a5a1b3Sopenharmony_ciTerminator code
1007153a5a1b3Sopenharmony_ci\end_layout
1007253a5a1b3Sopenharmony_ci
1007353a5a1b3Sopenharmony_ci\end_inset
1007453a5a1b3Sopenharmony_ci</cell>
1007553a5a1b3Sopenharmony_ci</row>
1007653a5a1b3Sopenharmony_ci</lyxtabular>
1007753a5a1b3Sopenharmony_ci
1007853a5a1b3Sopenharmony_ci\end_inset
1007953a5a1b3Sopenharmony_ci
1008053a5a1b3Sopenharmony_ci
1008153a5a1b3Sopenharmony_ci\begin_inset ERT
1008253a5a1b3Sopenharmony_cistatus collapsed
1008353a5a1b3Sopenharmony_ci
1008453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1008553a5a1b3Sopenharmony_ci
1008653a5a1b3Sopenharmony_ci
1008753a5a1b3Sopenharmony_ci\backslash
1008853a5a1b3Sopenharmony_ciend{center}
1008953a5a1b3Sopenharmony_ci\end_layout
1009053a5a1b3Sopenharmony_ci
1009153a5a1b3Sopenharmony_ci\end_inset
1009253a5a1b3Sopenharmony_ci
1009353a5a1b3Sopenharmony_ci
1009453a5a1b3Sopenharmony_ci\end_layout
1009553a5a1b3Sopenharmony_ci
1009653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1009753a5a1b3Sopenharmony_ci\begin_inset Caption
1009853a5a1b3Sopenharmony_ci
1009953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1010053a5a1b3Sopenharmony_ciQuality versus bit-rate
1010153a5a1b3Sopenharmony_ci\begin_inset CommandInset label
1010253a5a1b3Sopenharmony_ciLatexCommand label
1010353a5a1b3Sopenharmony_ciname "cap:quality_vs_bps"
1010453a5a1b3Sopenharmony_ci
1010553a5a1b3Sopenharmony_ci\end_inset
1010653a5a1b3Sopenharmony_ci
1010753a5a1b3Sopenharmony_ci
1010853a5a1b3Sopenharmony_ci\end_layout
1010953a5a1b3Sopenharmony_ci
1011053a5a1b3Sopenharmony_ci\end_inset
1011153a5a1b3Sopenharmony_ci
1011253a5a1b3Sopenharmony_ci
1011353a5a1b3Sopenharmony_ci\end_layout
1011453a5a1b3Sopenharmony_ci
1011553a5a1b3Sopenharmony_ci\end_inset
1011653a5a1b3Sopenharmony_ci
1011753a5a1b3Sopenharmony_ci
1011853a5a1b3Sopenharmony_ci\end_layout
1011953a5a1b3Sopenharmony_ci
1012053a5a1b3Sopenharmony_ci\begin_layout Section
1012153a5a1b3Sopenharmony_ciPerceptual enhancement
1012253a5a1b3Sopenharmony_ci\begin_inset Index
1012353a5a1b3Sopenharmony_cistatus collapsed
1012453a5a1b3Sopenharmony_ci
1012553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1012653a5a1b3Sopenharmony_ciperceptual enhancement
1012753a5a1b3Sopenharmony_ci\end_layout
1012853a5a1b3Sopenharmony_ci
1012953a5a1b3Sopenharmony_ci\end_inset
1013053a5a1b3Sopenharmony_ci
1013153a5a1b3Sopenharmony_ci
1013253a5a1b3Sopenharmony_ci\end_layout
1013353a5a1b3Sopenharmony_ci
1013453a5a1b3Sopenharmony_ci\begin_layout Standard
1013553a5a1b3Sopenharmony_ci
1013653a5a1b3Sopenharmony_ci\series bold
1013753a5a1b3Sopenharmony_ciThis section was only valid for version 1.1.12 and earlier.
1013853a5a1b3Sopenharmony_ci It does not apply to version 1.2-beta1 (and later), for which the new perceptual
1013953a5a1b3Sopenharmony_ci enhancement is not yet documented.
1014053a5a1b3Sopenharmony_ci\end_layout
1014153a5a1b3Sopenharmony_ci
1014253a5a1b3Sopenharmony_ci\begin_layout Standard
1014353a5a1b3Sopenharmony_ciThis part of the codec only applies to the decoder and can even be changed
1014453a5a1b3Sopenharmony_ci without affecting inter-operability.
1014553a5a1b3Sopenharmony_ci For that reason, the implementation provided and described here should
1014653a5a1b3Sopenharmony_ci only be considered as a reference implementation.
1014753a5a1b3Sopenharmony_ci The enhancement system is divided into two parts.
1014853a5a1b3Sopenharmony_ci First, the synthesis filter 
1014953a5a1b3Sopenharmony_ci\begin_inset Formula $S(z)=1/A(z)$
1015053a5a1b3Sopenharmony_ci\end_inset
1015153a5a1b3Sopenharmony_ci
1015253a5a1b3Sopenharmony_ci is replaced by an enhanced filter:
1015353a5a1b3Sopenharmony_ci\begin_inset Formula \[
1015453a5a1b3Sopenharmony_ciS'(z)=\frac{A\left(z/a_{2}\right)A\left(z/a_{3}\right)}{A\left(z\right)A\left(z/a_{1}\right)}\]
1015553a5a1b3Sopenharmony_ci
1015653a5a1b3Sopenharmony_ci\end_inset
1015753a5a1b3Sopenharmony_ci
1015853a5a1b3Sopenharmony_ciwhere 
1015953a5a1b3Sopenharmony_ci\begin_inset Formula $a_{1}$
1016053a5a1b3Sopenharmony_ci\end_inset
1016153a5a1b3Sopenharmony_ci
1016253a5a1b3Sopenharmony_ci and 
1016353a5a1b3Sopenharmony_ci\begin_inset Formula $a_{2}$
1016453a5a1b3Sopenharmony_ci\end_inset
1016553a5a1b3Sopenharmony_ci
1016653a5a1b3Sopenharmony_ci depend on the mode in use and 
1016753a5a1b3Sopenharmony_ci\begin_inset Formula $a_{3}=\frac{1}{r}\left(1-\frac{1-ra_{1}}{1-ra_{2}}\right)$
1016853a5a1b3Sopenharmony_ci\end_inset
1016953a5a1b3Sopenharmony_ci
1017053a5a1b3Sopenharmony_ci with 
1017153a5a1b3Sopenharmony_ci\begin_inset Formula $r=.9$
1017253a5a1b3Sopenharmony_ci\end_inset
1017353a5a1b3Sopenharmony_ci
1017453a5a1b3Sopenharmony_ci.
1017553a5a1b3Sopenharmony_ci The second part of the enhancement consists of using a comb filter to enhance
1017653a5a1b3Sopenharmony_ci the pitch in the excitation domain.
1017753a5a1b3Sopenharmony_ci 
1017853a5a1b3Sopenharmony_ci\end_layout
1017953a5a1b3Sopenharmony_ci
1018053a5a1b3Sopenharmony_ci\begin_layout Standard
1018153a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
1018253a5a1b3Sopenharmony_ci\end_inset
1018353a5a1b3Sopenharmony_ci
1018453a5a1b3Sopenharmony_ci
1018553a5a1b3Sopenharmony_ci\end_layout
1018653a5a1b3Sopenharmony_ci
1018753a5a1b3Sopenharmony_ci\begin_layout Chapter
1018853a5a1b3Sopenharmony_ciSpeex wideband mode (sub-band CELP)
1018953a5a1b3Sopenharmony_ci\begin_inset Index
1019053a5a1b3Sopenharmony_cistatus collapsed
1019153a5a1b3Sopenharmony_ci
1019253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1019353a5a1b3Sopenharmony_ciwideband
1019453a5a1b3Sopenharmony_ci\end_layout
1019553a5a1b3Sopenharmony_ci
1019653a5a1b3Sopenharmony_ci\end_inset
1019753a5a1b3Sopenharmony_ci
1019853a5a1b3Sopenharmony_ci
1019953a5a1b3Sopenharmony_ci\begin_inset CommandInset label
1020053a5a1b3Sopenharmony_ciLatexCommand label
1020153a5a1b3Sopenharmony_ciname "sec:Speex-wideband-mode"
1020253a5a1b3Sopenharmony_ci
1020353a5a1b3Sopenharmony_ci\end_inset
1020453a5a1b3Sopenharmony_ci
1020553a5a1b3Sopenharmony_ci
1020653a5a1b3Sopenharmony_ci\end_layout
1020753a5a1b3Sopenharmony_ci
1020853a5a1b3Sopenharmony_ci\begin_layout Standard
1020953a5a1b3Sopenharmony_ciFor wideband, the Speex approach uses a 
1021053a5a1b3Sopenharmony_ci\emph on
1021153a5a1b3Sopenharmony_ciq
1021253a5a1b3Sopenharmony_ci\emph default
1021353a5a1b3Sopenharmony_ciuadrature 
1021453a5a1b3Sopenharmony_ci\emph on
1021553a5a1b3Sopenharmony_cim
1021653a5a1b3Sopenharmony_ci\emph default
1021753a5a1b3Sopenharmony_ciirror 
1021853a5a1b3Sopenharmony_ci\emph on
1021953a5a1b3Sopenharmony_cif
1022053a5a1b3Sopenharmony_ci\emph default
1022153a5a1b3Sopenharmony_ciilter
1022253a5a1b3Sopenharmony_ci\begin_inset Index
1022353a5a1b3Sopenharmony_cistatus collapsed
1022453a5a1b3Sopenharmony_ci
1022553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1022653a5a1b3Sopenharmony_ciquadrature mirror filter
1022753a5a1b3Sopenharmony_ci\end_layout
1022853a5a1b3Sopenharmony_ci
1022953a5a1b3Sopenharmony_ci\end_inset
1023053a5a1b3Sopenharmony_ci
1023153a5a1b3Sopenharmony_ci (QMF) to split the band in two.
1023253a5a1b3Sopenharmony_ci The 16 kHz signal is thus divided into two 8 kHz signals, one representing
1023353a5a1b3Sopenharmony_ci the low band (0-4 kHz), the other the high band (4-8 kHz).
1023453a5a1b3Sopenharmony_ci The low band is encoded with the narrowband mode described in section 
1023553a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
1023653a5a1b3Sopenharmony_ciLatexCommand ref
1023753a5a1b3Sopenharmony_cireference "sec:Speex-narrowband-mode"
1023853a5a1b3Sopenharmony_ci
1023953a5a1b3Sopenharmony_ci\end_inset
1024053a5a1b3Sopenharmony_ci
1024153a5a1b3Sopenharmony_ci in such a way that the resulting 
1024253a5a1b3Sopenharmony_ci\begin_inset Quotes eld
1024353a5a1b3Sopenharmony_ci\end_inset
1024453a5a1b3Sopenharmony_ci
1024553a5a1b3Sopenharmony_ciembedded narrowband bit-stream
1024653a5a1b3Sopenharmony_ci\begin_inset Quotes erd
1024753a5a1b3Sopenharmony_ci\end_inset
1024853a5a1b3Sopenharmony_ci
1024953a5a1b3Sopenharmony_ci can also be decoded with the narrowband decoder.
1025053a5a1b3Sopenharmony_ci Since the low band encoding has already been described, only the high band
1025153a5a1b3Sopenharmony_ci encoding is described in this section.
1025253a5a1b3Sopenharmony_ci\end_layout
1025353a5a1b3Sopenharmony_ci
1025453a5a1b3Sopenharmony_ci\begin_layout Section
1025553a5a1b3Sopenharmony_ciLinear Prediction
1025653a5a1b3Sopenharmony_ci\end_layout
1025753a5a1b3Sopenharmony_ci
1025853a5a1b3Sopenharmony_ci\begin_layout Standard
1025953a5a1b3Sopenharmony_ciThe linear prediction part used for the high-band is very similar to what
1026053a5a1b3Sopenharmony_ci is done for narrowband.
1026153a5a1b3Sopenharmony_ci The only difference is that we use only 12 bits to encode the high-band
1026253a5a1b3Sopenharmony_ci LSP's using a multi-stage vector quantizer (MSVQ).
1026353a5a1b3Sopenharmony_ci The first level quantizes the 10 coefficients with 6 bits and the error
1026453a5a1b3Sopenharmony_ci is then quantized using 6 bits, too.
1026553a5a1b3Sopenharmony_ci\end_layout
1026653a5a1b3Sopenharmony_ci
1026753a5a1b3Sopenharmony_ci\begin_layout Section
1026853a5a1b3Sopenharmony_ciPitch Prediction
1026953a5a1b3Sopenharmony_ci\end_layout
1027053a5a1b3Sopenharmony_ci
1027153a5a1b3Sopenharmony_ci\begin_layout Standard
1027253a5a1b3Sopenharmony_ciThat part is easy: there's no pitch prediction for the high-band.
1027353a5a1b3Sopenharmony_ci There are two reasons for that.
1027453a5a1b3Sopenharmony_ci First, there is usually little harmonic structure in this band (above 4
1027553a5a1b3Sopenharmony_ci kHz).
1027653a5a1b3Sopenharmony_ci Second, it would be very hard to implement since the QMF folds the 4-8
1027753a5a1b3Sopenharmony_ci kHz band into 4-0 kHz (reversing the frequency axis), which means that
1027853a5a1b3Sopenharmony_ci the location of the harmonics is no longer at multiples of the fundamental
1027953a5a1b3Sopenharmony_ci (pitch).
1028053a5a1b3Sopenharmony_ci\end_layout
1028153a5a1b3Sopenharmony_ci
1028253a5a1b3Sopenharmony_ci\begin_layout Section
1028353a5a1b3Sopenharmony_ciExcitation Quantization
1028453a5a1b3Sopenharmony_ci\end_layout
1028553a5a1b3Sopenharmony_ci
1028653a5a1b3Sopenharmony_ci\begin_layout Standard
1028753a5a1b3Sopenharmony_ciThe high-band excitation is coded in the same way as for narrowband.
1028853a5a1b3Sopenharmony_ci 
1028953a5a1b3Sopenharmony_ci\end_layout
1029053a5a1b3Sopenharmony_ci
1029153a5a1b3Sopenharmony_ci\begin_layout Section
1029253a5a1b3Sopenharmony_ciBit allocation
1029353a5a1b3Sopenharmony_ci\end_layout
1029453a5a1b3Sopenharmony_ci
1029553a5a1b3Sopenharmony_ci\begin_layout Standard
1029653a5a1b3Sopenharmony_ciFor the wideband mode, the entire narrowband frame is packed before the
1029753a5a1b3Sopenharmony_ci high-band is encoded.
1029853a5a1b3Sopenharmony_ci The narrowband part of the bit-stream is as defined in table 
1029953a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
1030053a5a1b3Sopenharmony_ciLatexCommand ref
1030153a5a1b3Sopenharmony_cireference "cap:bits-narrowband"
1030253a5a1b3Sopenharmony_ci
1030353a5a1b3Sopenharmony_ci\end_inset
1030453a5a1b3Sopenharmony_ci
1030553a5a1b3Sopenharmony_ci.
1030653a5a1b3Sopenharmony_ci The high-band follows, as described in table 
1030753a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
1030853a5a1b3Sopenharmony_ciLatexCommand ref
1030953a5a1b3Sopenharmony_cireference "cap:bits-wideband"
1031053a5a1b3Sopenharmony_ci
1031153a5a1b3Sopenharmony_ci\end_inset
1031253a5a1b3Sopenharmony_ci
1031353a5a1b3Sopenharmony_ci.
1031453a5a1b3Sopenharmony_ci For wideband, the mode ID is the same as the Speex quality setting and
1031553a5a1b3Sopenharmony_ci is defined in table 
1031653a5a1b3Sopenharmony_ci\begin_inset CommandInset ref
1031753a5a1b3Sopenharmony_ciLatexCommand ref
1031853a5a1b3Sopenharmony_cireference "tab:wideband-quality"
1031953a5a1b3Sopenharmony_ci
1032053a5a1b3Sopenharmony_ci\end_inset
1032153a5a1b3Sopenharmony_ci
1032253a5a1b3Sopenharmony_ci.
1032353a5a1b3Sopenharmony_ci This also means that a wideband frame may be correctly decoded by a narrowband
1032453a5a1b3Sopenharmony_ci decoder with the only caveat that if more than one frame is packed in the
1032553a5a1b3Sopenharmony_ci same packet, the decoder will need to skip the high-band parts in order
1032653a5a1b3Sopenharmony_ci to sync with the bit-stream.
1032753a5a1b3Sopenharmony_ci\end_layout
1032853a5a1b3Sopenharmony_ci
1032953a5a1b3Sopenharmony_ci\begin_layout Standard
1033053a5a1b3Sopenharmony_ci\begin_inset Float table
1033153a5a1b3Sopenharmony_ciplacement h
1033253a5a1b3Sopenharmony_ciwide true
1033353a5a1b3Sopenharmony_cisideways false
1033453a5a1b3Sopenharmony_cistatus open
1033553a5a1b3Sopenharmony_ci
1033653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1033753a5a1b3Sopenharmony_ci\begin_inset ERT
1033853a5a1b3Sopenharmony_cistatus collapsed
1033953a5a1b3Sopenharmony_ci
1034053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1034153a5a1b3Sopenharmony_ci
1034253a5a1b3Sopenharmony_ci
1034353a5a1b3Sopenharmony_ci\backslash
1034453a5a1b3Sopenharmony_cibegin{center}
1034553a5a1b3Sopenharmony_ci\end_layout
1034653a5a1b3Sopenharmony_ci
1034753a5a1b3Sopenharmony_ci\end_inset
1034853a5a1b3Sopenharmony_ci
1034953a5a1b3Sopenharmony_ci
1035053a5a1b3Sopenharmony_ci\begin_inset Tabular
1035153a5a1b3Sopenharmony_ci<lyxtabular version="3" rows="7" columns="7">
1035253a5a1b3Sopenharmony_ci<features>
1035353a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1035453a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1035553a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1035653a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1035753a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1035853a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1035953a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1036053a5a1b3Sopenharmony_ci<row>
1036153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1036253a5a1b3Sopenharmony_ci\begin_inset Text
1036353a5a1b3Sopenharmony_ci
1036453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1036553a5a1b3Sopenharmony_ciParameter
1036653a5a1b3Sopenharmony_ci\end_layout
1036753a5a1b3Sopenharmony_ci
1036853a5a1b3Sopenharmony_ci\end_inset
1036953a5a1b3Sopenharmony_ci</cell>
1037053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1037153a5a1b3Sopenharmony_ci\begin_inset Text
1037253a5a1b3Sopenharmony_ci
1037353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1037453a5a1b3Sopenharmony_ciUpdate rate
1037553a5a1b3Sopenharmony_ci\end_layout
1037653a5a1b3Sopenharmony_ci
1037753a5a1b3Sopenharmony_ci\end_inset
1037853a5a1b3Sopenharmony_ci</cell>
1037953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1038053a5a1b3Sopenharmony_ci\begin_inset Text
1038153a5a1b3Sopenharmony_ci
1038253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1038353a5a1b3Sopenharmony_ci0
1038453a5a1b3Sopenharmony_ci\end_layout
1038553a5a1b3Sopenharmony_ci
1038653a5a1b3Sopenharmony_ci\end_inset
1038753a5a1b3Sopenharmony_ci</cell>
1038853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1038953a5a1b3Sopenharmony_ci\begin_inset Text
1039053a5a1b3Sopenharmony_ci
1039153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1039253a5a1b3Sopenharmony_ci1
1039353a5a1b3Sopenharmony_ci\end_layout
1039453a5a1b3Sopenharmony_ci
1039553a5a1b3Sopenharmony_ci\end_inset
1039653a5a1b3Sopenharmony_ci</cell>
1039753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1039853a5a1b3Sopenharmony_ci\begin_inset Text
1039953a5a1b3Sopenharmony_ci
1040053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1040153a5a1b3Sopenharmony_ci2
1040253a5a1b3Sopenharmony_ci\end_layout
1040353a5a1b3Sopenharmony_ci
1040453a5a1b3Sopenharmony_ci\end_inset
1040553a5a1b3Sopenharmony_ci</cell>
1040653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1040753a5a1b3Sopenharmony_ci\begin_inset Text
1040853a5a1b3Sopenharmony_ci
1040953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1041053a5a1b3Sopenharmony_ci3
1041153a5a1b3Sopenharmony_ci\end_layout
1041253a5a1b3Sopenharmony_ci
1041353a5a1b3Sopenharmony_ci\end_inset
1041453a5a1b3Sopenharmony_ci</cell>
1041553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1041653a5a1b3Sopenharmony_ci\begin_inset Text
1041753a5a1b3Sopenharmony_ci
1041853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1041953a5a1b3Sopenharmony_ci4
1042053a5a1b3Sopenharmony_ci\end_layout
1042153a5a1b3Sopenharmony_ci
1042253a5a1b3Sopenharmony_ci\end_inset
1042353a5a1b3Sopenharmony_ci</cell>
1042453a5a1b3Sopenharmony_ci</row>
1042553a5a1b3Sopenharmony_ci<row>
1042653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1042753a5a1b3Sopenharmony_ci\begin_inset Text
1042853a5a1b3Sopenharmony_ci
1042953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1043053a5a1b3Sopenharmony_ciWideband bit
1043153a5a1b3Sopenharmony_ci\end_layout
1043253a5a1b3Sopenharmony_ci
1043353a5a1b3Sopenharmony_ci\end_inset
1043453a5a1b3Sopenharmony_ci</cell>
1043553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1043653a5a1b3Sopenharmony_ci\begin_inset Text
1043753a5a1b3Sopenharmony_ci
1043853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1043953a5a1b3Sopenharmony_ciframe
1044053a5a1b3Sopenharmony_ci\end_layout
1044153a5a1b3Sopenharmony_ci
1044253a5a1b3Sopenharmony_ci\end_inset
1044353a5a1b3Sopenharmony_ci</cell>
1044453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1044553a5a1b3Sopenharmony_ci\begin_inset Text
1044653a5a1b3Sopenharmony_ci
1044753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1044853a5a1b3Sopenharmony_ci1
1044953a5a1b3Sopenharmony_ci\end_layout
1045053a5a1b3Sopenharmony_ci
1045153a5a1b3Sopenharmony_ci\end_inset
1045253a5a1b3Sopenharmony_ci</cell>
1045353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1045453a5a1b3Sopenharmony_ci\begin_inset Text
1045553a5a1b3Sopenharmony_ci
1045653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1045753a5a1b3Sopenharmony_ci1
1045853a5a1b3Sopenharmony_ci\end_layout
1045953a5a1b3Sopenharmony_ci
1046053a5a1b3Sopenharmony_ci\end_inset
1046153a5a1b3Sopenharmony_ci</cell>
1046253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1046353a5a1b3Sopenharmony_ci\begin_inset Text
1046453a5a1b3Sopenharmony_ci
1046553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1046653a5a1b3Sopenharmony_ci1
1046753a5a1b3Sopenharmony_ci\end_layout
1046853a5a1b3Sopenharmony_ci
1046953a5a1b3Sopenharmony_ci\end_inset
1047053a5a1b3Sopenharmony_ci</cell>
1047153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1047253a5a1b3Sopenharmony_ci\begin_inset Text
1047353a5a1b3Sopenharmony_ci
1047453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1047553a5a1b3Sopenharmony_ci1
1047653a5a1b3Sopenharmony_ci\end_layout
1047753a5a1b3Sopenharmony_ci
1047853a5a1b3Sopenharmony_ci\end_inset
1047953a5a1b3Sopenharmony_ci</cell>
1048053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1048153a5a1b3Sopenharmony_ci\begin_inset Text
1048253a5a1b3Sopenharmony_ci
1048353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1048453a5a1b3Sopenharmony_ci1
1048553a5a1b3Sopenharmony_ci\end_layout
1048653a5a1b3Sopenharmony_ci
1048753a5a1b3Sopenharmony_ci\end_inset
1048853a5a1b3Sopenharmony_ci</cell>
1048953a5a1b3Sopenharmony_ci</row>
1049053a5a1b3Sopenharmony_ci<row>
1049153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1049253a5a1b3Sopenharmony_ci\begin_inset Text
1049353a5a1b3Sopenharmony_ci
1049453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1049553a5a1b3Sopenharmony_ciMode ID
1049653a5a1b3Sopenharmony_ci\end_layout
1049753a5a1b3Sopenharmony_ci
1049853a5a1b3Sopenharmony_ci\end_inset
1049953a5a1b3Sopenharmony_ci</cell>
1050053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1050153a5a1b3Sopenharmony_ci\begin_inset Text
1050253a5a1b3Sopenharmony_ci
1050353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1050453a5a1b3Sopenharmony_ciframe
1050553a5a1b3Sopenharmony_ci\end_layout
1050653a5a1b3Sopenharmony_ci
1050753a5a1b3Sopenharmony_ci\end_inset
1050853a5a1b3Sopenharmony_ci</cell>
1050953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1051053a5a1b3Sopenharmony_ci\begin_inset Text
1051153a5a1b3Sopenharmony_ci
1051253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1051353a5a1b3Sopenharmony_ci3
1051453a5a1b3Sopenharmony_ci\end_layout
1051553a5a1b3Sopenharmony_ci
1051653a5a1b3Sopenharmony_ci\end_inset
1051753a5a1b3Sopenharmony_ci</cell>
1051853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1051953a5a1b3Sopenharmony_ci\begin_inset Text
1052053a5a1b3Sopenharmony_ci
1052153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1052253a5a1b3Sopenharmony_ci3
1052353a5a1b3Sopenharmony_ci\end_layout
1052453a5a1b3Sopenharmony_ci
1052553a5a1b3Sopenharmony_ci\end_inset
1052653a5a1b3Sopenharmony_ci</cell>
1052753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1052853a5a1b3Sopenharmony_ci\begin_inset Text
1052953a5a1b3Sopenharmony_ci
1053053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1053153a5a1b3Sopenharmony_ci3
1053253a5a1b3Sopenharmony_ci\end_layout
1053353a5a1b3Sopenharmony_ci
1053453a5a1b3Sopenharmony_ci\end_inset
1053553a5a1b3Sopenharmony_ci</cell>
1053653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1053753a5a1b3Sopenharmony_ci\begin_inset Text
1053853a5a1b3Sopenharmony_ci
1053953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1054053a5a1b3Sopenharmony_ci3
1054153a5a1b3Sopenharmony_ci\end_layout
1054253a5a1b3Sopenharmony_ci
1054353a5a1b3Sopenharmony_ci\end_inset
1054453a5a1b3Sopenharmony_ci</cell>
1054553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1054653a5a1b3Sopenharmony_ci\begin_inset Text
1054753a5a1b3Sopenharmony_ci
1054853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1054953a5a1b3Sopenharmony_ci3
1055053a5a1b3Sopenharmony_ci\end_layout
1055153a5a1b3Sopenharmony_ci
1055253a5a1b3Sopenharmony_ci\end_inset
1055353a5a1b3Sopenharmony_ci</cell>
1055453a5a1b3Sopenharmony_ci</row>
1055553a5a1b3Sopenharmony_ci<row>
1055653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1055753a5a1b3Sopenharmony_ci\begin_inset Text
1055853a5a1b3Sopenharmony_ci
1055953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1056053a5a1b3Sopenharmony_ciLSP
1056153a5a1b3Sopenharmony_ci\end_layout
1056253a5a1b3Sopenharmony_ci
1056353a5a1b3Sopenharmony_ci\end_inset
1056453a5a1b3Sopenharmony_ci</cell>
1056553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1056653a5a1b3Sopenharmony_ci\begin_inset Text
1056753a5a1b3Sopenharmony_ci
1056853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1056953a5a1b3Sopenharmony_ciframe
1057053a5a1b3Sopenharmony_ci\end_layout
1057153a5a1b3Sopenharmony_ci
1057253a5a1b3Sopenharmony_ci\end_inset
1057353a5a1b3Sopenharmony_ci</cell>
1057453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1057553a5a1b3Sopenharmony_ci\begin_inset Text
1057653a5a1b3Sopenharmony_ci
1057753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1057853a5a1b3Sopenharmony_ci0
1057953a5a1b3Sopenharmony_ci\end_layout
1058053a5a1b3Sopenharmony_ci
1058153a5a1b3Sopenharmony_ci\end_inset
1058253a5a1b3Sopenharmony_ci</cell>
1058353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1058453a5a1b3Sopenharmony_ci\begin_inset Text
1058553a5a1b3Sopenharmony_ci
1058653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1058753a5a1b3Sopenharmony_ci12
1058853a5a1b3Sopenharmony_ci\end_layout
1058953a5a1b3Sopenharmony_ci
1059053a5a1b3Sopenharmony_ci\end_inset
1059153a5a1b3Sopenharmony_ci</cell>
1059253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1059353a5a1b3Sopenharmony_ci\begin_inset Text
1059453a5a1b3Sopenharmony_ci
1059553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1059653a5a1b3Sopenharmony_ci12
1059753a5a1b3Sopenharmony_ci\end_layout
1059853a5a1b3Sopenharmony_ci
1059953a5a1b3Sopenharmony_ci\end_inset
1060053a5a1b3Sopenharmony_ci</cell>
1060153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1060253a5a1b3Sopenharmony_ci\begin_inset Text
1060353a5a1b3Sopenharmony_ci
1060453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1060553a5a1b3Sopenharmony_ci12
1060653a5a1b3Sopenharmony_ci\end_layout
1060753a5a1b3Sopenharmony_ci
1060853a5a1b3Sopenharmony_ci\end_inset
1060953a5a1b3Sopenharmony_ci</cell>
1061053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1061153a5a1b3Sopenharmony_ci\begin_inset Text
1061253a5a1b3Sopenharmony_ci
1061353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1061453a5a1b3Sopenharmony_ci12
1061553a5a1b3Sopenharmony_ci\end_layout
1061653a5a1b3Sopenharmony_ci
1061753a5a1b3Sopenharmony_ci\end_inset
1061853a5a1b3Sopenharmony_ci</cell>
1061953a5a1b3Sopenharmony_ci</row>
1062053a5a1b3Sopenharmony_ci<row>
1062153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1062253a5a1b3Sopenharmony_ci\begin_inset Text
1062353a5a1b3Sopenharmony_ci
1062453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1062553a5a1b3Sopenharmony_ciExcitation gain
1062653a5a1b3Sopenharmony_ci\end_layout
1062753a5a1b3Sopenharmony_ci
1062853a5a1b3Sopenharmony_ci\end_inset
1062953a5a1b3Sopenharmony_ci</cell>
1063053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1063153a5a1b3Sopenharmony_ci\begin_inset Text
1063253a5a1b3Sopenharmony_ci
1063353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1063453a5a1b3Sopenharmony_cisub-frame
1063553a5a1b3Sopenharmony_ci\end_layout
1063653a5a1b3Sopenharmony_ci
1063753a5a1b3Sopenharmony_ci\end_inset
1063853a5a1b3Sopenharmony_ci</cell>
1063953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1064053a5a1b3Sopenharmony_ci\begin_inset Text
1064153a5a1b3Sopenharmony_ci
1064253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1064353a5a1b3Sopenharmony_ci0
1064453a5a1b3Sopenharmony_ci\end_layout
1064553a5a1b3Sopenharmony_ci
1064653a5a1b3Sopenharmony_ci\end_inset
1064753a5a1b3Sopenharmony_ci</cell>
1064853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1064953a5a1b3Sopenharmony_ci\begin_inset Text
1065053a5a1b3Sopenharmony_ci
1065153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1065253a5a1b3Sopenharmony_ci5
1065353a5a1b3Sopenharmony_ci\end_layout
1065453a5a1b3Sopenharmony_ci
1065553a5a1b3Sopenharmony_ci\end_inset
1065653a5a1b3Sopenharmony_ci</cell>
1065753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1065853a5a1b3Sopenharmony_ci\begin_inset Text
1065953a5a1b3Sopenharmony_ci
1066053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1066153a5a1b3Sopenharmony_ci4
1066253a5a1b3Sopenharmony_ci\end_layout
1066353a5a1b3Sopenharmony_ci
1066453a5a1b3Sopenharmony_ci\end_inset
1066553a5a1b3Sopenharmony_ci</cell>
1066653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1066753a5a1b3Sopenharmony_ci\begin_inset Text
1066853a5a1b3Sopenharmony_ci
1066953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1067053a5a1b3Sopenharmony_ci4
1067153a5a1b3Sopenharmony_ci\end_layout
1067253a5a1b3Sopenharmony_ci
1067353a5a1b3Sopenharmony_ci\end_inset
1067453a5a1b3Sopenharmony_ci</cell>
1067553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1067653a5a1b3Sopenharmony_ci\begin_inset Text
1067753a5a1b3Sopenharmony_ci
1067853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1067953a5a1b3Sopenharmony_ci4
1068053a5a1b3Sopenharmony_ci\end_layout
1068153a5a1b3Sopenharmony_ci
1068253a5a1b3Sopenharmony_ci\end_inset
1068353a5a1b3Sopenharmony_ci</cell>
1068453a5a1b3Sopenharmony_ci</row>
1068553a5a1b3Sopenharmony_ci<row>
1068653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1068753a5a1b3Sopenharmony_ci\begin_inset Text
1068853a5a1b3Sopenharmony_ci
1068953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1069053a5a1b3Sopenharmony_ciExcitation VQ
1069153a5a1b3Sopenharmony_ci\end_layout
1069253a5a1b3Sopenharmony_ci
1069353a5a1b3Sopenharmony_ci\end_inset
1069453a5a1b3Sopenharmony_ci</cell>
1069553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1069653a5a1b3Sopenharmony_ci\begin_inset Text
1069753a5a1b3Sopenharmony_ci
1069853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1069953a5a1b3Sopenharmony_cisub-frame
1070053a5a1b3Sopenharmony_ci\end_layout
1070153a5a1b3Sopenharmony_ci
1070253a5a1b3Sopenharmony_ci\end_inset
1070353a5a1b3Sopenharmony_ci</cell>
1070453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1070553a5a1b3Sopenharmony_ci\begin_inset Text
1070653a5a1b3Sopenharmony_ci
1070753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1070853a5a1b3Sopenharmony_ci0
1070953a5a1b3Sopenharmony_ci\end_layout
1071053a5a1b3Sopenharmony_ci
1071153a5a1b3Sopenharmony_ci\end_inset
1071253a5a1b3Sopenharmony_ci</cell>
1071353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1071453a5a1b3Sopenharmony_ci\begin_inset Text
1071553a5a1b3Sopenharmony_ci
1071653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1071753a5a1b3Sopenharmony_ci0
1071853a5a1b3Sopenharmony_ci\end_layout
1071953a5a1b3Sopenharmony_ci
1072053a5a1b3Sopenharmony_ci\end_inset
1072153a5a1b3Sopenharmony_ci</cell>
1072253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1072353a5a1b3Sopenharmony_ci\begin_inset Text
1072453a5a1b3Sopenharmony_ci
1072553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1072653a5a1b3Sopenharmony_ci20
1072753a5a1b3Sopenharmony_ci\end_layout
1072853a5a1b3Sopenharmony_ci
1072953a5a1b3Sopenharmony_ci\end_inset
1073053a5a1b3Sopenharmony_ci</cell>
1073153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1073253a5a1b3Sopenharmony_ci\begin_inset Text
1073353a5a1b3Sopenharmony_ci
1073453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1073553a5a1b3Sopenharmony_ci40
1073653a5a1b3Sopenharmony_ci\end_layout
1073753a5a1b3Sopenharmony_ci
1073853a5a1b3Sopenharmony_ci\end_inset
1073953a5a1b3Sopenharmony_ci</cell>
1074053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1074153a5a1b3Sopenharmony_ci\begin_inset Text
1074253a5a1b3Sopenharmony_ci
1074353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1074453a5a1b3Sopenharmony_ci80
1074553a5a1b3Sopenharmony_ci\end_layout
1074653a5a1b3Sopenharmony_ci
1074753a5a1b3Sopenharmony_ci\end_inset
1074853a5a1b3Sopenharmony_ci</cell>
1074953a5a1b3Sopenharmony_ci</row>
1075053a5a1b3Sopenharmony_ci<row>
1075153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1075253a5a1b3Sopenharmony_ci\begin_inset Text
1075353a5a1b3Sopenharmony_ci
1075453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1075553a5a1b3Sopenharmony_ciTotal
1075653a5a1b3Sopenharmony_ci\end_layout
1075753a5a1b3Sopenharmony_ci
1075853a5a1b3Sopenharmony_ci\end_inset
1075953a5a1b3Sopenharmony_ci</cell>
1076053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1076153a5a1b3Sopenharmony_ci\begin_inset Text
1076253a5a1b3Sopenharmony_ci
1076353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1076453a5a1b3Sopenharmony_ciframe
1076553a5a1b3Sopenharmony_ci\end_layout
1076653a5a1b3Sopenharmony_ci
1076753a5a1b3Sopenharmony_ci\end_inset
1076853a5a1b3Sopenharmony_ci</cell>
1076953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1077053a5a1b3Sopenharmony_ci\begin_inset Text
1077153a5a1b3Sopenharmony_ci
1077253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1077353a5a1b3Sopenharmony_ci4
1077453a5a1b3Sopenharmony_ci\end_layout
1077553a5a1b3Sopenharmony_ci
1077653a5a1b3Sopenharmony_ci\end_inset
1077753a5a1b3Sopenharmony_ci</cell>
1077853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1077953a5a1b3Sopenharmony_ci\begin_inset Text
1078053a5a1b3Sopenharmony_ci
1078153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1078253a5a1b3Sopenharmony_ci36
1078353a5a1b3Sopenharmony_ci\end_layout
1078453a5a1b3Sopenharmony_ci
1078553a5a1b3Sopenharmony_ci\end_inset
1078653a5a1b3Sopenharmony_ci</cell>
1078753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1078853a5a1b3Sopenharmony_ci\begin_inset Text
1078953a5a1b3Sopenharmony_ci
1079053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1079153a5a1b3Sopenharmony_ci112
1079253a5a1b3Sopenharmony_ci\end_layout
1079353a5a1b3Sopenharmony_ci
1079453a5a1b3Sopenharmony_ci\end_inset
1079553a5a1b3Sopenharmony_ci</cell>
1079653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1079753a5a1b3Sopenharmony_ci\begin_inset Text
1079853a5a1b3Sopenharmony_ci
1079953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1080053a5a1b3Sopenharmony_ci192
1080153a5a1b3Sopenharmony_ci\end_layout
1080253a5a1b3Sopenharmony_ci
1080353a5a1b3Sopenharmony_ci\end_inset
1080453a5a1b3Sopenharmony_ci</cell>
1080553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1080653a5a1b3Sopenharmony_ci\begin_inset Text
1080753a5a1b3Sopenharmony_ci
1080853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1080953a5a1b3Sopenharmony_ci352
1081053a5a1b3Sopenharmony_ci\end_layout
1081153a5a1b3Sopenharmony_ci
1081253a5a1b3Sopenharmony_ci\end_inset
1081353a5a1b3Sopenharmony_ci</cell>
1081453a5a1b3Sopenharmony_ci</row>
1081553a5a1b3Sopenharmony_ci</lyxtabular>
1081653a5a1b3Sopenharmony_ci
1081753a5a1b3Sopenharmony_ci\end_inset
1081853a5a1b3Sopenharmony_ci
1081953a5a1b3Sopenharmony_ci
1082053a5a1b3Sopenharmony_ci\begin_inset ERT
1082153a5a1b3Sopenharmony_cistatus collapsed
1082253a5a1b3Sopenharmony_ci
1082353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1082453a5a1b3Sopenharmony_ci
1082553a5a1b3Sopenharmony_ci
1082653a5a1b3Sopenharmony_ci\backslash
1082753a5a1b3Sopenharmony_ciend{center}
1082853a5a1b3Sopenharmony_ci\end_layout
1082953a5a1b3Sopenharmony_ci
1083053a5a1b3Sopenharmony_ci\end_inset
1083153a5a1b3Sopenharmony_ci
1083253a5a1b3Sopenharmony_ci
1083353a5a1b3Sopenharmony_ci\end_layout
1083453a5a1b3Sopenharmony_ci
1083553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1083653a5a1b3Sopenharmony_ci\begin_inset Caption
1083753a5a1b3Sopenharmony_ci
1083853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1083953a5a1b3Sopenharmony_ciBit allocation for high-band in wideband mode
1084053a5a1b3Sopenharmony_ci\begin_inset CommandInset label
1084153a5a1b3Sopenharmony_ciLatexCommand label
1084253a5a1b3Sopenharmony_ciname "cap:bits-wideband"
1084353a5a1b3Sopenharmony_ci
1084453a5a1b3Sopenharmony_ci\end_inset
1084553a5a1b3Sopenharmony_ci
1084653a5a1b3Sopenharmony_ci
1084753a5a1b3Sopenharmony_ci\end_layout
1084853a5a1b3Sopenharmony_ci
1084953a5a1b3Sopenharmony_ci\end_inset
1085053a5a1b3Sopenharmony_ci
1085153a5a1b3Sopenharmony_ci
1085253a5a1b3Sopenharmony_ci\end_layout
1085353a5a1b3Sopenharmony_ci
1085453a5a1b3Sopenharmony_ci\end_inset
1085553a5a1b3Sopenharmony_ci
1085653a5a1b3Sopenharmony_ci
1085753a5a1b3Sopenharmony_ci\end_layout
1085853a5a1b3Sopenharmony_ci
1085953a5a1b3Sopenharmony_ci\begin_layout Standard
1086053a5a1b3Sopenharmony_ci\begin_inset Float table
1086153a5a1b3Sopenharmony_ciplacement h
1086253a5a1b3Sopenharmony_ciwide true
1086353a5a1b3Sopenharmony_cisideways false
1086453a5a1b3Sopenharmony_cistatus open
1086553a5a1b3Sopenharmony_ci
1086653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1086753a5a1b3Sopenharmony_ci\begin_inset ERT
1086853a5a1b3Sopenharmony_cistatus collapsed
1086953a5a1b3Sopenharmony_ci
1087053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1087153a5a1b3Sopenharmony_ci
1087253a5a1b3Sopenharmony_ci
1087353a5a1b3Sopenharmony_ci\backslash
1087453a5a1b3Sopenharmony_cibegin{center}
1087553a5a1b3Sopenharmony_ci\end_layout
1087653a5a1b3Sopenharmony_ci
1087753a5a1b3Sopenharmony_ci\end_inset
1087853a5a1b3Sopenharmony_ci
1087953a5a1b3Sopenharmony_ci
1088053a5a1b3Sopenharmony_ci\begin_inset Tabular
1088153a5a1b3Sopenharmony_ci<lyxtabular version="3" rows="12" columns="3">
1088253a5a1b3Sopenharmony_ci<features>
1088353a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1088453a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1088553a5a1b3Sopenharmony_ci<column alignment="center" valignment="top" width="0pt">
1088653a5a1b3Sopenharmony_ci<row>
1088753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1088853a5a1b3Sopenharmony_ci\begin_inset Text
1088953a5a1b3Sopenharmony_ci
1089053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1089153a5a1b3Sopenharmony_ciMode/Quality
1089253a5a1b3Sopenharmony_ci\end_layout
1089353a5a1b3Sopenharmony_ci
1089453a5a1b3Sopenharmony_ci\end_inset
1089553a5a1b3Sopenharmony_ci</cell>
1089653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1089753a5a1b3Sopenharmony_ci\begin_inset Text
1089853a5a1b3Sopenharmony_ci
1089953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1090053a5a1b3Sopenharmony_ciBit-rate
1090153a5a1b3Sopenharmony_ci\begin_inset Index
1090253a5a1b3Sopenharmony_cistatus collapsed
1090353a5a1b3Sopenharmony_ci
1090453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1090553a5a1b3Sopenharmony_cibit-rate
1090653a5a1b3Sopenharmony_ci\end_layout
1090753a5a1b3Sopenharmony_ci
1090853a5a1b3Sopenharmony_ci\end_inset
1090953a5a1b3Sopenharmony_ci
1091053a5a1b3Sopenharmony_ci (bps)
1091153a5a1b3Sopenharmony_ci\end_layout
1091253a5a1b3Sopenharmony_ci
1091353a5a1b3Sopenharmony_ci\end_inset
1091453a5a1b3Sopenharmony_ci</cell>
1091553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1091653a5a1b3Sopenharmony_ci\begin_inset Text
1091753a5a1b3Sopenharmony_ci
1091853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1091953a5a1b3Sopenharmony_ciQuality/description
1092053a5a1b3Sopenharmony_ci\end_layout
1092153a5a1b3Sopenharmony_ci
1092253a5a1b3Sopenharmony_ci\end_inset
1092353a5a1b3Sopenharmony_ci</cell>
1092453a5a1b3Sopenharmony_ci</row>
1092553a5a1b3Sopenharmony_ci<row>
1092653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1092753a5a1b3Sopenharmony_ci\begin_inset Text
1092853a5a1b3Sopenharmony_ci
1092953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1093053a5a1b3Sopenharmony_ci0
1093153a5a1b3Sopenharmony_ci\end_layout
1093253a5a1b3Sopenharmony_ci
1093353a5a1b3Sopenharmony_ci\end_inset
1093453a5a1b3Sopenharmony_ci</cell>
1093553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1093653a5a1b3Sopenharmony_ci\begin_inset Text
1093753a5a1b3Sopenharmony_ci
1093853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1093953a5a1b3Sopenharmony_ci3,950
1094053a5a1b3Sopenharmony_ci\end_layout
1094153a5a1b3Sopenharmony_ci
1094253a5a1b3Sopenharmony_ci\end_inset
1094353a5a1b3Sopenharmony_ci</cell>
1094453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1094553a5a1b3Sopenharmony_ci\begin_inset Text
1094653a5a1b3Sopenharmony_ci
1094753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1094853a5a1b3Sopenharmony_ciBarely intelligible (mostly for comfort noise)
1094953a5a1b3Sopenharmony_ci\end_layout
1095053a5a1b3Sopenharmony_ci
1095153a5a1b3Sopenharmony_ci\end_inset
1095253a5a1b3Sopenharmony_ci</cell>
1095353a5a1b3Sopenharmony_ci</row>
1095453a5a1b3Sopenharmony_ci<row>
1095553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1095653a5a1b3Sopenharmony_ci\begin_inset Text
1095753a5a1b3Sopenharmony_ci
1095853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1095953a5a1b3Sopenharmony_ci1
1096053a5a1b3Sopenharmony_ci\end_layout
1096153a5a1b3Sopenharmony_ci
1096253a5a1b3Sopenharmony_ci\end_inset
1096353a5a1b3Sopenharmony_ci</cell>
1096453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1096553a5a1b3Sopenharmony_ci\begin_inset Text
1096653a5a1b3Sopenharmony_ci
1096753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1096853a5a1b3Sopenharmony_ci5,750
1096953a5a1b3Sopenharmony_ci\end_layout
1097053a5a1b3Sopenharmony_ci
1097153a5a1b3Sopenharmony_ci\end_inset
1097253a5a1b3Sopenharmony_ci</cell>
1097353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1097453a5a1b3Sopenharmony_ci\begin_inset Text
1097553a5a1b3Sopenharmony_ci
1097653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1097753a5a1b3Sopenharmony_ciVery noticeable artifacts/noise, poor intelligibility
1097853a5a1b3Sopenharmony_ci\end_layout
1097953a5a1b3Sopenharmony_ci
1098053a5a1b3Sopenharmony_ci\end_inset
1098153a5a1b3Sopenharmony_ci</cell>
1098253a5a1b3Sopenharmony_ci</row>
1098353a5a1b3Sopenharmony_ci<row>
1098453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1098553a5a1b3Sopenharmony_ci\begin_inset Text
1098653a5a1b3Sopenharmony_ci
1098753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1098853a5a1b3Sopenharmony_ci2
1098953a5a1b3Sopenharmony_ci\end_layout
1099053a5a1b3Sopenharmony_ci
1099153a5a1b3Sopenharmony_ci\end_inset
1099253a5a1b3Sopenharmony_ci</cell>
1099353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1099453a5a1b3Sopenharmony_ci\begin_inset Text
1099553a5a1b3Sopenharmony_ci
1099653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1099753a5a1b3Sopenharmony_ci7,750
1099853a5a1b3Sopenharmony_ci\end_layout
1099953a5a1b3Sopenharmony_ci
1100053a5a1b3Sopenharmony_ci\end_inset
1100153a5a1b3Sopenharmony_ci</cell>
1100253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1100353a5a1b3Sopenharmony_ci\begin_inset Text
1100453a5a1b3Sopenharmony_ci
1100553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1100653a5a1b3Sopenharmony_ciVery noticeable artifacts/noise, good intelligibility
1100753a5a1b3Sopenharmony_ci\end_layout
1100853a5a1b3Sopenharmony_ci
1100953a5a1b3Sopenharmony_ci\end_inset
1101053a5a1b3Sopenharmony_ci</cell>
1101153a5a1b3Sopenharmony_ci</row>
1101253a5a1b3Sopenharmony_ci<row>
1101353a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1101453a5a1b3Sopenharmony_ci\begin_inset Text
1101553a5a1b3Sopenharmony_ci
1101653a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1101753a5a1b3Sopenharmony_ci3
1101853a5a1b3Sopenharmony_ci\end_layout
1101953a5a1b3Sopenharmony_ci
1102053a5a1b3Sopenharmony_ci\end_inset
1102153a5a1b3Sopenharmony_ci</cell>
1102253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1102353a5a1b3Sopenharmony_ci\begin_inset Text
1102453a5a1b3Sopenharmony_ci
1102553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1102653a5a1b3Sopenharmony_ci9,800
1102753a5a1b3Sopenharmony_ci\end_layout
1102853a5a1b3Sopenharmony_ci
1102953a5a1b3Sopenharmony_ci\end_inset
1103053a5a1b3Sopenharmony_ci</cell>
1103153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1103253a5a1b3Sopenharmony_ci\begin_inset Text
1103353a5a1b3Sopenharmony_ci
1103453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1103553a5a1b3Sopenharmony_ciArtifacts/noise sometimes annoying
1103653a5a1b3Sopenharmony_ci\end_layout
1103753a5a1b3Sopenharmony_ci
1103853a5a1b3Sopenharmony_ci\end_inset
1103953a5a1b3Sopenharmony_ci</cell>
1104053a5a1b3Sopenharmony_ci</row>
1104153a5a1b3Sopenharmony_ci<row>
1104253a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1104353a5a1b3Sopenharmony_ci\begin_inset Text
1104453a5a1b3Sopenharmony_ci
1104553a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1104653a5a1b3Sopenharmony_ci4
1104753a5a1b3Sopenharmony_ci\end_layout
1104853a5a1b3Sopenharmony_ci
1104953a5a1b3Sopenharmony_ci\end_inset
1105053a5a1b3Sopenharmony_ci</cell>
1105153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1105253a5a1b3Sopenharmony_ci\begin_inset Text
1105353a5a1b3Sopenharmony_ci
1105453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1105553a5a1b3Sopenharmony_ci12,800
1105653a5a1b3Sopenharmony_ci\end_layout
1105753a5a1b3Sopenharmony_ci
1105853a5a1b3Sopenharmony_ci\end_inset
1105953a5a1b3Sopenharmony_ci</cell>
1106053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1106153a5a1b3Sopenharmony_ci\begin_inset Text
1106253a5a1b3Sopenharmony_ci
1106353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1106453a5a1b3Sopenharmony_ciArtifacts/noise usually noticeable
1106553a5a1b3Sopenharmony_ci\end_layout
1106653a5a1b3Sopenharmony_ci
1106753a5a1b3Sopenharmony_ci\end_inset
1106853a5a1b3Sopenharmony_ci</cell>
1106953a5a1b3Sopenharmony_ci</row>
1107053a5a1b3Sopenharmony_ci<row>
1107153a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1107253a5a1b3Sopenharmony_ci\begin_inset Text
1107353a5a1b3Sopenharmony_ci
1107453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1107553a5a1b3Sopenharmony_ci5
1107653a5a1b3Sopenharmony_ci\end_layout
1107753a5a1b3Sopenharmony_ci
1107853a5a1b3Sopenharmony_ci\end_inset
1107953a5a1b3Sopenharmony_ci</cell>
1108053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1108153a5a1b3Sopenharmony_ci\begin_inset Text
1108253a5a1b3Sopenharmony_ci
1108353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1108453a5a1b3Sopenharmony_ci16,800
1108553a5a1b3Sopenharmony_ci\end_layout
1108653a5a1b3Sopenharmony_ci
1108753a5a1b3Sopenharmony_ci\end_inset
1108853a5a1b3Sopenharmony_ci</cell>
1108953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1109053a5a1b3Sopenharmony_ci\begin_inset Text
1109153a5a1b3Sopenharmony_ci
1109253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1109353a5a1b3Sopenharmony_ciArtifacts/noise sometimes noticeable
1109453a5a1b3Sopenharmony_ci\end_layout
1109553a5a1b3Sopenharmony_ci
1109653a5a1b3Sopenharmony_ci\end_inset
1109753a5a1b3Sopenharmony_ci</cell>
1109853a5a1b3Sopenharmony_ci</row>
1109953a5a1b3Sopenharmony_ci<row>
1110053a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1110153a5a1b3Sopenharmony_ci\begin_inset Text
1110253a5a1b3Sopenharmony_ci
1110353a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1110453a5a1b3Sopenharmony_ci6
1110553a5a1b3Sopenharmony_ci\end_layout
1110653a5a1b3Sopenharmony_ci
1110753a5a1b3Sopenharmony_ci\end_inset
1110853a5a1b3Sopenharmony_ci</cell>
1110953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1111053a5a1b3Sopenharmony_ci\begin_inset Text
1111153a5a1b3Sopenharmony_ci
1111253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1111353a5a1b3Sopenharmony_ci20,600
1111453a5a1b3Sopenharmony_ci\end_layout
1111553a5a1b3Sopenharmony_ci
1111653a5a1b3Sopenharmony_ci\end_inset
1111753a5a1b3Sopenharmony_ci</cell>
1111853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1111953a5a1b3Sopenharmony_ci\begin_inset Text
1112053a5a1b3Sopenharmony_ci
1112153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1112253a5a1b3Sopenharmony_ciNeed good headphones to tell the difference
1112353a5a1b3Sopenharmony_ci\end_layout
1112453a5a1b3Sopenharmony_ci
1112553a5a1b3Sopenharmony_ci\end_inset
1112653a5a1b3Sopenharmony_ci</cell>
1112753a5a1b3Sopenharmony_ci</row>
1112853a5a1b3Sopenharmony_ci<row>
1112953a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1113053a5a1b3Sopenharmony_ci\begin_inset Text
1113153a5a1b3Sopenharmony_ci
1113253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1113353a5a1b3Sopenharmony_ci7
1113453a5a1b3Sopenharmony_ci\end_layout
1113553a5a1b3Sopenharmony_ci
1113653a5a1b3Sopenharmony_ci\end_inset
1113753a5a1b3Sopenharmony_ci</cell>
1113853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1113953a5a1b3Sopenharmony_ci\begin_inset Text
1114053a5a1b3Sopenharmony_ci
1114153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1114253a5a1b3Sopenharmony_ci23,800
1114353a5a1b3Sopenharmony_ci\end_layout
1114453a5a1b3Sopenharmony_ci
1114553a5a1b3Sopenharmony_ci\end_inset
1114653a5a1b3Sopenharmony_ci</cell>
1114753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1114853a5a1b3Sopenharmony_ci\begin_inset Text
1114953a5a1b3Sopenharmony_ci
1115053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1115153a5a1b3Sopenharmony_ciNeed good headphones to tell the difference
1115253a5a1b3Sopenharmony_ci\end_layout
1115353a5a1b3Sopenharmony_ci
1115453a5a1b3Sopenharmony_ci\end_inset
1115553a5a1b3Sopenharmony_ci</cell>
1115653a5a1b3Sopenharmony_ci</row>
1115753a5a1b3Sopenharmony_ci<row>
1115853a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1115953a5a1b3Sopenharmony_ci\begin_inset Text
1116053a5a1b3Sopenharmony_ci
1116153a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1116253a5a1b3Sopenharmony_ci8
1116353a5a1b3Sopenharmony_ci\end_layout
1116453a5a1b3Sopenharmony_ci
1116553a5a1b3Sopenharmony_ci\end_inset
1116653a5a1b3Sopenharmony_ci</cell>
1116753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1116853a5a1b3Sopenharmony_ci\begin_inset Text
1116953a5a1b3Sopenharmony_ci
1117053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1117153a5a1b3Sopenharmony_ci27,800
1117253a5a1b3Sopenharmony_ci\end_layout
1117353a5a1b3Sopenharmony_ci
1117453a5a1b3Sopenharmony_ci\end_inset
1117553a5a1b3Sopenharmony_ci</cell>
1117653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1117753a5a1b3Sopenharmony_ci\begin_inset Text
1117853a5a1b3Sopenharmony_ci
1117953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1118053a5a1b3Sopenharmony_ciHard to tell the difference even with good headphones
1118153a5a1b3Sopenharmony_ci\end_layout
1118253a5a1b3Sopenharmony_ci
1118353a5a1b3Sopenharmony_ci\end_inset
1118453a5a1b3Sopenharmony_ci</cell>
1118553a5a1b3Sopenharmony_ci</row>
1118653a5a1b3Sopenharmony_ci<row>
1118753a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1118853a5a1b3Sopenharmony_ci\begin_inset Text
1118953a5a1b3Sopenharmony_ci
1119053a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1119153a5a1b3Sopenharmony_ci9
1119253a5a1b3Sopenharmony_ci\end_layout
1119353a5a1b3Sopenharmony_ci
1119453a5a1b3Sopenharmony_ci\end_inset
1119553a5a1b3Sopenharmony_ci</cell>
1119653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1119753a5a1b3Sopenharmony_ci\begin_inset Text
1119853a5a1b3Sopenharmony_ci
1119953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1120053a5a1b3Sopenharmony_ci34,200
1120153a5a1b3Sopenharmony_ci\end_layout
1120253a5a1b3Sopenharmony_ci
1120353a5a1b3Sopenharmony_ci\end_inset
1120453a5a1b3Sopenharmony_ci</cell>
1120553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1120653a5a1b3Sopenharmony_ci\begin_inset Text
1120753a5a1b3Sopenharmony_ci
1120853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1120953a5a1b3Sopenharmony_ciHard to tell the difference even with good headphones
1121053a5a1b3Sopenharmony_ci\end_layout
1121153a5a1b3Sopenharmony_ci
1121253a5a1b3Sopenharmony_ci\end_inset
1121353a5a1b3Sopenharmony_ci</cell>
1121453a5a1b3Sopenharmony_ci</row>
1121553a5a1b3Sopenharmony_ci<row>
1121653a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1121753a5a1b3Sopenharmony_ci\begin_inset Text
1121853a5a1b3Sopenharmony_ci
1121953a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1122053a5a1b3Sopenharmony_ci10
1122153a5a1b3Sopenharmony_ci\end_layout
1122253a5a1b3Sopenharmony_ci
1122353a5a1b3Sopenharmony_ci\end_inset
1122453a5a1b3Sopenharmony_ci</cell>
1122553a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1122653a5a1b3Sopenharmony_ci\begin_inset Text
1122753a5a1b3Sopenharmony_ci
1122853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1122953a5a1b3Sopenharmony_ci42,200
1123053a5a1b3Sopenharmony_ci\end_layout
1123153a5a1b3Sopenharmony_ci
1123253a5a1b3Sopenharmony_ci\end_inset
1123353a5a1b3Sopenharmony_ci</cell>
1123453a5a1b3Sopenharmony_ci<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1123553a5a1b3Sopenharmony_ci\begin_inset Text
1123653a5a1b3Sopenharmony_ci
1123753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1123853a5a1b3Sopenharmony_ciCompletely transparent for voice, good quality music
1123953a5a1b3Sopenharmony_ci\end_layout
1124053a5a1b3Sopenharmony_ci
1124153a5a1b3Sopenharmony_ci\end_inset
1124253a5a1b3Sopenharmony_ci</cell>
1124353a5a1b3Sopenharmony_ci</row>
1124453a5a1b3Sopenharmony_ci</lyxtabular>
1124553a5a1b3Sopenharmony_ci
1124653a5a1b3Sopenharmony_ci\end_inset
1124753a5a1b3Sopenharmony_ci
1124853a5a1b3Sopenharmony_ci
1124953a5a1b3Sopenharmony_ci\begin_inset ERT
1125053a5a1b3Sopenharmony_cistatus collapsed
1125153a5a1b3Sopenharmony_ci
1125253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1125353a5a1b3Sopenharmony_ci
1125453a5a1b3Sopenharmony_ci
1125553a5a1b3Sopenharmony_ci\backslash
1125653a5a1b3Sopenharmony_ciend{center}
1125753a5a1b3Sopenharmony_ci\end_layout
1125853a5a1b3Sopenharmony_ci
1125953a5a1b3Sopenharmony_ci\end_inset
1126053a5a1b3Sopenharmony_ci
1126153a5a1b3Sopenharmony_ci
1126253a5a1b3Sopenharmony_ci\end_layout
1126353a5a1b3Sopenharmony_ci
1126453a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1126553a5a1b3Sopenharmony_ci\begin_inset Caption
1126653a5a1b3Sopenharmony_ci
1126753a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1126853a5a1b3Sopenharmony_ciQuality versus bit-rate for the wideband encoder
1126953a5a1b3Sopenharmony_ci\begin_inset CommandInset label
1127053a5a1b3Sopenharmony_ciLatexCommand label
1127153a5a1b3Sopenharmony_ciname "tab:wideband-quality"
1127253a5a1b3Sopenharmony_ci
1127353a5a1b3Sopenharmony_ci\end_inset
1127453a5a1b3Sopenharmony_ci
1127553a5a1b3Sopenharmony_ci
1127653a5a1b3Sopenharmony_ci\end_layout
1127753a5a1b3Sopenharmony_ci
1127853a5a1b3Sopenharmony_ci\end_inset
1127953a5a1b3Sopenharmony_ci
1128053a5a1b3Sopenharmony_ci
1128153a5a1b3Sopenharmony_ci\end_layout
1128253a5a1b3Sopenharmony_ci
1128353a5a1b3Sopenharmony_ci\end_inset
1128453a5a1b3Sopenharmony_ci
1128553a5a1b3Sopenharmony_ci
1128653a5a1b3Sopenharmony_ci\end_layout
1128753a5a1b3Sopenharmony_ci
1128853a5a1b3Sopenharmony_ci\begin_layout Standard
1128953a5a1b3Sopenharmony_ci\begin_inset ERT
1129053a5a1b3Sopenharmony_cistatus open
1129153a5a1b3Sopenharmony_ci
1129253a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1129353a5a1b3Sopenharmony_ci
1129453a5a1b3Sopenharmony_ci
1129553a5a1b3Sopenharmony_ci\backslash
1129653a5a1b3Sopenharmony_ciclearpage
1129753a5a1b3Sopenharmony_ci\end_layout
1129853a5a1b3Sopenharmony_ci
1129953a5a1b3Sopenharmony_ci\end_inset
1130053a5a1b3Sopenharmony_ci
1130153a5a1b3Sopenharmony_ci
1130253a5a1b3Sopenharmony_ci\end_layout
1130353a5a1b3Sopenharmony_ci
1130453a5a1b3Sopenharmony_ci\begin_layout Standard
1130553a5a1b3Sopenharmony_ci\begin_inset ERT
1130653a5a1b3Sopenharmony_cistatus collapsed
1130753a5a1b3Sopenharmony_ci
1130853a5a1b3Sopenharmony_ci\begin_layout Plain Layout
1130953a5a1b3Sopenharmony_ci
1131053a5a1b3Sopenharmony_ci
1131153a5a1b3Sopenharmony_ci\backslash
1131253a5a1b3Sopenharmony_ciclearpage
1131353a5a1b3Sopenharmony_ci\end_layout
1131453a5a1b3Sopenharmony_ci
1131553a5a1b3Sopenharmony_ci\end_inset
1131653a5a1b3Sopenharmony_ci
1131753a5a1b3Sopenharmony_ci
1131853a5a1b3Sopenharmony_ci\end_layout
1131953a5a1b3Sopenharmony_ci
1132053a5a1b3Sopenharmony_ci\begin_layout Chapter
1132153a5a1b3Sopenharmony_ci\start_of_appendix
1132253a5a1b3Sopenharmony_ciSample code
1132353a5a1b3Sopenharmony_ci\begin_inset CommandInset label
1132453a5a1b3Sopenharmony_ciLatexCommand label
1132553a5a1b3Sopenharmony_ciname "sec:Sample-code"
1132653a5a1b3Sopenharmony_ci
1132753a5a1b3Sopenharmony_ci\end_inset
1132853a5a1b3Sopenharmony_ci
1132953a5a1b3Sopenharmony_ci
1133053a5a1b3Sopenharmony_ci\end_layout
1133153a5a1b3Sopenharmony_ci
1133253a5a1b3Sopenharmony_ci\begin_layout Standard
1133353a5a1b3Sopenharmony_ciThis section shows sample code for encoding and decoding speech using the
1133453a5a1b3Sopenharmony_ci Speex API.
1133553a5a1b3Sopenharmony_ci The commands can be used to encode and decode a file by calling:
1133653a5a1b3Sopenharmony_ci\family typewriter
1133753a5a1b3Sopenharmony_ci
1133853a5a1b3Sopenharmony_ci\begin_inset Newline newline
1133953a5a1b3Sopenharmony_ci\end_inset
1134053a5a1b3Sopenharmony_ci
1134153a5a1b3Sopenharmony_ci% sampleenc in_file.sw | sampledec out_file.sw
1134253a5a1b3Sopenharmony_ci\family default
1134353a5a1b3Sopenharmony_ci
1134453a5a1b3Sopenharmony_ci\begin_inset Newline newline
1134553a5a1b3Sopenharmony_ci\end_inset
1134653a5a1b3Sopenharmony_ci
1134753a5a1b3Sopenharmony_ciwhere both files are raw (no header) files encoded at 16 bits per sample
1134853a5a1b3Sopenharmony_ci (in the machine natural endianness).
1134953a5a1b3Sopenharmony_ci\end_layout
1135053a5a1b3Sopenharmony_ci
1135153a5a1b3Sopenharmony_ci\begin_layout Section
1135253a5a1b3Sopenharmony_cisampleenc.c
1135353a5a1b3Sopenharmony_ci\end_layout
1135453a5a1b3Sopenharmony_ci
1135553a5a1b3Sopenharmony_ci\begin_layout Standard
1135653a5a1b3Sopenharmony_cisampleenc takes a raw 16 bits/sample file, encodes it and outputs a Speex
1135753a5a1b3Sopenharmony_ci stream to stdout.
1135853a5a1b3Sopenharmony_ci Note that the packing used is 
1135953a5a1b3Sopenharmony_ci\series bold
1136053a5a1b3Sopenharmony_cinot
1136153a5a1b3Sopenharmony_ci\series default
1136253a5a1b3Sopenharmony_ci compatible with that of speexenc/speexdec.
1136353a5a1b3Sopenharmony_ci\end_layout
1136453a5a1b3Sopenharmony_ci
1136553a5a1b3Sopenharmony_ci\begin_layout Standard
1136653a5a1b3Sopenharmony_ci\begin_inset CommandInset include
1136753a5a1b3Sopenharmony_ciLatexCommand lstinputlisting
1136853a5a1b3Sopenharmony_cifilename "sampleenc.c"
1136953a5a1b3Sopenharmony_cilstparams "caption={Source code for sampleenc},label={sampleenc-source-code},numbers=left,numberstyle={\\footnotesize}"
1137053a5a1b3Sopenharmony_ci
1137153a5a1b3Sopenharmony_ci\end_inset
1137253a5a1b3Sopenharmony_ci
1137353a5a1b3Sopenharmony_ci
1137453a5a1b3Sopenharmony_ci\end_layout
1137553a5a1b3Sopenharmony_ci
1137653a5a1b3Sopenharmony_ci\begin_layout Section
1137753a5a1b3Sopenharmony_cisampledec.c
1137853a5a1b3Sopenharmony_ci\end_layout
1137953a5a1b3Sopenharmony_ci
1138053a5a1b3Sopenharmony_ci\begin_layout Standard
1138153a5a1b3Sopenharmony_cisampledec reads a Speex stream from stdin, decodes it and outputs it to
1138253a5a1b3Sopenharmony_ci a raw 16 bits/sample file.
1138353a5a1b3Sopenharmony_ci Note that the packing used is 
1138453a5a1b3Sopenharmony_ci\series bold
1138553a5a1b3Sopenharmony_cinot
1138653a5a1b3Sopenharmony_ci\series default
1138753a5a1b3Sopenharmony_ci compatible with that of speexenc/speexdec.
1138853a5a1b3Sopenharmony_ci\end_layout
1138953a5a1b3Sopenharmony_ci
1139053a5a1b3Sopenharmony_ci\begin_layout Standard
1139153a5a1b3Sopenharmony_ci\begin_inset CommandInset include
1139253a5a1b3Sopenharmony_ciLatexCommand lstinputlisting
1139353a5a1b3Sopenharmony_cifilename "sampledec.c"
1139453a5a1b3Sopenharmony_cilstparams "caption={Source code for sampledec},label={sampledec-source-code},numbers=left,numberstyle={\\footnotesize}"
1139553a5a1b3Sopenharmony_ci
1139653a5a1b3Sopenharmony_ci\end_inset
1139753a5a1b3Sopenharmony_ci
1139853a5a1b3Sopenharmony_ci
1139953a5a1b3Sopenharmony_ci\end_layout
1140053a5a1b3Sopenharmony_ci
1140153a5a1b3Sopenharmony_ci\begin_layout Standard
1140253a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
1140353a5a1b3Sopenharmony_ci\end_inset
1140453a5a1b3Sopenharmony_ci
1140553a5a1b3Sopenharmony_ci
1140653a5a1b3Sopenharmony_ci\end_layout
1140753a5a1b3Sopenharmony_ci
1140853a5a1b3Sopenharmony_ci\begin_layout Chapter
1140953a5a1b3Sopenharmony_ciJitter Buffer for Speex
1141053a5a1b3Sopenharmony_ci\end_layout
1141153a5a1b3Sopenharmony_ci
1141253a5a1b3Sopenharmony_ci\begin_layout Standard
1141353a5a1b3Sopenharmony_ci\begin_inset CommandInset include
1141453a5a1b3Sopenharmony_ciLatexCommand lstinputlisting
1141553a5a1b3Sopenharmony_cifilename "../speexclient/speex_jitter_buffer.c"
1141653a5a1b3Sopenharmony_cilstparams "caption={Example of using the jitter buffer for Speex packets},label={example-speex-jitter},numbers=left,numberstyle={\\footnotesize}"
1141753a5a1b3Sopenharmony_ci
1141853a5a1b3Sopenharmony_ci\end_inset
1141953a5a1b3Sopenharmony_ci
1142053a5a1b3Sopenharmony_ci
1142153a5a1b3Sopenharmony_ci\end_layout
1142253a5a1b3Sopenharmony_ci
1142353a5a1b3Sopenharmony_ci\begin_layout Standard
1142453a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
1142553a5a1b3Sopenharmony_ci\end_inset
1142653a5a1b3Sopenharmony_ci
1142753a5a1b3Sopenharmony_ci
1142853a5a1b3Sopenharmony_ci\end_layout
1142953a5a1b3Sopenharmony_ci
1143053a5a1b3Sopenharmony_ci\begin_layout Chapter
1143153a5a1b3Sopenharmony_ciIETF RTP Profile
1143253a5a1b3Sopenharmony_ci\begin_inset CommandInset label
1143353a5a1b3Sopenharmony_ciLatexCommand label
1143453a5a1b3Sopenharmony_ciname "sec:IETF-draft"
1143553a5a1b3Sopenharmony_ci
1143653a5a1b3Sopenharmony_ci\end_inset
1143753a5a1b3Sopenharmony_ci
1143853a5a1b3Sopenharmony_ci
1143953a5a1b3Sopenharmony_ci\end_layout
1144053a5a1b3Sopenharmony_ci
1144153a5a1b3Sopenharmony_ci\begin_layout Standard
1144253a5a1b3Sopenharmony_ci\begin_inset CommandInset include
1144353a5a1b3Sopenharmony_ciLatexCommand verbatiminput
1144453a5a1b3Sopenharmony_cifilename "draft-ietf-avt-rtp-speex-05-tmp.txt"
1144553a5a1b3Sopenharmony_ci
1144653a5a1b3Sopenharmony_ci\end_inset
1144753a5a1b3Sopenharmony_ci
1144853a5a1b3Sopenharmony_ci
1144953a5a1b3Sopenharmony_ci\end_layout
1145053a5a1b3Sopenharmony_ci
1145153a5a1b3Sopenharmony_ci\begin_layout Standard
1145253a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
1145353a5a1b3Sopenharmony_ci\end_inset
1145453a5a1b3Sopenharmony_ci
1145553a5a1b3Sopenharmony_ci
1145653a5a1b3Sopenharmony_ci\end_layout
1145753a5a1b3Sopenharmony_ci
1145853a5a1b3Sopenharmony_ci\begin_layout Chapter
1145953a5a1b3Sopenharmony_ciSpeex License
1146053a5a1b3Sopenharmony_ci\begin_inset CommandInset label
1146153a5a1b3Sopenharmony_ciLatexCommand label
1146253a5a1b3Sopenharmony_ciname "sec:Speex-License"
1146353a5a1b3Sopenharmony_ci
1146453a5a1b3Sopenharmony_ci\end_inset
1146553a5a1b3Sopenharmony_ci
1146653a5a1b3Sopenharmony_ci
1146753a5a1b3Sopenharmony_ci\end_layout
1146853a5a1b3Sopenharmony_ci
1146953a5a1b3Sopenharmony_ci\begin_layout Standard
1147053a5a1b3Sopenharmony_ci\begin_inset CommandInset include
1147153a5a1b3Sopenharmony_ciLatexCommand verbatiminput
1147253a5a1b3Sopenharmony_cifilename "../COPYING"
1147353a5a1b3Sopenharmony_ci
1147453a5a1b3Sopenharmony_ci\end_inset
1147553a5a1b3Sopenharmony_ci
1147653a5a1b3Sopenharmony_ci
1147753a5a1b3Sopenharmony_ci\end_layout
1147853a5a1b3Sopenharmony_ci
1147953a5a1b3Sopenharmony_ci\begin_layout Standard
1148053a5a1b3Sopenharmony_ci\begin_inset Newpage newpage
1148153a5a1b3Sopenharmony_ci\end_inset
1148253a5a1b3Sopenharmony_ci
1148353a5a1b3Sopenharmony_ci
1148453a5a1b3Sopenharmony_ci\end_layout
1148553a5a1b3Sopenharmony_ci
1148653a5a1b3Sopenharmony_ci\begin_layout Chapter
1148753a5a1b3Sopenharmony_ciGNU Free Documentation License
1148853a5a1b3Sopenharmony_ci\end_layout
1148953a5a1b3Sopenharmony_ci
1149053a5a1b3Sopenharmony_ci\begin_layout Standard
1149153a5a1b3Sopenharmony_ciVersion 1.1, March 2000
1149253a5a1b3Sopenharmony_ci\end_layout
1149353a5a1b3Sopenharmony_ci
1149453a5a1b3Sopenharmony_ci\begin_layout Standard
1149553a5a1b3Sopenharmony_ciCopyright (C) 2000 Free Software Foundation, Inc.
1149653a5a1b3Sopenharmony_ci 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted
1149753a5a1b3Sopenharmony_ci to copy and distribute verbatim copies of this license document, but changing
1149853a5a1b3Sopenharmony_ci it is not allowed.
1149953a5a1b3Sopenharmony_ci 
1150053a5a1b3Sopenharmony_ci\end_layout
1150153a5a1b3Sopenharmony_ci
1150253a5a1b3Sopenharmony_ci\begin_layout Section*
1150353a5a1b3Sopenharmony_ci0.
1150453a5a1b3Sopenharmony_ci PREAMBLE
1150553a5a1b3Sopenharmony_ci\end_layout
1150653a5a1b3Sopenharmony_ci
1150753a5a1b3Sopenharmony_ci\begin_layout Standard
1150853a5a1b3Sopenharmony_ciThe purpose of this License is to make a manual, textbook, or other written
1150953a5a1b3Sopenharmony_ci document "free" in the sense of freedom: to assure everyone the effective
1151053a5a1b3Sopenharmony_ci freedom to copy and redistribute it, with or without modifying it, either
1151153a5a1b3Sopenharmony_ci commercially or noncommercially.
1151253a5a1b3Sopenharmony_ci Secondarily, this License preserves for the author and publisher a way
1151353a5a1b3Sopenharmony_ci to get credit for their work, while not being considered responsible for
1151453a5a1b3Sopenharmony_ci modifications made by others.
1151553a5a1b3Sopenharmony_ci\end_layout
1151653a5a1b3Sopenharmony_ci
1151753a5a1b3Sopenharmony_ci\begin_layout Standard
1151853a5a1b3Sopenharmony_ciThis License is a kind of "copyleft", which means that derivative works
1151953a5a1b3Sopenharmony_ci of the document must themselves be free in the same sense.
1152053a5a1b3Sopenharmony_ci It complements the GNU General Public License, which is a copyleft license
1152153a5a1b3Sopenharmony_ci designed for free software.
1152253a5a1b3Sopenharmony_ci\end_layout
1152353a5a1b3Sopenharmony_ci
1152453a5a1b3Sopenharmony_ci\begin_layout Standard
1152553a5a1b3Sopenharmony_ciWe have designed this License in order to use it for manuals for free software,
1152653a5a1b3Sopenharmony_ci because free software needs free documentation: a free program should come
1152753a5a1b3Sopenharmony_ci with manuals providing the same freedoms that the software does.
1152853a5a1b3Sopenharmony_ci But this License is not limited to software manuals; it can be used for
1152953a5a1b3Sopenharmony_ci any textual work, regardless of subject matter or whether it is published
1153053a5a1b3Sopenharmony_ci as a printed book.
1153153a5a1b3Sopenharmony_ci We recommend this License principally for works whose purpose is instruction
1153253a5a1b3Sopenharmony_ci or reference.
1153353a5a1b3Sopenharmony_ci 
1153453a5a1b3Sopenharmony_ci\end_layout
1153553a5a1b3Sopenharmony_ci
1153653a5a1b3Sopenharmony_ci\begin_layout Section*
1153753a5a1b3Sopenharmony_ci1.
1153853a5a1b3Sopenharmony_ci APPLICABILITY AND DEFINITIONS
1153953a5a1b3Sopenharmony_ci\end_layout
1154053a5a1b3Sopenharmony_ci
1154153a5a1b3Sopenharmony_ci\begin_layout Standard
1154253a5a1b3Sopenharmony_ciThis License applies to any manual or other work that contains a notice
1154353a5a1b3Sopenharmony_ci placed by the copyright holder saying it can be distributed under the terms
1154453a5a1b3Sopenharmony_ci of this License.
1154553a5a1b3Sopenharmony_ci The "Document", below, refers to any such manual or work.
1154653a5a1b3Sopenharmony_ci Any member of the public is a licensee, and is addressed as "you".
1154753a5a1b3Sopenharmony_ci\end_layout
1154853a5a1b3Sopenharmony_ci
1154953a5a1b3Sopenharmony_ci\begin_layout Standard
1155053a5a1b3Sopenharmony_ciA "Modified Version" of the Document means any work containing the Document
1155153a5a1b3Sopenharmony_ci or a portion of it, either copied verbatim, or with modifications and/or
1155253a5a1b3Sopenharmony_ci translated into another language.
1155353a5a1b3Sopenharmony_ci\end_layout
1155453a5a1b3Sopenharmony_ci
1155553a5a1b3Sopenharmony_ci\begin_layout Standard
1155653a5a1b3Sopenharmony_ciA "Secondary Section" is a named appendix or a front-matter section of the
1155753a5a1b3Sopenharmony_ci Document that deals exclusively with the relationship of the publishers
1155853a5a1b3Sopenharmony_ci or authors of the Document to the Document's overall subject (or to related
1155953a5a1b3Sopenharmony_ci matters) and contains nothing that could fall directly within that overall
1156053a5a1b3Sopenharmony_ci subject.
1156153a5a1b3Sopenharmony_ci (For example, if the Document is in part a textbook of mathematics, a Secondary
1156253a5a1b3Sopenharmony_ci Section may not explain any mathematics.) The relationship could be a matter
1156353a5a1b3Sopenharmony_ci of historical connection with the subject or with related matters, or of
1156453a5a1b3Sopenharmony_ci legal, commercial, philosophical, ethical or political position regarding
1156553a5a1b3Sopenharmony_ci them.
1156653a5a1b3Sopenharmony_ci\end_layout
1156753a5a1b3Sopenharmony_ci
1156853a5a1b3Sopenharmony_ci\begin_layout Standard
1156953a5a1b3Sopenharmony_ciThe "Invariant Sections" are certain Secondary Sections whose titles are
1157053a5a1b3Sopenharmony_ci designated, as being those of Invariant Sections, in the notice that says
1157153a5a1b3Sopenharmony_ci that the Document is released under this License.
1157253a5a1b3Sopenharmony_ci\end_layout
1157353a5a1b3Sopenharmony_ci
1157453a5a1b3Sopenharmony_ci\begin_layout Standard
1157553a5a1b3Sopenharmony_ciThe "Cover Texts" are certain short passages of text that are listed, as
1157653a5a1b3Sopenharmony_ci Front-Cover Texts or Back-Cover Texts, in the notice that says that the
1157753a5a1b3Sopenharmony_ci Document is released under this License.
1157853a5a1b3Sopenharmony_ci\end_layout
1157953a5a1b3Sopenharmony_ci
1158053a5a1b3Sopenharmony_ci\begin_layout Standard
1158153a5a1b3Sopenharmony_ciA "Transparent" copy of the Document means a machine-readable copy, represented
1158253a5a1b3Sopenharmony_ci in a format whose specification is available to the general public, whose
1158353a5a1b3Sopenharmony_ci contents can be viewed and edited directly and straightforwardly with generic
1158453a5a1b3Sopenharmony_ci text editors or (for images composed of pixels) generic paint programs
1158553a5a1b3Sopenharmony_ci or (for drawings) some widely available drawing editor, and that is suitable
1158653a5a1b3Sopenharmony_ci for input to text formatters or for automatic translation to a variety
1158753a5a1b3Sopenharmony_ci of formats suitable for input to text formatters.
1158853a5a1b3Sopenharmony_ci A copy made in an otherwise Transparent file format whose markup has been
1158953a5a1b3Sopenharmony_ci designed to thwart or discourage subsequent modification by readers is
1159053a5a1b3Sopenharmony_ci not Transparent.
1159153a5a1b3Sopenharmony_ci A copy that is not "Transparent" is called "Opaque".
1159253a5a1b3Sopenharmony_ci\end_layout
1159353a5a1b3Sopenharmony_ci
1159453a5a1b3Sopenharmony_ci\begin_layout Standard
1159553a5a1b3Sopenharmony_ciExamples of suitable formats for Transparent copies include plain ASCII
1159653a5a1b3Sopenharmony_ci without markup, Texinfo input format, LaTeX input format, SGML or XML using
1159753a5a1b3Sopenharmony_ci a publicly available DTD, and standard-conforming simple HTML designed
1159853a5a1b3Sopenharmony_ci for human modification.
1159953a5a1b3Sopenharmony_ci Opaque formats include PostScript, PDF, proprietary formats that can be
1160053a5a1b3Sopenharmony_ci read and edited only by proprietary word processors, SGML or XML for which
1160153a5a1b3Sopenharmony_ci the DTD and/or processing tools are not generally available, and the machine-ge
1160253a5a1b3Sopenharmony_cinerated HTML produced by some word processors for output purposes only.
1160353a5a1b3Sopenharmony_ci\end_layout
1160453a5a1b3Sopenharmony_ci
1160553a5a1b3Sopenharmony_ci\begin_layout Standard
1160653a5a1b3Sopenharmony_ciThe "Title Page" means, for a printed book, the title page itself, plus
1160753a5a1b3Sopenharmony_ci such following pages as are needed to hold, legibly, the material this
1160853a5a1b3Sopenharmony_ci License requires to appear in the title page.
1160953a5a1b3Sopenharmony_ci For works in formats which do not have any title page as such, "Title Page"
1161053a5a1b3Sopenharmony_ci means the text near the most prominent appearance of the work's title,
1161153a5a1b3Sopenharmony_ci preceding the beginning of the body of the text.
1161253a5a1b3Sopenharmony_ci\end_layout
1161353a5a1b3Sopenharmony_ci
1161453a5a1b3Sopenharmony_ci\begin_layout Section*
1161553a5a1b3Sopenharmony_ci2.
1161653a5a1b3Sopenharmony_ci VERBATIM COPYING
1161753a5a1b3Sopenharmony_ci\end_layout
1161853a5a1b3Sopenharmony_ci
1161953a5a1b3Sopenharmony_ci\begin_layout Standard
1162053a5a1b3Sopenharmony_ciYou may copy and distribute the Document in any medium, either commercially
1162153a5a1b3Sopenharmony_ci or noncommercially, provided that this License, the copyright notices,
1162253a5a1b3Sopenharmony_ci and the license notice saying this License applies to the Document are
1162353a5a1b3Sopenharmony_ci reproduced in all copies, and that you add no other conditions whatsoever
1162453a5a1b3Sopenharmony_ci to those of this License.
1162553a5a1b3Sopenharmony_ci You may not use technical measures to obstruct or control the reading or
1162653a5a1b3Sopenharmony_ci further copying of the copies you make or distribute.
1162753a5a1b3Sopenharmony_ci However, you may accept compensation in exchange for copies.
1162853a5a1b3Sopenharmony_ci If you distribute a large enough number of copies you must also follow
1162953a5a1b3Sopenharmony_ci the conditions in section 3.
1163053a5a1b3Sopenharmony_ci\end_layout
1163153a5a1b3Sopenharmony_ci
1163253a5a1b3Sopenharmony_ci\begin_layout Standard
1163353a5a1b3Sopenharmony_ciYou may also lend copies, under the same conditions stated above, and you
1163453a5a1b3Sopenharmony_ci may publicly display copies.
1163553a5a1b3Sopenharmony_ci\end_layout
1163653a5a1b3Sopenharmony_ci
1163753a5a1b3Sopenharmony_ci\begin_layout Section*
1163853a5a1b3Sopenharmony_ci3.
1163953a5a1b3Sopenharmony_ci COPYING IN QUANTITY
1164053a5a1b3Sopenharmony_ci\end_layout
1164153a5a1b3Sopenharmony_ci
1164253a5a1b3Sopenharmony_ci\begin_layout Standard
1164353a5a1b3Sopenharmony_ciIf you publish printed copies of the Document numbering more than 100, and
1164453a5a1b3Sopenharmony_ci the Document's license notice requires Cover Texts, you must enclose the
1164553a5a1b3Sopenharmony_ci copies in covers that carry, clearly and legibly, all these Cover Texts:
1164653a5a1b3Sopenharmony_ci Front-Cover Texts on the front cover, and Back-Cover Texts on the back
1164753a5a1b3Sopenharmony_ci cover.
1164853a5a1b3Sopenharmony_ci Both covers must also clearly and legibly identify you as the publisher
1164953a5a1b3Sopenharmony_ci of these copies.
1165053a5a1b3Sopenharmony_ci The front cover must present the full title with all words of the title
1165153a5a1b3Sopenharmony_ci equally prominent and visible.
1165253a5a1b3Sopenharmony_ci You may add other material on the covers in addition.
1165353a5a1b3Sopenharmony_ci Copying with changes limited to the covers, as long as they preserve the
1165453a5a1b3Sopenharmony_ci title of the Document and satisfy these conditions, can be treated as verbatim
1165553a5a1b3Sopenharmony_ci copying in other respects.
1165653a5a1b3Sopenharmony_ci\end_layout
1165753a5a1b3Sopenharmony_ci
1165853a5a1b3Sopenharmony_ci\begin_layout Standard
1165953a5a1b3Sopenharmony_ciIf the required texts for either cover are too voluminous to fit legibly,
1166053a5a1b3Sopenharmony_ci you should put the first ones listed (as many as fit reasonably) on the
1166153a5a1b3Sopenharmony_ci actual cover, and continue the rest onto adjacent pages.
1166253a5a1b3Sopenharmony_ci\end_layout
1166353a5a1b3Sopenharmony_ci
1166453a5a1b3Sopenharmony_ci\begin_layout Standard
1166553a5a1b3Sopenharmony_ciIf you publish or distribute Opaque copies of the Document numbering more
1166653a5a1b3Sopenharmony_ci than 100, you must either include a machine-readable Transparent copy along
1166753a5a1b3Sopenharmony_ci with each Opaque copy, or state in or with each Opaque copy a publicly-accessib
1166853a5a1b3Sopenharmony_cile computer-network location containing a complete Transparent copy of the
1166953a5a1b3Sopenharmony_ci Document, free of added material, which the general network-using public
1167053a5a1b3Sopenharmony_ci has access to download anonymously at no charge using public-standard network
1167153a5a1b3Sopenharmony_ci protocols.
1167253a5a1b3Sopenharmony_ci If you use the latter option, you must take reasonably prudent steps, when
1167353a5a1b3Sopenharmony_ci you begin distribution of Opaque copies in quantity, to ensure that this
1167453a5a1b3Sopenharmony_ci Transparent copy will remain thus accessible at the stated location until
1167553a5a1b3Sopenharmony_ci at least one year after the last time you distribute an Opaque copy (directly
1167653a5a1b3Sopenharmony_ci or through your agents or retailers) of that edition to the public.
1167753a5a1b3Sopenharmony_ci\end_layout
1167853a5a1b3Sopenharmony_ci
1167953a5a1b3Sopenharmony_ci\begin_layout Standard
1168053a5a1b3Sopenharmony_ciIt is requested, but not required, that you contact the authors of the Document
1168153a5a1b3Sopenharmony_ci well before redistributing any large number of copies, to give them a chance
1168253a5a1b3Sopenharmony_ci to provide you with an updated version of the Document.
1168353a5a1b3Sopenharmony_ci 
1168453a5a1b3Sopenharmony_ci\end_layout
1168553a5a1b3Sopenharmony_ci
1168653a5a1b3Sopenharmony_ci\begin_layout Section*
1168753a5a1b3Sopenharmony_ci4.
1168853a5a1b3Sopenharmony_ci MODIFICATIONS
1168953a5a1b3Sopenharmony_ci\end_layout
1169053a5a1b3Sopenharmony_ci
1169153a5a1b3Sopenharmony_ci\begin_layout Standard
1169253a5a1b3Sopenharmony_ciYou may copy and distribute a Modified Version of the Document under the
1169353a5a1b3Sopenharmony_ci conditions of sections 2 and 3 above, provided that you release the Modified
1169453a5a1b3Sopenharmony_ci Version under precisely this License, with the Modified Version filling
1169553a5a1b3Sopenharmony_ci the role of the Document, thus licensing distribution and modification
1169653a5a1b3Sopenharmony_ci of the Modified Version to whoever possesses a copy of it.
1169753a5a1b3Sopenharmony_ci In addition, you must do these things in the Modified Version: 
1169853a5a1b3Sopenharmony_ci\end_layout
1169953a5a1b3Sopenharmony_ci
1170053a5a1b3Sopenharmony_ci\begin_layout Itemize
1170153a5a1b3Sopenharmony_ciA.
1170253a5a1b3Sopenharmony_ci Use in the Title Page (and on the covers, if any) a title distinct from
1170353a5a1b3Sopenharmony_ci that of the Document, and from those of previous versions (which should,
1170453a5a1b3Sopenharmony_ci if there were any, be listed in the History section of the Document).
1170553a5a1b3Sopenharmony_ci You may use the same title as a previous version if the original publisher
1170653a5a1b3Sopenharmony_ci of that version gives permission.
1170753a5a1b3Sopenharmony_ci\end_layout
1170853a5a1b3Sopenharmony_ci
1170953a5a1b3Sopenharmony_ci\begin_layout Itemize
1171053a5a1b3Sopenharmony_ciB.
1171153a5a1b3Sopenharmony_ci List on the Title Page, as authors, one or more persons or entities responsible
1171253a5a1b3Sopenharmony_ci for authorship of the modifications in the Modified Version, together with
1171353a5a1b3Sopenharmony_ci at least five of the principal authors of the Document (all of its principal
1171453a5a1b3Sopenharmony_ci authors, if it has less than five).
1171553a5a1b3Sopenharmony_ci\end_layout
1171653a5a1b3Sopenharmony_ci
1171753a5a1b3Sopenharmony_ci\begin_layout Itemize
1171853a5a1b3Sopenharmony_ciC.
1171953a5a1b3Sopenharmony_ci State on the Title page the name of the publisher of the Modified Version,
1172053a5a1b3Sopenharmony_ci as the publisher.
1172153a5a1b3Sopenharmony_ci\end_layout
1172253a5a1b3Sopenharmony_ci
1172353a5a1b3Sopenharmony_ci\begin_layout Itemize
1172453a5a1b3Sopenharmony_ciD.
1172553a5a1b3Sopenharmony_ci Preserve all the copyright notices of the Document.
1172653a5a1b3Sopenharmony_ci\end_layout
1172753a5a1b3Sopenharmony_ci
1172853a5a1b3Sopenharmony_ci\begin_layout Itemize
1172953a5a1b3Sopenharmony_ciE.
1173053a5a1b3Sopenharmony_ci Add an appropriate copyright notice for your modifications adjacent to
1173153a5a1b3Sopenharmony_ci the other copyright notices.
1173253a5a1b3Sopenharmony_ci\end_layout
1173353a5a1b3Sopenharmony_ci
1173453a5a1b3Sopenharmony_ci\begin_layout Itemize
1173553a5a1b3Sopenharmony_ciF.
1173653a5a1b3Sopenharmony_ci Include, immediately after the copyright notices, a license notice giving
1173753a5a1b3Sopenharmony_ci the public permission to use the Modified Version under the terms of this
1173853a5a1b3Sopenharmony_ci License, in the form shown in the Addendum below.
1173953a5a1b3Sopenharmony_ci\end_layout
1174053a5a1b3Sopenharmony_ci
1174153a5a1b3Sopenharmony_ci\begin_layout Itemize
1174253a5a1b3Sopenharmony_ciG.
1174353a5a1b3Sopenharmony_ci Preserve in that license notice the full lists of Invariant Sections and
1174453a5a1b3Sopenharmony_ci required Cover Texts given in the Document's license notice.
1174553a5a1b3Sopenharmony_ci\end_layout
1174653a5a1b3Sopenharmony_ci
1174753a5a1b3Sopenharmony_ci\begin_layout Itemize
1174853a5a1b3Sopenharmony_ciH.
1174953a5a1b3Sopenharmony_ci Include an unaltered copy of this License.
1175053a5a1b3Sopenharmony_ci\end_layout
1175153a5a1b3Sopenharmony_ci
1175253a5a1b3Sopenharmony_ci\begin_layout Itemize
1175353a5a1b3Sopenharmony_ciI.
1175453a5a1b3Sopenharmony_ci Preserve the section entitled "History", and its title, and add to it an
1175553a5a1b3Sopenharmony_ci item stating at least the title, year, new authors, and publisher of the
1175653a5a1b3Sopenharmony_ci Modified Version as given on the Title Page.
1175753a5a1b3Sopenharmony_ci If there is no section entitled "History" in the Document, create one stating
1175853a5a1b3Sopenharmony_ci the title, year, authors, and publisher of the Document as given on its
1175953a5a1b3Sopenharmony_ci Title Page, then add an item describing the Modified Version as stated
1176053a5a1b3Sopenharmony_ci in the previous sentence.
1176153a5a1b3Sopenharmony_ci\end_layout
1176253a5a1b3Sopenharmony_ci
1176353a5a1b3Sopenharmony_ci\begin_layout Itemize
1176453a5a1b3Sopenharmony_ciJ.
1176553a5a1b3Sopenharmony_ci Preserve the network location, if any, given in the Document for public
1176653a5a1b3Sopenharmony_ci access to a Transparent copy of the Document, and likewise the network
1176753a5a1b3Sopenharmony_ci locations given in the Document for previous versions it was based on.
1176853a5a1b3Sopenharmony_ci These may be placed in the "History" section.
1176953a5a1b3Sopenharmony_ci You may omit a network location for a work that was published at least
1177053a5a1b3Sopenharmony_ci four years before the Document itself, or if the original publisher of
1177153a5a1b3Sopenharmony_ci the version it refers to gives permission.
1177253a5a1b3Sopenharmony_ci\end_layout
1177353a5a1b3Sopenharmony_ci
1177453a5a1b3Sopenharmony_ci\begin_layout Itemize
1177553a5a1b3Sopenharmony_ciK.
1177653a5a1b3Sopenharmony_ci In any section entitled "Acknowledgements" or "Dedications", preserve the
1177753a5a1b3Sopenharmony_ci section's title, and preserve in the section all the substance and tone
1177853a5a1b3Sopenharmony_ci of each of the contributor acknowledgements and/or dedications given therein.
1177953a5a1b3Sopenharmony_ci\end_layout
1178053a5a1b3Sopenharmony_ci
1178153a5a1b3Sopenharmony_ci\begin_layout Itemize
1178253a5a1b3Sopenharmony_ciL.
1178353a5a1b3Sopenharmony_ci Preserve all the Invariant Sections of the Document, unaltered in their
1178453a5a1b3Sopenharmony_ci text and in their titles.
1178553a5a1b3Sopenharmony_ci Section numbers or the equivalent are not considered part of the section
1178653a5a1b3Sopenharmony_ci titles.
1178753a5a1b3Sopenharmony_ci\end_layout
1178853a5a1b3Sopenharmony_ci
1178953a5a1b3Sopenharmony_ci\begin_layout Itemize
1179053a5a1b3Sopenharmony_ciM.
1179153a5a1b3Sopenharmony_ci Delete any section entitled "Endorsements".
1179253a5a1b3Sopenharmony_ci Such a section may not be included in the Modified Version.
1179353a5a1b3Sopenharmony_ci\end_layout
1179453a5a1b3Sopenharmony_ci
1179553a5a1b3Sopenharmony_ci\begin_layout Itemize
1179653a5a1b3Sopenharmony_ciN.
1179753a5a1b3Sopenharmony_ci Do not retitle any existing section as "Endorsements" or to conflict in
1179853a5a1b3Sopenharmony_ci title with any Invariant Section.
1179953a5a1b3Sopenharmony_ci 
1180053a5a1b3Sopenharmony_ci\end_layout
1180153a5a1b3Sopenharmony_ci
1180253a5a1b3Sopenharmony_ci\begin_layout Standard
1180353a5a1b3Sopenharmony_ciIf the Modified Version includes new front-matter sections or appendices
1180453a5a1b3Sopenharmony_ci that qualify as Secondary Sections and contain no material copied from
1180553a5a1b3Sopenharmony_ci the Document, you may at your option designate some or all of these sections
1180653a5a1b3Sopenharmony_ci as invariant.
1180753a5a1b3Sopenharmony_ci To do this, add their titles to the list of Invariant Sections in the Modified
1180853a5a1b3Sopenharmony_ci Version's license notice.
1180953a5a1b3Sopenharmony_ci These titles must be distinct from any other section titles.
1181053a5a1b3Sopenharmony_ci\end_layout
1181153a5a1b3Sopenharmony_ci
1181253a5a1b3Sopenharmony_ci\begin_layout Standard
1181353a5a1b3Sopenharmony_ciYou may add a section entitled "Endorsements", provided it contains nothing
1181453a5a1b3Sopenharmony_ci but endorsements of your Modified Version by various parties--for example,
1181553a5a1b3Sopenharmony_ci statements of peer review or that the text has been approved by an organization
1181653a5a1b3Sopenharmony_ci as the authoritative definition of a standard.
1181753a5a1b3Sopenharmony_ci\end_layout
1181853a5a1b3Sopenharmony_ci
1181953a5a1b3Sopenharmony_ci\begin_layout Standard
1182053a5a1b3Sopenharmony_ciYou may add a passage of up to five words as a Front-Cover Text, and a passage
1182153a5a1b3Sopenharmony_ci of up to 25 words as a Back-Cover Text, to the end of the list of Cover
1182253a5a1b3Sopenharmony_ci Texts in the Modified Version.
1182353a5a1b3Sopenharmony_ci Only one passage of Front-Cover Text and one of Back-Cover Text may be
1182453a5a1b3Sopenharmony_ci added by (or through arrangements made by) any one entity.
1182553a5a1b3Sopenharmony_ci If the Document already includes a cover text for the same cover, previously
1182653a5a1b3Sopenharmony_ci added by you or by arrangement made by the same entity you are acting on
1182753a5a1b3Sopenharmony_ci behalf of, you may not add another; but you may replace the old one, on
1182853a5a1b3Sopenharmony_ci explicit permission from the previous publisher that added the old one.
1182953a5a1b3Sopenharmony_ci\end_layout
1183053a5a1b3Sopenharmony_ci
1183153a5a1b3Sopenharmony_ci\begin_layout Standard
1183253a5a1b3Sopenharmony_ciThe author(s) and publisher(s) of the Document do not by this License give
1183353a5a1b3Sopenharmony_ci permission to use their names for publicity for or to assert or imply endorseme
1183453a5a1b3Sopenharmony_cint of any Modified Version.
1183553a5a1b3Sopenharmony_ci 
1183653a5a1b3Sopenharmony_ci\end_layout
1183753a5a1b3Sopenharmony_ci
1183853a5a1b3Sopenharmony_ci\begin_layout Section*
1183953a5a1b3Sopenharmony_ci5.
1184053a5a1b3Sopenharmony_ci COMBINING DOCUMENTS
1184153a5a1b3Sopenharmony_ci\end_layout
1184253a5a1b3Sopenharmony_ci
1184353a5a1b3Sopenharmony_ci\begin_layout Standard
1184453a5a1b3Sopenharmony_ciYou may combine the Document with other documents released under this License,
1184553a5a1b3Sopenharmony_ci under the terms defined in section 4 above for modified versions, provided
1184653a5a1b3Sopenharmony_ci that you include in the combination all of the Invariant Sections of all
1184753a5a1b3Sopenharmony_ci of the original documents, unmodified, and list them all as Invariant Sections
1184853a5a1b3Sopenharmony_ci of your combined work in its license notice.
1184953a5a1b3Sopenharmony_ci\end_layout
1185053a5a1b3Sopenharmony_ci
1185153a5a1b3Sopenharmony_ci\begin_layout Standard
1185253a5a1b3Sopenharmony_ciThe combined work need only contain one copy of this License, and multiple
1185353a5a1b3Sopenharmony_ci identical Invariant Sections may be replaced with a single copy.
1185453a5a1b3Sopenharmony_ci If there are multiple Invariant Sections with the same name but different
1185553a5a1b3Sopenharmony_ci contents, make the title of each such section unique by adding at the end
1185653a5a1b3Sopenharmony_ci of it, in parentheses, the name of the original author or publisher of
1185753a5a1b3Sopenharmony_ci that section if known, or else a unique number.
1185853a5a1b3Sopenharmony_ci Make the same adjustment to the section titles in the list of Invariant
1185953a5a1b3Sopenharmony_ci Sections in the license notice of the combined work.
1186053a5a1b3Sopenharmony_ci\end_layout
1186153a5a1b3Sopenharmony_ci
1186253a5a1b3Sopenharmony_ci\begin_layout Standard
1186353a5a1b3Sopenharmony_ciIn the combination, you must combine any sections entitled "History" in
1186453a5a1b3Sopenharmony_ci the various original documents, forming one section entitled "History";
1186553a5a1b3Sopenharmony_ci likewise combine any sections entitled "Acknowledgements", and any sections
1186653a5a1b3Sopenharmony_ci entitled "Dedications".
1186753a5a1b3Sopenharmony_ci You must delete all sections entitled "Endorsements."
1186853a5a1b3Sopenharmony_ci\end_layout
1186953a5a1b3Sopenharmony_ci
1187053a5a1b3Sopenharmony_ci\begin_layout Section*
1187153a5a1b3Sopenharmony_ci6.
1187253a5a1b3Sopenharmony_ci COLLECTIONS OF DOCUMENTS
1187353a5a1b3Sopenharmony_ci\end_layout
1187453a5a1b3Sopenharmony_ci
1187553a5a1b3Sopenharmony_ci\begin_layout Standard
1187653a5a1b3Sopenharmony_ciYou may make a collection consisting of the Document and other documents
1187753a5a1b3Sopenharmony_ci released under this License, and replace the individual copies of this
1187853a5a1b3Sopenharmony_ci License in the various documents with a single copy that is included in
1187953a5a1b3Sopenharmony_ci the collection, provided that you follow the rules of this License for
1188053a5a1b3Sopenharmony_ci verbatim copying of each of the documents in all other respects.
1188153a5a1b3Sopenharmony_ci\end_layout
1188253a5a1b3Sopenharmony_ci
1188353a5a1b3Sopenharmony_ci\begin_layout Standard
1188453a5a1b3Sopenharmony_ciYou may extract a single document from such a collection, and distribute
1188553a5a1b3Sopenharmony_ci it individually under this License, provided you insert a copy of this
1188653a5a1b3Sopenharmony_ci License into the extracted document, and follow this License in all other
1188753a5a1b3Sopenharmony_ci respects regarding verbatim copying of that document.
1188853a5a1b3Sopenharmony_ci 
1188953a5a1b3Sopenharmony_ci\end_layout
1189053a5a1b3Sopenharmony_ci
1189153a5a1b3Sopenharmony_ci\begin_layout Section*
1189253a5a1b3Sopenharmony_ci7.
1189353a5a1b3Sopenharmony_ci AGGREGATION WITH INDEPENDENT WORKS
1189453a5a1b3Sopenharmony_ci\end_layout
1189553a5a1b3Sopenharmony_ci
1189653a5a1b3Sopenharmony_ci\begin_layout Standard
1189753a5a1b3Sopenharmony_ciA compilation of the Document or its derivatives with other separate and
1189853a5a1b3Sopenharmony_ci independent documents or works, in or on a volume of a storage or distribution
1189953a5a1b3Sopenharmony_ci medium, does not as a whole count as a Modified Version of the Document,
1190053a5a1b3Sopenharmony_ci provided no compilation copyright is claimed for the compilation.
1190153a5a1b3Sopenharmony_ci Such a compilation is called an "aggregate", and this License does not
1190253a5a1b3Sopenharmony_ci apply to the other self-contained works thus compiled with the Document,
1190353a5a1b3Sopenharmony_ci on account of their being thus compiled, if they are not themselves derivative
1190453a5a1b3Sopenharmony_ci works of the Document.
1190553a5a1b3Sopenharmony_ci\end_layout
1190653a5a1b3Sopenharmony_ci
1190753a5a1b3Sopenharmony_ci\begin_layout Standard
1190853a5a1b3Sopenharmony_ciIf the Cover Text requirement of section 3 is applicable to these copies
1190953a5a1b3Sopenharmony_ci of the Document, then if the Document is less than one quarter of the entire
1191053a5a1b3Sopenharmony_ci aggregate, the Document's Cover Texts may be placed on covers that surround
1191153a5a1b3Sopenharmony_ci only the Document within the aggregate.
1191253a5a1b3Sopenharmony_ci Otherwise they must appear on covers around the whole aggregate.
1191353a5a1b3Sopenharmony_ci\end_layout
1191453a5a1b3Sopenharmony_ci
1191553a5a1b3Sopenharmony_ci\begin_layout Section*
1191653a5a1b3Sopenharmony_ci8.
1191753a5a1b3Sopenharmony_ci TRANSLATION
1191853a5a1b3Sopenharmony_ci\end_layout
1191953a5a1b3Sopenharmony_ci
1192053a5a1b3Sopenharmony_ci\begin_layout Standard
1192153a5a1b3Sopenharmony_ciTranslation is considered a kind of modification, so you may distribute
1192253a5a1b3Sopenharmony_ci translations of the Document under the terms of section 4.
1192353a5a1b3Sopenharmony_ci Replacing Invariant Sections with translations requires special permission
1192453a5a1b3Sopenharmony_ci from their copyright holders, but you may include translations of some
1192553a5a1b3Sopenharmony_ci or all Invariant Sections in addition to the original versions of these
1192653a5a1b3Sopenharmony_ci Invariant Sections.
1192753a5a1b3Sopenharmony_ci You may include a translation of this License provided that you also include
1192853a5a1b3Sopenharmony_ci the original English version of this License.
1192953a5a1b3Sopenharmony_ci In case of a disagreement between the translation and the original English
1193053a5a1b3Sopenharmony_ci version of this License, the original English version will prevail.
1193153a5a1b3Sopenharmony_ci\end_layout
1193253a5a1b3Sopenharmony_ci
1193353a5a1b3Sopenharmony_ci\begin_layout Section*
1193453a5a1b3Sopenharmony_ci9.
1193553a5a1b3Sopenharmony_ci TERMINATION
1193653a5a1b3Sopenharmony_ci\end_layout
1193753a5a1b3Sopenharmony_ci
1193853a5a1b3Sopenharmony_ci\begin_layout Standard
1193953a5a1b3Sopenharmony_ciYou may not copy, modify, sublicense, or distribute the Document except
1194053a5a1b3Sopenharmony_ci as expressly provided for under this License.
1194153a5a1b3Sopenharmony_ci Any other attempt to copy, modify, sublicense or distribute the Document
1194253a5a1b3Sopenharmony_ci is void, and will automatically terminate your rights under this License.
1194353a5a1b3Sopenharmony_ci However, parties who have received copies, or rights, from you under this
1194453a5a1b3Sopenharmony_ci License will not have their licenses terminated so long as such parties
1194553a5a1b3Sopenharmony_ci remain in full compliance.
1194653a5a1b3Sopenharmony_ci 
1194753a5a1b3Sopenharmony_ci\end_layout
1194853a5a1b3Sopenharmony_ci
1194953a5a1b3Sopenharmony_ci\begin_layout Section*
1195053a5a1b3Sopenharmony_ci10.
1195153a5a1b3Sopenharmony_ci FUTURE REVISIONS OF THIS LICENSE
1195253a5a1b3Sopenharmony_ci\end_layout
1195353a5a1b3Sopenharmony_ci
1195453a5a1b3Sopenharmony_ci\begin_layout Standard
1195553a5a1b3Sopenharmony_ciThe Free Software Foundation may publish new, revised versions of the GNU
1195653a5a1b3Sopenharmony_ci Free Documentation License from time to time.
1195753a5a1b3Sopenharmony_ci Such new versions will be similar in spirit to the present version, but
1195853a5a1b3Sopenharmony_ci may differ in detail to address new problems or concerns.
1195953a5a1b3Sopenharmony_ci See http://www.gnu.org/copyleft/.
1196053a5a1b3Sopenharmony_ci\end_layout
1196153a5a1b3Sopenharmony_ci
1196253a5a1b3Sopenharmony_ci\begin_layout Standard
1196353a5a1b3Sopenharmony_ciEach version of the License is given a distinguishing version number.
1196453a5a1b3Sopenharmony_ci If the Document specifies that a particular numbered version of this License
1196553a5a1b3Sopenharmony_ci "or any later version" applies to it, you have the option of following
1196653a5a1b3Sopenharmony_ci the terms and conditions either of that specified version or of any later
1196753a5a1b3Sopenharmony_ci version that has been published (not as a draft) by the Free Software Foundatio
1196853a5a1b3Sopenharmony_cin.
1196953a5a1b3Sopenharmony_ci If the Document does not specify a version number of this License, you
1197053a5a1b3Sopenharmony_ci may choose any version ever published (not as a draft) by the Free Software
1197153a5a1b3Sopenharmony_ci Foundation.
1197253a5a1b3Sopenharmony_ci\end_layout
1197353a5a1b3Sopenharmony_ci
1197453a5a1b3Sopenharmony_ci\begin_layout Standard
1197553a5a1b3Sopenharmony_ci\begin_inset CommandInset index_print
1197653a5a1b3Sopenharmony_ciLatexCommand printindex
1197753a5a1b3Sopenharmony_ci
1197853a5a1b3Sopenharmony_ci\end_inset
1197953a5a1b3Sopenharmony_ci
1198053a5a1b3Sopenharmony_ci
1198153a5a1b3Sopenharmony_ci\end_layout
1198253a5a1b3Sopenharmony_ci
1198353a5a1b3Sopenharmony_ci\end_body
1198453a5a1b3Sopenharmony_ci\end_document
11985