Audiofilus

Tracker

Make chiptune with the D-pad, the LSDJ way, with a few things borrowed from PICO-8.

The tracker playing a song: channels with live oscilloscopes, cells lighting up as their notes play

Overview

Open Games → Tracker. A song is built like in LSDJ: the song is a list of rows, each row says which chain each channel plays, a chain is a list of phrases, and a phrase is 16 steps of notes. Sounds come from instruments, which can run a table with every note; the groove sets the swing, and waves are drawn by hand. From PICO-8 come its eight waveforms, an instrument on every step and a piano roll.

Songs save themselves a second after each change. While the tracker plays, your music pauses, and the visualizers and games react to the tracker instead.

Song modes: Game Boy and Free

Each song has a mode, set in the PROJ view:

Any instrument can go on any channel. Switching a song to Game Boy keeps what's on channels 5 to 8, it just doesn't play it.

Song, chains and phrases

Each channel plays its own chain and moves on to the next row when it ends. A channel with no chain in a row rests until the channels that do have one move on, so rows stay lined up. A row with no chains at all rests for one phrase.

Time runs in ticks, 24 per beat. With the default groove each step lasts 6 ticks, a sixteenth note, so a phrase is one bar.

The eight views

The tabs at the top are a map, left to right: PROJ · SONG · CHAIN · PHRASE · INSTR · TABLE · GROOVE · WAVE. L1 and R1 move to the view next door. Moving right with R1 opens what's under the cursor:

FromR1 opens
SONGThe chain in the cell
CHAINThe phrase in the step
PHRASEThe step's instrument (or the last one above it)
INSTRThe instrument's table
GROOVEThe instrument's wave, if it's a wave instrument

On narrow screens the tabs shorten to PRJ, SNG, CHN, PHR, INS, TBL, GRV and WAV.

Editing

Every view edits the same way:

ButtonDoes
D-padMove the cursor
Hold A + ↑/↓Change the value by one
Hold A + ←/→Change it by a lot: an octave for notes, 16 for numbers, 4 for volumes
A on an empty cellPut the last value used
A A (twice, quickly)Put a new, unused chain, phrase, instrument or table
A on a chain or phrase numberOpen it (song and chain views)
B+ADelete
B+←/→The previous / next chain, phrase, instrument, table, groove or wave
B+↑/↓Jump 16 rows (song view)
YPlay or stop: the song from the cursor's row (PROJ, SONG), the chain looping (CHAIN), or the open phrase looping (the other views)
B+YMute the channel you're working on
XPhrase view: switch to the piano roll and back
StartThe tracker menu

A note sounds as you write it, and A on a note plays it. Writing a note on a step without an instrument puts the last instrument used. Below C-0 comes OFF, which releases the note. Chains, phrases, instruments and tables are created the first time you edit them.

The Start menu has:

Hold FN for the controls of the view you're in.

Piano roll

Press X in the phrase view to see the phrase like PICO-8 does: steps across, pitches up and down, with each note lasting until the next one.

ButtonDoes
←/→Choose the step (the cursor jumps to that step's note)
↑/↓Choose the pitch
APut the note, or remove it if it's already there
Hold A + ↑/↓Move the step's note up or down
B+ADelete the step's note
XBack to the step grid

Instruments

Up to 64. A new song comes with a pulse, a wave and a noise instrument (and a synth in Free mode). What the INSTR view shows depends on the type and the mode:

SettingWhat it does
NameA opens the keyboard
TypePulse, wave, noise, or synth (Free only). Changing it resets the instrument.
Volume0 to F; scales the step's volume
Envelope, Direction, SpeedGame Boy, except wave: start level (0–F), down / flat / up, and the speed (1–7: one level every speed/64 s; 0 holds the level)
Attack, Decay, Sustain, ReleaseFree: the ADSR envelope, in ticks (sustain is a level, 0–F)
LengthTicks until the note is cut (--: no cut)
TableThe table that runs with every note (--: none)
PanL, LR or R
TransposeWhether the chain's transpose affects it (turn it off for drums)
VibratoSpeed and depth (high and low hex digit)
DutyPulse and synth square: 12.5, 25, 50 or 75 %
SweepPulse, Game Boy: PU1's frequency sweep, as the console's NR10 register (time, direction, shift)
WaveWave instruments: which wave (00–FF)
Wave volumeWave, Game Boy: 100, 50 or 25 %. The Game Boy wave channel has no envelope; its volume comes in four steps.
Short noiseNoise: the 7-bit register, more tonal and metallic
ShapeSynth: triangle, sine, saw, square, organ, phantom or noise

Imported MOD and XM songs also have sample instruments: the module's recorded sounds, with their loops (forward or ping-pong). They show in the INSTR view with the common settings; changing their type turns them into a new instrument.

A noise instrument's note sets how fast the noise runs: low notes rumble, high ones hiss. A on a setting plays the last note with the instrument.

Tables

A table is 16 rows that run one per tick while the note sounds, starting with each note of an instrument that uses it (or from the A command). Each row has a volume (or nothing), a transpose in semitones from the note, and two commands. H in a table jumps to another row, which is how tables loop: three rows transposing 0, +4 and +7 with H00 on the last make a major arpeggio, and transposes falling fast with a short noise make a kick drum.

Grooves

A groove is a list of up to 16 numbers: how many ticks each step lasts, in turn. The default, 6/6, is straight; 7/5 or 8/4 swing. In the GROOVE view, A on the empty slot after the last number adds one, and B+A removes one; the title shows the swing. There are 32 grooves; PROJ sets the one the song starts with, and the G command switches one channel to another groove that exists.

Waves

256 waves of 32 samples from 0 to F, played by wave instruments. The first eight are PICO-8's: triangle, tilted saw, saw, square, pulse, organ, noise and phantom. In the WAVE view, ←/→ choose a sample, hold A + ↑/↓ to change it, and hold A + ←/→ to draw (the next sample takes this one's value). Start has the PICO-8 shapes to start from.

Commands reference

Each step and table row has two commands. A new note resets the ongoing ones (C, F, K, P, V, R, the fades and the drop).

CommandDoes
AxxStart table xx (AFF stops it)
CxyChord: cycles the note, +x and +y semitones every tick (C47 major, C37 minor)
DxxDelay: the step plays xx ticks late (lost if that's longer than the step)
ExyEnvelope: x is the start level; y's top bit means up, its low 3 bits the speed (0: holds)
FxxFinetune, in hundredths of a semitone (signed: 01–7F up, 80–FF down)
GxxSwitch this channel to groove xx
HxxHop. In a phrase: end it after this step, and start the next one at step xx. In a table: jump to row xx.
IxxFade in over xx ticks
KxxKill: release the note after xx ticks
LxxSlide: on a step with a note, glide to it over xx ticks instead of playing it again
M0xMaster volume, 0 to F
OxxOutput: 0 off, 1 left, 2 right, 3 both
PxxPitch bend: hundredths of a semitone per tick (signed)
RxyRetrigger the note every y ticks; x (signed, 0–7 up, 8–F down) changes the volume on each one
SxxOn noise: S01 short (7-bit) noise, S00 long. On pulse: the PU1 sweep register.
TxxTempo, in BPM (28 to FF, that is 40 to 255)
UxxFade out over xx ticks
VxyVibrato: speed x, depth y
WxxOn a wave instrument: switch to wave xx. Otherwise: the pulse duty, 0 to 3.
XxxDrop: the pitch falls and the note fades out over xx ticks
ZxxRandom: adds 0 to xx to the other command's value

Examples

Start → Songs has four examples, each showing something. Opening one saves nothing until you edit it.

Import and export

Export, from the Start menu. The files go to an audiofilus tracker folder in your music folder, and the library picks them up:

Import… lists the songs it finds in your music folders and in the app's data/tracker/import folder (up to 300). Each import becomes a new song you can edit:

Search online… looks for MOD and XM files on The Mod Archive and Modland; picking one downloads and imports it. The Modules screen can open them in the tracker too.

Not everything survives the trip: module effects without a tracker command (sample offset, pattern loops, tremolo, global volume) are dropped, an XM instrument keeps only the sample it plays at C-4, LSDJ's kits become short noise hits, and an exported module loses tables and the less common commands. Songs made with the earlier tracker open converted: each pattern becomes one phrase and one chain per channel, and its effects become commands (arpeggio → C, duty → W, bend → P).

MIDI

Plug a USB MIDI keyboard or controller into the handheld (through a USB-C adapter if needed) or the computer. It works on the Linux handhelds and desktops, Windows, and iPhone/iPad (USB or already-paired Bluetooth MIDI). The tracker finds it by itself, also when you plug it in with the app open, and connects to the first one.

The clock arrives about one audio buffer late (50–100 ms), which only matters when you play along with something live.