Software Based Echo Cancellation?
"For some more information, my office is trying to get a small system up and running that will allow multiple locations to video conference together. We have some specific requirements and have a fairly good handle on the entire video part of the problem.
However, we are running into problems with parts of our audio mix. The first issue is something that (I believe) is called 'mix minus.' This means that in a group conference, speakers do not have audio sent back to their location. (This is important for various psychology and network latency related issues.) There are several hardware based solutions that are available and we have some software based options.
The larger problem is echo cancellation. As many people may need to speak at once (and to avoid the requirement of having individuals constantly muting their microphones), we would like an echo cancellation component. The ideal would be a software solution that we could run locally, perhaps in conjunction with the same code running on the remote systems. However, most of the solutions we have found are hardware based (DSPs, ASICs, etc.).
The technology used on the studio side as well as the host side will involve various operating systems. We are trying to avoid avoid relying on specific OTC hardware solutions (namely, sound cards) as we would like to be able to create a solution that would function over time, particularly as specific hardware solutions tend quickly to horizon. So, having nice code that could be compiled on different systems would be a plus. Ideally, we would like to minimize the amount of hardware necessary, so an echo cancellation algorithm that could run in conjunction with other processes would be nice, but it is not a requirement."
The reason you're finding more hardware tools than software tools for echo cancellation, among other things, is that the telecommunications industry demands these sorts of things with much more fervor than the average consumer. Echo cancellation devices (for example, a codec with echo cancellation built in, running on a DSP) are used extensively in cellular telephones, voice routers, and this sort of thing. Your best bet, in this respect, is to find a company that is willing to release the source code to the software that is running on your hardware.
Alas, I do not know of any software, especially open source or free, that provides a full suite of audio processing utilities. Why is it that you're against using hardware, in the first place? Too expensive? Those are the breaks.
As many people may need to speak at once (and to avoid the requirement of having individuals constantly muting their microphones),
Why not just install a noise gate at the microphone inputs?
For the non-audio-inclined slashdotters, a noise gate sets a minimum sound level threshold before the signal is transmitted.
sed 's/^echo/#echo/' /etc/inetd.conf >/etc/inetd.new /etc/inetd.new /etc/inetd.conf
mv
kill -HUP $(ps -ef |grep root.*inetd|grep -v grep|awk '{print $2}')
no more echo
There's an excellent open-source PBX called Asterisk. Among other things, it provides an MMX-optimized echo-canceller. Look here
Maybe someone at /. will find an answer for you, but I would be surprised to see this implemented in any kind of stand alone SW package. Because it is a specialized real-time application requiring fast feedback, it makes sense to implement it as an embedded system (i.e. in hardware).
Back in the day when 56k modems were taking off, there was a large piece of software people were coding into drivers called 'Ring Cancelation'.
:-)
These were added because when you send data down an analog line at high speeds, you begin to hear an audible sound which sounds like ringing. The modem drivers needed to be able to tell the difference between this ringing sound and the actual data.
I think a good place to start if you cannot find any software is perhaps hacking these drivers or something along those lines.
It's a good start at least. Hope this helps
This is a great question you are asking, and I would love to see a good answer. The shame of it is, I'm expecting to see a bunch of posts in response to this saying "If you need one then write it yourself".
Is it just me, or does it seem like the open source offerings for things related to audio/video are lacking in general? I wish I had time to make improvements myself, or the money to contribute to the developers, but it seems like we need more in this area to be able to be more competitive with proprietary solutions.
Sigs are out of style, so I'm not going to use one...oh wait..
Echo cancellation is a classic application of adaptive filters. Every reference ever published on the subject discusses it. I like Haykin's book myself.
I just did a search on Google and came up with 4000 references.
The underlying theory is pretty hairy, but the implementation of an algorithm like LMS is straightforward.
...laura
The Access Grid is a project started at Argonne National Lab's Math and Computer Science Division to build a mostly open videoconferencing system over the Internet, using multicast audio and video streaming. You may want to take a look at their technology to see if they have ideas you can use.
Anyway, a "node" on the Access Grid consists of a room with at least three computers: a multihead box running Win2k for display to several video projectors, a computer running Linux for audio capture and playback, and another running Linux for video capture. The audio capture machine usually runs into a Gentner AP400, which does echo cancellation as well as phone bridging.
I don't know of anybody who has software that does this; sorry.
"My life's work has been to prompt others... and be forgotten." --Cyrano de Bergerac
I remember when I worked at Tellabs we had a product, EC-8000 Digital Echo Canceller Might be worth a look.
Notably, a lead such as: http://www.nist.gov/speech/tests/ctr/h5e_97/echoca n.htm
Sig: What Happened To The Censorware Project (censorware.org)
Check out Analog devices; their 2181 demo has echo cancellation as a part of the included software; source included.
...is because it doesn't exist.
Realtime processing, AFAIK, be it audio or video, is astonishingly processer-intensive. It doesn't surprise me that DSPs are being used for this reason: they may be the only thing that can cut it in a cost-effective manner.
i.e. you may be able to build a high-end workstation, and write some real-time software to handle this task, but since it probably wouldn't be able to do anything else at the same time doesn't that qualify as a hardware solution?
Perhaps instead of going to extreme lengths to remove echos, perhaps you just need to work harder to prevent them in the first place? Pro audio mags have tons of ways to reduce echo and other unwanted effects in small (usually home) studios. Have you looked into this?
Michael-
You catch enchiladas by picking them up behind the head and holding them underwater until they don't kick anymore -VeGas
Look here for my echo-cancellation code:g z
http://speex.sourceforge.net/audio/sndio.t
It's bundled with open-sound calls to read and write audio in real-time, while removing acoustic echo from the input. There's not much doc, but the test2.c program is quite simple. Feel free to contact me at jean-marc.valin@hermes.usherb.ca. Note that there's no real project (sourceforge or other) assiciated to it but if you find it useful, I may create one.
Opus: the Swiss army knife of audio codec
1) Use directional microphones, or else throat mikes. This will make the neigbour's microphone only pick some one up very quietly, if at all.
2)if there is still some echo problem, it should be quiet enough that simple (software) noise gates should solve the problem.
I've been hearing about some new technology from Macromedia that might make your life a *lot* easier. Apparently the Flash 6 plugin supports hooking into both webcams and mics (after the user OKs it) as well as special socket-based connections to a new piece of server software codenamed TinCan. In addition they've talked about the server supporting shared objects as well.
From what it seems you're able to put code on both the client and server and both are based on ECMAscript. This would let you do a lot more than nearly every other solution I've ever seen. I don't know when the server is supposed to be released, but if you check up on the recent interviews with MMs CTO Jeremy Allaire on C|Net or The Register you'll see that they seem to be hinting that it will be available later this year.
A|Q|U|A
Most solutions offered by Ditech, Telogy, etc. cancel the electrical echo caused by an impedance mismatch 2 to 4-wire hybrids in the analog part of the Old Telephone Network. You seem to develop a packet-based videoconferencing system, which has no hybrid in it, so you must want to cancel acoustic echo, caused by reflection of the sound produced by the speaker-phone on the walls of a conference room.
This is a very hard problem, because you have to modelize the environment of each conference room. You will have to guess mathematically (with the LMS algorithm for example) the echo response on a tail of at least 128ms for each room, which would take at least a few minutes to one hour on a P4 2GHz system.
And what about if a door is suddenly closed in the conference room? Or what if the speaker phone is moved? You will have to re-modelize your echo response each time that happens, because the geometry of the room will have changed.
The solution is surely not a software echo cancellation system, at least not before 2010.
Think about a hardware solution, DSPs or ASICs (http://www.octasic.com)
I guess I don't see why NOT routing the audio back would be a problem, or maybe I don't understand the question.
Otherwise, save your paper towel rolls, and hand them out before a meeting. I don't do this for a living, so YMMV.
#define AdaptationRate 0.99
;-)
// Basic adaptive LMS FIR algorithm.
float EchoCancellation(float Sample)
{
static float History[MAX_ECHO_DURATION+1] = 0;
int i;
float AdaptationRate;
float EchoAmpl;
for( i=0; iMAX_ECHO_DURATION; i++)
{
EchoAmpl = History[i]*Coef[i];
Coef[i] *= AdaptiationRate*(Sample-EchoAmpl);
History[i+1] = History[i];
}
History[0] = Sample;
return Sample-EchoAmpl;
}
That's all the "basic" science.
You might find, that for 40kHz and 250ms echo this is too computationally intensive for a single Pentium. You may need some 1200 MIPS.
You may then:
1. Use Athalon
2. Convert it to pointer arithmetic
3. Convert it to integer arighmetic
4. Skip some samples for echo estimation, sometimes
5. Contact me to use more clever algoritm (IIR?)
(Petrus.Vectorius@ied.com)
if you are creating your studio then you need to make the studio fix the problem first, dont try to compensate for a crapy studio in the recording hardware/software.
#1- Sonex, sonex, sonex. If you dont have sonex or the crappy sonex copy or even just carpet on the walls (Yes wall carpet looks good) along with the roughest texture ceiling tiles you can buy at the home-depot (or better yet the $90,00 a 2foot square city scape audio ceiling tiles) then you are wasting your time. it takes very little to make a room acoustically deadened to the point that properly set up microphones wont pick up any perceptiable echo. (Note: if you have you're mic's set so your artists or voice talent is farther away than 3 inches from the P popping screen then you have it set wrong. also dont let the talent talk quietly, make then talk or sing loud to overcome room acoustics.
start with the low tech, then add your high tech bandaid filters.
Do not look at laser with remaining good eye.
Hell I helped build one. And while there is a LOT of noise cancellation and "echo reduction" software on the market (Cool Edit Pro has a few nice plug ins) the sound quality after applying such a filter could at best be called "fair". Unfortunately your best solution is to find a high quality mic with a bit of noise cacellation (and the higher end ones can be "tuned" with a hardware equilizer) and just suck it up and BUY THE FOAM. I know it's ugly. I know it's a pain in the ass. I know it's only effective if the studio is designed well, but nothing that I have personally seen (well under 40k that is) beats the stuff. Acoustic dampening foam is your cheapest option that will still maintain audio quality to a reasonable degree.
Find out about my new childrens book: SS Death Camp Criminal Batallion Go To Monte Carlo For The Massacre