This project involves a Windows DLL (written in C++) that supports a Java Native interface to Windows sound functionality. There is an existing program ([url removed, login to view], supplied as part of the evaluation) that takes input from the microphone and sends output to the speakers. This program has been written, tested, and used in production. We want to add to this program several abilities:
1. The ability to select any mixer device as the source of the Microphone and Speaker (so, for example we could use a bluetooth device if it is available).
2. The ability to get and set the hardware volume of the microphone.
3. The ability to get and set the hardware volume of the speaker.
We are aware that we could use pure Java, and we have tried it, but the time delays and irregularities are too severe.
The last two functions would be similar to opening up the Windows volume control, selecting a device, and then setting the volumes manually. It would be fine for the program to “permanently” change the volumes in the sense that if the user were to open the volume control, the sliders would be in a different position—the calling program will assess the current state and restore it. It would be better if the program did not change the active device (specified in the Control Panel and found by other programs) but if it has to be that way I could live with it.
The functions that should be changed are clearly marked. Other functions should only be changed after discussion. In particular, I am not sure if the audio input and output program would need to be changed to use a “non-default” mixer. You should try to maintain stylistic consistency with what is there. In particular, put errors into the ErrorBuffer so that GetLastError can find them.
Included in the package to the successful bidder are the following:
1. The calling program from Java ([url removed, login to view])
2. The result of running javah on it.
3. The existing [url removed, login to view] which you would modify
4. A file [url removed, login to view] that specifies the DLL entry point
This program currently compiles with JDK 1.5 and Visual Studio 6. The full Visual Studio 6 project is available if you want it. You can run your project with anything you want, but the result of this project is your version of file #4. I will recompile it, and this is what needs to work.
The target OS is Windows XP, Vista, or 2000. It does not have to work on 95, 98, ME, or NT, though we would not object (the current source does work in 98).