Dave, I've been studying the code a bit. My guess is that 50,000 bytes of buffer should be enough.

It seems that the path through the AudioThread::InputCallBack code is different when being served from a shoutcast stream vs. from the Rio HTTP server. This might be worth some additional study.

Specifically, there is this business with the MetadataFrequency.

Here are some questions wrt AudioThread::InputCallBack
1) There are these weird for loops to read in stuff related to metadata. Could you explain what you are doing there. I just couldn't understand why you can't simply do a single fread(). Though, I am sure you have a reason for this.

2) Shouldn't you grab the ClassMutex before calling Display.Update for the metadata? You seem to do that in the OutputCallback code. Or is that lock used to protect something else?

Hope this helps. I am going to take a look at some other code that parses shoutcast streams to understand what they are doing vs. what you are doing.

Cheers,
Marc

p.s., I get this skipping problem with all of the sample streams that you provided in streams.cfg. My computer is connected to the Internet via DSL.