v0.5 oo dP oo
88
88d8b.d8b. dP .d888b88 dP
88'`88'`88 88 88' `88 88
88 88 88 88 88. .88 88
dP dP dP dP `88888P8 dP
dP dP
88 88
d8888P 88d888b. .d8888b. .d8888b. 88 .dP .d8888b. 88d888b.
88 88' `88 88' `88 88' `"" 88888" 88ooood8 88' `88
88 88 88. .88 88. ... 88 `8b. 88. ... 88
dP dP `8888'P8 `88888P' dP `YP `88888P' dP
MidiTracker is a small tracker that sequences notes in a nested vertical layout. The UI is heavily inspired by LSDJ and other trackers from the past, present and future. To make it portable and useful on all kinds of plattforms I've choosen python for it with minimalist curses / ASCII user interface.
I'm building this whole thing with python 3.9.10. And I have close to no experience with python. You'll need a python environment with mido, rtmidi and curses modules installed.
git clone https://github.com/zuggamasta/midiTracker.git
cd midiTracker/
python3 -m venv venv/
source venv/bin/activate
python -m pip install mido[ports-rtmidi]
python midiTracker.py
Traceback (most recent call last):
...
if not current_screen == 4: draw_info(info_win,available_ports[MIDI_PORT])
UnboundLocalError: local variable 'available_ports' referenced before assignment
If you run into this error, please make sure to have installed the right Python version and depnedencies. If the error persists please feel free to open a new issue or use this issue(43) to get help.
For artists, beginners or other curious folk you can read the installation guide here if you want help getting started. I also tried to explain some basic info on how to use command line git to clone a repository for a workflow where you do not need to leave your terminal.
First navigate to the midiTracker folder
source venv/bin/activate
python midiTracker.py
SONG 00 ┌───────────────┐
Chn1Chn2Chn3Chn4RmplChn6Chn7Chn8 │ BPM: 120│
00 -- -- -- -- -- -- -- -- │IAC-Treiber … 1│
01 -- -- -- -- -- -- -- -- │ │
02 -- -- -- -- -- -- -- -- │ │
03 -- -- -- -- -- -- -- -- │Song Step: 00│
04 -- -- -- -- -- -- -- -- │Chain Step: 01│
05 -- -- -- -- -- -- -- -- │Phrase Step: 10│
06 -- -- -- -- -- -- -- -- │ │
07 -- -- -- -- -- -- -- -- │Loop Length: 08│
08 -- -- -- -- -- -- -- -- │ │
09 -- -- -- -- -- -- -- -- │ │
10 -- -- -- -- -- -- -- -- │ Mod1 │
11 -- -- -- -- -- -- -- -- │ Mod2 │
12 -- -- -- -- -- -- -- -- │ │
13 -- -- -- -- -- -- -- -- │ │
14 -- -- -- -- -- -- -- -- │ │
15 -- -- -- -- -- -- -- -- └───────────────┘
This is the keymap which midiTracker has preconfigured, you can change the assingment of keys in the top of the main miditracker.py file.
Number Keys 1 - 5
: Brings you to the different screens. In the order Song, Chain, Phrase, Confing, Visualizer.
Arrow Keys ← → ↑ ↓
: Navigation on Data Grid
a
: Modifier 1 (Screen highlights in green)
Mod1 + ←
: -12 units / 1 Octave
Mod1 + →
: +12 units / 1 Octave
Mod1 + ↓
: -1 unit / Semitone
Mod1 + ↑
: +1 / Semitone
c
: copy value
shift + c
: deep copy, copies the current phrase content
v
: paste value
shift + v
: flood value, writes copy buffer to all steps or deep copy buffer if one is available
s
: Modifier 2 (Screen highlights in yellow/orange)
Mod2 + ↓
: View next Phrase or Chain
Mod2 + ↑
: View last Phrase or Chain
The arrows for switching between chains and phrases are fipped as it made more sense for me. Makes it feel like there is a wheel you scroll through to get to the element you're looking for.
w
: Panic (stops all Midi Messages)
Space
: Stop / Restart Song
Shift + s
: Save
Shift + q
: Quit
Thank you to everyone helping and making all of this possible. Thank you Mirjam, Thank you Fiona, thank you Sylt, thank you Markus.
I am developing this tool for myself, but I'll try to make it accessible to other artists and everyone curious along the way.