I've setup a module to capture audio from the microphone and then stream it over the net to others. I would just like to enhance performance but I can't find any *simple* compression schemes. I would just like something to: compress() and decompress() or possibly filter() unfilter(). Preferably I'm looking for lossless compression. The current voice-over-IP compression technologies are poor quality and their packages are way to bloated with useless features (ex: Open H323). Currently I find 8000Hz at 8bits per sample (8KB/sec) an acceptable quality, yet it's a bit demanding for the slower connections. While I tried converting it to 4000Hz to reduce the requirements, I'd like to know if there's some sort of cool compression technique I can apply to the 8000Hz sample to produce a 4000Hz or lower sample and then filter it back to 8000Hz on the other size. I wish the MP3 Pro technology was open domain, but alas…
If I can crunch it down to about 3KB/sec, I think that would be great.
did you look into the SIP voice over ip protocol ? i'm hearing that german telecom is switching their whole system to that protocol... i haven't read a lot about it though
Yeah, I looked at quite a few protocols. The G series, H series, and SIP. I'm not interested in protocols since I have my own and I don't need to adopt a standard at this time. I'm interested in the compression or filtering techniques that can help reduce my 8000Hz sample down to a 4000Hz or smaller sample which can later be reconstructed and played. Even 4KB/sec is a bit demanding, but I could easily offer an option to go as low as 1KB/sec for those unable to handle any more.
Currently most of these protocols use a linear prediction scheme, but that's the core cause of all the scratchy, garbled up voice problems you hear in games like Halflife or regular VoIP programs. MP3 Pro deals with such a situation perfectly. It uses a technique called Spectral Band Replication to restore high frequency components back into the wav stream. It even supports quality as low as 18kbps, which is more than ideal for lower end connections. But those damn licensing issues just tick me off. If there's a similar technique that I can use, that would be great.
speex is an open source codec for speech-compression, but i haven't ever looked at it/used it in code, so no clue how easy or difficult it is to implement.
it's the voice-equivalent of ogg vorbis (it's another ogg format.. ).
[www..speex.org](www..speex.org) i think.
Wow, thanks dave. I believe this is exactly what I'm looking for. The quality is surprisingly good for 8kbps and the code is not bloated down =)