This project was created to enable me to make interesting progressive supershape structures in Processing using a variety of different inputs.
produced by: Benjamin Sammon
My goal for this project was to develop a system that would allow me to create generative structures with a user interface that could be used for an audio-visual performance.
Concept and background research
For my background research I focused on various visual artists who have used supershapes in their work. The original fascination came from watching Daniel Shiffman’s supershape tutorial which gave me a baseline understanding of what supershapes are and how to create them in Processing. This then led to Paul Bourke’s Superformula which is based upon mathematical equations by Johan Gielis to make complex 3D structures using various parameters.
I was also inspired by Algorave culture and the audio-visual performances that take place at these events. I have always been interested in audio reactive visuals and have previously attempted to create real-time systems to simulate this with varying success.
The concept behind my work was to generate supershapes using music. I wanted to be able to live code the sounds in the live coding environment TidalCycles and send messages to Processing which would change parameters and effect the visual output. I also wanted to create a final piece that represented the progression of the various states of the supershape in print form.
To begin with, I looked to find a way of sending MIDI data from TidalCycles to Processing. I initially began to use the library ‘The midibus’ in Processing but I came across a few issues; I found it slow with latency issues and it wouldn’t receive more than one MIDI note at a time making it effectively obsolete for my purposes. I also wanted to use a guitar expression pedal as my performances generally include guitar, this would allow me to affect the visuals hands free. I made a basic circuit using an Arduino and the ‘AnalogReadSerial’ code example in the Arduino IDE (see below for Arduino diagram). I had similar latency issues trying to use the ‘serial’ library in Processing, I wouldn’t get an immediate response from the pedal, stopping the effect from working properly in real-time. After sifting through a number of different options I decided to use Max/MSP as a data wrangler. This would allow me to receive serial data from the Arduino and MIDI data from TidalCycles, unpacking and converting the data, then sending the wrangled information via OSC to Processing. This technique proved to be particularly effective and took a great deal of the memory load away from Processing allowing it to function smoothly.
I also wanted to include a GUI so that I could prototype ideas and change variables manually. This worked perfectly as iterating between different parameters on the fly allowed me to speed up the process of finding what MIDI data I should send to make the most interesting shapes.
Following the completion of the technical side of the project, I created a print which encapsulated a range of different supershapes. I wanted to tell the story of the shapes evolution, starting out as smaller more primitive shapes and eventually blooming into flowers. This was displayed at the pop-up exhibition under the name ‘SuperFlower Evolution’ with the caption “This piece is an exploration of evolving SuperShapes through the medium of audio reactive visuals. The resulting imagery shows the progression of the SuperShape through different stages of the music.”
I would like to further develop this project, enabling me to produce a whole set of music with different visual scenes for each track. I think I could create a variety of supershapes, each in their own class. These could be trigger between songs or even within one song. I would also like to create a pedal with multiple switches so that I can change between scenes live without using my hands so that I have the freedom to continue playing guitar in transition between tracks.
- ‘Supershapes’ by Andrew Marsh http://andrewmarsh.com/apps/releases/supershapes.html
- ‘Supershapes (Superformula)’ by Paul Bourke http://paulbourke.net/geometry/supershape/
- ‘3D Supershapes’ by Reza Ali http://www.syedrezaali.com/3d-supershapes/
- ‘Coding Challenge #26: 3D Supershapes’ by Daniel Shiffman - https://www.youtube.com/watch?v=akM4wMZIBWg
- ‘Communicate Max/MSP to Processing with OSC’ by ALAGHAST - https://cycling74.com/forums/bang-in-processing-and-jklabs-maxlink-to-oscp5-conversion
- ControlP5 examples ‘ControlP5button’, ‘ControlP5slider’ and ‘ControlP5PeasyCam’
- Tidal Tutorial #19: SuperDirt MIDI by Mike Hodnick - https://youtu.be/_yKWWSc6zY8
- How to build Arduino-based USB Expression Pedal’ by Muhammad Abduh - https://www.kuassa.com/diy-tutorial-how-to-build-arduino-based-expression-pedal-for-efektor-wf3607/
- 'MAX MSP 7: Sending data from Arduino into Max' by Programming for People - https://www.youtube.com/watch?v=6bT3G4Mep7E
- Arduino 'AnalogReadSerial' - http://www.arduino.cc/en/Tutorial/AnalogReadSerial