tek/README.md

4.8 KiB

Warning

As of 2024-10-25, I'm on track to releasing tek 0.2.0 sometime in December 2024. I plan to tag the working prototype (as seen in the demos published in the tek channel at basspistol's peertube as 0.1.0— once I've identified the appropriate commit!

I've been dreaming of this project for a decade, and finally had the experience and peace of mind to start building it in late May 2024. I quickly reached the limit of how much of the UI I can write imperatively, so I started refactoring it in a more declarative style. The new interface logic is holding out pretty well, though it's not presently without its warts.

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; or how to relink abandoned Win32 VST2s into LV2 or CLAP monoliths 😁)

Love,

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