The software for Heavens Speak is written in MAX/MSP. There are five main modules:

1. the spatialization and sound placement system;
2. the mixer that allows 8 channels to be moved and controlled independently;
3. the multichannel song player and playlist manager;
4. the random composition generator; and
5. the constellation myth selector, location finder, and player.
1. The spatialization and sound placement system is based on Ville Pulkki's vector-based amplitude panning (VBAP) research.
Pulkki generously provides MAX/MSP implementations of the math required to calculate speaker amplitudes given (azimuth, elevation) data for a signal. I integrated that software to run multiple channels of sound data simultaneously.
2. The mixer that allows 8 channels to be moved and controlled independently. Each channel allows control of azimuth, elevation, spread (how much of a point source), doubling (additional placement of same sound 180 degrees from source, at a lower level), and randomness (allows the location to jump around a bit). Each control has a UI element that allows mouse control of the parameters as the song is playing. Initial values of the parameters are remembered on a per-song basis.

The Azimuth and elevation parameters can also be controlled by low frequency oscillators (LFOs) that allow the values to cycle through a relevant range. For example, cycling the elevation from 0 to 360 makes a sound go around in a circle. Oscillating the elevation from -30 degrees to 90 degrees and back makes the sound go from down towards the floor to straight up, and back. Combining the two would result in a spiral motion for the sound. The LFOs have 3 controls: type (circle, reverse circle, oscillate, off), frequency (e.g. 0.1 hz is one cycle every 10 seconds), and range (e.g. oscillating the azimuth from 245 to 280 and the elevation from 45 to 70 restricts the sound to a small rectangular area of the sky).

The controls for azimuth, elevation, and their LFOs can be connected to MIDI signals allowing an outboard controller (e.g. a keyboard or a custom controller handed to someone in the audience) to control the positioning and/or motion of a sound channel.

Finally, the system has a facility for multitrack recording of the positions of each parameter as it changes in real time. This way, a piece can be created in which the placement and motion of the sound channels is an integral part of the composition. This subsystem is not yet finished. It records and plays back but doesn't yet save its data.

Multichannel song player and playlist
3. A playlist manager allows the system to play a number of songs sequentially, ordering them according to whim or design. The playlist will communicate with the multichannel song player, which plays back songs on several simultaneously, and with the random composition generator. Each song comprises up to 8 channels, which are routed to the mixer, allowing them to be placed and/or moved as the song plays. Each song remembers its initial placements, motions, and control parameters.

Random Composition Generator
4. The random composition generator plays pieces that are composed randomly based on a set of sound files that the composer provides along with parameters that influence how the sound files will be played together. Each set is routed to a separate channel in the mixer and can be placed and controlled independently. Details on the random composition generator can be found in a separate section of this portfolio.
Constellation Myth Selector
5. The constellation myth selector, location finder, and player were the final pieces of the puzzle. When the playlist selects a new song, it sends the name to this module, which looks up whether it is appropriate to play a constellation myth over that piece. If so, it randomly chooses a constellation name from a list, then looks up the data for that constellation: sound file, celestial location coordinates, volume adjustment. It then sends the location coordinates to the module that calculates the formulas that determine where that star is at a given time for a given latitude and longitude. The result is an azimuth/elevation pair relative to 0 being north. Then the module plays the sound file with the reading of the myth at that azimuth and elevation.

Internet Art Shows by