====== Animo (abandoned) ====== **Animo** is a set of open-source music oriented software I developed. * [[https://gitlab.com/gibbonjoyeux/chamo|Chamo]] - Sound design + music software * [[https://gitlab.com/gibbonjoyeux/blairo|Blairo]] - Supercollider node based gui * [[https://gitlab.com/gibbonjoyeux/rino/-/tree/dev|Rino]] - Live coding ===== 🐫 Chamo ===== **Chamo** changed a lot. It started as a complete node based music software where users were able to code their own nodes based on a tracker with patterns and a timeline. It's "final" version is quite different and way simpler. It is a framework that allows to create sound like you would create an image. In **Chamo**, you literally draw sound. It is highly inspired by [[https://processing.org|Processing]] and [[https://p5js.org|p5.js]]. It can either open your **Chamo** program and visualise it (it could even be interactive with your mouse cursor) or process it at full speed to generate a **.wav** file. Even if it is kind of abandoned, **Chamo** is important to me cause it was my gateway to sound / music software development and I basically learnt everything with it. **Chamo** can also receive OSC events for interactive programs. * [[https://gitlab.com/gibbonjoyeux/chamo|Gitlab repository]] * [[https://gitlab.com/gibbonjoyeux/chamo/-/blob/master/API.md|List of available functions]] * [[https://gitlab.com/gibbonjoyeux/chamo/-/tree/master/doc|Code examples]] {{:chamo-1.png?400}} {{:chamo-2.png?400}} -- init() is called once at the beginning function init() -- Define samplerate and format samplerate(44100) format("centered", 100) -- Initialise variable i = 0 end -- update() is called repetitively function update() -- Define a set of notes local notes = {523.25, 659.25, 783.99} -- Save the file once 10s has passed if time() >= 10 then save("audio.wav") end -- Draw a point and rotate its position depending on time and note (in hertz) rotate(time() * notes[1]) point(50, 0, 1) end ===== 🦡 Blairo ===== **Blairo** is a web browser node based graphical user interface for [[https://supercollider.github.io|Supercollider]]. It was meant to allow to build Supercollider patches using simple nodes. It is not finished and not a 100% usable but it helped me get a better understanding of how Supercollider works. It basically compiles the node patch you build on your web browser into a scynth and send it to Supercollider. It helped me understand how **ugens** and **scynth** really work as I had to compile user patch into **.scsynthdef** binary format. * [[https://gitlab.com/gibbonjoyeux/blairo/-/tree/dev|Gitlab repository]] {{:blairo-1.png?400}} ===== 🦏 Rino ===== **Rino** is a live coding program based on the Lua programming language. It is meant to be used with other music software via the OSC protocol (Supercollider, VCV Rack, etc.). Here, live coding means that you create rhythms and melodies through the use of algorithms. Each time you update the file you are working on, **Rino** updates the sequence. It is highly inspired by the [[https://supercollider.github.io|Supercollider]] pattern sequencing [[https://doc.sccode.org/Classes/Pattern.html|Functions]]. If **Rino** is not in development anymore, I used it a lot during live coding events and I really rarely had issues with it. -- Set the BPM by changing the BPM global variable BPM = 60 -- Create a loop called "kick" function loop_kick() -- Send a play command to Supercollider scplay("kick") -- Wait for 1 beat wait(1) end function loop_lead() local freq local dur -- Define a pitch sequence -- Each time loop_lead() is called, it will loop through the notes (hz) list freq = pseq({220, 330, 440}) -- Define a time sequence (in beats) -- Each time loop_lead() is called, it will pick a random note time in the list dur = rand({0.125, 0.25, 0.5}) -- Send a play command to Supercollider with parameters scplay("sine", { "freq", freq, "amp", 0.5 }) -- Wait for a certain period of time wait(dur) end * [[https://gitlab.com/gibbonjoyeux/rino/-/tree/dev|Gitlab repository]]