Scream Tracker 3.01 BETA File Formats And Mixing Info ===================================================== This document finally containts the OFFICIAL information on s3m format and much more. There might be some errors though I've even checked this a few times, so if something seems weird, don't just blindly believe it but think first if it could be just a typo or something. ----------------------------------------------------------------------------- What is the S3M file format? What is the samplefile format? What is the adlib instrument format? The first table describes the S3M header. All other blocks are pointer to by pointers, so in theory they could be anywhere in the file. However, the practical standard order is: - header - instruments in order - patterns in order - samples in order Next the instrument header is described. It is stored to S3M for each instrument and also saved to the start of all samples saved from ST3. Same header is also used by Advance Digiplayer. The third part is the description of the packed pattern format. S3M Module header 0 1 2 3 4 5 6 7 8 9 A B C D E F ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ 0000: ³ Song name, max 28 chars (end with NUL (0)) ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0010: ³ ³1Ah³Typ³ x ³ x ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0020: ³OrdNum ³InsNum ³PatNum ³ Flags ³ Cwt/v ³ Ffv ³'S'³'C'³'R'³'M'³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0030: ³g.v³i.s³i.t³m.v³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ x ³Special³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0040: ³Channel settings for 32 channels, 255=unused,+128=disabled ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0050: ³ ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0060: ³Orders; length=OrdNum (should be even) ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ xxx1: ³Parapointers to instruments; length=InsNum*2 ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ xxx2: ³Parapointers to patterns; length=PatNum*2 ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ xxx1=70h+orders xxx2=70h+orders+instruments*2 Parapointers to file offset Y is (Y-Offset of file header)/16. You could think of parapointers as segments relative to the start of the S3M file. Type = File type: 16=ST3 module Ordnum = Number of orders in file (should be even!) Insnum = Number of instruments in file Patnum = Number of patterns in file Cwt/v = Created with tracker / version: &0xfff=version, >>12=tracker ST3.00:0x1300 ST3.01:0x1301 Ffv = File format version; 1=old version used long ago (samples signed) 2=standard (samples unsigned) Flags = [ These are old flags for Ffv1. Not supported in ST3.01 | +1:st2vibrato | +2:st2tempo | +4:amigaslides | +32:enable filter/sfx with sb ] +8: 0vol optimizations Automatically turn off looping notes whose volume is zero for >2 note rows. +16: amiga limits Disallow any notes that go beond the amiga hardware limits (like amiga does). This means that sliding up stops at B#5 etc. Also affects some minor amiga compatibility issues. +128: special custom data in file Special = pointer to special custom data (not used by ST3.01) g.v = global volume (see next section) m.v = master volume (see next section) 7 lower bits bit 8: stereo(1) / mono(0) i.s = initial speed (command A) i.t = initial tempo (command T) Channel settings: bit 8: channel enabled bit 0-7: channel type 0..7 : Left Sample Channel 1-8 8..15 : Right Sample Channel 1-8 16..31 : Adlib channels (9 melody + 5 drums) Global volume directly divides the volume numbers used. So if the module has a note with volume 48 and master volume is 32, the note will be played with volume 24. This affects both Gravis & SoundBlasters. Master volume only affects the SoundBlaster. It controls the amount of sample multiplication (see mixing section of this doc). The bigger the value the bigger the output volume (and thus quality) will be. However if the value is too big, the mixer may have to clip the output to fit the 8 bit output stream. The default value works pretty well. Note that in stereo, the mastermul is internally multiplied by 11/8 inside the player since there is generally more room in the output stream. Order list lists the order in which to play the patterns. 255=-- is the end of tune mark and 254=++ is just a marker that is skipped. Digiplayer/ST3 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³ x ³[P]³[F]³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0020: ³C2Spd ³HI:C2sp³ x ³ x ³ x ³ x ³Int:Gp ³Int:512³Int:lastused ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0030: ³ Sample name, 28 characters max... (incl. NUL) ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0040: ³ ...sample name... ³'S'³'C'³'R'³'S'³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ xxxx: sampledata Length / LoopBegin / LoopEnd are all 32 bit parameters although ST3 only support file sizes up to 64,000 bytes. Files bigger than that are clipped to 64,000 bytes when loaded to ST3. NOTE that LoopEnd points to one byte AFTER the end of the sample, so LoopEnd=100 means that byte 99.9999 (fixed) is the last one played. C2Spd = Herz for middle C. ST3 only uses lower 16 bits. Vol = Default volume 0..64 Memseg = Pointer to sampledata Inside a sample or S3M, MemSeg tells the parapointer to the actual sampledata. In files all 24 bits are used. In memory the value points to the actual sample segment or Fxxx if sample is in EMS under handle xxx. In memory the first memseg byte is overwritten with 0 to create the dos filename terminator nul. Int:Gp = Internal: Address of sample in gravis memory /32 (only used while module in memory) Int:512= Internal: flags for soundblaster loop expansion (only used while module in memory) Int:las= Internal: last used position (only works with sb) (only used while module in memory) [T]ype 1=Sample, 2=adlib melody, 3+=adlib drum (see below for adlib structure) [F]lags, +1=loop on +2=stereo (after Length bytes for LEFT channel, another Length bytes for RIGHT channel) +4=16-bit sample (intel LO-HI byteorder) (+2/+4 not supported by ST3.01) [P]ack 0=unpacked, 1=DP30ADPCM packing (not used by ST3.01) 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'³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ [T]ype = 2:amel 3:abd 4:asnare 5:atom 6:acym 7:ahihat C2Spd = 'Herz' for middle C. ST3 only uses lower 16 bits. Actually this is a modifier since there is no clear frequency for adlib instruments. It scales the note freq sent to adlib. D00..D0B contains the adlib instrument specs packed like this: modulator: carrier: D00=[freq.muliplier]+[?scale env.]*16+[?sustain]*32+ =D01 [?pitch vib]*64+[?vol.vib]*128 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 packed pattern format 0 1 2 3 4 5 6 7 8 9 A B C D E F ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ 0000: ³Length ³ packed data, see below... ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ Length = length of packed pattern Unpacked pattern is always 32 channels by 64 rows. Below is the unpacked format st uses for reference: Unpacked Internal memoryformat for patterns (not used in files): NOTE: each channel takes 320 bytes, rows for each channel are sequential, so one unpacked pattern takes 10K. byte 0 - Note; hi=oct, lo=note, 255=empty note, 254=key off (used with adlib, with samples stops smp) byte 1 - Instrument ;0=.. byte 2 - Volume ;255=.. byte 3 - Special command ;255=.. byte 4 - Command info ; Packed data consits of following entries: BYTE:what 0=end of row &31=channel &32=follows; BYTE:note, BYTE:instrument &64=follows; BYTE:volume &128=follows; BYTE:command, BYTE:info So to unpack, first read one byte. If it's zero, this row is done (64 rows in entire pattern). If nonzero, the channel this entry belongs to is in BYTE AND 31. Then if bit 32 is set, read NOTE and INSTRUMENT (2 bytes). Then if bit 64 is set read VOLUME (1 byte). Then if bit 128 is set read COMMAND and INFO (2 bytes). For information on commands / how st3 plays them, see the manual. ----------------------------------------------------------------------------- What is the Stmik300old format? What is the STIMPORT file format? What is the SIMPLEXFILE format? The old stmik 300 (never published because it has no usable interface) want's that the samples in the module are pre-extended for soundblaster. This means that samples have an extra 512 bytes of loop after their loopend (or silence if no loop). The save option for old stmik does this extension. Otherwise the fileformat is the same as for a normal S3M. STIMPORT file format is supposed to be an easy way of imputting weird data to st3. That is, it should be easy to convert something to STIMPORT format. The format goes like this: 0 1 2 3 4 5 6 7 8 9 A B C D E F ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ 0000: ³'S'³'T'³'I'³'M'³'P'³'O'³'R'³'T'³i.s³ x ³ x ³ x ³ x ³ x ³ x ³ x ³ ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ 0010: ³Notedata... ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ xxxx: ³Instruments... ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ There are no patterns or orders, just a continuos note stream of following structures: 0 1 2 3 4 ÚÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄ¿ ³Chan³Note³Inst³Cmnd³Info³ ÀÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÙ Chan is the channel number for the note. Value 0 stands for next row. Value 255 stands for end of note stream. Note/Inst/Cmnd/Info are like in the unpacked memory pattern (see previous section) After the notedata there can be instruments (optional) Every instrument consits of the following block: 0 1 2 3 4 ÚÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ³Inst³Loop³LoopBeg ³LoopEnd ³Length ³ Sampledata... ÀÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Inst = number of instrument to load (0=end of instruments) Loop = 1=loop enabled LoopBeg/LoopEnd/Length = guess Sampledata = raw sampledata for Length bytes. SIMPLEXFORMAT has been used for some adlib musics. Dunno if it's useful to you, but the st3 saves it like this: First is stores the 32 first instruments (80 bytes each, just like in a S3M). Then it stores the raw notedata for the entire song. This means it goes through the order list and saves all the patererns in that order unpacked. The resulting file will be BIG. The idea is that it should be fairly easy to convert to something from this. ----------------------------------------------------------------------------- What is C2SPD? How to calculate the note frequencies like ST3? How does ST3 mix depending on master volume? Finetuning (C2SPD) is actually the frequency in herz for the note C4. Why is it C2SPD? Well, originally in ST2 the middle note was C2 and the name stuck. Later in ST3 the middle note was raised to C4 for more octaves... So actually C2SPD should be called C4SPD... Table for note frequencies used by ST3: note: C C# D D# E F F# G G# A A# B period: 1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,0960,0907 middle octave is 4. 8363 * 16 * ( period(NOTE) >> octave(NOTE) ) note_st3period = -------------------------------------------- middle_c_finetunevalue(INSTRUMENT) note_amigaperiod = note_st3period / 4 note_herz=14317056 / note_st3period Note that ST3 uses period values that are 4 times larger than the amiga to allow for extra fine slides (which are 4 times finer than normal fine slides). How ST3 mixes: 1) volumetable is created in the following way: > volumetable[volume][sampledata]=volume*(sampledata-128)/64; NOTE: sampledata in memory is unsigned in ST3, so the -128 in the formula converts it so that the volumetable output is signed. 2) postprocessing table is created with this pseudocode: > z=mastervol&127; > if(z<0x10) z=0x10; > c=2048*16/z; > a=(2048-c)/2; > b=a+c; > { 0 , if x < a > posttable[x+1024] = { (x-a)*256/(b-a) , if a <= x < b > { 255 , if x > b 3) mixing the samples output=1024 for i=0 to number of channels output+=volumetable[volume*globalvolume/64][sampledata]; next realoutput=posttable[output] This is how the mixing is done in theory. In practice it's a bit different for speed reasons, but the result is the same.