<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:SimSun;}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
pre
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:SimSun;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=EN-US link=blue vlink=blue>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Assumption of a quiet room is inapplicable
in reality. Plus, the impulse response might change in the middle of a call … so,
you basically need to find a good initial alignment point, then, track it along
the way. Make it reliable is very much the key.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div>

<div class=MsoNormal align=center style='text-align:center'><font size=3
face=SimSun><span style='font-size:12.0pt'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
speex-dev-bounces@xiph.org [mailto:speex-dev-bounces@xiph.org] <b><span
style='font-weight:bold'>On Behalf Of </span></b>Li Maoquan<br>
<b><span style='font-weight:bold'>Sent:</span></b> Wednesday, April 20, 2011
5:36 PM<br>
<b><span style='font-weight:bold'>To:</span></b> speex-dev@xiph.org<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Speex-dev] Acoustic
echo cancellation</span></font><o:p></o:p></p>

</div>

<p class=MsoNormal><font size=3 face=SimSun><span style='font-size:12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face=SimSun><span style='font-size:12.0pt'>Simply
to say, in a quiet room, you can play a impulse signal and then find it's
impulse response signal from the <br>
microphone. For example, if the delay between the impulse signal and its
response signal range from 500 to<br>
3000 cycles, you can buffer the far-end signal to 0-300 cycles and set the
filter length to 4000. It is also called<br>
to align far-end signal and near-end signal.<br>
<br>
BTW: Speex AEC is sensiive to mismatch between sample rates of capturing and
rendering. But most low-cost<br>
computer soundcards have this problem.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=SimSun><span style='font-size:12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<pre><font size=3 face=SimSun><span style='font-size:12.0pt'><br>
At&nbsp;2011-04-21&nbsp;03:00:01<span lang=ZH-CN>,</span><st1:PersonName w:st="on">speex-dev-request@xiph.org</st1:PersonName>&nbsp;wrote:<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;I&nbsp;have&nbsp;a&nbsp;scenario&nbsp;in&nbsp;a&nbsp;mobile&nbsp;VoIP&nbsp;app&nbsp;that&nbsp;requires&nbsp;echo&nbsp;cancellation<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;but<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;is&nbsp;somewhat&nbsp;different&nbsp;from&nbsp;what's&nbsp;described&nbsp;in&nbsp;the&nbsp;docs.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;Audio&nbsp;is&nbsp;received&nbsp;from&nbsp;and&nbsp;sent&nbsp;to&nbsp;the&nbsp;network&nbsp;at&nbsp;8000Hz.&nbsp;Each&nbsp;packet<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;contains&nbsp;160&nbsp;samples&nbsp;worth&nbsp;a&nbsp;playback&nbsp;of&nbsp;20ms.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;But&nbsp;the&nbsp;hardware&nbsp;requires&nbsp;aggregation&nbsp;for&nbsp;both&nbsp;playback&nbsp;and&nbsp;capture.&nbsp;So<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;for<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;playback,&nbsp;I&nbsp;coalesce&nbsp;4&nbsp;packets&nbsp;in&nbsp;a&nbsp;buffer&nbsp;and&nbsp;queue&nbsp;them&nbsp;as&nbsp;a&nbsp;larger<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;buffer<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;for&nbsp;playback.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;On&nbsp;the&nbsp;send&nbsp;side,&nbsp;I&nbsp;read&nbsp;a&nbsp;large&nbsp;buffer&nbsp;(worth&nbsp;4&nbsp;packets)&nbsp;and&nbsp;send&nbsp;them<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;out<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;over&nbsp;time&nbsp;20ms&nbsp;apart.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;I&nbsp;tried&nbsp;using&nbsp;speex_echo_playback&nbsp;just&nbsp;when&nbsp;a&nbsp;160-sample&nbsp;packet&nbsp;arrives<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;from<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;the&nbsp;network,&nbsp;before&nbsp;coalescing&nbsp;and&nbsp;speex_echo_capture&nbsp;just&nbsp;before&nbsp;a<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;packet<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;is&nbsp;sent&nbsp;out&nbsp;to&nbsp;the&nbsp;network&nbsp;but&nbsp;that&nbsp;doesn't&nbsp;seem&nbsp;to&nbsp;work&nbsp;properly<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;(doesn't<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;cancel&nbsp;any&nbsp;echo).<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&nbsp;The&nbsp;most&nbsp;likely&nbsp;reason&nbsp;is&nbsp;that&nbsp;you&nbsp;didn't&nbsp;align&nbsp;the&nbsp;far-end&nbsp;and&nbsp;near-end<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;samples.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&nbsp;So&nbsp;the&nbsp;filter&nbsp;can&nbsp;not&nbsp;converge.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;Thanks&nbsp;for&nbsp;your&nbsp;response.&nbsp;Can&nbsp;you&nbsp;please&nbsp;explain&nbsp;what&nbsp;you&nbsp;mean&nbsp;by<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;align&nbsp;samples&nbsp;from&nbsp;near-end&nbsp;and&nbsp;far-end?&nbsp;And&nbsp;how&nbsp;is&nbsp;that&nbsp;usually<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;accomplished?<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;You&nbsp;need&nbsp;to&nbsp;know&nbsp;the&nbsp;total&nbsp;delay&nbsp;caused&nbsp;by&nbsp;DAC&nbsp;buffer&nbsp;before&nbsp;speaker,&nbsp;ADC<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;buffer<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;after&nbsp;microphone&nbsp;and&nbsp;acoustic&nbsp;path&nbsp;between&nbsp;speaker&nbsp;and&nbsp;microphone.&nbsp;Simply<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;to&nbsp;say,<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;if&nbsp;you&nbsp;play&nbsp;an&nbsp;impluse&nbsp;signal&nbsp;and&nbsp;its&nbsp;first&nbsp;echo&nbsp;appears&nbsp;after&nbsp;N&nbsp;sample<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;cycles,<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;you&nbsp;can&nbsp;call&nbsp;N&nbsp;as&nbsp;the&nbsp;delay&nbsp;between&nbsp;y&nbsp;(echo&nbsp;in&nbsp;near-end&nbsp;signal)&nbsp;and&nbsp;x<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;(far-end<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;signal).&nbsp;Then&nbsp;you&nbsp;can&nbsp;buffer&nbsp;far-end&nbsp;signal&nbsp;for&nbsp;N-M&nbsp;cycles&nbsp;before&nbsp;sending<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;to&nbsp;AEC.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;M&nbsp;is&nbsp;a&nbsp;little&nbsp;number&nbsp;(such&nbsp;as&nbsp;100)&nbsp;in&nbsp;order&nbsp;to&nbsp;avoid&nbsp;filter&nbsp;failure&nbsp;when<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;echo<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;path&nbsp;drifts.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;Thanks&nbsp;again.&nbsp;I&nbsp;am&nbsp;trying&nbsp;to&nbsp;model&nbsp;the&nbsp;delay&nbsp;between&nbsp;the&nbsp;near&nbsp;and&nbsp;far&nbsp;end<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;signals&nbsp;using&nbsp;a&nbsp;circular&nbsp;queue&nbsp;of&nbsp;length&nbsp;n.&nbsp;Every&nbsp;time&nbsp;a&nbsp;frame&nbsp;is&nbsp;received<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;and&nbsp;queued&nbsp;for&nbsp;playback,&nbsp;it&nbsp;is&nbsp;also&nbsp;entered&nbsp;into&nbsp;the&nbsp;queue.&nbsp;Each&nbsp;frame&nbsp;being<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;read&nbsp;from&nbsp;the&nbsp;mic&nbsp;is&nbsp;echo-cancelled&nbsp;(&nbsp;speex_echo_cancellation&nbsp;)&nbsp;using&nbsp;the<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;oldest&nbsp;frame&nbsp;in&nbsp;the&nbsp;queue&nbsp;if&nbsp;the&nbsp;queue&nbsp;is&nbsp;filled&nbsp;up,&nbsp;thus&nbsp;I&nbsp;am&nbsp;cancelling<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;the&nbsp;recorded&nbsp;frame&nbsp;using&nbsp;a&nbsp;playback&nbsp;frame&nbsp;that&nbsp;is&nbsp;N-frames&nbsp;old.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;I&nbsp;have&nbsp;played&nbsp;with&nbsp;different&nbsp;values&nbsp;of&nbsp;N&nbsp;from&nbsp;2&nbsp;to&nbsp;50&nbsp;(320&nbsp;samples&nbsp;to&nbsp;8000<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;samples),&nbsp;attempting&nbsp;to&nbsp;align&nbsp;the&nbsp;input&nbsp;and&nbsp;output&nbsp;but&nbsp;the&nbsp;cancellation<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;doesn't&nbsp;seem&nbsp;to&nbsp;work.&nbsp;The&nbsp;echo&nbsp;is&nbsp;steady&nbsp;as&nbsp;ever.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;Is&nbsp;this&nbsp;model&nbsp;correct&nbsp;and&nbsp;expected&nbsp;to&nbsp;converge&nbsp;with&nbsp;a&nbsp;right&nbsp;value&nbsp;of&nbsp;&quot;N&quot;?&nbsp;Or<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;do&nbsp;I&nbsp;need&nbsp;some&nbsp;other&nbsp;adaptation&nbsp;to&nbsp;account&nbsp;for&nbsp;drifts&nbsp;here.&nbsp;Right&nbsp;now,&nbsp;it's<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;a&nbsp;black&nbsp;box&nbsp;for&nbsp;me.&nbsp;I&nbsp;am&nbsp;not&nbsp;sure&nbsp;how&nbsp;to&nbsp;get&nbsp;some&nbsp;feedback&nbsp;from&nbsp;this&nbsp;system<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;to&nbsp;tune&nbsp;the&nbsp;AEC&nbsp;(and&nbsp;the&nbsp;delay&nbsp;parameters)&nbsp;correctly.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;Also,&nbsp;I&nbsp;did&nbsp;not&nbsp;follow&nbsp;the&nbsp;use&nbsp;of&nbsp;&quot;M&quot;&nbsp;in&nbsp;your&nbsp;description&nbsp;above&nbsp;and&nbsp;how&nbsp;it<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;helps&nbsp;with&nbsp;drifts.&nbsp;My&nbsp;queue&nbsp;stores&nbsp;frames&nbsp;(160&nbsp;samples&nbsp;each).&nbsp;So&nbsp;a&nbsp;number&nbsp;of<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;100&nbsp;samples&nbsp;seems&nbsp;too&nbsp;small.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;Btw,&nbsp;I&nbsp;am&nbsp;assuming&nbsp;that&nbsp;speex&nbsp;AEC&nbsp;API&nbsp;can&nbsp;be&nbsp;used&nbsp;even&nbsp;though&nbsp;I&nbsp;am&nbsp;not&nbsp;using<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;the&nbsp;speex&nbsp;encoder/decoder.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;<o:p>&nbsp;</o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&gt;&nbsp;So,&nbsp;in&nbsp;this&nbsp;scenario&nbsp;above,&nbsp;please&nbsp;recommend&nbsp;a&nbsp;good&nbsp;place&nbsp;to&nbsp;insert<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;speex_echo_playback&nbsp;and&nbsp;speex_echo_capture.&nbsp;Should&nbsp;I&nbsp;be&nbsp;just&nbsp;before&nbsp;the<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;read<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;and&nbsp;write&nbsp;to&nbsp;hardware?&nbsp;In&nbsp;that&nbsp;case,&nbsp;should&nbsp;I&nbsp;use&nbsp;a&nbsp;larger&nbsp;&quot;frame&nbsp;size&quot;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;of<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;&nbsp;160&nbsp;samples&nbsp;x&nbsp;4?<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&nbsp;Of&nbsp;course&nbsp;you&nbsp;can&nbsp;set&nbsp;frame&nbsp;size&nbsp;to&nbsp;160*4.&nbsp;Otherwise&nbsp;you&nbsp;can&nbsp;feed<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;samples&nbsp;4&nbsp;times<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&nbsp;to&nbsp;the&nbsp;AEC&nbsp;if&nbsp;you&nbsp;don't&nbsp;want&nbsp;to&nbsp;modify&nbsp;the&nbsp;frame&nbsp;size.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&gt;<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&nbsp;Thanks&nbsp;in&nbsp;advance,<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'>&gt;&gt;&nbsp;&gt;&gt;&nbsp;Daniel.<o:p></o:p></span></font></pre><pre><font
size=3 face=SimSun><span style='font-size:12.0pt'><o:p>&nbsp;</o:p></span></font></pre>

<p class=MsoNormal><font size=3 face=SimSun><span style='font-size:12.0pt'><br>
<br>
<br>
<o:p></o:p></span></font></p>

<span title=neteasefooter><span id="netease_mail_footer">

<div class=MsoNormal align=center style='text-align:center'><font size=3
face=SimSun><span style='font-size:12.0pt'>

<hr size=2 width="100%" align=center>

</span></font></div>

<p class=MsoNormal><font size=3 face=SimSun><span style='font-size:12.0pt'><a
href="http://mail.163.com/html/110414_attachment/att1.htm" target="_blank"><span
lang=ZH-CN>体验网易邮箱</span>2G<span lang=ZH-CN>超大附件,轻松发优质大电影、大照片,提速</span>3<span
lang=ZH-CN>倍</span>!</a> </span><o:p></o:p></span></font></p>

</span></div>

</body>

</html>