A score, samples,
and a tiny replay engine.
The soundtrack is a native MXM tracker module: compact musical instructions plus reusable instrument samples. The JS player synthesizes stereo audio from those instructions while the intro runs.
1. Read music vertically
An order list selects which pattern comes next. Each of Bjoer's 13 patterns contains 64 rows. A row can trigger notes on several of the 16 channels, select instruments, set volume, and issue effect commands.
A note starts a sample at a pitch. The sample continues across empty rows until it ends, loops, or another command changes the voice. Patterns can be reused by several orders, saving space.
C-4 01 30 08 FF note inst vol effect parameter
Illustrative cell. Numbers are hexadecimal; a tracker cell is an instruction, not a piece of recorded audio.
Rows contain ticks
The initial speed is 6 ticks per row, at 134 BPM. With the tracker timing relation tick ≈ 2.5 / BPM, this gives about 18.66 ms per tick and 111.94 ms per row. Effects and pattern loops can change how playback progresses, so row numbers alone are not a reliable song clock.
Inspect the actual module
Decoded directly from the same bjoer.mxm used by the player. This is a static pattern inspector, not a second music player.
Loading module…
Each column is a channel. A cell shows note, instrument, volume-column byte, and effect + parameter. Dots mean no value in that field.
2. What is inside an MXM file?
This extracted file uses the Cubic Tiny XM Player MXM layout. Its signature is MXM\0. It carries XM-style tracker concepts in a layout prepared for the replay engine; renaming it to .xm does not convert it.
| Location | Contents in Bjoer |
|---|---|
| 0x00 | Four-byte MXM signature |
| 0x04–0x14 | 32-bit little-endian order count, restart order, channel count, pattern count and instrument count |
| 0x18 / 0x19 | Initial speed 6 / tempo 134 BPM |
| 0x1C–0x24 | Sample pool offset, 8-bit sample-byte count and 16-bit sample-word count |
| 0x50 | Order list: pattern numbers in playback order |
| 0x150 / 0x350 | Instrument-offset table / pattern-offset table |
| Each pattern | 32-bit row count, then packed channel events; zero terminates a row |
| Sample pool at byte 16,569 | 17,232 bytes of signed 8-bit sample data; no 16-bit samples in this song |
Only store the fields that exist
A packed event byte uses its lower five bits for the channel number. Bit 0x20 adds note + instrument bytes; 0x40 adds a volume byte; 0x80 adds effect + parameter bytes. Empty channels therefore cost no full cell. Instrument data supplies sample mappings and playback settings; samples can play once, loop forward, or bounce back and forth.
3. Effects used by Bjoer
These are the six nonempty effect codes found across the stored patterns. Counts describe encoded cells in the 13 unique patterns, not the number of executions during the song.
| MXM code | Behavior | Cells |
|---|---|---|
| 08 xx | Set panning: 00 left, FF right; intermediate values place the voice between them. | 489 |
| 09 xx | Sample offset: start at an offset in units of 256 sample bytes. Bjoer uses 01, 02 and 04. | 281 |
| 0A xy | Channel volume slide. One nibble selects an upward or downward step. A zero parameter recalls the previous slide setting. | 438 |
| 11 xy | Global volume slide: adjusts the song-wide gain rather than one voice. Bjoer uses 01. | 4 |
| 1B xy | Retrigger with a volume-change mode: periodically restarts the sample. Bjoer stores 03 and a zero-parameter continuation. | 2 |
| 2A xx | Pattern loop: 00 records a loop start; 07 requests a counted repeat. This is the native MXM dispatch code, not XM effect 2A. | 2 |
The separate volume column is also active: this song uses bytes 10–50 to set channel volume from 0 to 64. Note value 97 is key-off, distinct from an empty note.
4. What the JS replay supports
The original translated tracker processes rows, tick effects and instrument envelopes. The software mixer reads its resulting sample address, pitch, volume, panning and loop state for each voice.
packed pattern → tracker tick → voice pitch / gain / pan / position → sample interpolation → stereo PCM → browser audio output
The mixer supports Bjoer's signed 8-bit samples, one-shot playback, forward and ping-pong loops, fractional sample positions with linear interpolation, per-channel panning and global gain. It uses fixed headroom rather than normalizing each audio chunk.
The production player requests 48 kHz audio. Audio checkpoints every 15 seconds preserve tracker memory, voice positions, loop directions and fractional timing, so seeking resumes musical state rather than just jumping to a pattern row.
Scope: faithful playback of this module through the translated original tracker. Other effect handlers exist in that tracker, but arbitrary MXM/XM compatibility is not certified. The mixer explicitly rejects 16-bit GUS samples. It produces software PCM; it does not emulate the GUS analog output.
Evidence: the extracted module and its structural validation report, tracker-view.mjs, mxm_replay.cjs, and the original row/tick dispatch at 0x1ccc5 / 0x1cd09. Replay tests check chunk invariance, loop boundaries, and tracker-state checkpoints against offline Unicorn execution. These checks are distinct from a sample-exact comparison with original sound-card PCM.