From: Steve K. <st...@st...> - 2003-11-11 01:11:58
|
I forget what I've announced to the list, and what I haven't. The main new features added to the library recently are: A bunch of signal processing stuff from speex: 1) A denoising filter: This is a very effective filter which reduces background noise. 2) New AGC: This AGC implementation from speex seems to work much better than the compander implementation I've been using previously. 3) A new "automatic" silence detection based on speex' VAD. If you set the silence threshold to a positive number, you now get speex' VAD, instead of my hacky noise-threshold code. 4) Bias removal: Removes bias from input signals. This makes other DSP functions work correctly, including the level metering, which was often incorrect when bias was present. 5) echo cancellation: I modularized the echo cancellation a bit. You can include one of speex' echo cancellation, MEC2/3, or Steve underwood's echo canceller via compile-time options. Speex' echo canceller is included by default. Echo cancellation via speex is still "experimental" in nature. In particular, it is not very effective when you're also using AGC, because residual echo is boosted back up to full strength. When you're not using AGC, it is somewhat effective in my limited testing. Each of the denoiser, AGC, and echo cancellation can be enabled/disabled by calls to the library through this API: #define IAXC_FILTER_DENOISE (1<<0) #define IAXC_FILTER_AGC (1<<1) #define IAXC_FILTER_ECHO (1<<2) int iaxc_get_filters(void); void iaxc_set_filters(int filters); Another thing that was added was automatic call disconnection when the remote endpoint is no longer reachable. This happens if the remote endpoint crashes, for example. Previously, there would be no indication of this to users. Now, the call will be disconnected. There have also been a bunch of bugfixes recently. One important one was for the virtualMono implementation, where when there were no incoming frames (or you were just playing a sound), some garbage would be sent along to the sound card. This made sound playback without an active call work improperly. Also of note, I just found out that there's another libiaxclient library user out there: DIAX is based on iaxclient. I think that the author is presenly trying to migrate to a newer version of our library, with IAX2 support. -SteveK |