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