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
- Amiga ADF disk images Retro computinghands MOD files from a disk here
- Amiga archives: LHA, LZX, DMS and Zip Retro computinghands MOD files from an archive here
- Paula audio, MOD tracker and player Retro computingopens the song from its tracker tab here (Edit in MOD tracker)
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 Mis one octave,Q 2 W 3 E R 5 T 6 Y 7 U I 9 O 0 Pthe 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 as8CHN. -
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
.MODto 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 |
|---|---|
|
open an example module: |
|
|
|
|
|
output filter: |
|
LED filter: |
|
stereo separation, 0–100 |
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.