aeon
aeon copied to clipboard
A live-coding system for musical pattern manipulation
- aeon [alpha] A music live-coding suite. Still under development, and not ready for prime-time yet!
** Overview =aeon= is a live-coding music system. That means that you can improvise live electronic music by typing into a text editor or terminal. Its primary purpose is to create sequences of musical events that can be modified on the fly.
This is far from a new idea, as the [[#alternatives][list of alternatives]] suggests. But =aeon= tries to bring some new ideas to the table, or at least to remix existing ones in novel ways. Some of these are listed in the [[file:docs/features-overview.org]['features' document]]. If you want more comprehensive documentation, try the [[file:docs/tutorial.org][tutorial]] or [[file:docs/manual.org][manual]].
The most important thing: you don't need to know programming to use =aeon=. At least, that is my goal. Instead toyou'll be using a very stripped-down custom notation to define patterns. I think of it a bit like HTML for music. And later you may accidentally learn some programming if you aren't careful =;)=
** Installation =aeon= currently supports macOS and Linux only. If you're on Linux, you already have (and probably use) a package manager. If you're on macOS, I recommend you install [[https://brew.sh/][Homebrew]].
#+begin_src shell
Install dependencies:
$ brew install chezscheme supercollider # macOS $ sudo apt install chezscheme supercollider # Ubuntu/Debian linux
Install
$ git clone [email protected]:tommaisey/aeon.git $ cd aeon $ chez aeon.scm #+end_src
Note that some package managers name the Chez Scheme binary =scheme=, so the final command might be =scheme aeon.scm=.
You should see a Chez Scheme welcome message followed by some messages about files being compiled. This will take a short while, but should only happen the first time you launch =aeon=.
If everything went well, you should see the following message:
#+begin_src
[aeon] musical patterns
#+end_src
Now you can check that your sound is working by typing this and pressing enter:
#+begin_src scheme (pattern hello (in! (over [4 2 1 2]))) #+end_src
To stop the sound, type: =(stop hello)=. To exit =aeon= entirely you can hit =Ctrl-D= or type =(exit)=.
If you want to learn how to get started constructing patterns, sounds and projects, head to the [[file:docs/tutorial.org]['tutorial' document]].
*** Using a text editor The REPL (the prompt you are now in) is a fun way to explore and test ideas while learning. But as you build more complex patterns you will want to store and edit them in text files.
The simplest approach is to write your code in any editor you like, then launch =scheme aeon.scm= and run =(load "/path/to/my/file.scm")= to evaluate it. You can resave your text file and rerun that command to change the pattern as it plays.
However, for a more seamless experience you will want two things:
- Send code to the REPL directly from your editor.
- Structural editing and navigation.
'Structural editing' is a fancy way of saying that your editor can navigate and edit code quickly using the ubiquitous parentheses ~()~ of scheme. This turns those annoying and fiddly parentheses into an advantage, streamlining your experience enormously. But it does take a little practice.
My plan is to create a simple plugin for [[https://code.visualstudio.com/][VS Code]] that offers these features in the simplest way possible.
Until then, the best choices are:
- [[https://code.visualstudio.com/][VS Code]] with [[https://marketplace.visualstudio.com/items?itemName=clptn.code-paredit][paredit]] and a simple [[https://marketplace.visualstudio.com/items?itemName=nvbn.sendtorepl][repl]] plugin
- [[https://www.gnu.org/software/emacs/][Emacs]] with [[https://github.com/emacsmirror/paredit][paredit]] (built in) and the [[https://nongnu.org/geiser/][geiser]] package.
If you're not experienced with Emacs, note that it can take a long time to become proficient and to customize it to your tastes. However, the end result is powerful and satisfying. If you just want to make music quickly, you should use VS Code, which is more friendly to newcomers.
*** Troubleshooting If you don't hear any sound it's likely that SuperCollider isn't connecting to your audio outputs correctly. The log output above may give some clues, or if not, it's worth hitting =Ctrl-D= to get out of scheme, and running =scsynth= directly, to see if it can tell you more:
#+begin_src shell
macOS:
$ /Applications/SuperCollider.app/Contents/Resources/scsynth -u 57100 #+end_src
** Alternatives :PROPERTIES: :CUSTOM_ID: alternatives :END: There are many other live-coding systems that you can try, each with different approaches and design trade-offs. Here are some of my favourites:
- [[https://supercollider.github.io/][SuperCollider]] [procedural] [object-oriented]
- [[https://tidalcycles.org/][Tidal Cycles]] [functional] [haskell]
- [[https://hundredrabbits.itch.io/orca][Orca]] [esoteric] [stateful]
- [[https://github.com/digego/extempore][Extempore]] [scheme]
- [[https://overtone.github.io/][Overtone]] [clojure]
- [[https://foxdot.org/][FoxDot]] [python] [simple]