gazzapax at February 15th, 2010 08:44 — #1
Hi, I'm a newbie (my first post!), and interested in writing a desktop app (prob in Delphi 6) which can play sounds to multiple sound cards. Reason is I'm trying to create a 3D surround sound effect.
I have a USB Creative external 5.1 soundblaster device, and although their proprietary .exe can individually pan left and right, front and rear, I can find no way to write my own app to do this (using TMediaPlayer and mciSendCommand). I cannot individually address each pair - unfortunately all four pan together.
I'm creating an Open Source app, so can't purchase a component. I'd be very happy to go out and buy a number of USB soundcards if I knew how to address each of them individually in my Delphi app.
Anyone have any experience with this ? The outcome will be used in the area of Assistive Technology (assisting people with disabilities). many thanks, Gazza
wernaeh at February 15th, 2010 09:55 — #2
Not per se Delphi-related, but perhaps you should check out OpenAL, the Open Audio Library (google is your friend, we even have a tutorial series here on devmaster). I've made very good experiences using it.
Afaik, there is a OpenAL bind for Delphi as well.
I'm not sure about licensing, though.
gazzapax at February 15th, 2010 11:34 — #3
will look into it....
gazzapax at February 15th, 2010 15:21 — #4
Hi again, any Delphi people here ?
I note that the tutorials at this site do not included Delphi, and I'm having trouble getting Open AL installed. I downloaded and ran oalinst.exe which place a couple of dlls into the Windows directory but any example code I'm finding around the net fails with various .dcus not found. (al.dcu, altype.dcu, etc).
I'm prob doing something very basically wrong but google not helping much this time. Any advice much appreciated. Gazza
wernaeh at February 16th, 2010 07:46 — #5
See if this helps...
In the downloads section of that site, there also are import units for OpenAL available.
gazzapax at February 19th, 2010 10:39 — #6
Hi, that was great thanks ! OpenAL now works fine for me!
I have an external (USB) Live! 24bit Soundblaster card (which supports 2 pairs of speakers, Front/Rear, Left/Right) and OpenAL has now allowed me to move a source around to any of these - fab stuff ! Your tutorials are v.helpful, thanks.
But my project needs to take this further, and its now back to my original question.... I am currently using those 4 speakers, and this allows me to move thru X and Z dimensions (SourcePos and ).
But I need to create a true 3D aural field that has height, but inreoducing a second, identical soundcard (another 4 speakers) and control these via the Y dimension (SourecePos).
Is it poss to identify which soundcards are attached to my system and send the sound to the appropriate soundcard? And secondly, if I am playing to both soundcards at once, is there a danger of the wav files being slightly out of phase? Or is it so fast that this will not occur. Many thanks, Gazza
kenneth_gorking at February 19th, 2010 12:52 — #7
If your soundcard supports the ALC_ENUMERATION_EXT extension, then you can enumerate all the endpoints on your system.
Something like this (not tested):
if (alcIsExtensionPresent(0, "ALC_ENUMERATION_EXT") == AL_TRUE)
const char *devices = alcGetString(0, ALC_DEVICE_SPECIFIER);
if(devices != 0)
while(*devices != 0)
devices += strlen(devices)+1;
You can read more at http://connect.creativelabs.com/openal/Documentation/OpenAL\_Programmers\_Guide.pdf under the 'Standard Extensions to OpenAL'