GLICOL (an acronym for “graph-oriented live coding language”) is written with rust. With a bit of visuals and an amazing working environment, let’s get those beats popping… I did not actually master the program but.. we try…

So Important things first,

Where did this begin

Qichao Lan, the developer of this platform, is a computer musician and audio programmer in his early 30s (probably around), specializing in Rust and web audio, live coding, and music AI. His inspiration behind Glicol as described by the University of Oslo- where he did his PhD – is as follows:

“Qichao Lan wanted to make music live coding accessible to anyone. As part of his PhD, he made a music language and an app easily accessible in a web browser.”

Silje Pileberg – RITMO Centre for Interdisciplinary Studies in Rhythm, Time and Motion

He wanted to make it more accessible for people to understand music, all while making it fun and enjoyable. It is true that today many people surround themselves with music not knowing where it originated, he was trying to connect these 2 dots. You will see as you read on, I feel like Glicol relies a story of someone who genuinely wants to teach you something about what he loves. He wants to share his passion, make people connect, innovate, try, create, and most importantly understand. He made use of his education and passion, he is not much older than we are. Glico is made using Rust programming language, and javascript, and can use both js and meta programming languages to code within the environment. Its cool go play around.

We Innovate

https://glicol.org/

I wanted to talk here about 1, the website, 2 the documentation, 3 the references, and 4 the experience.

Website

Honestly, in my opinion, the website has this appeal of welcomeness, with the colors, the language, the jokes, and the way different parts of the website were organized, it was all very welcoming. How often do you see that!

I also really liked the fact that the website has the option to play the audio and animation on the square in the website while reading explanations and seeing the output on the spot — almost like an innovation of the “run code” button that opens a new page to run the code.

Documentation

Glycol had, essentially, the readme — the required documentation — a demo, and a tour on the website.

The tour explained concepts almost like you are in class listening to your professor, following steps to genuinely understand each of the functions being used and what they mean. It is definitely one of the nicest presentations on these topics that I have seen.

The demo, on the other hand, did not have as much explanation, but it had combinations, that could be used to code. It is nice to be able to see how the codes would go together, especially as someone new to a live coding environment, or as someone new to music development or programming.

One issue I had with what was on the website, is that it wasn’t particularly enough… I guess references (check references section) exist and they explained most needed concepts, but it felt incomplete in way.

References

The references they had were really really cute, but, I wish it could be searched up somewhere other than the consol. Some document or another. because as fun as it is to read it on the consol once, I don’t want to do it every time I forget.

Basically references are shown on the consol in 3 ways:

  • You type d() to get the keywords available
  • You type h() to get a specific explanation for any keyword
  • You press Alt+D with the cursor on the keyword you need help with and it will show a short help for this keyword

I honestly think Alt+D is an amazing addition, the other 2 not as much if I am being honest

Experience

After exploration, attempts at understanding, and a failed attempt to replicate a heartbeat using a sin wave, here is what we got…

WebEditor

// Hello world note:
o1: sin 440

// playing around
~o1: speed 4.0 >> seq 60 _ 50_2 _ >> sp \808bd;

~a: choose 60 60 0 0 72 72
~o2: speed 2.0 >> seq 60 ~a _ 48_67 >> sp \blip

~o3: speed 3.0 >> seq _ 10 _ _~a >> sp \808bd

// combining examples with my code
~gate: speed 2.0 >> seq 60 _60 _~a 48;
~a: choose 48 48 48 72 0 0 0
~amp: ~gate >> envperc 0.001 0.1;
~pit: ~gate >> mul 200
~o4: saw ~pit >> mul ~amp >> lpf ~mod 5.0
~mod: sin 2 >> mul 1.3 >> add -0.2

out: mix ~o.. >> plate 0.1

// js example
~x1: seq 60 >> sp \##s()# // random pick
~x2: seq _60 >> sp \##s(0, 20)# // random pick range 
~x3: seq _ _60 >> sp \##s(42)# // select
~x4: seq _60 _ >> sp \##s("in")# // filter word
out2: mix ~x.. >> plate ##1/10#

// basic fm notes 300sin(0.2)+1000
~fm: sin 0.2 >> mul 300.0 >> add 1000.0
out3: sin ~fm >> mul 0.1

// final output
~b: choose 100 60 20 0 70 40
out4: sin 0.6 >> mul 5 >> add -2.4 >> speed 2.1 >> seq ~b _ ~b

Blooper

So-called “live coding'” as declared by the RITMO Centre of the University of Oslo. (https://www.hf.uio.no/imv/english/research/news-and-events/events/disputations/2022/lan.html)

I just wanted to talk about how I got to using GLICOL. I want to say know the dependencies before you use any open-source software, please.

I first started with Mosaic. Mosaic needs a lot more dependencies than I thought it would, especially for a Windows user. The documentation is also a little hard to follow – if you do not have someone who already knows how to make it work explain that, it is not easy to figure out. After I spent hours between downloads, figuring out errors and 500 different “instructions” websites, the Mosaic ofx project was not working, and then I decided it was not worth the time to keep going with it.

Switching is hard, because Mosaic seemed like a really powerful platform, that could need a learning curve, but also allows you to play around without fully knowing what is going on. This is an intro video to explain what I am trying to say > Mosaic Intro.


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>