Transplanting SDL_audiocvt.c to SDL_sound

Torbjörn Andersson torbjorn.e.andersson at tietoenator.com
Sun Oct 14 09:40:42 EDT 2001


This is a first attempt at transplanting the audio converter from SDL
to SDL_sound. I've reformatted the code and made some slight
restructuring, but the only important change is that I've enabled the
slow rate conversion filter.

I didn't even dare to touch the file header.

I thought I would have to change SDL_sound to handle arbitrary buffer
lengths, but it looks like playsound already does. Neat.

One known issue is that the MP3 decoder gets very unhappy if I force a
conversion between signed and unsigned data. I have no idea why. I
can't reproduce the problem with any of the other converters I tried.

The choppy sound when converting from 16- to 8-bit sound that I
mentioned the other day turned out to be an error in SDL_sound.c. When
a conversion was needed, Sound_Decode() would do

     retval *= internal->sdlcvt.len_mult;

which didn't work if the converted audio buffer was shorter than the
original. I've changed this to

     retval = internal->sdlcvt.len_cvt;

which I hope is the Right Thing to do.

I'm a bit nervous about the len_mult and rate_incr parts of
Sound_AudioCVT, but perhaps they're ok. Anyway I don't understand
SDL_sound.c well enough to get rid of them.

TODO

* We really should make sure the filters[] array doesn't overflow.
   I've increased it's size from 10 to 20, but it still makes me
   nervous.

* As Ryan said, even the slow frequency converter leaves a lot to be
   desired. Perhaps we could borrow some from SoX?

* One thing which might be useful would be a way to tell
   Sound_BuildAudioCVT() if the conversion should be optimized for
   sound quality or computation speed.

The patch also includes the fix mentioned earlier to make the
experimental MIDI decoder pick a sensible default format when there's
no desired one. No sense in having an experimental decoder if people
can't experiment with it. :-)

Torbjörn Andersson
-------------- next part --------------
A non-text attachment was scrubbed...
Name: audiocvt.diff.gz
Type: application/x-gzip
Size: 5253 bytes
Desc: not available
URL: <http://icculus.org/pipermail/sdlsound/attachments/20011014/245771e7/attachment.gz>


More information about the sdlsound mailing list