🦀 a colorful music making program for your linux terminal 🦀
Find a file
2024-10-11 14:42:36 +03:00
.forgejo/workflows add .forgejo/ with actions 2024-08-18 18:04:30 +03:00
crates add/insert/duplicate phrase directly from grid 2024-10-11 14:42:36 +03:00
.gitignore build suil with symbols; pass features correctly 2024-07-24 16:33:44 +03:00
.gitmodules link to suil from nixpkgs 2024-07-24 14:50:44 +03:00
.scratch.rs fix reexport mess + document modules 2024-07-12 20:11:48 +03:00
Cargo.lock generate random color for each phrase 2024-10-10 19:55:27 +03:00
Cargo.toml move test crate into core 2024-09-12 22:31:51 +03:00
Justfile wip: reenable standalone sequencer 2024-10-08 18:33:21 +03:00
LICENSE-AGPL-3.0 docs: add license 2024-07-18 13:17:22 +03:00
README.md wip: add TuiStyle, unifying Modal 2024-09-24 18:32:42 +03:00
shell.nix add libglvnd and fix helm path 2024-07-24 19:14:43 +03:00

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
  • 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 Tab to switch focus between views. Use Enter to exclusively focus the highlighted view, 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:

  • 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
  • Rendering:
    • LineBuffer for scroll?
    • Buffered rendering with e.g. needs_update (only needed if the release build becomes slow)
      • Buffered sequencer
      • Buffered chain view