[sdlsound] Writing decoded audio to stdout
Ryan C. Gordon
icculus at clutteredmind.org
Wed Feb 9 16:26:57 EST 2005
> if (sample->flags & SOUND_SAMPLEFLAG_ERROR)
You don't have to check ERROR here...you won't get a new Sound_Sample
with an error state...this flag should be checked after Sound_Decode(),
if you didn't get as many bytes as you requested (in which case it's
either an ERROR or an EOF).
> Uint8 stream1[decode_buffersize];
> while (bw < decode_buffersize)
This is a bug. You decode enough to fill a single buffer and then quit.
This looks like you cut-and-pasted from playsound.c, which is probably
over-complicated for what you want to do...besides all the extra crap it
does, it also has to account for having to feed the audio device
incrementally over time from a buffer that might have more or less data
available...when going to disk or a pipe, you can just dump as fast as
you can without tapdancing.
const char *fname = p.string().c_str();
Sound_Sample * sample = Sound_NewSampleFromFile (fname, NULL, 1024*64);
if (!sample) {
cerr << "Error opening " << fname << ": " << Sound_GetError();
return;
}
do {
Uint32 br = Sound_Decode(sample);
if (br > 0) // write this block of decoded data to stdout.
cout.write((const char *) sample->buffer, sample->buffer_size);
if (sample->flags & SOUND_SAMPLEFLAG_ERROR) {
cerr << "Error decoding " << fname << ": " << Sound_GetError();
break;
}
} while (sound->flags & SOUND_SAMPLEFLAG_EOF);
Sound_FreeSample(sample);
--ryan.
More information about the sdlsound
mailing list