After a few hours of work, I've done some prelimenary research for you. If you use a stream from the Internet, take the following steps into consideration: 1. Connecting to the stream and requesting for a stream (HTTP commands) 2. Receiving data from the stream 3. Running the stream through a DirectShow filter chain that decodes it 4. Shoveling from the final filter in the chain into the DirectSound buffer 5. Playing back the buffer There are at least some SHOUTCast DirectShow filters available, but I have no knowledge on how/if they work. A better way, I would feel, is to directly connect to the SHOUTCast server and request for a stream. The entire process bases itself around the IMediaObject interface, that represents a block of media data. First, you should create the necessary filter object, in MP3 case, it could be MPEG-1 Stream Splitter Filter, that can receive MEDIATYPE_STREAM with MEDIATYPE_MPEG1Audio. To continue from here, you can use ACM Wrapper filter, that supports conversion from MP3 to PCM format, if you have any MP3 decoders installed (installing WinAmp will install a decoder as well). The ACM Wrapper outputs PCM data that can be directed into a DirectSound Renderer filter, or if required, you can use IMemAllocator interface to get the decoded IMediaSample objects out from the chain. In order to utilize the received data, you can create an instance of a IMediaSample interface (and the object), set it up to represent the data you have received (MEDIATYPE_STREAM with MEDIATYPE_MPEG1Audio subtype, for example, if you use the MPEG-1 Stream Splitter). Then get a pointer into the sample's data area, copy data from the download buffer, and call IMemInputPin::Receive on the input pin. To get the input pin, get a pointer to the IBaseFilter interface on the MPEG-1 Stream Splitter interface, and query through the pins using EnumPins. When you find the suitable IPin, query for the IMemInputPin interface on it. This isn't a complete example on how to do it, but it should help you get started. Alternatively, if you already have a working application that connects to a SHOUTCast source, receives data and fills a temporary buffer (raw data buffer, non-DirectSound), then I could consider joining up to write the logic to decode and playback it. -Antti Keskinen ---------------------------------------------- The definition of impossible is strictly dependant on what we think is possible.