diff --git a/README.md b/README.md index 02a0e368..d388337c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ +# tek + +a music making program for your terminal + +## project status + > [!WARNING] > > As of 2024-10-25, I'm on track to releasing `tek 0.2.0` sometime in December 2024. @@ -16,24 +22,32 @@ > > Love, > -> the author +> (a rogue knowledge worker in a cyberpunk dystopia) -# tek +## what it does Tek is a [MIDI](https://en.wikipedia.org/wiki/MIDI) sequencer, sampler, and plugin host for the Linux terminal. It's written in [Rust](https://www.rust-lang.org/), and targets [JACK](https://jackaudio.org/) (or [Pipewire](https://www.pipewire.org/)'s JACK implementation). +## design goals + +### lightweight + My goal is to have a pop-up scratchpad for musical ideas that doesn't get in the way of building upon them. Kind of like [Ableton](https://www.ableton.com/) — but for free systems, and without all the bloat! +### flexible + Besides Ableton, I'm also inspired by the workflow of trackers and various old-school hardware sequencers (of which I've broken several). I've found that every existing music-making tool takes me about 80% of the way to the music I want to make. And so, after a decade of fucking around, I've decided it's finally time to make good on my old dream to build the instrument that will take me 100% there. +### programmable + A secondary goal is to make my music making environment extensible, programmable, and interoperable; the intended project format is an [S-expression](https://en.wikipedia.org/wiki/S-expression)-based notation @@ -42,27 +56,44 @@ interoperable; the intended project format is an looking for an excuse to embed a [Forth](https://en.wikipedia.org/wiki/Forth_(programming_language)) 😏) -You can follow my progress, my tragicomical struggles with maintaining -mental health as a rogue knowledge worker in a cyberpunk dystopia, and various -other trials'n'tribulations, on [Mastodon](https://mastodon.social/@unspeaker). +## getting started ---- - -See `demos/project.edn` for the initial contents of the session. - -## Requirements +### requirements * Linux -* Rust toolchain * JACK or Pipewire +* a terminal (I use `kitty`) -### Recommended +### recommended * MIDI controller -* Samples at ~/Lab/Music/pak -* Odin2 LV2 ~/.lv2/Odin2.lv2 +* Samples +* LV2 plugins -## Overview +### downloads + +> [!WARNING] +> +> Binaries are currently unavailable. Right now your only option is to build from source. +> In the future I plan to integrate Codeberg Actions. + +### building from source + +You need a Rust toolchain and various system libraries. You can obtain the former +using `rustup` and the latter using `nix-shell`. From there, use the commands in the +`Justfile`, e.g.: + +```sh +just arranger +``` + +## usage + +> [!WARNING] +> +> The following applies to `tek 0.1.0`. I will update it as part of the `0.2.0` release. + +### Overview Tek is inspired by "clip launching" workflows as exemplified by Ableton Live, Bitwig Studio, Ardour, and probably others. The main view consists of three sections: @@ -80,27 +111,21 @@ Ardour, and probably others. The main view consists of three sections: > and `Esc` to unfocus it. When a view is focused, use the `Arrow Keys` and `Enter` to navigate. > Use `;` (semicolon) to open the command palette, which will list the remaining keybindings. -## TODO: +## todo -* Control: - * [ ] Customize key map - * [ ] MIDI map - * [ ] Scriptable - * [ ] Command panel - * [ ] Search panel -* Save project: - * [ ] Preserve EDN layout -* Samples: - * [x] Sample browser - * [ ] Resample - * [ ] Repitch - * [ ] Sample editor - * [ ] Envelope - * [ ] Stretch sample to BPM - * [ ] Set BPM from sample - * [ ] Map MIDI note to sample - * [ ] Multisample -* Sequencer/Arranger: +* framework: + * command system: + * [ ] customize key map + * [ ] midi map + * [ ] scriptable + * [ ] command panel + * [ ] search panel + * rendering: + * [ ] LineBuffer for scroll? + * [ ] Buffered rendering with e.g. needs_update (only needed if the release build becomes slow) + * [x] Buffered sequencer + * [ ] Buffered chain view +* transport/arranger/sequencer: * [x] Fix next/prev clip * [ ] Move clip/track/scene * [ ] Set track gain @@ -108,20 +133,29 @@ Ardour, and probably others. The main view consists of three sections: * [ ] Offbeat of next clip starts during end of first * [ ] Pattern chain * [ ] Actually sync -* Chain: - * [ ] Add device - * [ ] View and connect device ports in chain view - * [ ] Open LV2 GUI - * [ ] Pin favorite FX parameters with `*` - * [ ] Parallel monitoring chain - * [ ] Support CLAP plugins - * [ ] Support VST2 - * [ ] Support VST3 -* Transport: - * [x] Focus transport to set BPM/sync/quant with `.,` - * [ ] Double/halve BPM with `xX` -* Rendering: - * [ ] LineBuffer for scroll? - * [ ] Buffered rendering with e.g. needs_update (only needed if the release build becomes slow) - * [x] Buffered sequencer - * [ ] Buffered chain view + * transport: + * [x] Focus transport to set BPM/sync/quant with `.,` + * [ ] Double/halve BPM with `xX` + * save and load: + * [ ] human readable format + * [ ] preserve formatting +* synth/sampler/fx chain: + * sampler: + * [x] Sample browser + * [ ] Resample + * [ ] Repitch + * [ ] Sample editor + * [ ] Envelope + * [ ] Stretch sample to BPM + * [ ] Set BPM from sample + * [ ] Map MIDI note to sample + * [ ] Multisample + * Chain: + * [ ] Add device + * [ ] View and connect device ports in chain view + * [ ] Open LV2 GUI + * [ ] Pin favorite FX parameters with `*` + * [ ] Parallel monitoring chain + * [ ] Support CLAP plugins + * [ ] Support VST2 + * [ ] Support VST3