Spatializing stereo works using a PlayStation 3 controller.

Tools: Python, PureData

Get the code on GitHub: SpatialTool

SpatialTool is an audio spatializer developed in collaboration with composer Jérémie Ricard in 2017. The project was first started by Jérémie in early 2017; I joined as a developer in May of the same year. It is based on the pyo DSP library and its user interface is powered by wxPython.

The app is meant to give composers an easy and intuitive way of spatializing their stereo works on multi-speaker setups using a PlayStation 3 controller. The app can work with any speaker setup (stereophonic, quadraphonic, octophonic, etc.), and it responds to OSC messages. A PureData patch is included in the code respository to translate HID messages from the PS3 controller into OSC messages.

Screenshot of SpatialTool

The user interface is very simple: the main component is a top view representation of the speaker setup, with each speaker drawn as a gray dot. The currently loaded stereo track is represented as a waveform at the top of the interface, its left and right channel are drawn as two colored dots in the speaker setup.

Performers control each audio channel (left and right) using the two joysticks on the controller: this makes the colored dots “travel” inside the speaker setup. As a channel approaches a speaker, the sound coming out of it will gradually increase; as it goes away from the speaker, its output will decrease. Performers can then very intuitively spatialize a stereo track in a matter of seconds.

Users can move each speaker individually to customize the speaker setup to their needs, or they can choose a setup from a list of presets. The global “radius” for the speakers can also be altered: a smaller radius means that a channel must be very close to a speaker in order for it to pick it up, while a large radius means that the transition between “no sound” and “full sound” will be much more gradual.

SpatialTool‘s PureData patch for handling HID devices

The development of this project was short, intense, but very fun. It solidified my experience with Python and the pyo library and was actually the very first project in which I used Git as a versioning system.

The app is no longer under active development, but it is licenced under the GPLv3 licence and is available on GitHub for those interested.