Write a Virtual Audio Driver for Windows (addressed as VAD below). Must work under:
o Windows XP
o Windows Vista x32 AND x64
o Windows 7 x32 AND x64
The driver must appear as a normal Audio Output Device to Windows and any application. The
device must appear in Windows control panel – sound management and we should have the possibility to set it as default audio device. For Windows and any other application VAD should look like a real hardware driver and act like one.
Upon installation it should remember the previous default audio output device, and as its default behaviour should route all its input sound to the previous default audio device. It should notice if this device disappears or is replaced (for instance the computer gets a new audio card) and remember this incident(always just the last incident, not a history).
Basically VAD should get the input from an application and pass it directly to the former primary audio driver. This should happen with a minimum of strain on the CPU. VAD should be aware of what process is sending witch stream.
The VAD should have some API calls that can be addressed from other programs. The main call should be the possibility of hooking into the audio stream of a another program. Api calls should be protected by some sort of password mechanism, meaning that only applications that know that password or protection should be able to hook on the audio stream. Hooking on the audio stream means that the program gets to listen on the output of any given process but the stream flows further to the former primary audio driver too.
Source Code must be documented and Api calls will be documented by us upon accepting your bid.
Please do not bid for a DIRECT SHOW filter or similar solutions. We need this to be a proper System driver working in all those environments (keep in mind also 64 bit!)
Clarification:
Project will be executed as an Audio Filter Driver.
This Driver will be installable on Win XP32, Vista 32/64, Windows 7 32/64.
It will have the functionality described in the initial project, without the Hardware device tracking described.
It will allow to identify the stream source process.
It will implement the following API calls that can be called from a third party application (this is a part where we can be flexible, your input or suggestions are welcomed) :
int VAD_HookStream(*char passcode,int processid, *streamReaderFunc callback_func)
Hooks all streams from the process processid and feeds the data to the callback function callback_func
If processid is 0 then ALL the audio data is feeded to the callback function
Returns a handler
int VAD_UnHookStream (handler int)
Unhooks a previous callback related to that handle.
retuns -1 if handle was not found, 1 if successfull, 0 if error
int VAD_InfoStreams (*char passcode, stream_info* streamStruct)
Gets the information about current streams that flow through the VAD at that point.
stream_info is a dynamic array of structures in form of a pointer list; Return value is the number of stream_info structures;
struct stream_info
{
int processid; //process id
int starttime; // time stamp when the stream started
int bytecount; //how many bytes were streamed until now
[here we could add 2-3 other info variables. ]
*stream_info next_info; //pointer to the next infomation block. null pointer if its the //last
}