When I tracked down the resampling for Dave to add to RioPlay it was clear that it wasn't going to be the best resampling algorithm in the world, the source code said as much.
The code that I found in the mad source was using linear interpolation. I have now found some resampling code that uses "polyphase" techniques (whatever they may be) to resample for higher quality.
The code is part of the Sox toolkit, which can be found here:
http://sox.sourceforge.net/
In particular the code is in a file called polyphas.c
There are a few things that might stop us from using this code though:
- someone needs to port it across to RioPlay or the Receiver kernel (probably shouldn't be too difficult, although harder than the other code that was already designed to work with the mad libraries)
- the Receiver might not have the processing power needed, apparently polyphase requires more umph that linear interpolation (there is a third technique, between the two in the Sox code that might do instead in that case)
- I don't know if the licence for the code allows reuse in this way (it is under LGPL, but I know little about the ins and outs of licences)
I wish my C was good enough to do this myself, but it isn't so someone else will have to take up the challenge...