EDIT:
EzAudDac has reached 1.08 status, no longer Alpha. See post 2 for download.
EDIT2: See this thread for a sound card DAC setup tutorial.
The use of an audio card as a lasershow dac has been discussed extensively. It offers benefits for laser hobbyists such as low cost and easy accessibility. Optionally, using a USB sound card for show control allows display from laptops while on the road.
What is needed currently is an 8-channel sound card, and some electronics knowledge to access the raw signal from the DAC chip and level convert it to +/- 5V. The level converter consists only of a couple op-amp chips and some passive components such as pots for adjustment.
Single-channel level converter (designed by Dean C. Hammonds, sample built and sent to me by James Lehman thanks!):

With this in mind, a driver is needed to interface laserhow software to the sound card.
It so far has been tested on:
zoof's laseroids
Zoof's laser tennis
Zoof's laser music display
carmangary's spaghetti (driver included)
LaserDesignStudio (LDS)
HE-Laserscan
LFI Player (support coming soon!)
Other untested possibly supporting software:
Mamba
General Usage:
1) Put the dll and ini file where your program expects driver dlls.
2) Edit the ini file to suit your hardware setup.
3) Run the program!
4) there is a text file produced (EzAudDac.txt) that will help you choose your sound card number.
Using EzAudDac driver with HE-Laserscan (free!)
HELS does not natively support the EzAudDac driver yet, however it does support easylase, so you can use the EzAudDac driver in easylase mode with HELS.
1) HELS output hardware is configured by placing the correct ML_Driver in the HELS program directory. Look for the ML_Driver folder and copy the easylase ML_Driver.mld to the root program directory where HE-Laserscan3.exe is. Rename the easylase ML_Driver to just ML_Driver.mld
2) If it exists in the root folder, rename easylase.dll to TheRealEasyLase.dll
3) Copy EzAudDac.dll to the root HELS folder and rename it to easylase.dll
-Note that you won't be able to use an audio card DAC at the same time as using an easylase DAC until HELS supports native EzAudDac output.
4) Copy your EzAudDac.ini file which contains settings for your computer and DAC setup to the root directory of HELS.
5) Run HELS and go to Windows-Options-Hardware and select Hardware1=EasyLase0. Browse the other tabs especially 'Optimize Output' and edit as necessary to complete your setup.
Using EzAudDac driver with Laser Design Studio (LDS):
LDS does not natively support the EzAudDac driver yet, however it does support easylase, so you can use the EzAudDac driver in easylase mode with LDS.
1) LDS output hardware is configured in geobas.ini in the LDS folder. Open this file in a text editor. Under scanner[1] set bEnableEL to =1 This enables EasyLase. Set all other bEnableXX to =0. Save and close geobas.ini
2) Rename easylase.dll to TheRealEasyLase.dll
3) Copy EzAudDac.dll to the root LDS folder and rename it to easylase.dll
-Note that you won't be able to use an audio card DAC at the same time as using an easylase DAC until LDS supports native EzAudDac output.
4) Copy your EzAudDac.ini file which contains settings for your computer and DAC setup to the root directory of LDS.
5) Run LDS and test it out!
For troubleshooting, try downloading the latest driver for your sound card and take note whether it is a wdm style driver.
For Developers:
The driver's access is modeled after easylase, except the input data strucure is as follows:
Code:
struct EAD_Pnt_s {
__int16 X;
__int16 Y;
__int16 R;
__int16 G;
__int16 B;
__int16 I;
__int16 AL;
__int16 AR;
};
where AL and AR are optional audio stream inputs. Using the audio stream inputs from show software will keep synchronization between music and show display. The lag is determined by the BufferLengthMS setting in the ini file. Setting this value too low will cause the output to jitter.
These are the calls (modeled after easylase, see documentation) available currently (TTL is planned fr the future):
Code:
int __stdcall EzAudDacGetCardNum(void);
bool __stdcall EzAudDacWriteFrame(const int& CardNum, const EAD_Pnt_s* data, int Bytes, uint16 PPS);
bool __stdcall EzAudDacWriteFrameNR(const int& CardNum, const EAD_Pnt_s* data, int Bytes, uint16 PPS, uint16 Reps);
int __stdcall EzAudDacGetStatus(const int& CardNum);
bool __stdcall EzAudDacStop(const int& CardNum);
bool __stdcall EzAudDacClose(void);
This release can only utilize one card, which you specifiy in the ini file, so CardNum is ignored.