Using TekTracker - ttrk

  1. History
  2. Philosophy and terminology
  3. MIDI Devices
  4. Realtime Mode
  5. MIDI Sync
  6. Screen header information
  7. Pattern view
  8. Song view
  9. Key Reference
  10. Sample .ttrkrc file


ttrk is the product of frustration with bad step editors found on pretty much all MIDI sequencers available today. I'm a big fan of trackers, and I wanted to be able to compose MIDI music using a tracker paradigm.

There are five main goals of ttrk:

ttrk started in the spring of 1999 as a Qt application. I used it to record a bunch of songs ( and some live shows, but it was very much hacked together based on what I needed at the time. Keeping a GUI app up to date is a pain in the ass, and ttrk has been in need of a rewrite ever since.

The urge to create a console version was two-fold:

Philosophy and terminology

ttrk is based around a bunch of mono-note channels, each of which is composed of a unique sequence of patterns. Only one note may be active on a channel at once. This makes editing a sequence much like composing tracked music in a tracker, but makes chords and complex piano pieces more difficult. Still, I find it to be by far the most powerful form of computer song editing, and the most useful to control in a live setting. It's also perfect for electronic music.

MIDI Devices

ttrk currently only supports /dev/midi* devices. I have some old code around for using /dev/sequencer, so I'll throw that in as well pretty soon. I can also probably support the ALSA sequencer pretty easily. Currently, the ui only allows you to use one MIDI device, but I will support multiple MIDI devices soon (so you can use more than 16 channels).

By default, ttrk will open /dev/midi00. If you wish to use a different device, you can set a different filename in the .ttrkrc file (mididev = devicename).

Realtime Mode

This application requires running as root and using the /dev/rtc real time clock device in order to keep acceptable sync. If realtime mode is active, a red-hilighted 'RT' will appear in the bottom right hand corner of the screen.

For the benefit of slower computers, the default RTC wakeup frequency is 1024hz. This can be increased to 8192hz in the .ttrkrc file, although you probably don't need to.


ttrk can both send and receive MIDI clock sync information. In external sync mode, ttrk listens for sync messages and echos them out. In internal sync mode, ttrk generates its own sync information, and ignores any incoming sync.

Screen header information

   +------ Current position in playback.          Loop Destination -------+
   |   +-- Current beats in playback.             Loop trigger ----+      |
   |   |                                                           |      |
   v   v                                                           v      v

  000:00 Stopped         Speed: 140bpm            Loop:   Active, 001 -> 000
  [000]                 Viewing: 000             Octave: 03

    ^                             ^                       ^-- Current octave
    |                             |                           for new notes.
    |                             +-- Position in the song we are
    |                                 currently editing.
    +----- Starting position of the current song.
The loop destination is the position number where the song will jump to the destination. The destination can occur after the trigger.

Pattern view

The following is a channel bar. There are 256 channels in a song, numbered in hex from 00-ff. Each channel has its own unique set of 256 patterns, also numbered in hex.

       AN1xLead <--- Name of the channel.
       00 01    <--- The channel number (00) and the current pattern (01).
       Vol: 75  <--- Volume scale (in %) to multiply each note velocity.
       Ch : 01  <--- MIDI Channel of output.
       C-Melody <--- Name of the pattern.
  ==== ========
   00: C-3 40 - <--- Sends a C-3 note on message with velocity (40 * 75%).
   01: --- 40 -      The velocity is in hex, and is modified per note using
   02: --- 40 -      the Home and End keys.
   03: --- 40 -
   04: D#3 40 S <--- The 'S' indicates that slide is on for this note.
   05: --- 40 -      This means that the note will be played legato (the
   06: --- 40 -      D#3 note on message precedes the C-3 note off message
   07: --- 40 -      on the wire).  Slide is turned on using the ` key
   08: --- 40 -      (backtick).
   09: --- 40 -
   10: --- 40 -
   11: --- 40 -

Song view

You can switch between song and pattern view using the <tab> key.

       AN1xLead <--- Name of the channel.
       00       <--- The channel number in hex.
       Vol: 75  <--- Volume scale (in %) to multiply each note velocity.
       Ch : 01  <--- MIDI Channel of output in decimal.
       C-Melody <--- Name of pattern in current song position.
  ==== ========
  000:#   --    <--- The loop starts at position 0 until position 4.  It
  001:#   --         is shown in the song view as a hilighted green line
  002:#   --         along the left-hand side.
  003:#   --
  004:#   01    <--- The number shows which pattern is selected at this
  005:    02         channel and position in the song.  The pattern
  006:    0a         value can be changed using the [ and ] keys, or
  007:    0a         cleared using the spacebar.
  008:    --
  009:    0b
  00a:    --
  00b:    --

ttrk key listing

These are all of the keys that are currently implemented in ttrk. If you have any suggestions, please send them to I do intend to make them configurable at some point, although I'm not sure if this is necessary.

Basic keys

   Ctrl-Q       Quits the application.

   F1-F8        Channel mutes.  These mute the channel shown at position
                x on the screen at the time.  Mute will send a note off
                if any note is playing.  Un-mute'ing will leave the
                channel unactive, that is, the note it was playing
                before muting is not retriggered.

   F9           Start the song.  This will send a MIDI start message and
                begin playback.  I don't bother ever sending a MIDI
                continue, since so few devices support it, but I'm
                considering it.  If you need that feature let me know.

   F10          Rewind the song to the beginning and start playback.
                This gives the same effect as hitting F12 then F9.

   F11          Stops the song.  This will send a MIDI stop message.

   F12          Rewinds the song to the specified startting pattern.

   Arrow Keys   Move the cursor around the screen.

   Shift-Left   Page the view left or right along the channels.

   Ins/Del      This sets the MIDI channel of the current channel bar.

   / and *      Channel volume up and down.  The channel volume is a
                percentage applied to the velocity of each note-on

   Home/End     Increase or decrease the velocity value of a note-on
                message.  The velocity is given in hex up to 7f.

   [ and ]      In both pattern mode and song mode, these keys increment
                or decrement the current pattern of the selected

   + and -      Set the octave for new notes.

   ' and \      Transpose the notes in the given pattern up or down a
                semitone.  These are really convenient on my keyboard,
                but probably not for everyone else.  I was running out
                of keys that were in a nice up-down pattern.

   Pgup/Pgdn    In pattern mode, these scroll the position in the song
                we are viewing (shown at the top of the screen, View:).
                In song mode, these scroll up or down the list by 8.

      ^T        Sets the tempo for the song when using internal sync.

      !         Turn loop mode on.  In loop mode, when the loop position
                pattern is to be played, the song jumps to the loop

      ^L        Set the currently viewed pattern to be the loop
                position.  That is, instead of playing the pattern, the
                song will jump to the loop destination.

      ^K        Set the currently viewed pattern to be the loop
                destination.  When the loop position is hit, the song
                will jump to the beginning of this pattern.

      ^F        Sets the currently viewed pattern to be the starting
                pattern of the song.  That is, rewinding the song will
                return to the beginning of this pattern.

      ^S        Save the song to the given file.  This will expand ~'s,
                but will not append any fancy extension to the filename
                you give.

      ^A        Load a song from disk.  The current song will be
                overwritten in memory by the newly loaded song.  It's
                ok to load a song while the current song is playing, but
                it's not perfect yet.  I want to work to make the
                transition better.

      ^E        Toggle between internal sync and sync'ing to an external
                MIDI clock.

      ^C        Copy the current pattern into a copy buffer.

      ^V        Paste the current copy buffer into the current pattern.
                If no pattern is active on the current channel at the
                current position, a new one is created.  Otherwise, the
                selected pattern is overwritten by the data in the copy

      ^N        Give a name of the current channel.  Only the first 8
                characters of the name are used.

      ^P        Give a name of the current pattern.  Only the first 8
                characters of the name are used.

   <space>      Space clears the note under the cursor in pattern mode.
                In song mode, space sets the pattern under the cursor to
                -- (no pattern).

Entering notes

These keyboard is used to enter notes (step sequencer) like a tracker. If there is no pattern selected for the current channel when notes are pressed, the first blank pattern for the channel is found and used.

  Upper octave:           2 3   5 6 7    9 0
                         Q W E R T Y U  I O P

  Lower octave:           S D   G H J
                         Z X C V B N M

Other note-entry keys

      `         The backtick is used to turn on or off slide for the
                given note.  If a note is in slide mode, the note will
                be played legato: the note-off message for the previous
                note is sent after the note-on is sent for the current

  <backspace>   Backspace places an explicit note-off in a pattern (it
                appears as '^^^' in the editor).  This is extremely
                useful for tuning a pattern.

   <space>      Space clears the note under the cursor in pattern mode.

Sample .ttrkrc file

# The .ttrkrc file contains all of the default settings for tektracker.
# All names and values are case insensitive, and all spaces are ignored.
# As you can probably tell, the # character is a comment in this file.
# In this version (0.6.7), we still don't support setting a keymap in
# here.  Don't worry, it's coming.

# Sets the initial tempo when ttrk starts up.
initial_tempo = 140

# Set this to true if you want ttrk to startup using external sync.
start_external_sync = false

# The rtc frequency for root access, low or high.  This is used to
# throttle our realtime thread when using internal sync.  At a setting
# of low, the rtc wakes us up at a frequency of 1024hz.  At high, the
# frequency is 8192hz.  Arguably, you should never need more than
# 1024hz.
rtc_frequency = low

# Sets the raw MIDI device filename to use.  By default, ttrk will
# attempt to use /dev/midi00.
mididev = /dev/midi00

Last updated Tue Feb 13 11:29:28 EST 2001