[speex-dev] Memory leak in denoiser + a few questions

Steve Kann
Fri, 06 Aug 2004 15:02:00 -0000

On Mar 28, 2004, at 8:23 PM, Jean-Marc Valin wrote:

>> The st->zeta pointer isn't freed in the
>> speex_preprocess_state_destroy()
>> function of the preprocess.c file (alloced in line 167). It's in
>> Speex 1.1.4
>> by the way.
>
> Oops... Thanks for letting me know. I'll change that for the next
> release (in the mean time, the fix is obvious). In case you're
> interested, I'm currently working on a reverberation suppression
> algorithm. I'll put it in CVS.

Reverberation suppression?

I guess this would help reduce local source echoes?  I've never
_noticed_ that to be a problem in my use, but I would imagine that
using a notebook's built-in microphone, you'd get some echo off of the
screen and stuff [also from the whole room]..

Most of these echoes aren't so bad, but I guess they might make the
encoding job harder.  I'd sure rather see the echo cancellation
finished [not that I have any say on what you work on!!!].

FWIW, I'm currently using noise reduction, VAD, and AGC in a VoIP
client which is getting more use out there, and it's working well.

I'm currently using VAD in a conferencing application [where the VAD
decision helps me avoid adding noise to the common conference, and
ostensibly avoid redundant mixing steps].  The problem here is that VAD
is very expensive.  I did a little set of tests, and VAD is currently
my bottleneck for users who are using it..

Here's the numbers I got doing vad on 655 seconds of audio (about half
is speech, half is absolute silence [0's]).
P3-600: 25 seconds
Athlon XP 1700+ (1.45Ghz): 5 seconds
P4 2.8Ghz: 8.8 seconds.

I was surprised to see the Athlon win this by such a wide margin, but I
triple-checked to make sure the machine was idle, and the binaries and
test data were exactly the same (compiled with just -O2).

Anyway, I think I might need to find a less computationally intensive
VAD solution for the conference.  VAD is currently only used when
people connect via the PSTN, so they presumably have a decent SNR, and
I may be able to get away with an energy envelope type of thing,
without needing frequency domain analysis.  But before I go and start
coding this, is there any simple optimizations that can be done to the
preprocessor when it is  being used only for the VAD decision?