**Win32 Multi-Channel Audio Playback Application Statement of Work:**
Software as described as follows with source code in C++,C#, or Visual Basic that will compile in Visual Studio .NET (2002 or 2003):
A simple Windows application that can play a single 16 channel wav file at a time that uses the WAVE_FORMAT_EXTENSIBLE format and play it synchronously on a per sample basis via a 16 channel capable sound card(s) that uses a WDM driver or an ASIO driver only if required. Additionally, stop play and pause play on request. All input can be via either a monitored .cfg file or a dll class interface at your discretion so long as another running program can request, Play “[login to view URL]?, Stop, Pause. All files to be played will be of the Extensible type, 48kHz, 24bit, 16 channels, this will not change. File lengths will vary as typical songs of say a few min up to 10 min.
This description and a complete listing of all the requirements along with sample 16 channel wav file and related documentation links can be found at:
[login to view URL]
## Deliverables
**Updated Information:
**Some of the bids have proposed solutions methods that I think would not solve my problem so I thought I would post this updated information. In summary its my opinion that any solution that uses DirectSound would probably not work correctly. If after reviewing the following information you feel your bid would need to be adjusted please let me know. Or if you disagree with my DirectSound assertion I’d like to hear that as well :)
As we all know under managed DirectX in both VB.net and C#.net, Managed DirectSound does not support more than 2 channels of output as described here: [login to view URL]
This leaves two choices:
1) Make a class/dll that uses non Managed DirectX
2) Do it manually the “Hard Way?? as in the following two examples with .NET VB and C# source code:
Mentalis WaveFile Class (C# and VB) - [login to view URL]
A low-level audio player in C# - [login to view URL]
Note: Neither of the above examples supports multichannel WavFormatEx files or I wouldn’t be here :)
The “Hard Way?? is greatly preferable because of one reason that may not be apparent without some knowledge of how various multichannel sounds cards work with respect to the drivers available for them:
Under option 1) the sound card driver would need to be a WMD type and must provide an “Interleaved Play?? virtual device that can be enumerated with a single Guid in order to work. At the driver level it handles routing the various output channels. The problem is however, that not all multichannel sounds cards provide this driver choice including my target card, the EWS88 D. If you were to simply open separate DirectSound buffers for each output the sound card has and play/start them separately in quick order there is no guarantee they would be synchronized. They would be very close but off from each other by as much as 0 to 4000 ish samples depending on luck. So this option is out unless someone has some insight into this.
This leaves option 2) where one has to setup separate non DirectSound buffers for each output device from the sound card, stereo pairs in my case, and map the interleaved data from the multichannel wavfile to the respective buffers. For example in my case I have a 16 channel sound card, that enumerates its outputs as 8 stereo pairs each with a separate Guid and specifically with device indices of 2,3,4,5,8,9,10,11. Then, and this is the important part, construct a way to synchronize the multiple output buffers on a per sample basis. The individual buffers need to be masked from starting in someway until all the buffers are setup and ready to go then unmasked and started as a group.
I also added 4 new test wavfiles, specifically a 4 channel one is included if you need to one to test at:
[login to view URL]
**Deliverables:**
1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done.
2) Installation package that will install the software (in ready-to-run condition) on the platform(s) specified in this bid request.
3) NON-Exclusive and complete copyrights to all work purchased. (No GPL, 3rd party components, etc. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site).
**Intellectual Property Issues:**
None. No NDA. No Secrets. No exclusivity required, just a copy the source code that I have the rights to use and include in products I may some day sell but will most likely not.
## Platform
**Target System**:
OS: Windows XP Professional, .NET, SP1 +, Direct X 9.0b + (Non Managed)
Sound Card Hardware: 16 Output Channels via Two synchronized Terratec EWS88 D’s running with a WDM driver
CPU: 2GHz + AMD
Memory: 1GB +
Note: No other sound cards will be present in the system