“Improviz is a live-coding environment built for creating visual performances of abstract shapes, blurred shades, and broken GIFs.”
When I was choosing a platform from the list, the caption for Improviz mentioned something about how it’s based on using and abusing basic shapes. This caught my attention as I am always interested in seeing how far you can push basic structures to create significantly more complex visuals.

Improviz is built in Haskell and interacts directly with OpenGL and it was developed by David Guy John, who goes by ‘rumble-san’. This platform is considered to be a fork of another platform: LiveCodeLab which rumble-san also took part in developing. Still, Improviz stands out a lot more to users as it is much faster than LiveCodeLab, but most importantly, it also offers the option to load custom textures, materials, models, … which gives a lot of room for personalization and experimentation.

It has a web version (you can find it here), but it lacks the ability to load all the custom objects I mentioned previously. Therefore it is recommended to download the latest release from GitHub, run it from the terminal, and use an editor (like Atom) alongside it.

The language used reminds me a lot of p5.js. It has a quite simple syntax where you call functions that either draw shapes to the screen or change those shapes in some way. “By default, the only thing that actually changes in Improviz is the time variable, which tracks the number of seconds that have passed since the program was started.” So introducing the time variable in the code is a good idea to get some cool variations and effects.

 

Here’s one of the demos I experimented with using Improviz:

 

And, here’s the code I used for it:

background(30)
t = time/2
rectSize = 2

paintOver()

texture(:art4)

//axis
ax = sin(time) *3

move(0,0,0.5*ax*0.4)
  rotate(0,0,time*2)
  rectangle(rectSize*sin(t))

move(0,0,-0.5*ax*1.5)
  rotate(0,0,time)
  rectangle(rectSize*sin(t)*0.3)

move(0,-0.5*ax*2,0)
  rotate(0,0,time*0.5)
  rectangle(rectSize*sin(t)*2)

move(0,0.5*ax*4,0)
  rotate(0,0,time*2)
  rectangle(rectSize*sin(t)*1.5)

move(0.5*ax*2,0,0)
  rotate(0,0,time*0.2)
  rectangle(rectSize*sin(t))

move(-0.5*ax*3,0,0)
  rotate(0,0,time*0.4)
  rectangle(rectSize*sin(t)*0.7)

 

According to the writer, when things like randomness and noise come into play, music can sound more organic and engaging to the listener and can help trigger different emotions.
This made me think of instances where I would be listening to a song I’d never heard before. It happens, that for some songs, I would unconsciously predict the next couple words of the lyrics, or complete the upcoming part of the melody in my head.
Whenever this happens, I always leave feeling a bit bored, if not even a little disappointed. Therefore, I do believe that some form of unpredictability in music is what captivates us the most.
Although predictability in music can be comforting at times, it can also be a little irritating. You don’t want every song you listen to or make to just blend into the next. And, randomness as a compositional tool can set the piece apart.
I acknowledge that this might be regarding our expectations when we’re discovering a song or a musical piece for the first time, and it’s different if we are already familiar with a song and just enjoy coming back to it.

 

Spiegel believes that “random corruption should not be confused with random generation.” This, to me, highlights the idea that things should be done with intention and moderation.
For example, I have a friend who is a very talented singer, but during his earlier singing years, he used to always incorporate a little way too many runs into the song. I found this impressive, certainly, but not too enjoyable to listen to. When trying to add interesting elements to a piece, you don’t want to lose the original sound or message and overshadow it with randomness and change. The goal is to simply embellish what’s already there.
Therefore, I believe that not all random additions work, and not all random sounds that do work should be kept in.