Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

ul/livecore

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

162 Commits
162 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LiveCore

A hardcore livecoding system for realtime audio synth in the spirit of Sound Garden. WIP with Work with the garage door up ethos.

Influences

Dependencies

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.

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 <duration in seconds> <path/to/output.wav>

Examples

Peek into src/session.nim in session/* branches.

License

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.

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.

About

A hardcore livecoding system for realtime audio synth.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.