Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ul/livecore
A hardcore livecoding system for realtime audio synth.
https://github.com/ul/livecore
audio livecoding nim nim-lang synth
Last synced: 3 months ago
JSON representation
A hardcore livecoding system for realtime audio synth.
- Host: GitHub
- URL: https://github.com/ul/livecore
- Owner: ul
- License: other
- Created: 2021-01-17T10:12:33.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-08-23T04:37:55.000Z (6 months ago)
- Last Synced: 2024-10-10T23:32:28.513Z (4 months ago)
- Topics: audio, livecoding, nim, nim-lang, synth
- Language: C
- Homepage:
- Size: 11.5 MB
- Stars: 32
- Watchers: 6
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# LiveCore
A hardcore livecoding system for realtime audio synth in [the spirit of Sound Garden](http://ul.mantike.pro/sound-garden-manifesto.html).
WIP with
[Work with the garage door up](https://notes.andymatuschak.org/Work_with_the_garage_door_up) ethos.## Influences
- [clive](https://mathr.co.uk/clive/)
- [Extempore](https://extemporelang.github.io)
- Sound Garden [1](https://github.com/ul/sound-garden) & [2](https://github.com/ul/sound-garden-0x2)
- [Ad Libitum](https://github.com/ul/ad-libitum)
- [Strudel](https://github.com/tidalcycles/strudel)## Dependencies
- [Nim](https://nim-lang.org) 2.0.0
- [fswatch](http://emcrisostomo.github.io/fswatch/) 1.17.1
- [libsndfile](http://www.mega-nerd.com/libsndfile/) 1.1.0
- [LLD](https://lld.llvm.org)On macOS:
```
$ brew install fswatch libsndfile
or
$ port install fswatch libsndfile
```For Nim try [choosenim](https://github.com/dom96/choosenim#choosenim).
There is also `shell.nix` for Nix users, which is the installation method I use and test against.
## Configuration
Sample rate and channels count is hardcoded to `48000` and `2` respectively.
If your device requires different values, edit `src/dsp/frame.nim`.## Session workflow
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 with
`session/` 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!## Render
To render a specific session duration in a non-interactive mode to a file:
```
$ ./render
```## Examples
Peek into `src/session.nim` in `session/*` branches.
## License
This project is licensed under [BSD-3-Clause](./LICENSE), 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.## FAQ
### Why Nim?
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.### Does it run on Windows/Linux?
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.### Why snake_case procs and vars?
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.