[Speex-dev] ACE does not work for me at all.

fanchuan0077 at gmail.com fanchuan0077 at gmail.com
Sun Jun 27 19:57:47 PDT 2010

Hello, all.

1) ACE does not work for me
I am in a voip project using Speex, failed to have hte Speex ACE work. here  
is how I initialize it:
* Configurations :
* #define BITS_PER_SAMPLE (16)
* #define SAMPLE_RATE (8000)
* #define CHANNEL_NB (1)
* #define DURATION (20)
_eco_state = speex_echo_state_init(_encframe_size, 10*_encframe_size);
speex_echo_ctl(_eco_state, SPEEX_ECHO_SET_SAMPLING_RATE, &_sample_rate);

_den_state = speex_preprocess_state_init(_encframe_size, _sample_rate);
speex_preprocess_ctl(_den_state, SPEEX_PREPROCESS_SET_ECHO_STATE,  

speex_preprocess_ctl(_den_state, SPEEX_PREPROCESS_SET_DENOISE, &tmp);
speex_preprocess_ctl(_den_state, SPEEX_PREPROCESS_SET_AGC, &tmp);
ftmp=24000; // actually default is 8000(0,32768),here make it louder for  
voice is not loudy enough by default. 8000
speex_preprocess_ctl(_den_state, SPEEX_PREPROCESS_SET_AGC_LEVEL, &ftmp);
speex_preprocess_ctl(_den_state, SPEEX_PREPROCESS_SET_VAD, &tmp);

and following is how I cancel echo:

I have a player class and a recorder class using windows wavein and waveout  
with waveInProc and waveOutProc event handlers

void __stdcall WFAudioPlayer::WaveOutProc(HWAVEOUT hWaveOut,UINT uMsg,DWORD  
dwInstance,DWORD dwParam1,DWORD dwParam2)
if(uMsg != WOM_DONE)

WFAudioPlayer* player = reinterpret_cast<WFAudioPlayer*>(dwInstance);

if (player)
// get the frame to be played back next.
tByte* nextframe = player->GetNextBlockFrame();

* No matter the following two lines are commented or not, the voip  
performances are the same, with echo.
// make speex AEC buffer it for echo cancellation for recorder
if (nextframe)

void WFAudioRecorder::ProcessRecordedFrame(tByte* record)
static tUInt32 timestamp_counter = 0;

// cancel echo

and ACE seems not work for me at all. I don't know why. the voices are the  
same whether I cancel echo or not,full of echos.

Any help would be appreciated, thanks.

BTW speex_echo_state_destroy crashes if the echo state was initialized with  
filter length 0.
_eco_state = speex_echo_state_init(_encframe_size, 0);
I know it's unreasonable to make filter length 0, but crash is  
unacceptable, I think.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20100628/4ccc050d/attachment.htm 

More information about the Speex-dev mailing list