glicol

Graph-oriented live coding language and music/audio DSP library written in Rust

MIT License

Downloads
97
Stars
2.2K
Committers
4

Bot releases are hidden (Show)

glicol - v0.12.5 Latest Release

Published by chaosprint over 2 years ago

What's Changed

New Contributors

Full Changelog: https://github.com/chaosprint/glicol/compare/v0.12.4...v0.12.5

glicol - v0.12.1 distribute as an NPM package

Published by chaosprint over 2 years ago

Full Changelog: https://github.com/chaosprint/glicol/compare/v0.12.0...v0.12.1

See this example, which is very straightforward:

https://glicol-npm.netlify.app

Source code of the example:

https://github.com/glicol/glicol-npm-example

glicol - v0.12.0 add input support to engine for live coding audio effects in VST

Published by chaosprint over 2 years ago

What's new?

Glicol VST now supports ~input.
This really opens many possibilities.
Demo:
https://youtu.be/tmmBhBmIEW0

Usage

Step 1

Download the zip file below, unzip it and put it into /Library/Audio/Plug-Ins/VST/ on your Mac.
For M1 users, you need to run your DAW with Rosetta.

I only tested it with M1 chip, but old models may also work

Update:

Tested in an old Inter model Macbook. No Rust installed. Just download the zip, unzip and put the vst file to the folder mentioned above. Then install Ableton Live 11 trial. Go to Ableton settings to allow VST. If you have seen Apple cannot open it because of unverified publisher, just go to Mac settings Security and click open anyway. Then do the scanning again in Ableton.

Known issues:

  • cannot run on reaper due to key conflicts: space will always play the track rather than input code
  • cannot run on Ablenton Live on Windows (even compiled from source): with a frozen GUI; may be related to the code editor

Step 2

Open your favourite DAW. Mine is Ableton Live 11 trail. Then, make sure the DAW finds the VST.
Ableton has good guidance here:
https://help.ableton.com/hc/en-us/articles/209068929-Using-AU-and-VST-plug-ins-on-Mac

Step 3

Use Glicol VST as an audio effects.

Here are some receipts:

Dattorro Plate Reverb in VST:
https://github.com/chaosprint/glicol/discussions/83

Or you can try this sample-level one-pole filter:

o: ~input >> meta `
    r = 1./10000.;
    output.pad(128, 0.0);
    b = (-2.0 * PI() * r).exp();
    a = 1.0 - b;
    for i in 0..128 {
        y = input[i] * a + b * z;
        output[i] = y;
        z = y;
    };
    output
`
glicol - v0.11.10 bela adc works + glicol code/file as terminal args

Published by chaosprint over 2 years ago

Usage

Step 1

On your PC, plug in Bela and make sure you can visit http://bela.local in your browser.

Step 2

Then on your PC terminal:

wget https://github.com/chaosprint/glicol/releases/download/v0.11.10/glicol

If you use Mac, you need to brew install wget first.

Then:

scp glicol [email protected]:~

Step 3

In your PC terminal:

ssh [email protected]

Then:

./glicol "o: saw ~mod; ~mod: ~adc3 >> mul 110 >> add 220"

More on:

https://github.com/chaosprint/glicol/tree/main/rs/bela

glicol - v0.11.1 try to support safari

Published by chaosprint over 2 years ago

glicol - v0.11.0 run on Bela

Published by chaosprint over 2 years ago

glicol - v0.10.0 run as a VST plugin

Published by chaosprint over 2 years ago

glicol - v0.9.20 improve random visual

Published by chaosprint over 2 years ago

Example:

##v()#
o: speed 8 >> seq ~a >> sp \##s()#
~a: choose 60 72 0 0

Try it out: https://glicol.org/solo

glicol - v0.9.5 support loose reference match

Published by chaosprint over 2 years ago

Now you can write code like this:

~t1: seq 60 >> sp \##rnds()#
~t2: seq _ 60 >> sp \##rnds()#
~t3: seq _60 _ >> sp \##rnds()#
~t10: seq _ _60 >> sp \##rnds()#
out: mix ~t.. >> plate 0.1

~t.. will match all the references that begins with ~t. That's it. Very useful for mixing to a reverb.

Try it now on: https://glicol.org

glicol - v0.9.0 redesigned architecture

Published by chaosprint over 2 years ago

TL;DR: Glicol is a graph-oriented live coding language and audio DSP library written in Rust. try the latest version: https://glicol.org


there are a lot of updates in this release. I basically rewrote all the rust part from scratch. now the source code is much easier to read. the error handling is also more robust. just pick some highlights:

rewrite the parser

  • the parser is now very strict and can catch almost all the errors in parsing
  • the parser can report the error with expecting... or unexpected... and pos
  • the parser now provide a get_ast function for parsing which will return a HashMap

make glicol_synth a standalone rust library that is ready to publish at crates.io

glicol_synth begins with a fork of the dasp_graph crate, written by @mitchmindtree.
many features and contents are added:

  • use const generics feature of rust for a customisable buffer size
  • replace the input from Vec to HashMap, so users can use a node id to select input
  • users can send Message to each node in real-time for interaction
  • add a higher level AudioContext for easier APIs
  • many useful audio nodes from oscillators, filters, etc.

rewrite the engine

  • the live coding engine takes some code for updating and always yield new blocks with next_block() method
  • some new mechanism for parsing and audio graph building and updating
  • we get the HashMap ast first and compare it with the old ast
  • there are some tracks that are completely new, deleted or modified; then further compare those modified tracks
  • get list of node_to_add, node_to_update and node_to_remove
  • check if it is possible to make the update, such as whether samples exist, and refs exist
  • not update the graph until every check is passed, else clean up the mess, and the graph is unchanged

rewrite the wasm-binder

  • some new sample adding mechanism
  • some more error reporting mechanism for the js side
  • updating is simplified to one single function with sharedarrarybuffer

js

  • automatically load samples
  • support stereo samples
  • better organise the commands into addSampleFiles, addSampleFolder, showAllSamples, getRandSample