🦀 a colorful music making program for your linux terminal 🦀
Find a file
2024-12-30 21:56:52 +01:00
.forgejo/workflows add release build to ci 2024-12-28 13:33:05 +01:00
.old flatten workspace into 1 crate 2024-12-29 00:10:30 +01:00
bin big flat pt.13: fixed warnings, let's see what it has in store 2024-12-30 21:52:20 +01:00
engine big flat pt.13: fixed warnings, let's see what it has in store 2024-12-30 21:52:20 +01:00
examples wip: big flat pt.8: wh -> xy 2024-12-30 20:32:55 +01:00
layout big flat pt.13: fixed warnings, let's see what it has in store 2024-12-30 21:52:20 +01:00
rust-jack@d09788959f implement sync_lead and sync_follow flags for groovebox 2024-12-29 18:39:20 +01:00
src move some docs to root 2024-12-30 21:56:52 +01:00
suil flatten workspace into 1 crate 2024-12-29 00:10:30 +01:00
.dockerignore fix and update ci config 2024-12-21 12:25:50 +01:00
.gitignore basic midi import example 2024-11-24 03:47:03 +01:00
.gitmodules add rust-jack submodule 2024-12-28 23:45:01 +01:00
.scratch.rs put phrase 2024-12-24 01:15:35 +01:00
architecture.svg move some docs to root 2024-12-30 21:56:52 +01:00
Cargo.lock wip: big flat pt.8: wh -> xy 2024-12-30 20:32:55 +01:00
Cargo.toml wip: big flat pt.8: wh -> xy 2024-12-30 20:32:55 +01:00
Justfile don't autoconnect groovebox to midi out 2024-12-28 21:55:30 +01:00
LICENSE update license 2024-10-15 09:16:48 +03:00
README.md move some docs to root 2024-12-30 21:56:52 +01:00
shell.nix remove VerticalArrangerGrid/Cursor 2024-10-18 16:03:03 +03:00

tek Please don't upload to GitHub

a music making program for your terminal

Screenshot

what it does

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).

Note

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... and refactoring... and refactoring... you know how it is.

project status

for roadmap, see https://codeberg.org/unspeaker/tek/milestones

Note

As of 2024-12-25, the release window has been open since 2024-12-10. 6 alpha/beta versions have been published on the Releases page.

Note

I still want to tag the first working prototypes (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!

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 — 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-based notation (EDN, Steel, or similar... though I've also been looking for an excuse to embed a Forth 😏)

getting started

requirements

  • Linux
  • JACK or Pipewire
  • a terminal supporting 24-bit colors (I use kitty)
  • MIDI controller
  • Samples
  • LV2 plugins

installation

arch linux

tek is available as a package in the AUR. You can install it using an AUR helper (e.g. paru):

paru -S tek

downloads

See the releases page.

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.:

just arranger

contents

This crate provides several musical utilities.

tek_sequencer

A single-track, multi-pattern MIDI sequencer with properly tempo-synced pattern switch.

tek_groovebox

A single-track, multi-pattern MIDI sequencer, attached to a sampler or plugin (see tek_plugin).

tek_arranger

A multi-track, multi-pattern MIDI sequencer translating the familiar clip launching workflow into the TUI medium.

tek_transport

Standalone JACK transport controller.

  • Todo: bpm: shift +/- 0.001
  • Todo: quant/sync: shift = next/prev value of same type (normal, triplet, dotted)
    • Or: use shift to switch between inc/dec top/bottom value?
  • Todo: focus play button
  • Todo: focus time position
  • Todo: edit numeric values
  • Todo: jump to time/bbt markers
  • Todo: count xruns

tek_sampler

TODO: Standalone MIDI-controlled sampler.

tek_mixer

TODO: Mixer.

  • Meters: propagate clipping:
    • If one stage clips, all stages after it are marked red
    • If one track clips, all tracks that feed from it are marked red?

tek_track

TODO: Channel strip.

tek_plugin

TODO: Plugin host.

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:

  • 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.


Note

Your moral support means a lot to me. Feel free to contact me on Mastodon1

Love, 🤫 (a rogue knowledge worker in a cyberpunk dystopia)


  1. (Especially if you know how to host LV2 plugin UIs in winit; or how to relink abandoned Win32 VST2s into LV2 or CLAP monoliths 😁) ↩︎