X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=web%2Fsongbook.js;h=036a4a2bd4f621ab7f9ed0b0ba7503a1f362d684;hb=47214625c463a8073e58bddaa6dc9a48bd10d7c3;hp=331ed31e2f3815bde61d3156f41f5cab9713fe19;hpb=78a912f14501061e02eeebd688ddaa9743a235f9;p=songbook.git diff --git a/web/songbook.js b/web/songbook.js index 331ed31..036a4a2 100644 --- a/web/songbook.js +++ b/web/songbook.js @@ -1,21 +1,28 @@ // Javascript functions for controlling audio -starttime = null; -endtime = null; +starttime = 0; +endtime = 0; +song = null; +interval = null; // Keycodes spacebar = 32; leftarrow = 37; -uparrow = 38; rightarrow = 39; -downarrow = 40; seta = 65; -backfewsecs = 66; +setb = 66; cleara = 67; -forwardfewsecs = 70; return2start = 82; howmanysecs = 10; +function loop() { + // If endtime is not set then we can't loop + if (endtime == 0) return; + + // if we're past the endtime then it's time to start back at the A marker + if (song.currentTime > endtime) song.currentTime = starttime; +} // loop + window.onload = function() { song = document.getElementById('song'); @@ -23,6 +30,11 @@ window.onload = function() { endtime = song.duration; body = document.getElementsByTagName('body')[0] + if (!song.paused) { + // Set up loop + interval = setInterval(loop, 1000); + } // if + body.onkeydown = function(e) { var ev = e || event; @@ -34,6 +46,8 @@ window.onload = function() { } // if if (playing) { + // Stop loop + clearInterval(interval) song.pause(); playing = false; } else { @@ -41,13 +55,16 @@ window.onload = function() { song.currentTime = starttime } // if + // Set up loop + interval = setInterval(loop, 1000); + song.play(); playing = true; } // if e.preventDefault(); return; - } else if (ev.keyCode == return2start || ev.keyCode == uparrow) { + } else if (ev.keyCode == return2start) { if (starttime != null) { song.currentTime = starttime; } else { @@ -55,22 +72,37 @@ window.onload = function() { } // if return; - } else if (ev.keyCode == backfewsecs || ev.keyCode == leftarrow) { + } else if (ev.keyCode == leftarrow) { song.currentTime -= howmanysecs; song.play() return; - } else if (ev.keyCode == forwardfewsecs || ev.keyCode == rightarrow) { + } else if (ev.keyCode == rightarrow) { song.currentTime += howmanysecs; song.play(); return; } else if (ev.keyCode == seta) { + // Reset endtime if setting a new A marker + if (endtime != song.duration) endtime = song.duration; + starttime = song.currentTime; + // Translate seconds to timecode + document.getElementById('a').innerHTML = Math.floor(starttime / 60) + ':' + Math.floor(starttime % 60); + return; + } else if (ev.keyCode == setb) { + if (song.currentTime > starttime) { + endtime = song.currentTime; + document.getElementById('b').innerHTML = Math.floor(endtime / 60) + ':' + Math.floor(endtime % 60); + } // if } else if (ev.keyCode == cleara) { starttime = 0; + endtime = song.duration; + + document.getElementById('a').innerHTML = 'not set'; + document.getElementById('b').innerHTML = 'not set'; return; } // if