Chris Collins

Tools · retro

ProTracker MOD player and editor

Play and edit Amiga ProTracker MOD files with a replayer that follows ProTracker 2.3D tick by tick — every effect and E-command, the period table with finetunes, PAL/NTSC clocks, the A500/A1200 output and LED filters, stereo separation — with a scrolling pattern view, per-channel scopes, mute and solo, keyboard pattern editing, a sample editor with WAV import, and .MOD and WAV export.

Added · updated 28 October 2026

Works with

How to use it

It opens with Paula Pulse, a short module written for this page; Examples has two more. After that it reopens whatever you last edited, kept in this browser. Open MOD… (or drop a file anywhere on the tool) loads .mod and mod. files: ProTracker M.K./M!K!, FLT4, 4CHN, 6CHN, 8CHN/FLT8/OCTA, xxCH, and 15-sample Soundtracker modules. A MOD found on a disk image in the ADF explorer or inside an LHA/LZX/ZIP in the archive extractor has an *Open in MOD tracker button.

  • ▶ Song plays from the start, ↻ Pattern loops the pattern you are editing (Enter in the grid), ▶ From cursor starts the song at the cursor’s position and row; ■ Stop or Esc stops. The position line shows position, pattern, row, speed, BPM, time and whether the LED filter is on. Untick Loop the song under Sound to stop where the song would loop.

  • Sound sets the clock (PAL 3,546,895 Hz or NTSC 3,579,545 Hz), CIA tempo (Fxx ≥ 20 is BPM) or VBlank timing (every Fxx is a speed, one tick per frame, for old modules), the output filter (A500, A1200 or off), the LED filter (E0x follows the module, or force it on or off) and the stereo separation from mono (0%) to the Amiga’s hard left-right-right-left split (100%).

  • Pattern — the scopes above the grid show what each channel is playing (its period and volume in the corner); tap a scope or Mute to mute a channel, Solo (or Shift+tap) to hear one alone. The grid scrolls with the song while Follow is on.

    • Keys: arrows move (left/right walk through note, sample digits, effect and parameter digits), Tab jumps channels, PageUp/PageDown move 16 rows, Space switches edit mode (the cursor turns red). The keyboard is ProTracker’s — Z S X D C V G B H N J M is one octave, Q 2 W 3 E R 5 T 6 Y 7 U I 9 O 0 P the one above; F1/F2 (or Oct 1/Oct 2) choose the octaves. Keys always play the current sample; in edit mode they also write the note and sample number and move down by Step. In the sample and effect columns type hex digits. Delete clears the field, Backspace deletes the row above and pulls the channel up, Insert inserts a row (with Shift: every channel). With Follow on while the song plays, notes land on the row being played — record in real time.

    • Blocks: Shiftarrows or dragging select a block (on a touch screen: *Mark*, then move); *Copy*, *Cut*, *Paste* (*Ctrl/⌘+C/X/V*), transpose by ±1 or ±12 (*Ctrl/⌘↑/↓, *Shift for octaves) and Undo (Ctrl/⌘+Z) work on it.

    • Touch keys (open on a phone) give a piano octave, the 16 hex digits and cursor keys.

    • Position, Pat −/Pat + choose which song position you edit and which pattern it plays.

  • Samples — 31 slots. The waveform shows the loop in green: drag its handles to move the loop, or drag over the wave to select and use Loop = selection, Crop (trim), Delete, Zoom, Normalise, Fade in/out, Reverse or Silence. Set name, volume (0–64), finetune (−8…+7) and the loop in bytes. Import WAV / 8SVX… (or drop one on the tab) reads 8–32-bit and float WAV, IFF 8SVX and anything else the browser can decode, mixes it to mono and resamples it so it plays at its own pitch on the chosen Note (C-3 = 16,574 Hz on PAL), as signed 8-bit, optionally normalised. ▶ Play plays the sample at that note; Export WAV saves it.

  • Song — the title, the channel count (4, 6 or 8; extra channels arrive empty), and the song order: each position’s pattern with − / +, Insert position, Delete position, Append new pattern and Clone pattern here. About this module gives the format, sizes and playing time.

  • Effects lists every effect and E-command and the ProTracker quirks the player keeps.

  • ⤓ Save .MOD writes a ProTracker module (M.K., M!K! past 64 patterns, 6CHN/8CHN). ⤓ Export WAV renders the song once through, as 44.1 kHz 16-bit stereo, with the sound settings you chose.

⛶ Full screen gives the pattern grid the whole screen with the scopes and edit bar above it (◫ Panels hides the block buttons and touch keys). F is a hex digit in the grid, so full screen has no key; Escape leaves.

The replayer

The player follows ProTracker 2.3D’s mt_music routine as preserved in 8bitbubsy’s pt2-clone — tick by tick, with Paula modelled as registers. Each new row is read on tick 0 of speed ticks; a tick lasts 2.5 / BPM seconds (20 ms at 125 BPM, from the CIA timer) or one video frame in VBlank mode. A channel’s rate is the clock divided by its period: C-2 (428) is 8,287 Hz on PAL and 8,363 Hz on NTSC.

  • Notes are looked up the way ProTracker does it: the first entry of the finetune-0 row at or below the cell’s period, then the same index in the sample’s finetune row (37 words per row, 36 notes and a 0). Arpeggio, glissando and tone portamento search the finetune row.

  • Vibrato is the 32-entry half-sine × depth / 128 on the period, tremolo × depth / 64 on the volume; positions step by 4 × speed; E4x/E7x choose sine, ramp or square, +4 not to reset on a new note.

  • Paula starts a note’s block (start and length), then repeats the loop registers. ProTracker rewrites the loop registers of every channel on each new row, so a sample number without a note sets that sample’s volume at once and swaps in its loop when the playing loop ends. A one-shot sample keeps repeating its first word, which ProTracker zeroes.

  • Quirks kept: 9xx with a note moves the sample start twice (later notes without a sample number start further in); E71’s ramp tests the vibrato position; tone portamento clears its own parameter; tick-0 effects repeat during EEx; F00 stops the song; the restart byte is ignored (ProTracker always loops to position 0).

  • E8x is ProTracker 2.3D’s Karplus-Strong: every tick it replaces each loop byte with the average of it and the next — a noise loop decays into a plucked string. EFx (invert loop) flips loop bytes one at a time. Both write to sample memory on the Amiga; here the player writes to a copy, so the samples you edit and save are untouched.

  • Output: each channel’s byte × volume (0–64), mixed with box-filtered sample-and-hold (the average of the held value over each output sample, which keeps aliasing down), channels 1 and 4 left, 2 and 3 right. The filters follow the circuit values pt2-clone uses: the A500’s fixed RC low-pass (360 Ω, 0.1 µF: 4,421 Hz), the A1200’s (680 Ω, 6,800 pF: 34,419 Hz), the "LED" Sallen-Key low-pass (10 kΩ, 10 kΩ, 6,800 pF, 3,900 pF: 3,091 Hz, Q 0.660) and the 5.2 Hz output high-pass (1,390 Ω, 22 µF).

The tests check the period lookups, every effect’s tick-by-tick period and volume against values worked by hand from the routine, the filter cut-offs, a rendered square wave’s frequency and level, and that each example module saves byte-for-byte after loading.

Limits

  • 15-sample Soundtracker modules play with ProTracker’s effects (Ultimate Soundtracker’s 1xx/2xx meant arpeggio and pitch bend) and are saved as 31-sample M.K.; FLT8 is saved as 8CHN.

  • Paula’s DMA timing is not cycle-exact: there is no start-up delay before a new note’s first sample, and periods below 113 play at 113. Real Paulas also differ in their analogue output.

  • Song end for Loop the song and WAV export is the first time a position and row repeat (pattern loops excepted); a module that never repeats stops at 15 minutes.

  • Undo covers pattern edits only (not samples or the song order).

  • Share links carry the sound settings and which example is open, not your module — save the .MOD to send it. Your module stays in this browser (IndexedDB).

  • Saving, loading, the period table and sample import come from the Paula tool, whose tracker tab is a simpler editor with MIDI and microphone input.

Linking to an example

Share link copies the open tab with the sound settings and the open example. Parameters can also be written by hand:

Parameter Meaning

example

open an example module: paula-pulse, effect-tour, eight-bells

video

pal or ntsc

timing

cia or vblank

model

output filter: a500, a1200, none

led

LED filter: auto (E0x), on, off

sep

stereo separation, 0–100

Runs entirely in your browser; nothing you type leaves this page.