Sample offset tricks
What it is#
The sample-offset command (9xx in ProTracker/MOD, Oxx in impulse-tracker) starts a sample partway through — in units of 256 bytes, so 00–FF covers 64 KB (the SAx high-order command extends it in IT). Three classic tricks come from it.
How to do it#
- Timestretch (the jungle "slowed forever" vocal): speed the pattern up (ProTracker
F05or faster) and retrigger the sample on every row with increasing offsets (901,902, …9FF); keep the sample under 128 KB so the offset range spans it. Add a transposed copy on another channel and "a smooth echo" (source: s-tw059-tracking-hints). - Flange / chorus: the same sample on two channels, the second delayed by a small offset (
9xx) or a note delay (EDx), with a fine pitch slide (E1x/E2x) on one to set the sweep — brass leads and crashes (source: s-tw059-tracking-hints). Zinc's IT version: doubled channels, same sample "played just SLIGHTLY after the first, using offsets or delays", panned apart for fake stereo (source: s-tw075-it-percussion-tips). The 1995 original: necros's "surround stereo, sorta" — the same chord sample on a left and a right channel, one of them withO01, panned well apart (S82/S8Dor the extremes) — details on stereo-panning (source: s-tw012-advanced-tracking-tips). Onix4MAN lists the three ways to build that pair and ranks them: offset the copy by one row, delay it withSDx(finer than a row), or duplicate the instrument and let a pitch envelope delay it by a tick — the last keeps both effect columns free, and is "not for pianos" (source: s-it-hints). - Phrase sampling: sample whole passages of a solo instrument and jump between them with offsets. Necros's "The Grey Note" builds its sax from seven or eight sampled passages chosen by offset, with an echo channel hiding the seams (source: s-tw084-perfect-samples-the-piano); in the 1996 realism debate Psibelius described the lead as "almost a huge wav file chopped up into ten pieces" — the reason it convinces (source: s-tw070-realism-debate; see realism-in-tracked-music, multisampling).
- Fitting a break that is the wrong length: retrigger the loop on every up-beat (rows
00,16,32,48…) so it re-syncs, put a bass drum every 4 or 8 rows, then fine-tune the song tempo until the drum sits on the loop. If the loop is too short, loop tightly at its end; if it is too long, cut into it withSDxnote delay orOxxoffset (source: s-tw025-loops-and-extended-samples; see sample-looping). - Reverse a drum loop without a second sample: give the loop a ping-pong loop over the entire sample and trigger it with
Oxxat the exact turnaround point, so playback starts going backwards; for big loops setSAxfirst and reset it afterwards (source: s-tw081-it-tip-of-the-week).
The command across formats (sources: s-protracker-23d-help, s-ft2-manual, s-st3-manual, s-openmpt-manual-effect-reference): ProTracker 9xx starts at byte $xx00 — "the two numbers equal the two first numbers in the length of the sample. Handy for speech-samples"; FT2 9xx × $100, so samples beyond 64 KB are out of reach; ST3 Oxy × 256 and loop-aware (an offset past the loop end is folded into the loop) — the example song makes a hi-hat "by playing only the end part of the snare sample"; IT/OpenMPT Oxx with SAx adding x × 65536, and in MPTM #xx rows extend the offset while o00 + Oxx makes it a percentage of the sample length (O80 = the second half) and o0x jumps to cue points. Offsets past the sample end stop the note in FT2 and (by default) S3M; IT with Old Effects clamps to the end, otherwise plays from the start (source: s-openmpt-manual-compatible-playback).
Impulse Tracker semantics#
Oxx starts at the xx00-th sample (so byte xx00h × 2 for 16-bit samples); SAy supplies the high digit for offsets beyond FF00; an offset past the end is ignored unless Old Effects is on, in which case the sample plays from its end; the manual's own uses are skipping a loud attack or starting speech mid-way (sources: s-it-manual, s-ittech).
LSDj#
The Game Boy has sample memory after all — the kit ROM — and LSDj offsets into it two ways (source: s-lsdj-manual).
Fxxon a kit instrument "modifies the sample position.00–7Fsteps forward,80–FFsteps back". Unlike9xx/Oxxit is relative and it goes backwards, so a column of smallFvalues walks a sample forwards and back — stutter and grain rather than a jump to a fixed point. (The same command means PU2 transpose + finetune on a pulse instrument and a wave-frame step on a wave instrument, so it only reads as an offset in a kit.)- The instrument's OFFSET parameter sets a static start point: with LOOP OFF it "can be used for skipping the initial part of a sound", the classic snare-tail-becomes-a-hi-hat trick that ST3's manual also documents; with LOOP ON it is the loop start. LEN cuts the other end (chip-samples, instrument-design).
Heard in#
- Ranger Rick, 1995: perisoft names him among his five favourite trackers for "awesome sample offsets and whacked out rhythmic melodies" (source: s-tw011-interview-perisoft).
- the-grey-note (Necros) — the phrase-sampling example above.
Tips & pitfalls#
- Offsets are in bytes, not time: a 16-bit or higher-rate sample needs different values than an 8-bit one.
- On chips there is no sample memory to offset into; the equivalent time-slicing tricks are done with wavetable-programming and retrigger.
Related#
fake-echo · detune · stereo-panning · chip-samples · protracker · multisampling · realism-in-tracked-music
Sources#
s-tw059-tracking-hints · s-it-manual · s-it-hints · s-ittech · s-tw025-loops-and-extended-samples · s-lsdj-manual · s-tw081-it-tip-of-the-week · s-tw075-it-percussion-tips · s-protracker-23d-help · s-ft2-manual · s-st3-manual · s-openmpt-manual-effect-reference · s-openmpt-manual-compatible-playback · s-tw084-perfect-samples-the-piano · s-tw070-realism-debate · s-tw012-advanced-tracking-tips · s-tw011-interview-perisoft