I searched today for a new 3D sound solution for Max/MSP, in a deliberate attempt to get away from Ambisonics and other 'sweet-spot'-inspired spatialisation techniques. Funnily enough, what I found led me back to a familiar name from Ambisonics - Graham Wakefield.

About Cosm
As it turns out, Graham is quite prolific. After building the core Ambisonics externs he went on to create Cosm - a virtual world environment. It's comprehensive, it works in Max/MSP/Jitter, and Graham is very open to let people use it. For me as a novice at Jitter it was a breeze to pick up thanks to a great website and an excellent tutorial.

A screencap of the Cosm environment, mixing solid objects with a diffusion pattern
A screencap of the Cosm environment, mixing solid objects with a diffusion pattern

Cosm's particular emphasis is in the relationship between solid objects and diffuse elements. Solid objects are modeled with traditional vector graphic techniques, and diffusion is modeled by underlying 3D value matrices. Perfect for Jitter.

When it came to building in sound, the natural choice for Graham was to use his Ambisonics externs. After all, this is how people have come to expect to explore virtual worlds - from a first-person, virtual camera, 'sweet spot' perspective.

Using Collision Detection
As I discussed in a previous post, first-person perspective is not what this is all about. But that's no problem - I can bypass the cosm.audio~ object altogether and use collision detection values to ramp up and down the volume levels on individual loudspeakers.

A representation of a sound object (red) passing through a loudspeaker catchment area (green)
A representation of a sound object (red) passing through a loudspeaker catchment area (green)

In the image above, the red octahedron represents a moving sound object. The green sphere represents a loudspeaker catchment area. As the sound object intersects the catchment area, the volume of that sound for that loudspeaker goes up.

Using collision detection to set volume levels
Using collision detection to set volume levels

This solution also fulfills the 'environmental' type of 3D sound environment I described at the end of this post (see 'What Ambisonics Can't Do'). With enough loudspeakers, you should be able to mimic the sound of a bird flying through the space so that it will appear differently (and correctly) to two different observers.

If any readers have any suggestions of where I can look up examples of, or information on this type of effect, please let me know! Unfortunately, we won't be able to achieve quite this effect at Jaaga, though I'll be aiming for a smaller version of it.