4.5 KiB
Warning
As of 2024-09-10, I'm working hard to bring this project back to a usable state (as seen e.g. here).
I reached the limit of how much of the UI I can write imperatively, and started refactoring it in a more declarative style. I'm quite excited about how the interface logic is turning out!
Your moral support means a lot to me. Feel free to contact me on Mastodon!
(Especially if you know how to host LV2 plugin UIs in
winit😁)
- the author ❤️
tek
Tek is a MIDI sequencer, sampler, and plugin host for the Linux terminal. It's written in Rust, and targets JACK (or Pipewire's JACK implementation).
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 — but for free systems, and without all the bloat!
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.
A secondary goal is to make my music making environment extensible, programmable, and interoperable; the intended project format is an S-expression-based notation (EDN, Steel, or similar... though I've also been looking for an excuse to embed a Forth 😏)
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.
See demos/project.edn for the initial contents of the session.
Requirements
- Linux
- Rust toolchain
- JACK or Pipewire
Recommended
- MIDI controller
- Samples at ~/Lab/Music/pak
- Odin2 LV2 ~/.lv2/Odin2.lv2
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:
- The arranger view corresponds to Ableton's Session and Arrangement views. It allows you to put together a musical composition as a sequence of phrases, playing simultaneously across multiple tracks.
- The sequencer view allows you to edit phrases, which consist of MIDI events.
- The chain view allows you to add devices to each track. Devices determine how a given phrase will sound. Currently, there are two devices implemented: sampler and plugin.
Note
Use
Tabto switch focus between views. UseEnterto exclusively focus the highlighted view, andEscto unfocus it. When a view is focused, use theArrow KeysandEnterto navigate. Use;(semicolon) to open the command palette, which will list the remaining keybindings.
TODO:
- Control:
- Customize key map
- MIDI map
- Scriptable
- Command panel
- Search panel
- Save project:
- Preserve EDN layout
- Samples:
- Sample browser
- Resample
- Repitch
- Sample editor
- Envelope
- Stretch sample to BPM
- Set BPM from sample
- Map MIDI note to sample
- Multisample
- Sequencer/Arranger:
- Fix next/prev clip
- Move clip/track/scene
- Set track gain
- Play from one clip, record into another
- 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:
- Focus transport to set BPM/sync/quant with
., - Double/halve BPM with
xX
- Focus transport to set BPM/sync/quant with
- Rendering:
- LineBuffer for scroll?
- Buffered rendering with e.g. needs_update (only needed if the release build becomes slow)
- Buffered sequencer
- Buffered chain view