Scream Tracker 3.0 file formats ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Song/Module header 0 1 2 3 4 5 6 7 8 9 A B C D E F ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 0000: ³ Song name, max 28 chars (incl. NUL) ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´ 0010: ³ ³1Ah³Typ³ x ³ x ³ ÃÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0020: ³OrdNum ³InsNum ³PatNum ³ Flags ³ Cwt/v ³ Ffv ³'S'³'C'³'R'³'M'³ ÃÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0030: ³m.v³i.s³i.t³m.m³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´ 0040: ³Channel settings for 32 channels, 255=unused,+128=disabled ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ 0050: ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ 0060: ³Orders; length=OrdNum (must be even) ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ xxxx: ³Parapointers to instruments; length=InsNum*2 ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ xxxx: ³Parapointers to patterns; length=PatNum*2 ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Typ = File type: 16=module,17=song Ordnum = Number of orders in file Insnum = Number of instruments in file Patnum = Number of patterns in file Cwt/v = Created with tracker / version: &0xfff=version, >>12=tracker ST30:0x1300 Ffv = File format version; 1=original 2=original BUT samples unsigned Parapointers are OFFSET/16 relative to the beginning of the header. PLAYING AFFECTORS / INITIALIZERS: Flags = +1:st2vibrato +2:st2tempo +4:amigaslides +8:0vol optimizations +16:amiga limits +32:enable filter/sfx m.v = master volume m.m = master multiplier (&15) + stereo(=+16) i.s = initial speed (command A) i.t = initial tempo (command T) Channel types: &128=on, &127=type: (127=unused) 8 - L-Adlib-Melody 1 (A1) 0 - L-Sample 1 (S1) 9 - L-Adlib-Melody 2 (A2) 1 - L-Sample 2 (S2) 10 - L-Adlib-Melody 3 (A3) 2 - L-Sample 3 (S3) 11 - L-Adlib-Melody 4 (A4) 3 - L-Sample 4 (S4) 12 - L-Adlib-Melody 5 (A5) 4 - R-Sample 5 (S5) 13 - L-Adlib-Melody 6 (A6) 5 - R-Sample 6 (S6) 14 - L-Adlib-Melody 7 (A7) 6 - R-Sample 7 (S7) 15 - L-Adlib-Melody 8 (A8) 7 - R-Sample 8 (S8) 16 - L-Adlib-Melody 9 (A9) 26 - L-Adlib-Bassdrum (AB) 17 - R-Adlib-Melody 1 (B1) 27 - L-Adlib-Snare (AS) 18 - R-Adlib-Melody 2 (B2) 28 - L-Adlib-Tom (AT) 19 - R-Adlib-Melody 3 (B3) 29 - L-Adlib-Cymbal (AC) 20 - R-Adlib-Melody 4 (B4) 30 - L-Adlib-Hihat (AH) 21 - R-Adlib-Melody 5 (B5) 31 - R-Adlib-Bassdrum (BB) 22 - R-Adlib-Melody 6 (B6) 32 - R-Adlib-Snare (BS) 23 - R-Adlib-Melody 7 (B7) 33 - R-Adlib-Tom (BT) 24 - R-Adlib-Melody 8 (B8) 34 - R-Adlib-Cymbal (BC) 25 - R-Adlib-Melody 9 (B9) 35 - R-Adlib-Hihat (BH) Digiplayer/ST3.0 samplefileformat 0 1 2 3 4 5 6 7 8 9 A B C D E F ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿ 0000: ³[T]³ Dos filename (12345678.ABC) ³ MemSeg ³ ÃÄÄÄÁÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄ´ 0010: ³Length ³HI:leng³LoopBeg³HI:LBeg³LoopEnd³HI:Lend³Vol³Dsk³[P]³[F]³ ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´ 0020: ³C2Spd ³HI:C2sp³ x ³ x ³ x ³ x ³GVSPOS ³Int:512³Int:lastused ³ ÃÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ 0030: ³ Sample name, 28 characters max... (incl. NUL) ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´ 0040: ³ ...sample name... ³'S'³'C'³'R'³'S'³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ xxxx: sampledata NOTES: Inside module, MemSeg tells the paragraph position of the actual sampledata (offset/16). In separate insfile the same, in memory segment of data relative to beginning of module. GVSPOS=Position in gravis memory /32 (used inside player only) [T]ype, 1=Sample [F]lags, +1=loop on +2=stereo (after Length bytes for LEFT channel, another Length bytes for RIGHT channel) +4=16-bit samples (intel LO-HI byteorder) { [P]ack, 0=8 bit normal (1=DP30ADPCM1 for holland project) } ST3.0 adlib instrument format 0 1 2 3 4 5 6 7 8 9 A B C D E F ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ 0000: ³[T]³ Dos filename (12345678.123) ³00h³00h³00h³ ÃÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0010: ³D00³D01³D02³D03³D04³D05³D06³D07³D08³D09³D0A³D0B³Vol³Dsk³ x ³ x ³ ÃÄÄÄÁÄÄÄÅÄÄÄÁÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0020: ³C2Spd ³HI:C2sp³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ ÃÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´ 0030: ³ Sample name, 28 characters max... (incl. NUL) ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´ 0040: ³ ...sample name... ³'S'³'C'³'R'³'I'³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ NOTES: [T]ype, 2..7=amel,abd,asnare,atom,acym,ahihat modulator: carrier: D00=[freq.muliplier]+[?scale env.]*16+[?sustain]*32+ [?pitch vib]*64+[?vol.vib]*128 =D01 D02=[63-volume]+[levelscale&1]*128+[l.s.&2]*64 =D03 D04=[Attack]*16+[decay] =D05 D06=[15-sustain]*16+[release] =D07 D08=[wave select] =D09 D0A=[modulation feedback]*2+[?additive synthesis] D0B=unused Unpacked Internal memoryformat for patterns: REMARK: each channel takes 320 bytes, rows for each channel are sequential. byte: 0 - Note; hi=oct, lo=note, 255=empty note,254=key off (used with adlib) 1 - Instrument ;255=.. 2 - Volume ;255=.. 3 - Special command ;255=.. 4 - Command info Packed Internal memoryformat for patterns: Pattern length fixed for 64 rows. BYTE:flag, 0=end of row &31=channel &32=follows; BYTE:note, BYTE:instrument &64=follows; BYTE:volume &128=follows; BYTE:command, BYTE:info ************************************************ NOTES on [memseg]. In memory, the memseg's highest byte (3) is always zero (thus also the ASCIIZ terminator). For the actual 16 bit memseg the following storage method is used: 0..EFFF = Segment to memory F000... = EMS page ####-F000 And here is info for STM: Song/Module file structure: Offset: Info: 0 Song/File name, max 20 chars, ASCIIZ, except if 20 chars long 20 Tracker name, max 8 chars, NO NUL 28 0x1A 29 File type: 1=song, 2=module 30 Version major (eg. 2) 31 Version minor (eg. 2) 32 byte; tempo 33 byte; num of patterns saved 34 byte; global volume 36 reserved, 13 bytes 48 Instruments (31 kpl) (see below) Instrument structure: Offset Info 0 Inst. Filename, 12 bytes max, ASCIIZ 12 0x00 13 byte; instrument disk 14 word; reserved (used as internal segment while playing) 16 word; length in bytes 18 word; loop start 20 word; loop end 22 byte; volume 23 byte; reserved 24 word; speed for mid-C (in Hz) 26 reserved, 4 bytes 30 word; internal segment address/(in modules:)length in paragraphs XXXX Music pattern orders (64 bytes/orders) XXXX Patterns (number in header, each pattern 1KB) Patterns consist of 64 rows, each 4 channels. Each channel is 4 bytes in length, and the channels are stored from left to right, row by row. Special [BYTE0] contents: 251=last 3 bytes NOT in file, all bytes 0 252=last 3 bytes NOT in file, note: -0- 253=last 3 bytes NOT in file, note: ... 254=(in memory), -0- 255=(in memory), ... otherwise: note=[BYTE0] and 15 (C=0,C#=1,D=2...) octave=[BYTE0] / 16 instrument=[BYTE1]/8 volume=([BYTE1] and 7)+[BYTE2]/2 command=[BYTE2] and 15 command info=[BYTE3] [XXXX] In modules: Samples, padded to 16 byte limits. Sample lengths in paragraphs (and as saved) are storen in instruments internal segment address.