All Projects → chaosprint → glicol

chaosprint / glicol

Licence: MIT license
(Audio) graph-oriented live coding language and music DSP library written in Rust

Programming Languages

rust
11053 projects
javascript
184084 projects - #8 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to glicol

Main-Supercollider-Files
my supercollider codes, version history is at the branches
Stars: ✭ 21 (-97.54%)
Mutual labels:  dsp, sound, instrument, synthesizer
Sonic Pi
Code. Music. Live.
Stars: ✭ 8,736 (+924.15%)
Mutual labels:  instrument, synthesizer, live-coding, livecoding
Dx7 Supercollider
My accurate Yamaha DX-7 clone. Programmed in Supercollider.
Stars: ✭ 395 (-53.69%)
Mutual labels:  dsp, sound, instrument, synthesizer
Jssynth
Make music in your browser with this synthesizer and sequencer
Stars: ✭ 25 (-97.07%)
Mutual labels:  instrument, webaudio, synthesizer
tilt
Live coding bytebeat-style language for the web
Stars: ✭ 30 (-96.48%)
Mutual labels:  webaudio, live-coding, livecoding
Fsynth
Web-based and pixels-based collaborative synthesizer
Stars: ✭ 146 (-82.88%)
Mutual labels:  webaudio, synthesizer, live-coding
Awesome Music Production
A curated list of software, services and resources to create and distribute music.
Stars: ✭ 340 (-60.14%)
Mutual labels:  sound, instrument, synthesizer
Supercollider
An audio server, programming language, and IDE for sound synthesis and algorithmic composition.
Stars: ✭ 4,036 (+373.15%)
Mutual labels:  sound, livecoding, computer-music
Webaudiofont
Use full GM set of musical instruments to play MIDI and single sounds or effects. Support for reverberation and equaliser. No plugins, no Flash. Pure HTML5 implementation compatible with desktop and mobile browser. See live examples.
Stars: ✭ 600 (-29.66%)
Mutual labels:  sound, instrument, synthesizer
vult
Vult is a transcompiler well suited to write high-performance DSP code
Stars: ✭ 316 (-62.95%)
Mutual labels:  dsp, webaudio, synthesizer
Vult
Vult is a transcompiler well suited to write high-performance DSP code
Stars: ✭ 272 (-68.11%)
Mutual labels:  dsp, webaudio, synthesizer
Io 808
An attempt at a fully recreated web-based TR-808 drum machine.
Stars: ✭ 576 (-32.47%)
Mutual labels:  sound, webaudio, web-audio
Daisysp
A Powerful, Open Source DSP Library in C++
Stars: ✭ 291 (-65.89%)
Mutual labels:  dsp, sound, synthesizer
flow-synth
*UNMAINTAINED* A modular digital audio workstation for synthesis, sequencing, live coding, visuals, etc
Stars: ✭ 36 (-95.78%)
Mutual labels:  synthesizer, live-coding, livecoding
uos
United Open-libraries of Sound. United procedures for open-source audio libraries. For FPC/Lazarus/fpGUI/MSEgui.
Stars: ✭ 112 (-86.87%)
Mutual labels:  dsp, sound
matchering-web
🎚️ Self-Hosted LANDR / eMastered Alternative
Stars: ✭ 25 (-97.07%)
Mutual labels:  dsp, sound
X-Piano
Now you can make your own piano!
Stars: ✭ 13 (-98.48%)
Mutual labels:  sound, webaudio
lessampler
lessampler is a Singing Voice Synthesizer
Stars: ✭ 59 (-93.08%)
Mutual labels:  dsp, synthesizer
twang
Library for pure Rust advanced audio synthesis.
Stars: ✭ 83 (-90.27%)
Mutual labels:  synthesizer, audio-programming
Comet
Web Synthesis on steroids
Stars: ✭ 18 (-97.89%)
Mutual labels:  synthesizer, web-audio

website website npm Discord GitHub

Glicol (an acronym for "graph-oriented live coding language") is a computer music language with both its language and audio engine written in Rust programming language, a modern alternative to C/C++. Given this low-level nature, Glicol can run on many different platforms such as browsers, VST plugins and Bela board. Glicol's synth-like syntax and powerful audio engine also make it possible to combine high-level synth or sequencer control with low-level sample-accurate audio synthesis, all in real-time.

Get started

🚀 The Web App

The easiest way to try Glicol:

https://glicol.org

There you can find guides, demos, docs, and apps for collaboration.

Features
  • Near-native, garbage-collection-free and memory-safe real-time audio in web browsers

  • Quick reference in consoles with alt-d

  • The web app automatically loads samples; you can also drag and drop local samples in the browser editor

  • Robust error handling: error reported in console, but previous music will continue!

  • Mix JavaScript code to create visuals with Hydra synth made by @ojack

  • What you see is what you get, i.e. declarative programmering for both code writing and executing: no need to select anything, just change the code and update, Glicol engine will use LCS algorithm to handle adding, updating and removing

  • Decentralised collaboration using yjs and a unique be-ready mechanism

🎁 For Audio Dev

Description
NPM Docs Safe, performant, light-weight and ergonomic audio lib for web apps
Rust Audio Lib Write VST like this Dattorro reverb plugin
Run on Bela Run Glicol DSL on Bela board for quick audio prototyping.

🍿 YouTube Channel

Find Glicol demo vidoes in this playlist.

Philosophy of Glicol

The motivation of Glicol is:

  • to help people with zero knowledge of coding and music production to get started with live coding

  • to offer experienced music coders a tool for quick prototyping and hacking

In NIME community, it is known as:

low entry fee and high ceilings

This is Glicol's philosophy to approach these goals:

  • design the language from a new instrument design perspective

  • embrace the spirit of the internet for a better experience

Reflected in the implementation:

  • Glicol adopts a graph-oriented paradigm

  • Glicol can be used in browsers with zero-installation

Graph-oriented

The basic idea of Glicol is to connect different nodes like synth modules.

All you need to know is the audio input/output behaviour of each node.

Two ways for connecting: >> and ~reference:

// amplitude modulation and lazy evaluation example
// chain with ~ is a ref chain and will not be sent to the DAC

o: sin 440 >> mul ~amp
~amp: sin 1.0 >> mul 0.3 >> add 0.5

It also applies to sequencer and sampler:

// sequencer pattern
// first divide one bar with space
// then further divide each part based on midi number and rest(_)

o: speed 2.0 >> seq 60 _~a _ 48__67
>> sp \blip

// quantity alters probability
~a: choose 60 60 0 0 72 72

As mentioned above, you can try these examples on:

https://glicol.org

If you want, you can even hear how a seq node work:

o: speed 2.0 >> seq 60 _72 _ 48__67 >> mul 0.5

This is actually analogous to how hardware module pass signals.

It is very easy to remember and to get started.

When Glicol is used in education, we can let students see and hear each node, even including 'envelope'.

Just leave the introduction of data types, Object or Function later when we mix JavaScript with Glicol.

Zero-installation

For the audio engine, instead of mapping it to existing audio lib like SuperCollider, I decide to do it the hard way:

  • write the parser in Rust

  • write the audio engine in Rust that works seamlessly with the AST processing

  • port it to browsers using WebAssembly, AudioWorklet and SharedArrayBuffer

The main reason is to explore performant audio in browsers for easy access and live coding collaboration.

The reward is that we now have an Rust audio lib called glicol_synth:

It can run on Web, Desktop, DAW, Bela board, etc.

And one more thing.

To write everything from low-level also opens the door for meta node.

Now I can explain to students, the hello world tone can also be written in this way:

o: meta `
    output.pad(128, 0.0);
    for i in 0..128 {
        output[i] = sin(2*PI()*phase) ;
        phase += 440.0 / sr;
    };
    while phase > 1.0 { phase -= 1.0 };
    output
`

Roadmap

  • 0.1.0 hello world from dasp_graph and pest.rs, pass code from js to wasm, and lazy evaluation
  • 0.2.0 pass samples from js to wasm, support error handling, bpm control in console
  • 0.3.0 build complex node plate reverb using basic node from glicol, using macro in Rust
  • 0.4.0 use LCS algorithm and preprocessor for smooth and efficient whole graph updating
  • 0.5.0 build const_generics to dasp_graph and use it in glicol, use SharedArrayBuffer, support local sample loading
  • 0.6.0 refactor the code to modules:
    • glicol-main = glicol-synth + glicol-parser + glicol-ext
    • glicol-ext = glicol-synth + glicol-parser + glicol-macro
    • glicol-js = glicol-main + glicol-wasm
  • 0.7.0 support mixing js with glicol in glicol-js using Regex; add visualisation
  • 0.8.0 embed Rhai in glicol 🎉
  • 0.9.0 redesigned architecture; see the release note
  • 0.10.0 run as a VST plugin
  • 0.11.0 run on Bela
  • 0.12.0 distribute as a npm package
  • better music expressions, more variation for seq nodes
  • exploring new forms of musical interactions

Note that Glicol is still highly experimental, so it can be risky for live performances. The API may also change before version 1.0.0.

Please let me know in issues or discussions:

  • your thoughts on the experience of glicol
  • new feature suggestion
  • bug report, especially the code that causes a panic in browser console
  • missing and confusion in guides and reference on the website
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].