I may not have much to say (and this question may be broad-ish), but can you accurately calculate BPM in RBX.lua? Doing some "deep" web search was not helpful as there were not many tutorials on calculating BPM. Whilst one site may have a tutorial, tempotap.com seems to have on what I was looking for. It works, but it is not very accurate on Lua
--Javascript code taken from tempotap.com
--[[
var startTime = null;
var currentBeats = 0;
/*
$(window).keypress(function(event) {
var spaceBarKey = 32;
var lowerXKey = 120;
var upperXKey = 88;
var result = true;
var keyCode = event.which;
//if (!(event.which == 115 && event.ctrlKey)) return true;
//alert(keyCode);
if (keyCode == spaceBarKey) {
handleNewBeat();
result = false;
} else if ((keyCode == lowerXKey) || (keyCode == upperXKey)) {
handleBeat();
result = false;
}
if (!result) {
event.preventDefault();
}
return result;
});
*/
function handleNewBeat() {
if (currentBeats == 0) {
startTime = new Date();
}
currentBeats++;
updateBpm();
}
function handleReset() {
startTime = null;
currentBeats = 0;
updateBpm();
}
function updateBpm() {
var value = ' ';
var title = 'BPM';
if (currentBeats > 1) {
var now = new Date();
var miliseconds = now.getTime() - startTime.getTime();
var minutes = miliseconds / 60000.0;
var bpm = (currentBeats - 1) / minutes;
value = bpm.toFixed(2);
title = 'BPM (' + currentBeats.toString() + ' beats)';
} else if (currentBeats == 1) {
title = 'BPM (1 beat)';
}
$('#divBpm').html(value);
$('#divBpmTitle').html(title);
}
shortcut.add(" ",function() {
handleNewBeat();
});
shortcut.add("x",function() {
handleReset();
});
shortcut.add("Shift+x",function() {
handleReset();
});
]]
--Javascript code 'translated' into Lua, but it is not accurate enough
local mouse = game.Players.LocalPlayer:GetMouse()
local starttime = nil
local currentBeat = 0
function handleNewBeat()
if currentBeat == 0 then
starttime = time()
end
currentBeat = currentBeat + 1 --original Javascript code is 'currentBeat++'
updateBPM()
end
function updateBPM()
if currentBeat > 1 then
now = tick()
miliseconds = now % 100000
minute = miliseconds % 60
bpm = (currentBeat - 1) * minute --/ 4 --I have done different operators, but none seem to be accurate either
--script.Parent.Text = "BPM: "..bpm
print("BPM: ", bpm)
end
end
mouse.KeyDown:connect(function(key)
if key == "t" then
handleNewBeat()
end
end)

1 comment
I thought "time()" was mostly using your pc's time (or so I read it from somewhere). This seems accurate enough. Anyways, thank you!