I experimenting with making music on Pico-8. One thing I'm confused about is the speed value. How does that Number translate into BPM (Beats per Minute)?
The speed is the amount of "ticks" each note lasts, so a speed of 1 means 1 tick per note and a speed of 16 means 16 ticks per note. Exactly how long a tick is is undocumented, but from my own testing I think it's approximately one 120th of a second (if someone knows the exact value please let me know!).
If you want to convert the speed to BPM you first need to decide how many notes you consider to be a beat (usually 4 or 8). Then you could use the following formula:
bpm = 60 / (speed / (120 / notes_per_beat))
Or as Pico-8 code:
function speed_to_bpm(speed, notes_per_beat) return 60 / (speed / (120 / notes_per_beat)) end print(speed_to_bpm(15, 4)) -- output: 120 |
Hope this helps!
I was measuring the tick duration when exporting audio via command line (such as "export music.wav"). The sample rate of exported audio is 22,050 Hz. It looks like 1 tick is 183 samples. 1 quarter note was 10,980 samples. That's 120.4918 BPM.
I simplified the equation
BPM=7200/(Notes*Speed)
And here's one for BPM to Speed
Speed=7200/(Notes*BPM)
Using @AdamJ's more precise value of 22,050/183 instead of 120, the simplified formulae are
BPM=7229.50819/(Notes_per_beat*Speed)
Speed=7229.50819/(Notes_per_beat*BPM)
Yes, it's a quibble, but if you are syncing sound and graphics, the 7200 value will cause things to drift out of sync faster. Can also be a factor if you are using PCM as a fifth channel for your music.
Edited. Thanks for the correction @0xFFFF967F.
@bikibird @AdamJ @0xFFFF967F Thank you all for reviving this topic and for the precision quibble. I adjusted my 5ch demo and the sync still isn't great, but it's slightly better now!
[Please log in to post a comment]