Audio Project

Last year, I saw and was inspired by the Big Round Cubatron, the world's largest 3-D light installation. Ignore the chatter from the drunk guy in the video, and listen... no sound. Sound, I thought. This needs sound.


So, I thought up an idea. Build a room or half-sphere, and have speakers all over the perimeter of the space. Build hardware that translates sound to a light; treble lights a white light, bass, a red light, and so on across the spectrum. Attach one light to each speaker, and have everything face the center of the room.

Then run three dimensional audio screensavers on it, and make parameters of the screensavers accessible by physical controls inside of the space; foot pedals, knobs, buttons, whatever.

So, that was the idea. I looked into doing it in Java, which I was best at, but the hardware abstraction makes working with multiple soundcards a disaster. I tried Python, but didn't see quite what I liked, then saw a nightmare in having to implement hardware-level code with C. Taking a look at DirectX, I saw that C++ was certainly viable for this one, albeit I'm rusty in that direction. Then finally realized that if DirectX works in C++, it'll work in C#, and I'm off.

Today, setup two separate audio sources (one internal sound device, one USB device) and got them to play the same audio source with no apparent problem. Looking into DirectSound3D, some of my work may even be done for me already. The problem is that native DirectSound support is over as of Windows XP, and runs in an emulation layer in Vista. Meanwhile, XAudio for the XBox was bumped up to XAudio2, which runs on Vista, layers over DirectSound on XP, and still runs on an XBox if I'm feeling especially ornery.

That all said, that's what I'm up to, and some research into the (as of yet) poorly documented XAudio2 is in order. (Re: poor docs, it came out of beta in the last few weeks.)

1 comment:

Dean Jackson said...

And responding to my own post, it looks like XAudio2 removes hardware acceleration, which would be bad for the potentially 8+ interfaces. Besides the documentation being sparse, tutorials being nonexistent at this point, and the C# support being questionable, might be better to build this in the established DirectSound, and port it over after support is stronger.