‘Live’ to me has always been associated with news and TV, because two of my cousins are reporters and I’ve spent a lot of time with them – going to their sets quite a lot as well. And the way I understood being ‘live’ then was being confident about what you’re doing in front of a camera and following what the script says perfectly, by adding a little bit of your own personality and flavor. This understanding has evolved a lot after that. I’ve learnt about rehearsed performances and spontaneous happenings. However, I feel like the core ideas of ‘liveness’ and going live in front of an audience have remained constant – performing your craft the best you can for the intended viewers. I find it fascinating how the insights offered in the except about Live Coding challenge and expand on these beliefs about live performance, whether rigorously rehearsed or spontaneously improvised. The concept of “liveness” in Live Coding seems to add a whole new layer to the dichotomy of rehearsed perfection and improvised happenings.

On the one hand, the section emphasizes Live Coding’s improvisatory nature, in which performers think and act in real time, always adjusting and responding to the evolving code. This reflects the unpredictability and spontaneity of an event, in which every moment becomes part of the performance, formed by circumstances that could not have been predicted beforehand. The idea that Live Coding performances might incorporate this level of spontaneity and dynamic interaction with technology calls into question my previous perception of live performance as either rigorously prepared or utterly improvised.

Moreover, the interdisciplinary nature of Live Coding, intersecting with fields like performance studies and choreography, expands the conceptual ground of liveness beyond traditional definitions. It redefines liveness as a dynamic and evolving concept shaped by processes of experiencing, making, and audiencing, challenging the notion that live performance must fit into predefined categories of rehearsed perfection or spontaneous improvisation.

So, I feel like the definition of being live itself is evolving as these newer forms of art and media are coming along. The multifaceted nature of liveness in Live Coding has opened up new possibilities for creative expression, human-machine collaboration, and interdisciplinary exploration, inviting me to embrace the dynamic and fluid nature of live performance in all its complexities. However, as many complexities and definitions ‘liveness’ may go on to possess, I still believe that the core idea behind it will be the same that I’ve understood – performing your craft the best you can for the intended viewers.

I’ve always been captivated by the beauty of various artistic forms and combining them to get something new, something unique. However, it never occurred to me that something I call an art form may have been seen as something completely different and not as art. That’s why, it truly caught my interest when I read about how music and art were formerly viewed as entirely distinct entities. I always believed that music was a form of art, but it’s fascinating to watch how this belief has changed over time. Another thing that really made me really excited when reading the text was the mention of noise and how it was introduced by Busoni into music.
In my own films, I often experiment with incorporating different sounds and noises to create a more immersive experience for the audience. It’s fascinating to think about how artists like John Cage explored similar ideas, breaking away from traditional musical norms and embracing the raw, unfiltered elements of sound.

There is also the mention of club culture and its influence in modern day artistic expression, something that is often overlooked but apparently incredibly prevalent. I think I’ve been more exposed to how club environments can inspire creativity and foster a sense of community among artists and musicians, through this class and through the concept of ‘Algoraves’. A club nurtures a dynamic space where ideas are exchanged freely, and boundaries are pushed to create innovative works of art. I personally don’t prefer going to clubs, but I feel like I’m missing out when I’m reading such pieces.

As I went into the nuances noted in the excerpt, I was super impressed by the investigation of how human expression is represented in computer code. It’s mind boggling to observe how, when represented on a computer, something as naturally expressive and complex as human expression—whether in music, video animation, or choreography—can be reduced to numerical data. This change from complex, expressive forms of expression to numerical values highlights a basic feature of live coding, or programming using human expression, which just flies over one’s head if they don’t think critically enough. Manipulating just a little bit of this converted numerical data, playing around with it makes a world of difference in the expression the work is trying to convey, which is pretty amazing to think about. A world of possibilities for dynamic, interactive performances arises from the convergence of human creativity and computational precision in the field of live coding, where music, timbre, and even dancing are transformed into data for manipulation. And, different systems prioritize different types of data for live coding, which is another thing I was fascinated by.

The live coding language design conversation piqued my interest in the way that different systems order different components in order to satisfy different creative demands. The diverse range of techniques within the live coding community is reflected in the distinct preferences and priorities of each creator’s live coding system. The focus on components like compositional possibilities, expressive range, and visual/melodic progression demonstrates the sophisticated knowledge of how code may be used as a creative medium. In addition to providing live coders with a variety of tools to work with, this diversity in language design also emphasizes how live coding is a creative discipline that is always changing to meet the requirements and realize the ambitions of its practitioners.

Idea:

The initial thought that came to mind when I started the composition project was to make something soothing that would ease me and everyone that listens to it into the spring break that’s coming up. The piece was supposed to be soothing and full of joy from beginning to the end.

Building the harmonies:

The composition relies heavily on harmonies. The beat used is a very simple one using kicks and snares. The actual essence is in the melody of the piece. First, I played four basic chords on the superpiano – g major, e minor, c major and d major. Then, I’d sing different notes over these chords and then go to this online pitch detector website to detect the pitches of my own voice when I sang over the chords, and use other instruments within Dirt samples to play those notes/pitches. Every thing that I have built upon the four base chords came like this.

However, doing this wasn’t as easy as it sounds. Because different instruments have different timbres and even when the notes sounded good while singing, they sounded very weird on different instruments. So, everything I used in the piece was selected intentionally and with a lot of search. Also, I wanted to add some sort of a flute within the piece. I asked a friend to play the flute, recorded it and included it in the DirtSamples to get the flute in their (although it sounded super distorted for some reason within Tidal Cycles).

Playing with the Visuals:

The visuals didn’t need a lot of time to create. I had this idea of a star that gets gradually excited as time goes by to be the story. So, I made a shape and made it go crazy with time – with change in numbers, motion and colors, at the end, it multiplied to cover the whole screen. And, I feel the feeling of joy was conveyed.

Video (with an annoyingly choppy recording) and Code:

Tidal Code:



chorus = do {
  d1 $ qtrigger $ seqP [
    (0, 8, slow 4 $ s "superpiano*8" # up "d4 e4 fs4 g4" # gain (1.2) # room 0.9 #krush 4 #lpf (range 2000 3000 saw) #sustain 2),
    (0, 16, slow 4 $ s "superpiano*16" # up "g'maj e'min c'maj d'maj" # room 5 # krush 9 # gain 0.8),
    -- (4, 36, slow 2 $ s "superpiano*8" # up "d6  [c6 b5] <[~ ~]  [a5 b5]>" # sustain 3 # gain 1.6),
    (0, 16, slow 1 $ s "[bd bd sd ~] [bd bd sd bd]" # gain 1.6),
    -- (12, 36, slow 2 $ s "yeah*16" # up "<[a6 b6] [a6 b6 c7 [b6 a6 g5 fs5]]>" #gain 5),
    (8, 20, slow 2 $ s "flute*4" # up "<[g5 [a5 ~] c5 ~] [g5 [a5 ~] c5 ~]>" # sustain 3 # gain 1.2 #krush (range 0.3 0.8 rand)),
    (0, 16, ccv "<[10 30] [10 30 60 [10 30 90 127]]>" # ccn "0" # s "midi"),
    (0, 16, ccv "20  [40 60] <[40 60]  [90  120]>" # ccn "3" # s "midi"),
    (0, 16, ccv "<[120 [60 ~] 40 ~] [20 [40 ~] 120 ~]>"# ccn "4" # s "midi"),
    (4, 20, slow 2 $ s "yeah*16" # up "<[a6 b6] [a6 b6 c7 [b6 a6 g5 fs5]]>" #gain 5)
  ];
  -- d2 silence;
  d3 silence;
}

chorus2 = do {
  d2 $ qtrigger $ seqP [
    -- (0, 4, slow 4 $ s "hh*16" # gain (range 0.8 1.2 saw) # speed (range 0.4 3 saw)),
    -- (0, 16, slow 4 $ s "superpiano*8" # up "d4 e4 fs4 g4" # gain (1.2) # room 0.9 #krush 4 #lpf 2000 #sustain 2),
    (0, 4, slow 4 $ s "superpiano*8" # up "d4 e4 fs4 g4" # gain (range 0.4 1.2 saw) # room 0.9 #krush 4 #lpf (range 2000 3000 saw) #sustain 2),
    (4, 16, slow 4 $ s "superpiano*16" # up "g'maj e'min c'maj d'maj" # room 5 # krush 9 # gain 0.8),
    (4, 16, slow 2 $ s "superpiano*8" # up "d6  [c6 b5] <[~ ~]  [a5 b5]>" # sustain 3 # gain 1.6),
    (4, 16, slow 1 $ s "[bd bd sd ~] [bd bd sd bd]" # gain 1.6),
    (4, 16, slow 2 $ s "yeah*16" # up "<[a6 b6] [a6 b6 c7 [b6 a6 g5 fs5]]>" #gain 5),
    -- ( slow 2 $ s "flute*4" # up "<[g5 [a5 ~] c5 ~] [g5 [a5 ~] c5 ~]>" # sustain 3 # gain (range 1.2 0.4 saw) #krush 0.3),
    (4, 20, slow 2 $ s "flute*4" # up "<[g5 [a5 ~] c5 ~] [g5 [a5 ~] c5 ~]>" # sustain 3 # gain 1.2 #krush 0.3),
    (4, 16, ccv "<[10 30] [10 30 60 [10 30 90 127]]>" # ccn "0" # s "midi"),
    (4, 16, ccv "20  [40 60] <[40 60]  [90  120]>" # ccn "3" # s "midi"),
    (4, 16, ccv "<[120 [60 ~] 40 ~] [20 [40 ~] 120 ~]>"# ccn "4" # s "midi")
  ];
  d3 silence;
}

-- d3 $ slow 2 $ s "flute*4" # up "<[g5 [a5 ~] c5 ~] [g5 [a5 ~] e6 ~]>" # sustain 3 # gain 1.6

verse = do {
  d1 $ qtrigger $ seqP [
    -- (0, 20, s "[bd bd sd ~] [bd bd sd bd]" #gain 1.4),
    (4, 20, slow 4 $ s "gtr*16" # up "g'maj e'min c'maj d'maj" # gain 1.1),
    -- (4, 20, slow 4 $ s "gtr:2*16" # up "g'maj e'min c'maj d'maj"),
    -- (8, 20, s "hh*2" # gain 1.2),
    (12, 20, slow 4 $ s "superpiano*8" # up "d4 e4 fs4 g4" # gain 1 # room 0.9 #krush 4 #lpf 2000 #sustain 2),
    (0, 4, slow 2 $ s "flute*4" # up "<[g5 [a5 ~] c5 ~] [g5 [a5 ~] c5 ~] >" # sustain 3 # gain 1.3)
  ];
  d3 $ qtrigger $ seqP [
    (4, 20, slow 4 $ ccv "[30 40]  <50 20 60 80> 90 120" # ccn "0" # s "midi")
  ];
}

d1 $ slow 2 $ s "flute*4" # up "<[g5 [a5 ~] c5 ~] [g5 [a5 ~] c5 ~]>" # sustain 3 # gain 1.6

verse

chorus

chorus2

hush

Hydra Code:

shape(()=>cc[0] * 5, 0.001, 0.4)
  .color(0, 0.5, 0.2)                                  
  .repeat(3.0, 3.0)                                     //2
  .modulate(voronoi(0.3, 0.6, ()=>cc[3] * 5))
  .rotate(() => time/10)
  .scrollY(() => time/10)
  .scrollX(() => time/10)
  .modulateKaleid(osc(()=>cc[4] * 2))                //3
  .modulate(noise(()=>cc[4] * 2))                    //1
  .out()

hush()

It’s been eye-opening for me to read about the multimodal epistemological model in live coding. It’s improved my comprehension of the various types of expertise and ability that go into becoming proficient in live coding. For me, this idea has been immensely comforting because I often feel inadequate because of my perceived lack of technical skill. I even feel incompetent at times. However, this concept has enabled me to see that my formal programming language expertise and my ability to write perfect code are not the only factors that determine my value as a live coder. Rather, it highlights the significance of embodied knowledge, reflective practice, and experience learning.

I identify personally with the notion that acquiring information entails combining many forms of understanding. It confirms my conviction that the experiences and learnings I get from practicing live coding—even when it means making mistakes—are important contributions to my development as a coder. It gives me the confidence to accept my learning and growth path and the knowledge that mistakes are to be expected along my journey.

It has also been immensely liberating for me to realize the playfulness and autotelic nature of live coding. The pressure to perform flawlessly in front of an audience during live coding sessions has often been unbearable for me as a performer who is used to being on stage. But my attitude has changed when I realized that the fun of live coding comes from the process itself, not from reaching perfection. It has aided in my realization that accepting experimentation, ambiguity, and even failure as necessary components of the creative process is acceptable. I can now approach live coding with interest and playfulness instead of fear and worry – although it will be hard to get rid of these habits.

This reading about live coding has also prompted me to explore different ways of thinking. It has forced me to see coding as a kind of creative expression and problem-solving as well as a technical ability. I can now think more creatively and innovatively when I code thanks to this mentality change. I now view live coding as a chance to participate in a dynamic conversation between creativity and technology, where experimentation and improvisation are valued, as opposed to concentrating only on creating flawless code.

For my research project, I looked into several languages before I stumbled upon livecodelab. This platform, created by the team of Davide Dela Casa and Guy John, is a breath of fresh air for anyone wishing to experiment with digital creation without the inconvenience – “anyone” and “without inconvenience” being the key terms. Both of the creators’ backgrounds are in Computer Science and they’ve worked in tech giants like Meta, Amazon and Google as per my research. Lets look deeper into what they’ve developed now.

The Concept and The Language

What sets LiveCodeLab apart is its simplicity. The code is developed through JavaScript and runs in a native JS runtime. They’ve crafted a language, LiveCodeLang, that’s so straightforward, it feels like you’re having a conversation rather than writing lines of code. And the magic happens as you type – 3D visuals start taking shape, and sound clips start playing, all in real-time. It’s like watching your ideas come to life right before your eyes. The rendering happens at 60 fps and the sound plays at an adjustable bpm.

The Website: livecodelab.net

I was pleasantly surprised to find that LiveCodeLab works right in your browser. No need to download any fancy software or set up complicated environments. Just fire up your browser, head to livecodelab.net, and you’re ready to dive into the world of creative coding. What’s even cooler is that the visuals and sounds keep playing as long as you stay on the tab. They won’t distract you if you change tabs, but will still be there when you come back later.

Cool Features and Areas for Improvement

One thing I love about LiveCodeLab is its accessibility. You don’t need to be a coding whiz to appreciate what it can do. As Guy John puts it,

"You don't need to understand the code to appreciate it, much like you don't need to play guitar to enjoy a guitar performance."

It’s a welcoming space where anyone, regardless of their background, can unleash their creativity and see where it takes them.

On top of that, it’s open-source. That means anyone can contribute to its development and help make it even better. Whether it’s adding more shapes and visuals or finding ways to sync animations with sound beats, the possibilities are endless. Everything about how to build on top of LiveCodeLang is also a part of its GitHub documentation.

As great as the platform is, there are areas that could use some polish. More shapes and visuals would be great, and syncing animations with sound could take things to the next level.

However, even as it is, LiveCodeLab is a shining example of how simplicity and creativity can go hand in hand.

As a singer-songwriter who has created basic melodies using simple notes and chords, encountering the discussion about information theory’s applicability in music composition is like discovering a buried treasure mine of creative inspiration. The discovery that randomness and entropy within musical sequences assist in the formation of new melodies fills me with astonishment and excitement.
Traditionally, my compositions may have followed recognizable patterns, depending on predictable melodic and harmonic structures to express emotional depth and narrative resonance. However, the insights gained from the discussion of information theory contradict this conventional approach, prompting me to accept the intrinsic unpredictability of musical expression. The idea that incorporating noise into compositions can add dynamism resonates strongly with my artistic sensibilities. It opens up a whole new realm of experimentation and fun. Also, I completely agree with the fact that repetitive patterns devoid of evolution and form fall short of achieving true musicality. It is very tempting for any musician to just keep on repeating the melodies they’ve discovered – a reason being it is hard to compose new melodies frequently. However, as I listen to my own music, I feel like any form of change in the melody – or even a change in rhythm can elevate it to a newer level. Still, I struggle to find that change. The realization that even a small bit of noise and experimentation with such noise can aid me in finding that change is something really exciting to me.

The idea of harnessing randomness as a creative tool to counteract redundancy and enhance musical expressiveness is both intellectually stimulating and artistically liberating. By introducing controlled randomness into my compositions, I can breathe new life into familiar melodies, transforming them into dynamic expressions of musicality that resonate deeply with myself and with anyone who may listen to my music.