A hardcore livecoding system for realtime audio synth in the spirit of Sound Garden. WIP with Work with the garage door up ethos.
- Nim 2.0.0
- fswatch 1.17.1
- libsndfile 1.1.0
- LLD
On macOS:
$ brew install fswatch libsndfile
or
$ port install fswatch libsndfile
For Nim try choosenim.
There is also shell.nix
for Nix users, which is the installation method I use and test against.
Sample rate and channels count is hardcoded to 48000
and 2
respectively.
If your device requires different values, edit src/dsp/frame.nim
.
NB: you need to run all the mentioned scripts from the repo root.
- Checkout starting point. For a fresh session the
main
branch is a good choice. - Make sure that the git tree is clean, as this script will be committing your changes as you make them.
- Start server with
./start-server
- Run
./start-session
with a session name as an argument. It must be valid as a part of git branch name as the script will prefix it withsession/
and checkout this branch. - If the session with such name exists it will be resumed.
- Make changes in
src/session.nim
and save file to compile and send to the server. - After every successful compilation there will be a commit.
- Ctrl-C this script to stop and switch back to the starting point.
- The system is ready for the next session!
To render a specific session duration in a non-interactive mode to a file:
$ ./render <duration in seconds> <path/to/output.wav>
Peek into src/session.nim
in session/*
branches.
This project is licensed under BSD-3-Clause, with the exception of
derivative work that is covered either by licenses defined via LICENSE
files
in the corresponding sub-directories or via comments directly in the source code
files.
C-like freedom, performance and fast compilation with heaps of syntactic sugar. clive very much aligns with the vision I wanted to implement and I'd just port clive to macOS if only C was terser. When I'm jamming I want the code to be clean, concise and close to my intention, all other necessary trade-offs considered.
Maybe. Please try and let me know! I strive to write the code in a platform-independent way but I test it only on macOS.
Purely irrational, æsthetic choice. CamelCase seems to be prevalent in the Nim ecosystem, and majority of the code I write/read in other languages is camelCase too. However, I enjoy the most writing/reading OCaml and Rust in the regard of that particular convention, and I'm glad that Nim's compiler doesn't actually care, so I went with underscores.