People are often asking how these 4 are related, so I thought I'd type up a quick forum post to explain:
In ye olde days back on the Amiga, trackers used the VBL interrupt for timing (the Vertical BLank is the time in which a CRT has finished drawing the image and is resetting the beam position back to the top-left of the screen). In Europe, the VBL interrupt was effectively a nice stable 50Hz timer.
So, a player routine would use this 50Hz timer to update the values in the Amiga's sound chip (named Paula): frequency, sample address & volume. This was the shortest amount of time in which these parameters could be modified and was known as a 'tick'. On the Amiga, a tick occurs at 50Hz and therefore has a duration of 20ms.
Obviously this is much too fast to playback a song (50Hz = 3000bpm!) so it had to be subdivided. This is where the SPD (speed) parameter comes in, this controls the number of ticks that occur before the pattern advances to the next row. Typically this is set to 6, meaning that 6 ticks will occur for every row of a pattern. Using 4 rows per beat, this equates to 4 X 6 = 24 ticks per beat. We know that the standard tick duration is 20ms (for a 50Hz timer), so 24 X 20 = 480ms per beat, translating this to Beats Per Minute:
60 / 0.480 =
125BPMWhich coincidently, is the default BPM setting of Milkytracker
Later versions of Amiga trackers added an option to use the Amiga's CIA timer interrupt instead of the VBL, this could be programmed to different frequencies enabling the tick duration to be altered. Altering the tick duration allows the BPM to be set to user defined values instead of being fixed at 125BPM, therefore the BPM setting was added. The Fasttracker II manual explains it thus:
The BPM setting defines how fast (ticks/second) the music player will run. 125 BPM<-> 50 Hz. Number of player ticks/second = BPM*2/5Converting this value to a duration is easy: Tick duration (ms) = 2500/BPM.
Notes:In Europe, Amiga's were designed for the PAL TV standard which updates at 50Hz. In America, the NTSC standard was used at 60Hz.
Milkytracker does not use a fixed timer interrupt like the Amiga players do, instead it updates the tick value every x samples (where x is a calculated value that corresponds to the equivalent timer frequency). Due to the granularity of both timer interrupts and sample speeds, the BPM value is almost never 100% accurate; there is usually an error of <1BPM. This can cause problems when using trackers with other music software which may have a true BPM setting.