So the PS1 versions of Resident Evil 1 use sequenced music loaded from .VAB files. Meaning the soundtrack could be converted to Modtrackers pretty easily.
Resident Evil 1 - Standard / Directors Cut .IT Soundtrack:
CDN Download
Resident Evil 1 - Directors Cut Dualshock .IT Soundtrack:
CDN Download
Dualshock Basement .IT Extras:
(Was trying to see if they used the wrong sound bank for the infamous basement theme DS_SEP1A_seq1, but with other sound banks from both games)
CDN Download
sep2it.py Converter Source Code:
CDN Download
Resident Evil 1 - Standard / Directors Cut .IT Soundtrack:
CDN Download
Resident Evil 1 - Directors Cut Dualshock .IT Soundtrack:
CDN Download
Dualshock Basement .IT Extras:
(Was trying to see if they used the wrong sound bank for the infamous basement theme DS_SEP1A_seq1, but with other sound banks from both games)
CDN Download
sep2it.py Converter Source Code:
CDN Download
Code:
Resident Evil (PS1) Director's Cut / Dual Shock - sequenced music converted to Impulse Tracker (.it)
====================================================================================================
WHAT'S HERE
DC\ 194 total .it files across both folders. DC = Director's Cut (SLUS-00551), DS = Dual Shock Ver. (SLUS-00747)
DS\ Naming: <version>_SEPxx_seqN.it (SEPxx = PSX\SOUND\SEPxx.HSB, seqN = Nth sequence inside it, from 1)
compare\ MP3 renders of the three "old sequence + new Dual Shock instruments" cases, DC vs DS
sep2it.py the converter (Python 3, no dependencies)
SOURCE FORMAT (what the game actually uses)
Each SEPxx.HSB = Sony VAB header (instruments: programs, key-split tones, ADSR, tuning)
+ Sony SEP block (up to 3 MIDI-like sequences, 48 ticks/beat)
+ VB body (PS-ADPCM samples; starts 4 bytes after where the header size implies).
Loops use Sony's NRPN markers (CC99=20 loop start, CC99=30 loop end, count 127 = forever).
HOW THE CONVERSION WORKS
* One IT instrument per VAB tone (key split), one 16-bit sample per decoded VAG, tuned with the
tone's centre note + fine tune (44.1 kHz at the centre note, like the PS1 SPU).
* The SPU ADSR is simulated sample-accurately and fitted to an IT volume envelope (sustain loop at
the end of the held phase); the release rate becomes the instrument fadeout. Note-offs are written
as note-fade (~~~) so the release plays out.
* Timing is not quantised: the game's sequences are "humanised", so 1 row = 1 or 2 sequence ticks
at speed 1 (24 or 48 rows per beat). Patterns are long but timing is exact. Tempo changes -> Txx.
* Max 24 simultaneous voices, same as the PS1 SPU; voices are stolen like hardware would.
* Velocity x CC7 x CC11 -> volume column; tone/program/CC10 pan -> Xxx; pitch bend -> fine and
extra-fine slides (linear slides on), using each tone's bend range.
* The infinite loop becomes a Bxx jump back to the loop-start pattern.
KNOWN LIMITS
* No PS1 hardware reverb (most tones have the reverb flag set). Add reverb in your player/DAW.
* Envelopes are timed for the song's starting tempo. Songs that change tempo will drift a little.
* Very large pitch bends glide over a few rows (IT's fine slides max out at 15/16 semitone per row).
* Some seqs are short jingles or sound effects, not songs. Seqs with no notes were skipped.