There is an application for radio automation (sofisticated audio player) that plays music and other audio clips through up to 4 separate audio channels. That channels are routed to separate waveOut devices, and later mixed on radio mixing console.
A software component is needed that can be plugged into existing playback architecture, that will mix all 4 channels, encode them for Shoutcast streaming and push the content to appropriate Shoutcast distribution server.
Here are some pointers for making software component in question:
* source code for making a plug-in is attached, and test application should be made using code supplied.
* supplied source code should be adapted to use new plug-in that is produced.
* since output at waveOut channels can be in different sampling rates, sound should be up/downsampled if needed (code to do so can be supplied if needed, coder can provide own solution)
* mp3 encoding could be done with LAME, or coder can provide own solution
* solution is needed that can make several streams from one set of waveOut channels, so each instance of the application could stream multiple bitrates at once
* Shoutcast metadata manipulation should be provided through component interface
* server connection should be robust and able to work 24/7, reconnecting if needed, with appropriate logging
* since all waveOut channels work independently (this is the current situation with the application) some method of timing Shoutcast stream should be devised; suggested methods are: IReferenceClock, or attaching to one of the waveOut channels (opening one waveOut and playing silence on it)
* clock issues must be resolved by replicating sample data if there is too little data, or dropping it when there is too much data (appropriate function is that every 100th sample is duplicated or dropped or replicated until sync is reached)
* suggested interface to the current waveOut implementation is that every audio buffer that is waveOutWritte-n should be queue into streaming component along with the timestamp, later to be picked up, converted to proper sample rate if necessary, mixed to one sound, encoded and so on
I made up a project that can be used as a basis for your work. It is made in Visual Studio 2005 and I tried to include everything so you can compile and run it with no problem. However, if anything will be a problem, contact me ASAP so we can resolve it.
Also, I have shoutcast distribution server set up for you, and those are the information you need to access it so you can test your code:
IP address: [url removed, login to view]
if you access [url removed, login to view] you will see that you also have admin UI for the server there.
I gave some further thoughts for the projected interface for you component, and it's included in the zip file, please review it before proceeding. It's in the file ShoutcastComponent.h.
Please direct any questions to resolve ambiguities before making a bid.