The last piece of the puzzle( so far ?) is the BPM, after some some research I’m almost sure the BPM – measure relation boils down to this constant:
1 measure per second @ 240 BPM.
That means if the song is playing at exactly 240 BPM, one measure will take exactly 1 second to pass the judgment line, that is if we start a timer when a measure pass the line and stop it when the next measure starts we will have 1 second in the timer.
From there, we can calculate the time of the measures in other BPM’s like this:
bpm x = 240/x seconds per measure.
so, a measure at a song playing at 160 bpm will take 1.5 seconds.
With that, and the measure sizes, we can finally calculate each note’s movement speed:
let’s say the hispeed is 3x and the bpm is 150.
so each measure is 1155 pixels ( 3*385 @ 800×600),
and each measure takes 1.6 seconds, or rather, we have 0.625(1/1.6) measures per second.
If we have 0.625 measures per second, we can find how much pixels of the measure we have per second:
0.625 * 1155 = 721(.875) pixels per second.
so a note moves 721 pixels per second at 3x and 150 bpm.
with this, we got all the tools necessary to build the renderer, which is the part of the program that put the notes in the right place and show that in the screen. In fact, I did just that, my implementation of the renderer is almost done, I just need to build some interface around it, so that you can choose songs, speed, etc, and I will make a “preview release” to allow people test it. Don’t get your hopes build up though, it won’t be playable, yet.