Code edit (1 edits merged)
Please save this source code
User prompt
Here is the old code (before the V4 change) that was working : ``` self.spawnGateAtTime = function () { var beatValue = null; if (self.currentNoteIndex < self.currentSong.songBeats.length) { beatValue = self.currentSong.songBeats[self.currentNoteIndex].beat; } var keyNumber = parseInt(beatValue, 10) || 1; var noteKey = 'Key' + keyNumber; var startScale = self.noteSpawnScale; var endScale = 1.0; var speed = self.gateAnimationSpeed; var timeToReachPlayer = Math.log(endScale / startScale) / speed; var beatAngle = centerAngle; if (beatValue === "1") { beatAngle = rightAngle; } else if (beatValue === "2") { beatAngle = leftAngle; } else { beatAngle = centerAngle; } self.lastGateAngle = beatAngle; var allAngles = [leftAngle, centerAngle, rightAngle]; var gateAngles = []; for (var i = 0; i < allAngles.length; i++) { if (allAngles[i] !== beatAngle) { gateAngles.push(allAngles[i]); } } var beatTime = self.currentSong.songBeats[self.currentNoteIndex].time; var now = Date.now(); var songElapsed = now - self.songStartTime; var spawnTime = beatTime - timeToReachPlayer; // Spawn gates for (var j = 0; j < gateAngles.length; j++) { var gate = new Gate(); gate.updateScale(self.noteSpawnScale); gate.spawnTime = Date.now() + 200 / globalSpeed; gate.colorIndex = 0; gate.gateId = getNextGateId(); gate.noteKey = noteKey; gate.directionAngle = gateAngles[j]; if (songElapsed >= spawnTime) { self.gates.push(gate); self.addChild(gate); } else { (function (g) { LK.setTimeout(function () { self.gates.push(g); self.addChild(g); }, spawnTime - songElapsed); })(gate); } } // When spawning 2 gates, spawn an Orb at the free angle (beatAngle) if (gateAngles.length === 2 && orbManager) { if (songElapsed >= spawnTime) { orbManager.spawnOrb(beatAngle); } else { (function (angle) { LK.setTimeout(function () { orbManager.spawnOrb(angle); }, spawnTime - songElapsed); })(beatAngle); } } }; self.update = function () { if (!songStarted) { return; } var now = Date.now(); var songElapsed = now - self.songStartTime; if (self.currentNoteIndex < self.currentSong.songBeats.length) { var nextBeat = self.currentSong.songBeats[self.currentNoteIndex]; if (songElapsed >= nextBeat.time) { if (now - lastBeatTime >= skipBeatDelay) { self.spawnGateAtTime(); lastBeatTime = now; } self.currentNoteIndex++; } } for (var i = self.gates.length - 1; i >= 0; i--) { var gate = self.gates[i]; var currentScale = gate.boundingBox.scaleX; var newScale = currentScale + self.gateAnimationSpeed * currentScale; if (newScale > 3.0) { gate.destroy(); self.gates.splice(i, 1); } else { gate.updateScale(newScale); } } self.checkSongEnd(); }; ``` In current version logic was changed instead of just changing the properties 'time' to 't' and 'beat' to 'b' => Fix the gate logic like it was working before but use the new properties
User prompt
rework the treatment "// Find beats with 'b' property for gates" as now data is already filtered thanks to filterGateData
User prompt
only one gate is spawned : could you idendify the problem ?
User prompt
Update GateManager to use filterGateData instead of raw songListV4 data
User prompt
Update GateManager to use filtered gate data from filterGateData function
User prompt
add a function filterGateData that takes a trackIndex and returns songListV4 beats that contains a 'b' property
User prompt
Update SpeakerManager to use songListV4 format with filtered speaker data
User prompt
use filterSpeakerData in speakerManager instead of using all songListV4 data
User prompt
add a function filterSpeakerData that takes a trackIndex and returns songListV4 beats that contains a 's' property
Code edit (1 edits merged)
Please save this source code
User prompt
Now there are gates but they don't seem to follow the 'b' properties and the previous rule to avoid too close gates isn't repected
User prompt
Now there are gates but they don't seem to follow the 'b' properties and the previous rule to avoid gates too close together isn't respected
User prompt
Good job : Speakers are back working! But still there is no gates :(
User prompt
I see no gates and speakers do not beat...I can't find where the error is
Code edit (5 edits merged)
Please save this source code
User prompt
Now rework the song data loading system to use the new songListV4 format : This format merges songListV3 and speakersBeat. timestamps are in property "t" instead of "time". beat data for gates are in "b" property (not always available) beat data for speakers are in "s" property (not always available) be carefull to not break anything and check twice to see if you did not forget anything
Code edit (1 edits merged)
Please save this source code
User prompt
after selecting a song via the menu, the Speakers aren't visible : Ensure speakers initialisation is done well
User prompt
after selecting a song via the menu, the Speakers aren't visible : Ensure speakers initialisation is done well
Code edit (1 edits merged)
Please save this source code
Code edit (5 edits merged)
Please save this source code
User prompt
set debug off
Code edit (4 edits merged)
Please save this source code
User prompt
after selecting a song via the menu, the runner isn't visible : Ensure runner initialisation is done well
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var BackgroundManager = Container.expand(function () { var self = Container.call(this); self.bg0 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 2.4, scaleY: 2.4, alpha: 1 }); self.bg1 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 1.1, scaleY: 1.1, alpha: 1 }); self.bg2 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.5, scaleY: 0.5, alpha: 1 }); self.bg3 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.22, scaleY: 0.22, alpha: 1 }); self.bg4 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.11, scaleY: 0.11, alpha: 1 }); self.tore0 = self.attachAsset('tore', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 1.2, scaleY: 1.2, alpha: 0 }); self.tore1 = self.attachAsset('tore', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.6, scaleY: 0.6, alpha: 0 }); self.tore2 = self.attachAsset('tore', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.26, scaleY: 0.26, alpha: 0 }); self.tore3 = self.attachAsset('tore', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.12, scaleY: 0.12, alpha: 0 }); if (isDebug) { self.bg1.tint = 0xFF0000; self.tore1.tint = 0x00FF00; self.bg2.tint = 0x00FFFF; self.tore2.tint = 0xFF00FF; self.bg3.tint = 0xfff200; } self.bgAnimationSpeed = globalSpeed / 1000; self.bgAnimationAcceleration = 2; self.backgrounds = [self.bg0, self.tore0, self.bg1, self.tore1, self.bg2, self.tore2, self.bg3, self.tore3, self.bg4]; self.bgAnimStartTime = Date.now(); self.update = function () { if (!songStarted) { // Stop all background animations when song ends tween.stop(self.bg0, { scaleX: true, scaleY: true }); tween.stop(self.bg1, { scaleX: true, scaleY: true }); tween.stop(self.bg2, { scaleX: true, scaleY: true }); tween.stop(self.bg3, { scaleX: true, scaleY: true }); tween.stop(self.bg4, { scaleX: true, scaleY: true }); tween.stop(self.tore0, { scaleX: true, scaleY: true }); tween.stop(self.tore1, { scaleX: true, scaleY: true }); tween.stop(self.tore2, { scaleX: true, scaleY: true }); tween.stop(self.tore3, { scaleX: true, scaleY: true }); return; } var now = Date.now(); var elapsed = now - self.bgAnimStartTime; var resetTriggered = false; for (var i = 0; i < self.backgrounds.length; i++) { var bg = self.backgrounds[i]; bg.scaleX += self.bgAnimationSpeed * bg.scaleX; bg.scaleY = bg.scaleX; if (bg.scaleX > 3.0) { bg.scaleX = 0.12; bg.scaleY = bg.scaleX; } bg.tint = 0x1697b8; } }; return self; }); var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphics = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5, tint: currentColor, alpha: isDebug ? 1 : 0 }); self.speedX = 0; self.speedY = 0; self.lastIntersectingGates = {}; self.lastIntersectingOrbs = {}; // Track which orbs we've intersected self.update = function () { if (!songStarted) { return; } if (runner) { self.x = runner.x; self.y = runner.y; } if (gateManager && gateManager.gates) { for (var i = gateManager.gates.length - 1; i >= 0; i--) { var gate = gateManager.gates[i]; var gateId = gate.gateId; if (self.lastIntersectingGates[gateId] === undefined) { self.lastIntersectingGates[gateId] = false; } var currentIntersecting = gate.boundingBox.scaleX >= minGateDetectionScale && gate.boundingBox.scaleX <= maxGateDetectionScale && self.intersects(gate.boundingBox); if (!self.lastIntersectingGates[gateId] && currentIntersecting) { // Spawn LooseOrbsAnim at ball position with gate's angle var looseOrbsAnim = new LooseOrbsAnim(gate.directionAngle); looseOrbsAnim.x = self.x; looseOrbsAnim.y = self.y; game.addChild(looseOrbsAnim); playHitSound(); // Calculate penalty based on hit timing var now = Date.now(); if (now - lastGateHitTime <= 1000) { // Hit within 1 second - double the penalty (max -10) gatePenaltyValue = Math.max(-10, gatePenaltyValue * 2); } else { // More than 1 second - reset to -2 gatePenaltyValue = -2; } lastGateHitTime = now; // Reduce score by calculated penalty but don't go negative var currentScore = LK.getScore(); var newScore = Math.max(0, currentScore + gatePenaltyValue); LK.setScore(newScore); if (game.updateScore) { game.updateScore(); } // Show penalty text with current penalty value if (scoreLabel && scoreLabel.showPenalty) { scoreLabel.showPenalty(gatePenaltyValue); } if (!gate.isDestroying) { gate.isDestroying = true; tween(gate, { scaleX: 0, scaleY: 0 }, { duration: 300, easing: tween.easeIn, onFinish: function onFinish() { gateManager.destroyGate(gate); } }); } } self.lastIntersectingGates[gateId] = currentIntersecting; } } // Check for orb intersections if (orbManager && orbManager.orbs) { for (var i = orbManager.orbs.length - 1; i >= 0; i--) { var orb = orbManager.orbs[i]; var orbId = orb.orbId; if (self.lastIntersectingOrbs[orbId] === undefined) { self.lastIntersectingOrbs[orbId] = false; } var currentIntersecting = orb.currentScale >= minOrbDetectionScale && orb.currentScale <= maxOrbDetectionScale && self.intersects(orb.boundingBox); if (!self.lastIntersectingOrbs[orbId] && currentIntersecting) { // Spawn SparkAnim at ball position var sparkAnim = new SparkAnim(); sparkAnim.x = self.x; sparkAnim.y = self.y; game.addChild(sparkAnim); // Orb collected - play sound and increase score LK.getSound('grab').play(); LK.setScore(LK.getScore() + 1); if (game.updateScore) { game.updateScore(); } // Destroy the orb orb.destroy(); orbManager.orbs.splice(i, 1); delete self.lastIntersectingOrbs[orbId]; continue; } self.lastIntersectingOrbs[orbId] = currentIntersecting; } } }; return self; }); var ConfettiAnim = Container.expand(function () { var self = Container.call(this); self.confettiPieces = []; self.spawnTime = Date.now(); self.lifetime = 5000; // 3 seconds total animation self.spawnDuration = 2000; // Spawn confetti over 500ms self.lastSpawnTime = 0; self.spawnInterval = 5; // Spawn every 50ms // Futuristic blue tint var futuristicBlueTint = 0x32cbec; self.spawnConfettiPiece = function () { // Randomly choose between note, note2, and line (rectangle confetti) var assetType; var random = Math.random(); if (random < 0.2) { assetType = 'note'; } else if (random < 0.4) { assetType = 'note2'; } else { assetType = 'line'; // Rectangle confetti } var piece; if (assetType === 'line') { // Create colored rectangle confetti var confettiColors = [0xFF073A, 0x39FF14, 0x00FFFF, 0xF3F315, 0xFF61F6, 0x32cbec]; var randomColor = confettiColors[Math.floor(Math.random() * confettiColors.length)]; piece = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5, tint: randomColor, alpha: 0.8, scaleX: 3 + Math.random() * 5, // Make rectangles wider scaleY: 0.5 + Math.random() * 1.5 // Make rectangles thinner }); } else { // Create note confetti with futuristic blue tint piece = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5, tint: futuristicBlueTint, alpha: 0.8, scaleX: 0.3 + Math.random() * 0.4, scaleY: 0.3 + Math.random() * 0.4 }); } // Random position across top of screen piece.x = Math.random() * 2048; piece.y = -100; // Start above screen // Random horizontal drift and fall speed piece.vx = (Math.random() - 0.5) * 100; // -50 to 50 pixels/sec horizontal drift piece.vy = 400 + Math.random() * 400; // 200 to 400 pixels/sec fall speed piece.rotationSpeed = (Math.random() - 0.5) * 4; // Random rotation self.confettiPieces.push(piece); // Animate fade out over lifetime tween(piece, { alpha: 0 }, { duration: self.lifetime, easing: tween.linear }); }; self.update = function () { var now = Date.now(); var elapsed = now - self.spawnTime; // Spawn new pieces during spawn duration if (elapsed < self.spawnDuration && now - self.lastSpawnTime >= self.spawnInterval) { self.spawnConfettiPiece(); self.lastSpawnTime = now; } // Update all pieces var deltaTime = 16 / 1000; // Assume 60fps for (var i = self.confettiPieces.length - 1; i >= 0; i--) { var piece = self.confettiPieces[i]; // Update position piece.x += piece.vx * deltaTime; piece.y += piece.vy * deltaTime; piece.rotation += piece.rotationSpeed * deltaTime; // Remove if off screen or lifetime exceeded if (piece.y > 2832 || elapsed >= self.lifetime) { piece.destroy(); self.confettiPieces.splice(i, 1); } } // Destroy self when animation complete and no pieces remain if (elapsed >= self.lifetime && self.confettiPieces.length === 0) { self.destroy(); } }; return self; }); var Gate = Container.expand(function () { var self = Container.call(this); self.directionAngle = 0; self.boundingBox = self.attachAsset('boundingBox', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 2450, alpha: 1 }); /* width: 200, heigh: 100, */ self.gateColor = 0xFFFFFF; self.gateId = null; self.updateScale = function (newScale) { self.boundingBox.scaleX = newScale; self.boundingBox.scaleY = newScale; var distance = (2450 - 1366) * newScale; self.boundingBox.x = centerX + distance * Math.cos(self.directionAngle + Math.PI * 0.5); self.boundingBox.y = centerY + distance * Math.sin(self.directionAngle + Math.PI * 0.5); self.boundingBox.rotation = self.directionAngle; }; return self; }); var GateManager = Container.expand(function () { var self = Container.call(this); self.gates = []; self.gateAnimStartTime = Date.now(); self.gateAnimationSpeed = globalSpeed / 1000; self.currentSong = songListV4[0]; self.songStartTime = Date.now(); self.currentNoteIndex = 0; self.noteSpawnScale = 0.12; self.lastGateAngle = null; self.lastProcessedBeat = -1; self.spawnGateAtTime = function () { var beatValue = null; var currentBeat = null; // Find beats with 'b' property for gates while (self.currentNoteIndex < self.currentSong.songBeats.length) { var beat = self.currentSong.songBeats[self.currentNoteIndex]; if (beat.b !== undefined) { currentBeat = beat; beatValue = beat.b; break; } self.currentNoteIndex++; } if (!currentBeat) { return; // No more gate beats } var keyNumber = parseInt(beatValue, 10) || 1; var noteKey = 'Key' + keyNumber; var startScale = self.noteSpawnScale; var endScale = 1.0; var speed = self.gateAnimationSpeed; var timeToReachPlayer = Math.log(endScale / startScale) / speed; var beatAngle = centerAngle; if (beatValue === "1") { beatAngle = rightAngle; } else if (beatValue === "2") { beatAngle = leftAngle; } else { beatAngle = centerAngle; } self.lastGateAngle = beatAngle; var allAngles = [leftAngle, centerAngle, rightAngle]; var gateAngles = []; for (var i = 0; i < allAngles.length; i++) { if (allAngles[i] !== beatAngle) { gateAngles.push(allAngles[i]); } } var beatTime = currentBeat.t; var now = Date.now(); var songElapsed = now - self.songStartTime; var spawnTime = beatTime - timeToReachPlayer; // Spawn gates for (var j = 0; j < gateAngles.length; j++) { var gate = new Gate(); gate.updateScale(self.noteSpawnScale); gate.spawnTime = Date.now() + 200 / globalSpeed; gate.colorIndex = 0; gate.gateId = getNextGateId(); gate.noteKey = noteKey; gate.directionAngle = gateAngles[j]; if (songElapsed >= spawnTime) { self.gates.push(gate); self.addChild(gate); } else { (function (g) { LK.setTimeout(function () { self.gates.push(g); self.addChild(g); }, spawnTime - songElapsed); })(gate); } } // When spawning 2 gates, spawn an Orb at the free angle (beatAngle) if (gateAngles.length === 2 && orbManager) { if (songElapsed >= spawnTime) { orbManager.spawnOrb(beatAngle); } else { (function (angle) { LK.setTimeout(function () { orbManager.spawnOrb(angle); }, spawnTime - songElapsed); })(beatAngle); } } }; self.update = function () { if (!songStarted) { return; } var now = Date.now(); var songElapsed = now - self.songStartTime; // Look for next gate beat (with 'b' property) var foundGateBeat = false; while (self.currentNoteIndex < self.currentSong.songBeats.length) { var nextBeat = self.currentSong.songBeats[self.currentNoteIndex]; if (nextBeat.b !== undefined) { // Found a gate beat if (songElapsed >= nextBeat.t) { if (now - lastBeatTime >= skipBeatDelay) { self.spawnGateAtTime(); lastBeatTime = now; } } else { // Not time yet for this beat break; } foundGateBeat = true; break; } self.currentNoteIndex++; } if (!foundGateBeat && self.currentNoteIndex < self.currentSong.songBeats.length) { // Continue incrementing if we haven't found a gate beat self.currentNoteIndex++; } for (var i = self.gates.length - 1; i >= 0; i--) { var gate = self.gates[i]; var currentScale = gate.boundingBox.scaleX; var newScale = currentScale + self.gateAnimationSpeed * currentScale; if (newScale > 3.0) { gate.destroy(); self.gates.splice(i, 1); } else { gate.updateScale(newScale); } } self.checkSongEnd(); }; self.resetSong = function () { self.songStartTime = Date.now(); self.currentNoteIndex = 0; self.lastGateAngle = null; }; self.checkSongEnd = function () { if (self.currentNoteIndex >= self.currentSong.songBeats.length) { var songDuration = self.currentSong.duration || 156000; // Use duration from songListV3 var songElapsed = Date.now() - self.songStartTime; if (songElapsed >= songDuration && songStarted) { // Handle song end songStarted = false; LK.stopMusic(); // Stop progress bar animation if (progressBar) { tween.stop(progressBar.bar, { width: true }); } // Animate speakers out with opposite entrance animation after 2 second delay if (speakerManager && speakerManager.speakers) { LK.setTimeout(function () { for (var i = 0; i < speakerManager.speakers.length; i++) { var speaker = speakerManager.speakers[i]; var exitX, exitY; if (i === 0) { // Left speaker - exit to left exitX = speaker.x - 800; exitY = speaker.y; } else if (i === 1) { // Center speaker - exit to top exitX = speaker.x; exitY = speaker.y - 800; } else { // Right speaker - exit to right exitX = speaker.x + 800; exitY = speaker.y; } tween(speaker, { x: exitX, y: exitY, alpha: 0 }, { duration: 1200, easing: tween.easeIn, onFinish: function onFinish() { // Clear speakers array after all animations complete if (i === speakerManager.speakers.length - 1) { speakerManager.speakers = []; } } }); } }, 1000); } // Return runner and ball to initial position while keeping runner animation running if (runner) { // Set flags for runner to handle transition runner.isReturningToInitial = true; runner.shouldStartIdleAfterReturn = true; // Reset idle state in case it was playing runner.isPlayingIdleAnim = false; tween(runner, { x: 1024, y: 2000, rotation: 0 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { runner.isReturningToInitial = false; runner.shouldStartIdleAfterReturn = false; runner.startIdleSequence(); // Spawn confetti animation and play cheers sound var confettiAnim = new ConfettiAnim(); game.addChild(confettiAnim); LK.getSound('cheers').play(); } }); } if (ball) { tween(ball, { x: 1024, y: 2000, rotation: 0 }, { duration: 1000, easing: tween.easeOut }); } // Clear all gates for (var j = self.gates.length - 1; j >= 0; j--) { self.gates[j].destroy(); } self.gates = []; // Don't reset song here since we want to keep the state } } }; self.destroyGate = function (gate) { var index = self.gates.indexOf(gate); if (index > -1) { self.gates.splice(index, 1); gate.destroy(); } }; return self; }); var LooseOrbsAnim = Container.expand(function (gateAngle) { var self = Container.call(this); self.orbs = []; self.lifetime = 2000; self.spawnTime = Date.now(); self.gateAngle = gateAngle || 0; // Store the gate angle // Spawn multiple orbs (3-6 orbs) var orbCount = 3 + Math.floor(Math.random() * 3); var randScale = 0.3 + Math.random() * 0.4; for (var i = 0; i < orbCount; i++) { var orbAsset = self.attachAsset('orb', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8, scaleX: randScale, scaleY: randScale }); // Random initial position offset orbAsset.x = (Math.random() - 0.5) * 100; orbAsset.y = (Math.random() - 0.5) * 100; // Use gate angle to influence orb spawn direction var baseAngle = self.gateAngle - Math.PI / 2; // Opposite direction from gate var angleSpread = Math.PI * 0.6; // 108 degrees spread var angle = baseAngle + (Math.random() - 0.5) * angleSpread; var speed = 200 + Math.random() * 200; orbAsset.velocityX = Math.cos(angle) * speed; orbAsset.velocityY = Math.sin(angle) * speed - 200; // Initial upward bias orbAsset.gravity = 1200; // Gravity acceleration self.orbs.push(orbAsset); // Animate orb scale and alpha over time (delayed by 2 seconds) LK.setTimeout(function () { tween(orbAsset, { alpha: 0 }, { duration: self.lifetime, easing: tween.easeOut }); }, 1000); // Rotation animation tween(orbAsset, { rotation: Math.PI * 6 - Math.random() * Math.PI * 12 }, { duration: self.lifetime, easing: tween.linear }); } // Update method for physics simulation self.update = function () { var deltaTime = 16 / 1000; // Assume 60fps for (var i = 0; i < self.orbs.length; i++) { var orb = self.orbs[i]; // Apply gravity to velocity orb.velocityY += orb.gravity * deltaTime; // Update position based on velocity orb.x += orb.velocityX * deltaTime; orb.y += orb.velocityY * deltaTime; orb.scaleX += 0.4 * deltaTime; orb.scaleY = orb.scaleX; } // Check if animation is complete var elapsed = Date.now() - self.spawnTime; if (elapsed >= self.lifetime) { self.destroy(); } }; return self; }); var Note = Container.expand(function () { var self = Container.call(this); var noteGraphics = self.attachAsset('note', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); self.velocity = { x: 0, y: -5 }; self.lifetime = 800; self.spawnTime = Date.now(); self.noteType = 'note'; self.noteColor = 0xFFFFFF; self.setNoteType = function (type) { self.noteType = type; noteGraphics.destroy(); noteGraphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); noteGraphics.tint = self.noteColor; }; self.setColor = function (color) { self.noteColor = color; noteGraphics.tint = color; }; self.setVelocity = function (vx, vy) { self.velocity.x = vx; self.velocity.y = vy; }; self.update = function () { self.x += self.velocity.x; self.y += self.velocity.y; var elapsed = Date.now() - self.spawnTime; if (elapsed > self.lifetime) { self.alpha = Math.max(0, 1 - (elapsed - self.lifetime) / 500); } if (elapsed > self.lifetime + 500 || self.y < -100 || self.y > 2832 || self.x < -100 || self.x > 2148) { self.shouldDestroy = true; } }; return self; }); var NoteSparks = Container.expand(function () { var self = Container.call(this); self.notes = []; self.spawnRate = 500; self.lastSpawnTime = 0; self.spawnEnabled = false; self.spawnX = 1024; self.spawnY = 1366; self.spawnVelocityRange = { x: { min: -2, max: 2 }, y: { min: -8, max: -4 } }; self.noteColors = [0xFF073A, 0x39FF14, 0x00FFFF, 0xF3F315, 0xFF61F6]; self.setSpawnPosition = function (x, y) { self.spawnX = x; self.spawnY = y; }; self.setSpawnEnabled = function (enabled) { self.spawnEnabled = enabled; }; self.setSpawnRate = function (rate) { self.spawnRate = rate; }; self.spawnNote = function () { var note = new Note(); note.x = self.spawnX + (Math.random() - 0.5) * 50; note.y = self.spawnY; var vx = self.spawnVelocityRange.x.min + Math.random() * (self.spawnVelocityRange.x.max - self.spawnVelocityRange.x.min); var vy = self.spawnVelocityRange.y.min + Math.random() * (self.spawnVelocityRange.y.max - self.spawnVelocityRange.y.min); note.setVelocity(vx, vy); note.setNoteType(Math.random() > 0.5 ? 'note' : 'note2'); var color = self.noteColors[Math.floor(Math.random() * self.noteColors.length)]; note.setColor(color); note.rotation = (Math.random() - 0.5) * 0.5; self.notes.push(note); self.addChild(note); }; self.spawnBurst = function (count) { for (var i = 0; i < count; i++) { self.spawnNote(); } }; self.update = function () { var now = Date.now(); if (self.spawnEnabled && now - self.lastSpawnTime >= self.spawnRate) { self.spawnNote(); self.lastSpawnTime = now; } for (var i = self.notes.length - 1; i >= 0; i--) { var note = self.notes[i]; if (note.shouldDestroy) { note.destroy(); self.notes.splice(i, 1); } } }; return self; }); var Orb = Container.expand(function () { var self = Container.call(this); var frames = ['orb0', 'orb1', 'orb2', 'orb3', 'orb4', 'orb5']; var orbAssets = []; var currentFrameIndex = 0; var animationInterval = 100; // milliseconds per frame var lastFrameTime = 0; self.directionAngle = 0; self.orbId = null; self.initialSize = 200; self.orbAngleOffsetRatio = 0.15; self.spawnTime = Date.now(); self.currentScale = 0.12; // Track current scale like gates do var glowGraphics = self.attachAsset('glow', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8, width: self.initialSize * 1.5, height: self.initialSize * 1.5, blendMode: 1 }); // Add bounding box for collision detection self.boundingBox = self.attachAsset('boundingCircle', { anchorX: 0.5, anchorY: 0.5, width: self.initialSize * 0.5, height: self.initialSize * 0.5, alpha: 0 }); var _rotateGlow = function rotateGlow() { tween(glowGraphics, { rotation: glowGraphics.rotation + Math.PI * 2 }, { duration: 3000, easing: tween.linear, onFinish: _rotateGlow }); }; _rotateGlow(); // Pulsing scale animation var _pulseGlow = function pulseGlow() { tween(glowGraphics, { scaleX: 0.8, scaleY: 0.8 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(glowGraphics, { scaleX: 1.6, scaleY: 1.6 }, { duration: 500, easing: tween.easeInOut, onFinish: _pulseGlow }); } }); }; _pulseGlow(); for (var i = 0; i < frames.length; i++) { var asset = self.attachAsset(frames[i], { anchorX: 0.5, anchorY: 0.5, alpha: 0, width: self.initialSize, height: self.initialSize }); orbAssets.push(asset); } // Set the first frame to be visible initially if (orbAssets.length > 0) { orbAssets[0].alpha = 1; } self.updateScale = function (newScale) { self.currentScale = newScale; // Update all frame assets scale and alpha exactly like gates for (var i = 0; i < orbAssets.length; i++) { orbAssets[i].scaleX = newScale; orbAssets[i].scaleY = newScale; // Only update alpha for the currently visible frame if (i === currentFrameIndex) { orbAssets[i].alpha = Math.min(1, newScale + 0.66); } } // Update position based on scale exactly like gates do var distance = (2450 - 1366) * newScale; var angle = self.directionAngle; if (angle != centerAngle) { angle += Math.sign(angle) * self.orbAngleOffsetRatio; } self.x = centerX + distance * Math.cos(angle + Math.PI * 0.5); self.y = centerY + distance * Math.sin(angle + Math.PI * 0.5); self.rotation = angle; }; self.update = function () { var now = Date.now(); if (now - lastFrameTime >= animationInterval) { // Get current scale to maintain proper alpha var currentScale = orbAssets[0].scaleX; var targetAlpha = Math.min(1, currentScale + 0.66); // Fade out the current frame tween(orbAssets[currentFrameIndex], { alpha: 0 }, { duration: animationInterval / 2 }); // Move to the next frame currentFrameIndex = (currentFrameIndex + 1) % frames.length; // Fade in the next frame with proper alpha based on scale tween(orbAssets[currentFrameIndex], { alpha: targetAlpha }, { duration: animationInterval / 2 }); lastFrameTime = now; } }; return self; }); var OrbManager = Container.expand(function () { var self = Container.call(this); self.orbs = []; self.orbSpawnInterval = 1000; // Spawn every 1000ms for now, adjust as needed self.lastOrbSpawnTime = 0; self.orbSpawnScale = 0.12; // Same as gateManager.noteSpawnScale self.orbEndScale = 1.0; self.orbAnimationDuration = 2000; // ms self.spawnOrb = function (angle) { var orb = new Orb(); orb.orbId = getNextGateId(); orb.directionAngle = angle || centerAngle; orb.spawnTime = Date.now(); // Set initial position exactly like gates orb.x = centerX; orb.y = centerY; orb.rotation = angle; orb.updateScale(self.orbSpawnScale); self.orbs.push(orb); self.addChild(orb); // Update last spawn time self.lastOrbSpawnTime = Date.now(); }; self.update = function () { if (!songStarted) { // Clear all orbs when song ends if (self.orbs.length > 0) { for (var i = self.orbs.length - 1; i >= 0; i--) { self.orbs[i].destroy(); } self.orbs = []; } return; } // Check if we need to spawn an orb var now = Date.now(); if (now - self.lastOrbSpawnTime >= 600) { // Check if there's a gate spawn planned in the next 300ms var hasPlannedSpawn = false; if (gateManager && gateManager.currentNoteIndex < gateManager.currentSong.songBeats.length) { var nextBeat = gateManager.currentSong.songBeats[gateManager.currentNoteIndex]; var songElapsed = now - gateManager.songStartTime; var timeToNextBeat = nextBeat.time - songElapsed; if (timeToNextBeat <= 300 && timeToNextBeat > 0) { hasPlannedSpawn = true; } } // Only spawn orb if no gate spawn is planned soon if (!hasPlannedSpawn) { // Spawn orb at centerAngle if no orb was spawned recently self.spawnOrb(centerAngle); self.lastOrbSpawnTime = now; } } // Animate orbs similar to gates for (var i = self.orbs.length - 1; i >= 0; i--) { var orb = self.orbs[i]; var currentScale = orb.currentScale; var newScale = currentScale + gateManager.gateAnimationSpeed * currentScale; if (newScale > 3.0) { orb.destroy(); self.orbs.splice(i, 1); } else { orb.updateScale(newScale); } } }; return self; }); var ProgressBar = Container.expand(function () { var self = Container.call(this); // Background frame (border) self.frame = self.attachAsset('progressFrame', { anchorX: 0.0, anchorY: 0.5, alpha: 0.8 }); // Progress bar (fill) self.bar = self.attachAsset('progressBar', { anchorX: 0.0, anchorY: 0.5, alpha: 0.8 }); // Position bar inside frame self.bar.x = -0; //self.bar.y = 0; // Set initial progress to 0 self.setProgress = function (progress) { progress = Math.max(0, Math.min(1, progress)); // Clamp between 0 and 1 self.bar.width = self.frame.width * progress; }; self.startProgressAnimation = function () { // Get song duration from songListV3 var songDuration = 0; if (gateManager && gateManager.currentSong && gateManager.currentSong.duration) { songDuration = gateManager.currentSong.duration; } if (songDuration > 0) { // Reset progress to 0 and start tween animation self.setProgress(0); tween(self.bar, { width: self.frame.width }, { duration: songDuration, easing: tween.linear }); } }; self.update = function () { // Progress is now handled by tween animation // No need for manual progress calculation }; self.setProgress(0); // Start with empty progress return self; }); var Runner = Container.expand(function () { var self = Container.call(this); // Setup frame animation with assets 001 to 012 var frameAssets = []; var currentFrameIndex = 0; var animationInterval = 2; // milliseconds per frame var lastFrameTime = 0; // Create all 12 frames for (var i = 1; i <= 12; i++) { var frameId = 'runnerDir4_' + (i < 10 ? '00' + i : '0' + i); var asset = self.attachAsset(frameId, { anchorX: 0.5, anchorY: 0.5, tint: 0xFFFFFF, alpha: 0 // Start with all frames hidden }); frameAssets.push(asset); } // Show first frame if (frameAssets.length > 0) { frameAssets[0].alpha = 1; } self.speedX = 0; self.speedY = 0; self.lastIntersectingGates = {}; self.tickCounter = 0; // Setup idle animation frames for when song ends self.idleFrameAssets = []; var currentIdleFrameIndex = 0; var idleAnimationInterval = 100; // milliseconds per frame for idle animation var lastIdleFrameTime = 0; self.isPlayingIdleAnim = false; self.isReturningToInitial = false; self.shouldStartIdleAfterReturn = false; // Make frameAssets accessible from outside self.frameAssets = frameAssets; // Create all 20 idle frames (runnerIdleDir8001 to runnerIdleDir8020) for (var i = 1; i <= 20; i++) { var idleFrameId = 'runnerIdleDir8' + (i < 10 ? '00' + i : '0' + i); var idleAsset = self.attachAsset(idleFrameId, { anchorX: 0.5, anchorY: 0.5, tint: 0xFFFFFF, alpha: 0 // Start with all frames hidden }); self.idleFrameAssets.push(idleAsset); } self.teleportAnim = function () { // Create temporary beam asset at x=1024, y=0 var beam = game.addChild(LK.getAsset('beam', { anchorX: 0.5, anchorY: 0.0, x: 1024, y: 0, alpha: 0, scaleY: 0 })); // Play beamEnter sound on beam appearance LK.getSound('beamEnter').play(); // Animate beam appearance tween(beam, { alpha: 0.8, scaleY: 1.0 }, { duration: 800, easing: tween.easeIn, onFinish: function onFinish() { // Play beamTeleport sound before runner moves up LK.getSound('beamTeleport').play(); // Animate runner moving up to y=-800 tween(self, { y: -800, scaleX: 0.1, alpha: 0.3 }, { duration: 1200, easing: tween.easeInOut, onFinish: function onFinish() { // Keep beam visible for a moment then fade out tween(beam, { alpha: 0, scaleY: 0 }, { duration: 600, easing: tween.easeOut, onFinish: function onFinish() { // Destroy beam after animation beam.destroy(); // Call showMenu after teleport animation completes showMenu(); } }); } }); } }); }; self.rotationAnim = function () { // Create rotation frame assets var rotationFrames = ['runnerRotation_01', 'runnerRotation_02', 'runnerRotation_03']; var rotationAssets = []; // Hide all frames first for (var i = 0; i < self.frameAssets.length; i++) { self.frameAssets[i].alpha = 0; } for (var i = 0; i < self.idleFrameAssets.length; i++) { self.idleFrameAssets[i].alpha = 0; } // Create and show rotation frames for (var i = 0; i < rotationFrames.length; i++) { var asset = self.attachAsset(rotationFrames[i], { anchorX: 0.5, anchorY: 0.5, tint: 0xFFFFFF, alpha: 0 }); rotationAssets.push(asset); } // Animate through rotation frames var frameIndex = 0; var frameInterval = 100; // ms per frame function showNextFrame() { if (frameIndex < rotationAssets.length) { // Hide previous frame if (frameIndex > 0) { rotationAssets[frameIndex - 1].alpha = 0; } // Show current frame rotationAssets[frameIndex].alpha = 1; frameIndex++; LK.setTimeout(showNextFrame, frameInterval); } else { // Animation complete, hide last frame and clean up rotationAssets[rotationAssets.length - 1].alpha = 0; // Destroy rotation assets for (var i = 0; i < rotationAssets.length; i++) { rotationAssets[i].alpha = 0; rotationAssets[i].destroy(); } for (var i = 0; i < self.idleFrameAssets.length; i++) { self.idleFrameAssets[i].alpha = 0; } // Show first idle frame to continue with idle animation if (self.idleFrameAssets.length > 0) { //self.idleFrameAssets[0].alpha = 1; } // Now start idle animation after rotation completes self.idleAnim(); } } // Start animation showNextFrame(); }; self.startIdleSequence = function () { // Hide all running frames for (var i = 0; i < self.frameAssets.length; i++) { self.frameAssets[i].alpha = 0; } // Start with rotation animation self.rotationAnim(); }; self.idleAnim = function () { if (self.isPlayingIdleAnim) { return; // Already playing idle animation } self.isPlayingIdleAnim = true; currentIdleFrameIndex = 0; lastIdleFrameTime = Date.now(); // Hide all running frames for (var i = 0; i < self.frameAssets.length; i++) { self.frameAssets[i].alpha = 0; } // Show first idle frame if (self.idleFrameAssets.length > 0) { self.idleFrameAssets[0].alpha = 1; } // Call teleportAnim after 2 seconds LK.setTimeout(function () { if (self.isPlayingIdleAnim) { // Only if still in idle animation self.teleportAnim(); } }, 2000); }; self.update = function () { // Handle transition from running to idle when returning to initial position if (self.isReturningToInitial) { // Keep running animation during return journey // Hide all idle frames for (var i = 0; i < self.idleFrameAssets.length; i++) { self.idleFrameAssets[i].alpha = 0; } // Show current running frame to ensure visibility if (self.frameAssets.length > 0) { // Make sure at least one frame is visible if (self.frameAssets[currentFrameIndex].alpha === 0) { self.frameAssets[currentFrameIndex].alpha = 1; } } // Continue with normal running animation var now = Date.now(); if (now - lastFrameTime >= animationInterval) { // Hide current frame self.frameAssets[currentFrameIndex].alpha = 0; // Move to next frame currentFrameIndex = (currentFrameIndex + 1) % self.frameAssets.length; // Show next frame self.frameAssets[currentFrameIndex].alpha = 1; lastFrameTime = now; } // Update rotation based on position var angle = Math.atan2(self.y - centerY, self.x - centerX); self.rotation = angle - Math.PI * 0.5; return; } if (!songStarted) { if (!self.isPlayingIdleAnim && !self.isReturningToInitial) { // Hide all running frames when song is not started and not returning for (var i = 0; i < self.frameAssets.length; i++) { self.frameAssets[i].alpha = 0; } } // Handle idle animation when song is not started if (self.isPlayingIdleAnim) { var now = Date.now(); if (now - lastIdleFrameTime >= idleAnimationInterval) { // Hide current idle frame self.idleFrameAssets[currentIdleFrameIndex].alpha = 0; // Move to next idle frame currentIdleFrameIndex = (currentIdleFrameIndex + 1) % self.idleFrameAssets.length; // Show next idle frame self.idleFrameAssets[currentIdleFrameIndex].alpha = 1; lastIdleFrameTime = now; } } return; } // Reset idle animation when song starts if (self.isPlayingIdleAnim) { self.isPlayingIdleAnim = false; // Hide all idle frames for (var i = 0; i < self.idleFrameAssets.length; i++) { self.idleFrameAssets[i].alpha = 0; } // Show first running frame currentFrameIndex = 0; if (self.frameAssets.length > 0) { self.frameAssets[0].alpha = 1; } } // Update rotation based on position var angle = Math.atan2(self.y - centerY, self.x - centerX); self.rotation = angle - Math.PI * 0.5; // Animate frames var now = Date.now(); if (now - lastFrameTime >= animationInterval) { // Hide current frame self.frameAssets[currentFrameIndex].alpha = 0; // Move to next frame currentFrameIndex = (currentFrameIndex + 1) % self.frameAssets.length; // Show next frame self.frameAssets[currentFrameIndex].alpha = 1; lastFrameTime = now; } // self.tickCounter++; // if (self.tickCounter >= 5) { // self.scaleX *= -1; // self.tickCounter = 0; // } }; return self; }); var ScoreLabel = Container.expand(function () { var self = Container.call(this); self.scoreText = new Text2('0', { size: 160, fill: 0xFFFFFF }); self.scoreText.anchor.set(0.5, 0.5); self.addChild(self.scoreText); // Add penalty text self.penaltyText = new Text2('-2', { size: 120, fill: 0xFF0000 }); self.penaltyText.anchor.set(-0.5, 0.5); self.penaltyText.y = 100; // Position below score self.penaltyText.alpha = 0; // Start hidden self.addChild(self.penaltyText); self.updateScore = function (newScore) { self.scoreText.setText(newScore.toString()); // Animate score with scale effect tween(self, { scaleX: 1.3, scaleY: 1.3 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150, easing: tween.easeIn }); } }); }; self.showPenalty = function (penaltyValue) { penaltyValue = penaltyValue || -2; // Update penalty text with current value self.penaltyText.setText(penaltyValue.toString()); // Reset any ongoing animations tween.stop(self.penaltyText, { alpha: true, y: true }); // Reset position and alpha self.penaltyText.y = 150; self.penaltyText.alpha = 1; // Set random anchor X between -0.5 and 1.5 self.penaltyText.anchor.x = -0.5 + Math.random() * 2.0; // Animate penalty text - fade out and move up tween(self.penaltyText, { alpha: 0, y: 50 }, { duration: 1000, easing: tween.easeOut }); }; return self; }); var SparkAnim = Container.expand(function () { var self = Container.call(this); // Randomly select between note and note2 var assetType = Math.random() > 0.5 ? 'note' : 'note2'; var glowGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5, alpha: 1.0, scaleX: 1, scaleY: 1, tint: 0x32cbec }); self.lifetime = 1500; self.spawnTime = Date.now(); // Animate the glow with vertical movement, acceleration and alpha var initialVelocity = -200; // Start moving upward var acceleration = -2000; // Accelerate downward var deltaTime = 16; // 60fps frame time in ms var velocity = initialVelocity; // Create update function for physics movement self.update = function () { velocity += acceleration * (deltaTime / 1000); // Apply acceleration glowGraphics.y += velocity * (deltaTime / 1000); // Update position // Check if animation is complete var elapsed = Date.now() - self.spawnTime; if (elapsed >= self.lifetime) { self.destroy(); } }; // Animate alpha fade out tween(glowGraphics, { alpha: 0 }, { duration: self.lifetime, easing: tween.easeOut }); return self; }); var Speaker = Container.expand(function () { var self = Container.call(this); var speakerGraphics = self.attachAsset('speaker', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); self.volume = 1.0; self.isPlaying = false; self.setVolume = function (vol) { self.volume = Math.max(0, Math.min(1, vol)); }; self.toggleState = function () { self.isPlaying = !self.isPlaying; speakerGraphics.alpha = self.isPlaying ? 1.0 : 0.5; }; return self; }); var SpeakerManager = Container.expand(function () { var self = Container.call(this); self.speakers = []; self.lastBeatTime = 0; self.beatCooldown = 200; self.speakerSongData = songListV4[0]; self.currentBeatIndex = 0; self.songStartTime = 0; // Define speakerPositions in class scope so it's accessible in update method var speakerPositions = [{ x: 1024 - 500, y: 512 }, { x: 1024, y: 512 }, { x: 1024 + 500, y: 512 }]; self.initializeSpeakers = function () { for (var i = 0; i < 3; i++) { var speaker = new Speaker(); var finalX = speakerPositions[i].x; var finalY = speakerPositions[i].y; // Set initial positions for entrance animation if (i === 0) { // Left speaker - comes from left speaker.x = finalX - 800; speaker.y = finalY; } else if (i === 1) { // Center speaker - comes from top speaker.x = finalX; speaker.y = finalY - 800; } else { // Right speaker - comes from right speaker.x = finalX + 800; speaker.y = finalY; } speaker.scaleX = 0.8; speaker.scaleY = 0.8; speaker.isBigBumping = false; self.speakers.push(speaker); self.addChild(speaker); // Set delay for entrance order: left & right first, then center var delay; if (i === 0 || i === 2) { // Left and right speakers - no delay delay = 0; } else { // Center speaker - delay after left and right delay = 300; } LK.setTimeout(function (spkr, targetX, targetY) { return function () { tween(spkr, { x: targetX, y: targetY }, { duration: 800, easing: tween.easeOut }); }; }(speaker, finalX, finalY), delay); } }; self.onBeat = function (beatValue) { var now = Date.now(); if (now - self.lastBeatTime >= self.beatCooldown) { var speakerIndex = -1; if (beatValue === "1") { speakerIndex = 1; } else if (beatValue === "2") { speakerIndex = 2; } else { speakerIndex = 0; } if (speakerIndex >= 0 && speakerIndex < self.speakers.length) { var mainSpeaker = self.speakers[speakerIndex]; mainSpeaker.isBigBumping = true; self.spawnNoteSparks(mainSpeaker); tween(mainSpeaker, { scaleX: 1.2, scaleY: 1.2 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(mainSpeaker, { scaleX: 0.8, scaleY: 0.8 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { mainSpeaker.isBigBumping = false; } }); } }); } self.lastBeatTime = now; } }; self.update = function () { if (songStarted) { // Initialize speakers only once when song starts if (self.speakers.length === 0) { self.initializeSpeakers(); } for (var i = 0; i < self.speakers.length; i++) { var speaker = self.speakers[i]; var time = Date.now() * 0.003; var twistAngle = Math.sin(time + i * 0.5) * 0.15; speaker.rotation = twistAngle; if (!speaker.isBigBumping) { var scaleValue = 0.8 + Math.sin(time * 2 + i * 0.3) * 0.05; speaker.scaleX = scaleValue; speaker.scaleY = scaleValue; // Add dancing up/down movement var dancingOffset = Math.sin(time * 3 + i * 0.7) * 10; speaker.y = speakerPositions[i].y + dancingOffset; } } } if (!songStarted) { // Don't clear speakers array immediately to allow exit animation // The array will be cleared after the animation completes return; } var now = Date.now(); var songElapsed = now - self.songStartTime; // Look for next speaker beat (with 's' property) var foundSpeakerBeat = false; while (self.currentBeatIndex < self.speakerSongData.songBeats.length) { var nextBeat = self.speakerSongData.songBeats[self.currentBeatIndex]; if (nextBeat.s !== undefined) { // Found a speaker beat if (songElapsed >= nextBeat.t) { self.onBeat(nextBeat.s); } foundSpeakerBeat = true; break; } self.currentBeatIndex++; } if (foundSpeakerBeat) { self.currentBeatIndex++; } // Check if song should restart if (self.currentBeatIndex >= self.speakerSongData.songBeats.length) { var lastBeatWithS = null; // Find last beat with 's' property for (var i = self.speakerSongData.songBeats.length - 1; i >= 0; i--) { if (self.speakerSongData.songBeats[i].s !== undefined) { lastBeatWithS = self.speakerSongData.songBeats[i]; break; } } if (lastBeatWithS && songElapsed > lastBeatWithS.t + 5000) { self.songStartTime = Date.now(); self.currentBeatIndex = 0; } } }; self.spawnNoteSparks = function (speaker) { var noteCount = 3 + Math.floor(Math.random() * 3); for (var i = 0; i < noteCount; i++) { var note = new Note(); var angle = Math.random() * Math.PI * 2; var distance = 50 + Math.random() * 100; note.x = speaker.x + Math.cos(angle) * distance; note.y = speaker.y + Math.sin(angle) * distance; var speed = 3 + Math.random() * 5; note.setVelocity(Math.cos(angle) * speed, Math.sin(angle) * speed - 2); note.setNoteType(Math.random() > 0.5 ? 'note' : 'note2'); var futuristicColors = [0x32cbec]; var color = futuristicColors[Math.floor(Math.random() * futuristicColors.length)]; note.setColor(color); note.rotation = (Math.random() - 0.5) * 0.5; note.scaleX = 0.5; note.scaleY = 0.5; if (noteSparks) { noteSparks.notes.push(note); noteSparks.addChild(note); } } }; return self; }); var StartButton = Container.expand(function () { var self = Container.call(this); self.buttonBg = self.attachAsset('start', { anchorX: 0.5, anchorY: 0.5 }); self.x = centerX; self.y = centerY; self.down = function () { if (songStarted) { return; } songStarted = true; if (isDebug) { LK.playMusic('track_test'); } else { LK.playMusic('track_01'); } if (gateManager) { gateManager.songStartTime = Date.now(); gateManager.currentNoteIndex = 0; } if (speakerManager) { speakerManager.songStartTime = Date.now(); speakerManager.currentBeatIndex = 0; } if (noteSparks) {} // Show score label when game starts if (scoreLabel) { scoreLabel.visible = true; } // Show speakers when game starts if (speakerManager && speakerManager.speakers) { for (var i = 0; i < speakerManager.speakers.length; i++) { speakerManager.speakers[i].visible = true; } } // Show progress bar when game starts if (progressBar) { progressBar.visible = true; progressBar.startProgressAnimation(); } tween(self, { alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var WorldManager = Container.expand(function () { var self = Container.call(this); var assetWidth = 2732; var screenWidth = 2048; var totalContentWidth = assetWidth * 2; self.x_center_view = -(totalContentWidth / 2 - screenWidth / 2); self.shiftAmplitude = 1024; self.shiftDurationOneWay = 15000; self._isShifting = false; self._animateToRandomTarget = function () { if (!songStarted || !self._isShifting) { self._isShifting = false; tween.stop(self, { x: true }); return; } var minTargetX = self.x_center_view - self.shiftAmplitude; var maxTargetX = self.x_center_view + self.shiftAmplitude; var randomTargetX = minTargetX + Math.random() * (maxTargetX - minTargetX); var currentX = self.x; var distanceToTravel = Math.abs(currentX - randomTargetX); if (distanceToTravel < 50) { LK.setTimeout(self._animateToRandomTarget, 0); return; } var speed = self.shiftAmplitude / self.shiftDurationOneWay; if (speed <= 0) { speed = (self.shiftAmplitude > 0 ? self.shiftAmplitude : 1024) / 15000; if (speed <= 0) { speed = 0.05; } } var dynamicDuration = distanceToTravel / speed; dynamicDuration = Math.max(500, Math.min(dynamicDuration, self.shiftDurationOneWay * 2)); tween(self, { x: randomTargetX }, { duration: dynamicDuration, easing: tween.easeInOut, onFinish: self._animateToRandomTarget }); }; self._initiateShift = function () { if (self._isShifting) { return; } self._isShifting = true; self._animateToRandomTarget(); }; self.update = function () { if (songStarted && !self._isShifting) { self._initiateShift(); } else if (!songStarted && self._isShifting) { self._isShifting = false; tween.stop(self, { x: true }); tween(self, { x: self.x_center_view }, { duration: 1000, easing: tween.easeOut }); } }; self.x = self.x_center_view; self.y = 0; self.bgLeft = self.attachAsset('world01', { anchorX: 0.5, anchorY: 0.5, x: assetWidth / 2, y: centerY, scaleX: 1.0, scaleY: 1.0 }); self.bgRight = self.attachAsset('world01', { anchorX: 0.5, anchorY: 0.5, x: assetWidth / 2 + assetWidth, y: centerY, scaleX: -1.0, scaleY: 1.0 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000c33 }); /**** * Game Code ****/ var centerX = 1024; var centerY = 1366; var neonColors = [0x39FF14, 0xFF073A, 0x00FFFF, 0xF3F315, 0xFF61F6, 0xFF9900]; var currentColor = neonColors[Math.floor(Math.random() * neonColors.length)]; function drawPolygon(coordinates, tint) { log("drawPolygon ", coordinates); var lines = []; for (var i = 0; i < coordinates.length; i++) { var startPoint = coordinates[i]; var endPoint = coordinates[(i + 1) % coordinates.length]; var line = drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y, tint); lines.push(line); } return lines; } function updatePolygon(lines, newCoordinates, scale) { log("updatePolygon ", lines, scale); if (lines.length !== newCoordinates.length) { error("updatePolygon error: lines and newCoordinates length mismatch"); return lines; } for (var i = 0; i < lines.length; i++) { var startPoint = newCoordinates[i]; var endPoint = newCoordinates[(i + 1) % newCoordinates.length]; updateLine(lines[i], startPoint.x, startPoint.y, endPoint.x, endPoint.y, scale); } return lines; } function drawLine(x1, y1, x2, y2, tint) { log("drawLine ", x1, y1); var line = LK.getAsset('line', { anchorX: 0.0, anchorY: 0.0, x: x1, y: y1, tint: tint }); line.startX = x1; line.startY = y1; line.endX = x2; line.endY = y2; var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); line.width = distance; var angle = Math.atan2(y2 - y1, x2 - x1); line.rotation = angle; return line; } function updateLine(line, newX1, newY1, newX2, newY2, scale) { log("updateLine ", line); scale = scale === undefined ? 1 : scale; var midX = (newX1 + newX2) / 2; var midY = (newY1 + newY2) / 2; newX1 = midX + (newX1 - midX) * scale; newY1 = midY + (newY1 - midY) * scale; newX2 = midX + (newX2 - midX) * scale; newY2 = midY + (newY2 - midY) * scale; line.x = newX1; line.y = newY1; line.startX = newX1; line.startY = newY1; line.endX = newX2; line.endY = newY2; var distance = Math.sqrt(Math.pow(newX2 - newX1, 2) + Math.pow(newY2 - newY1, 2)); line.width = distance; var angle = Math.atan2(newY2 - newY1, newX2 - newX1); line.rotation = angle; return line; } function log() { if (isDebug) { console.log(arguments); } } var songTracks = ["track_01", "track_02", "track_03"]; var songListV4 = [{ "name": "Words Fly Fast", "duration": 156000, "songBeats": [{ "t": 128, "s": "1" }, { "t": 443, "s": "1" }, { "t": 651, "b": "1" }, { "t": 1256, "b": "1" }] }, { "name": "Freedom", "duration": 153600, "songBeats": [{ "t": 0, "s": "3" }, { "t": 315, "s": "3" }, { "t": 3218, "b": "1" }, { "t": 3522, "b": "1" }] }, { "name": "Stranger in the Storm", "duration": 170760, "songBeats": [{ "t": 165, "s": "1" }, { "t": 469, "s": "1" }, { "t": 582, "b": "0" }, { "t": 1286, "b": "0" }] }]; var songListV3 = [{ "name": "Words Fly Fast", "duration": 156000, // Real 157240, "songBeats": [{ "time": 651, "beat": "1" }, { "time": 1256, "beat": "1" }] }, { "name": "Freedom", "duration": 153600, "songBeats": [{ "time": 3218, "beat": "1" }, { "time": 3522, "beat": "1" }] }, { "name": "Stranger in the Storm", "duration": 170760, "songBeats": [{ "time": 582, "beat": "0" }, { "time": 1286, "beat": "0" }] }]; var speakersBeat = [{ "name": "Words Fly Fast", "songBeats": [{ "time": 128, "beat": "1" }, { "time": 443, "beat": "1" }] }, { "name": "Freedom", "songBeats": [{ "time": 0, "beat": "3" }, { "time": 315, "beat": "3" }] }, { "name": "Stranger in the Storm", "songBeats": [{ "time": 165, "beat": "1" }, { "time": 469, "beat": "1" }] }]; var isDebug = false; var globalSpeed = 20; var currentRotationAngle = 0; var fullLog = []; var fpsText; var lastTick; var frameCount; var debugText; var worldManager; var backgroundManager; var gateManager; var targetManager; var ball; var runner; var speakerManager; var noteSparks; var scoreLabel; var progressBar; var orbManager; var minGateDetectionScale = 0.4; var maxGateDetectionScale = 0.6; var minOrbDetectionScale = 0.3; var maxOrbDetectionScale = 0.8; var borderLimitAngle = Math.PI * 0.08; var gateLimitAngle = Math.PI * 0.2; var gateUniqueId = 0; var songStarted = false; var leftAngle = -Math.PI * 0.5 + gateLimitAngle; var centerAngle = -Math.PI * 0.5 + Math.PI / 2; var rightAngle = -Math.PI * 0.5 + Math.PI - gateLimitAngle; function getNextGateId() { return gateUniqueId++; } var lastHitSoundTime = 0; var hitSoundCooldown = 100; var skipBeatDelay = 900; var lastBeatTime = 0; var lastGateHitTime = 0; var gatePenaltyValue = -2; if (isDebug) { songListV4 = [{ "name": "Words Fly Fast", "duration": 156000, "songBeats": [{ "t": 128, "s": "1" }, { "t": 443, "s": "1" }, { "t": 651, "b": "1" }, { "t": 1256, "b": "1" }] }, { "name": "Freedom", "duration": 153600, "songBeats": [{ "t": 0, "s": "3" }, { "t": 315, "s": "3" }, { "t": 3218, "b": "1" }, { "t": 3522, "b": "1" }] }, { "name": "Stranger in the Storm", "duration": 170760, "songBeats": [{ "t": 165, "s": "1" }, { "t": 469, "s": "1" }, { "t": 582, "b": "0" }, { "t": 1286, "b": "0" }] }]; songListV3 = [{ "name": "Words Fly Fast", "duration": 5000, // Real 157240, "songBeats": [{ "time": 651, "beat": "1" }, { "time": 1256, "beat": "1" }, { "time": 1800, "beat": "1" }, { "time": 2364, "beat": "1" }, { "time": 2828, "beat": "1" }, { "time": 3324, "beat": "1" }, { "time": 3708, "beat": "1" }, { "time": 4192, "beat": "2" }, { "time": 4804, "beat": "2" }] }, { "name": "Freedom", "duration": 5000, // Real 157240, "songBeats": [{ "time": 651, "beat": "1" }, { "time": 1256, "beat": "1" }, { "time": 1800, "beat": "1" }, { "time": 2364, "beat": "1" }, { "time": 2828, "beat": "1" }, { "time": 3324, "beat": "1" }, { "time": 3708, "beat": "1" }, { "time": 4192, "beat": "2" }, { "time": 4804, "beat": "2" }] }, { "name": "Stranger in the Storm", "duration": 5000, // Real 157240, "songBeats": [{ "time": 651, "beat": "1" }, { "time": 1256, "beat": "1" }, { "time": 1800, "beat": "1" }, { "time": 2364, "beat": "1" }, { "time": 2828, "beat": "1" }, { "time": 3324, "beat": "1" }, { "time": 3708, "beat": "1" }, { "time": 4192, "beat": "2" }, { "time": 4804, "beat": "2" }] }]; speakersBeat = [{ "name": "Words Fly Fast", "songBeats": [{ "time": 128, "beat": "1" }, { "time": 443, "beat": "1" }, { "time": 747, "beat": "1" }, { "time": 1232, "beat": "1" }, { "time": 1579, "beat": "1" }, { "time": 1893, "beat": "1" }, { "time": 2224, "beat": "1" }, { "time": 2549, "beat": "1" }, { "time": 2853, "beat": "1" }, { "time": 3269, "beat": "1" }, { "time": 3712, "beat": "1" }, { "time": 4037, "beat": "1" }, { "time": 4352, "beat": "1" }, { "time": 4661, "beat": "1" }] }, { "name": "The song number 2", "songBeats": [{ "time": 128, "beat": "1" }, { "time": 443, "beat": "1" }, { "time": 747, "beat": "1" }, { "time": 1232, "beat": "1" }, { "time": 1579, "beat": "1" }, { "time": 1893, "beat": "1" }, { "time": 2224, "beat": "1" }, { "time": 2549, "beat": "1" }, { "time": 2853, "beat": "1" }, { "time": 3269, "beat": "1" }, { "time": 3712, "beat": "1" }, { "time": 4037, "beat": "1" }, { "time": 4352, "beat": "1" }, { "time": 4661, "beat": "1" }] }, { "name": "The Song number 3", "songBeats": [{ "time": 128, "beat": "1" }, { "time": 443, "beat": "1" }, { "time": 747, "beat": "1" }, { "time": 1232, "beat": "1" }, { "time": 1579, "beat": "1" }, { "time": 1893, "beat": "1" }, { "time": 2224, "beat": "1" }, { "time": 2549, "beat": "1" }, { "time": 2853, "beat": "1" }, { "time": 3269, "beat": "1" }, { "time": 3712, "beat": "1" }, { "time": 4037, "beat": "1" }, { "time": 4352, "beat": "1" }, { "time": 4661, "beat": "1" }] }]; } function playHitSound() { var now = Date.now(); if (now - lastHitSoundTime >= hitSoundCooldown) { LK.getSound('hit').play(); lastHitSoundTime = now; } } function gameInitialize() { worldManager = new WorldManager(); game.addChild(worldManager); backgroundManager = new BackgroundManager(); game.addChild(backgroundManager); gateManager = new GateManager(); game.addChild(gateManager); speakerManager = new SpeakerManager(); game.addChild(speakerManager); noteSparks = new NoteSparks(); game.addChild(noteSparks); orbManager = new OrbManager(); game.addChild(orbManager); ball = new Ball(); ball.x = 1024; ball.y = 2000; ball.alpha = isDebug ? 1 : 0; game.addChild(ball); runner = new Runner(); runner.x = 1024; runner.y = 2000; runner.alpha = 1; // Ensure runner is visible game.addChild(runner); // Add score display scoreLabel = new ScoreLabel(); scoreLabel.y = 80; scoreLabel.visible = false; LK.gui.top.addChild(scoreLabel); // Add progress bar progressBar = new ProgressBar(); progressBar.x = 0; progressBar.y = 10; progressBar.visible = false; game.addChild(progressBar); // Update score display function game.updateScore = function () { scoreLabel.updateScore(LK.getScore()); }; if (!songStarted) { var startButton = new StartButton(); game.addChild(startButton); } if (isDebug) { var debugMarker = LK.getAsset('debugMarker', { anchorX: 0.5, anchorY: 0.5, x: 2048 * 0.5, y: 2732 / 2 }); game.addChild(debugMarker); fpsText = new Text2('FPS: 0', { size: 50, fill: 0xFFFFFF }); fpsText.anchor.set(1, 1); LK.gui.bottomRight.addChild(fpsText); lastTick = Date.now(); frameCount = 0; debugText = new Text2('Debug Info', { size: 50, fill: 0xFFFFFF }); debugText.anchor.set(0.5, 0); LK.gui.top.addChild(debugText); var soundTestButton = new Container(); var buttonBg = LK.getAsset('line', { anchorX: 0.5, anchorY: 0.5, scaleX: 50, scaleY: 15, tint: 0x333333 }); soundTestButton.addChild(buttonBg); var buttonText = new Text2('SOUND TEST', { size: 40, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); soundTestButton.addChild(buttonText); soundTestButton.x = -100; soundTestButton.y = 50; LK.gui.topRight.addChild(soundTestButton); soundTestButton.down = function () { for (var i = 0; i <= 14; i++) { (function (index) { LK.setTimeout(function () { LK.getSound('key' + index).play(); }, index * 600); })(i); } }; } } game.update = function () { // Update progress bar if (progressBar && progressBar.update) { progressBar.update(); } if (isDebug) { var now = Date.now(); frameCount++; if (now - lastTick >= 1000) { fpsText.setText('FPS: ' + frameCount); frameCount = 0; lastTick = now; } } }; var snapPositions = { left: 0, center: 1, right: 2 }; var currentSnapPosition = snapPositions.center; var lastMouseZone = 1; function updateSnapPosition(snapPos) { currentSnapPosition = snapPos; var targetAngle = centerAngle; if (snapPos === snapPositions.left) { targetAngle = leftAngle; } else if (snapPos === snapPositions.center) { targetAngle = centerAngle; } else if (snapPos === snapPositions.right) { targetAngle = rightAngle; } var radiusX = 924; var radiusY = 634; runner.x = centerX + radiusX * Math.cos(targetAngle + Math.PI * 0.5); runner.y = centerY + radiusY * Math.sin(targetAngle + Math.PI * 0.5); var rotationMap = { 0: -0.5, 1: 0, 2: 0.5 }; currentRotationAngle = rotationMap[snapPos] * Math.PI * 0.5; } function animateToSnapPosition(snapPos, jump) { var needsIntermediateStep = false; if (currentSnapPosition === snapPositions.left && snapPos === snapPositions.right || currentSnapPosition === snapPositions.right && snapPos === snapPositions.left) { needsIntermediateStep = true; } if (needsIntermediateStep && !jump) { var radiusX = 924; var radiusY = 634; var centerPosX = centerX + radiusX * Math.cos(centerAngle + Math.PI * 0.5); var centerPosY = centerY + radiusY * Math.sin(centerAngle + Math.PI * 0.5); tween(runner, { x: centerPosX, y: centerPosY }, { duration: 100, easing: tween.easeInOut, onFinish: function onFinish() { performSnapAnimation(snapPos, jump); } }); currentRotationAngle = 0; } else { performSnapAnimation(snapPos, jump); } } function performSnapAnimation(snapPos, jump) { currentSnapPosition = snapPos; var targetAngle = centerAngle; if (snapPos === snapPositions.left) { targetAngle = rightAngle; } else if (snapPos === snapPositions.center) { targetAngle = centerAngle; } else if (snapPos === snapPositions.right) { targetAngle = leftAngle; } var radiusX = 924; var radiusY = 634; var targetX = centerX + radiusX * Math.cos(targetAngle + Math.PI * 0.5); var targetY = centerY + radiusY * Math.sin(targetAngle + Math.PI * 0.5); var rotationMap = { 0: -0.5, 1: 0, 2: 0.5 }; var targetRotation = rotationMap[snapPos] * Math.PI * 0.5; if (jump) { tween(runner, { y: 1200 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(runner, { x: targetX, y: targetY }, { duration: 200, easing: tween.easeIn }); } }); } else { tween(runner, { x: targetX, y: targetY }, { duration: 300, easing: tween.easeInOut }); } currentRotationAngle = targetRotation; } game.down = function (x, y, obj) { if (!songStarted) { return; } var screenWidth = 2048; var thirdWidth = screenWidth / 3; var tapZone; if (x < thirdWidth) { tapZone = 0; } else if (x < thirdWidth * 2) { tapZone = 1; } else { tapZone = 2; } if (tapZone === 0) { animateToSnapPosition(snapPositions.left); } else if (tapZone === 1) { animateToSnapPosition(snapPositions.center); } else { animateToSnapPosition(snapPositions.right); } lastMouseZone = tapZone; }; game.move = function (x, y, obj) { if (!songStarted) { return; } var screenWidth = 2048; var thirdWidth = screenWidth / 3; var currentZone; if (x < thirdWidth) { currentZone = 0; } else if (x < thirdWidth * 2) { currentZone = 1; } else { currentZone = 2; } if (currentZone !== lastMouseZone) { if (currentZone === 0) { animateToSnapPosition(snapPositions.left); } else if (currentZone === 1) { animateToSnapPosition(snapPositions.center); } else { animateToSnapPosition(snapPositions.right); } lastMouseZone = currentZone; } }; game.up = function (x, y, obj) {}; function showMenu() { // Reset runner to initial position and ensure visibility if (runner) { runner.x = 1024; runner.y = 2000; runner.alpha = 1; runner.scaleX = 1; runner.scaleY = 1; runner.isPlayingIdleAnim = false; runner.isReturningToInitial = false; // Hide all idle frames for (var i = 0; i < runner.idleFrameAssets.length; i++) { runner.idleFrameAssets[i].alpha = 0; } // Show first running frame for (var i = 0; i < runner.frameAssets.length; i++) { runner.frameAssets[i].alpha = i === 0 ? 1 : 0; } } // Create menu container var menuContainer = new Container(); menuContainer.x = 1024; menuContainer.y = 1366; game.addChild(menuContainer); // Menu tile positions and track names - arranged in vertical list with increased spacing var menuData = [{ x: 0, y: -700, text: songListV4[0] ? songListV4[0].name : "Track 01" }, { x: 0, y: 0, text: songListV4[1] ? songListV4[1].name : "Track 02" }, { x: 0, y: 700, text: songListV4[2] ? songListV4[2].name : "Track 03" }]; // Create menu tiles for (var i = 0; i < menuData.length; i++) { var tile = menuContainer.addChild(LK.getAsset('menuTile', { anchorX: 0.5, anchorY: 0.5, x: menuData[i].x, y: menuData[i].y, alpha: 0, scaleX: 0.85, scaleY: 0.58 })); // Add text to tile var trackText = new Text2(menuData[i].text, { size: 120, fill: 0xFFFFFF, dropShadow: true, dropShadowColor: 0x000000, dropShadowBlur: 4, dropShadowAngle: Math.PI / 4, dropShadowDistance: 5 }); trackText.anchor.set(0.5, 0.5); trackText.x = menuData[i].x; trackText.y = menuData[i].y; menuContainer.addChild(trackText); // Animate tiles in with staggered timing and add touch handlers (function (menuTile, menuText, delay, trackIndex) { LK.setTimeout(function () { tween(menuTile, { alpha: 1, scaleX: 0.85, scaleY: 0.58 }, { duration: 800, easing: tween.easeOut }); tween(menuText, { alpha: 1 }, { duration: 800, easing: tween.easeOut }); }, delay); // Add touch handler to menu tile menuTile.down = function () { // Load the selected track's song data if (gateManager && songListV4[trackIndex]) { gateManager.currentSong = songListV4[trackIndex]; gateManager.resetSong(); } // Reset speaker manager for the new song if (speakerManager) { // Force stop and remove old speakers if any are lingering for (var k = speakerManager.speakers.length - 1; k >= 0; k--) { var oldSpeaker = speakerManager.speakers[k]; tween.stop(oldSpeaker); // Stop ongoing tweens on this speaker if (oldSpeaker && typeof oldSpeaker.destroy === 'function') { oldSpeaker.destroy(); // Destroy the speaker object } } speakerManager.speakers = []; // Ensure the speakers array is empty for re-initialization if (songListV4[trackIndex]) { // Use songListV4 for speaker data as well speakerManager.speakerSongData = songListV4[trackIndex]; } speakerManager.currentBeatIndex = 0; // speakerManager.songStartTime will be set correctly below } // Start the corresponding music track var musicTrack = songTracks[trackIndex]; if (musicTrack) { songStarted = true; LK.playMusic(musicTrack); // Update timing for managers if (gateManager) { gateManager.songStartTime = Date.now(); } if (speakerManager) { speakerManager.songStartTime = Date.now(); //{1xL} // Sets/updates songStartTime } // Show score and progress bar if (scoreLabel) { scoreLabel.visible = true; } if (progressBar) { progressBar.visible = true; progressBar.startProgressAnimation(); } // Fade out and destroy menu tween(menuContainer, { alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { menuContainer.destroy(); } }); } }; })(tile, trackText, i * 200, i); } } gameInitialize(); ;
===================================================================
--- original.js
+++ change.js
@@ -262,18 +262,8 @@
}
};
return self;
});
-/*
-var testGate = new Gate();
-var newScale = 1;
-testGate.scaleX = newScale;
-testGate.scaleY = newScale;
-testGate.boundingBox.scaleX = newScale;
-testGate.boundingBox.scaleY = newScale;
-testGate.boundingBox.alpha = 0.3;
-game.addChild(testGate);
-*/
var ConfettiAnim = Container.expand(function () {
var self = Container.call(this);
self.confettiPieces = [];
self.spawnTime = Date.now();
@@ -376,9 +366,9 @@
});
/*
width: 200,
heigh: 100,
- */
+ */
self.gateColor = 0xFFFFFF;
self.gateId = null;
self.updateScale = function (newScale) {
self.boundingBox.scaleX = newScale;
@@ -394,22 +384,32 @@
var self = Container.call(this);
self.gates = [];
self.gateAnimStartTime = Date.now();
self.gateAnimationSpeed = globalSpeed / 1000;
- self.currentSong = songListV3[0];
+ self.currentSong = songListV4[0];
self.songStartTime = Date.now();
self.currentNoteIndex = 0;
self.noteSpawnScale = 0.12;
self.lastGateAngle = null;
self.lastProcessedBeat = -1;
self.spawnGateAtTime = function () {
var beatValue = null;
- if (self.currentNoteIndex < self.currentSong.songBeats.length) {
- beatValue = self.currentSong.songBeats[self.currentNoteIndex].beat;
+ var currentBeat = null;
+ // Find beats with 'b' property for gates
+ while (self.currentNoteIndex < self.currentSong.songBeats.length) {
+ var beat = self.currentSong.songBeats[self.currentNoteIndex];
+ if (beat.b !== undefined) {
+ currentBeat = beat;
+ beatValue = beat.b;
+ break;
+ }
+ self.currentNoteIndex++;
}
+ if (!currentBeat) {
+ return; // No more gate beats
+ }
var keyNumber = parseInt(beatValue, 10) || 1;
var noteKey = 'Key' + keyNumber;
- var keyColor = keyColorMap[noteKey] || currentColor;
var startScale = self.noteSpawnScale;
var endScale = 1.0;
var speed = self.gateAnimationSpeed;
var timeToReachPlayer = Math.log(endScale / startScale) / speed;
@@ -428,9 +428,9 @@
if (allAngles[i] !== beatAngle) {
gateAngles.push(allAngles[i]);
}
}
- var beatTime = self.currentSong.songBeats[self.currentNoteIndex].time;
+ var beatTime = currentBeat.t;
var now = Date.now();
var songElapsed = now - self.songStartTime;
var spawnTime = beatTime - timeToReachPlayer;
// Spawn gates
@@ -472,18 +472,32 @@
return;
}
var now = Date.now();
var songElapsed = now - self.songStartTime;
- if (self.currentNoteIndex < self.currentSong.songBeats.length) {
+ // Look for next gate beat (with 'b' property)
+ var foundGateBeat = false;
+ while (self.currentNoteIndex < self.currentSong.songBeats.length) {
var nextBeat = self.currentSong.songBeats[self.currentNoteIndex];
- if (songElapsed >= nextBeat.time) {
- if (now - lastBeatTime >= skipBeatDelay) {
- self.spawnGateAtTime();
- lastBeatTime = now;
+ if (nextBeat.b !== undefined) {
+ // Found a gate beat
+ if (songElapsed >= nextBeat.t) {
+ if (now - lastBeatTime >= skipBeatDelay) {
+ self.spawnGateAtTime();
+ lastBeatTime = now;
+ }
+ } else {
+ // Not time yet for this beat
+ break;
}
- self.currentNoteIndex++;
+ foundGateBeat = true;
+ break;
}
+ self.currentNoteIndex++;
}
+ if (!foundGateBeat && self.currentNoteIndex < self.currentSong.songBeats.length) {
+ // Continue incrementing if we haven't found a gate beat
+ self.currentNoteIndex++;
+ }
for (var i = self.gates.length - 1; i >= 0; i--) {
var gate = self.gates[i];
var currentScale = gate.boundingBox.scaleX;
var newScale = currentScale + self.gateAnimationSpeed * currentScale;
@@ -1410,9 +1424,9 @@
var self = Container.call(this);
self.speakers = [];
self.lastBeatTime = 0;
self.beatCooldown = 200;
- self.speakerSongData = speakersBeat[0];
+ self.speakerSongData = songListV4[0];
self.currentBeatIndex = 0;
self.songStartTime = 0;
// Define speakerPositions in class scope so it's accessible in update method
var speakerPositions = [{
@@ -1536,17 +1550,36 @@
return;
}
var now = Date.now();
var songElapsed = now - self.songStartTime;
- if (self.currentBeatIndex < self.speakerSongData.songBeats.length) {
+ // Look for next speaker beat (with 's' property)
+ var foundSpeakerBeat = false;
+ while (self.currentBeatIndex < self.speakerSongData.songBeats.length) {
var nextBeat = self.speakerSongData.songBeats[self.currentBeatIndex];
- if (songElapsed >= nextBeat.time) {
- self.onBeat(nextBeat.beat);
- self.currentBeatIndex++;
+ if (nextBeat.s !== undefined) {
+ // Found a speaker beat
+ if (songElapsed >= nextBeat.t) {
+ self.onBeat(nextBeat.s);
+ }
+ foundSpeakerBeat = true;
+ break;
}
- } else {
- var lastBeatTime = self.speakerSongData.songBeats[self.speakerSongData.songBeats.length - 1].time;
- if (songElapsed > lastBeatTime + 5000) {
+ self.currentBeatIndex++;
+ }
+ if (foundSpeakerBeat) {
+ self.currentBeatIndex++;
+ }
+ // Check if song should restart
+ if (self.currentBeatIndex >= self.speakerSongData.songBeats.length) {
+ var lastBeatWithS = null;
+ // Find last beat with 's' property
+ for (var i = self.speakerSongData.songBeats.length - 1; i >= 0; i--) {
+ if (self.speakerSongData.songBeats[i].s !== undefined) {
+ lastBeatWithS = self.speakerSongData.songBeats[i];
+ break;
+ }
+ }
+ if (lastBeatWithS && songElapsed > lastBeatWithS.t + 5000) {
self.songStartTime = Date.now();
self.currentBeatIndex = 0;
}
}
@@ -1729,25 +1762,8 @@
****/
var centerX = 1024;
var centerY = 1366;
var neonColors = [0x39FF14, 0xFF073A, 0x00FFFF, 0xF3F315, 0xFF61F6, 0xFF9900];
-var keyColorMap = {
- 'Key0': 0x39FF14,
- 'Key1': 0xFF073A,
- 'Key2': 0x00FFFF,
- 'Key3': 0xF3F315,
- 'Key4': 0xFF61F6,
- 'Key5': 0xFF9900,
- 'Key6': 0x39FF14,
- 'Key7': 0xFF073A,
- 'Key8': 0x00FFFF,
- 'Key9': 0xF3F315,
- 'Key10': 0xFF61F6,
- 'Key11': 0xFF9900,
- 'Key12': 0x39FF14,
- 'Key13': 0xFF073A,
- 'Key14': 0x00FFFF
-};
var currentColor = neonColors[Math.floor(Math.random() * neonColors.length)];
function drawPolygon(coordinates, tint) {
log("drawPolygon ", coordinates);
var lines = [];
@@ -1817,561 +1833,67 @@
console.log(arguments);
}
}
var songTracks = ["track_01", "track_02", "track_03"];
-var songListV3 = [{
+var songListV4 = [{
"name": "Words Fly Fast",
"duration": 156000,
- // Real 157240,
"songBeats": [{
- "time": 651,
- "beat": "1"
+ "t": 128,
+ "s": "1"
}, {
- "time": 1256,
- "beat": "1"
+ "t": 443,
+ "s": "1"
}, {
- "time": 1800,
- "beat": "1"
+ "t": 651,
+ "b": "1"
}, {
- "time": 2364,
- "beat": "1"
+ "t": 1256,
+ "b": "1"
+ }]
+}, {
+ "name": "Freedom",
+ "duration": 153600,
+ "songBeats": [{
+ "t": 0,
+ "s": "3"
}, {
- "time": 2828,
- "beat": "1"
+ "t": 315,
+ "s": "3"
}, {
- "time": 3324,
- "beat": "1"
+ "t": 3218,
+ "b": "1"
}, {
- "time": 3708,
- "beat": "1"
+ "t": 3522,
+ "b": "1"
+ }]
+}, {
+ "name": "Stranger in the Storm",
+ "duration": 170760,
+ "songBeats": [{
+ "t": 165,
+ "s": "1"
}, {
- "time": 4192,
- "beat": "2"
+ "t": 469,
+ "s": "1"
}, {
- "time": 4804,
- "beat": "2"
+ "t": 582,
+ "b": "0"
}, {
- "time": 5320,
- "beat": "2"
- }, {
- "time": 5796,
- "beat": "2"
- }, {
- "time": 6240,
- "beat": "2"
- }, {
- "time": 6692,
- "beat": "2"
- }, {
- "time": 7176,
- "beat": "2"
- }, {
- "time": 7640,
- "beat": "2"
- }, {
- "time": 8092,
+ "t": 1286,
+ "b": "0"
+ }]
+}];
+var songListV3 = [{
+ "name": "Words Fly Fast",
+ "duration": 156000,
+ // Real 157240,
+ "songBeats": [{
+ "time": 651,
"beat": "1"
}, {
- "time": 8576,
- "beat": "2"
- }, {
- "time": 9124,
+ "time": 1256,
"beat": "1"
- }, {
- "time": 9580,
- "beat": "2"
- }, {
- "time": 10084,
- "beat": "1"
- }, {
- "time": 10548,
- "beat": "2"
- }, {
- "time": 11072,
- "beat": "1"
- }, {
- "time": 11556,
- "beat": "2"
- }, {
- "time": 12092,
- "beat": "1"
- }, {
- "time": 12564,
- "beat": "2"
- }, {
- "time": 13008,
- "beat": "1"
- }, {
- "time": 13400,
- "beat": "2"
- }, {
- "time": 13916,
- "beat": "1"
- }, {
- "time": 14460,
- "beat": "2"
- }, {
- "time": 14944,
- "beat": "1"
- }, {
- "time": 15360,
- "beat": "2"
- }, {
- "time": 17340,
- "beat": "1"
- }, {
- "time": 18260,
- "beat": "2"
- }, {
- "time": 19196,
- "beat": "1"
- }, {
- "time": 20064,
- "beat": "2"
- }, {
- "time": 21092,
- "beat": "1"
- }, {
- "time": 22072,
- "beat": "2"
- }, {
- "time": 23100,
- "beat": "1"
- }, {
- "time": 24040,
- "beat": "2"
- }, {
- "time": 24988,
- "beat": "1"
- }, {
- "time": 25884,
- "beat": "2"
- }, {
- "time": 26876,
- "beat": "1"
- }, {
- "time": 27892,
- "beat": "2"
- }, {
- "time": 28820,
- "beat": "1"
- }, {
- "time": 29688,
- "beat": "2"
- }, {
- "time": 30728,
- "beat": "1"
- }, {
- "time": 31696,
- "beat": "2"
- }, {
- "time": 32656,
- "beat": "1"
- }, {
- "time": 33624,
- "beat": "2"
- }, {
- "time": 34673,
- "beat": "1"
- }, {
- "time": 35692,
- "beat": "2"
- }, {
- "time": 36628,
- "beat": "1"
- }, {
- "time": 37536,
- "beat": "2"
- }, {
- "time": 38516,
- "beat": "1"
- }, {
- "time": 39372,
- "beat": "2"
- }, {
- "time": 40524,
- "beat": "1"
- }, {
- "time": 41028,
- "beat": "1"
- }, {
- "time": 43080,
- "beat": "2"
- }, {
- "time": 43564,
- "beat": "2"
- }, {
- "time": 44400,
- "beat": "1"
- }, {
- "time": 44948,
- "beat": "1"
- }, {
- "time": 46888,
- "beat": "2"
- }, {
- "time": 47412,
- "beat": "2"
- }, {
- "time": 48260,
- "beat": "1"
- }, {
- "time": 48818,
- "beat": "1"
- }, {
- "time": 50816,
- "beat": "2"
- }, {
- "time": 51524,
- "beat": "2"
- }, {
- "time": 52168,
- "beat": "1"
- }, {
- "time": 52684,
- "beat": "1"
- }, {
- "time": 54540,
- "beat": "3"
- }, {
- "time": 55488,
- "beat": "3"
- }, {
- "time": 56448,
- "beat": "3"
- }, {
- "time": 57436,
- "beat": "3"
- }, {
- "time": 58412,
- "beat": "1"
- }, {
- "time": 59240,
- "beat": "2"
- }, {
- "time": 59988,
- "beat": "1"
- }, {
- "time": 60808,
- "beat": "2"
- }, {
- "time": 61636,
- "beat": "1"
- }, {
- "time": 63800,
- "beat": "1"
- }, {
- "time": 64688,
- "beat": "2"
- }, {
- "time": 65656,
- "beat": "1"
- }, {
- "time": 66544,
- "beat": "2"
- }, {
- "time": 67492,
- "beat": "1"
- }, {
- "time": 68432,
- "beat": "2"
- }, {
- "time": 69369,
- "beat": "1"
- }, {
- "time": 70336,
- "beat": "2"
- }, {
- "time": 71416,
- "beat": "1"
- }, {
- "time": 72324,
- "beat": "2"
- }, {
- "time": 73408,
- "beat": "1"
- }, {
- "time": 74316,
- "beat": "2"
- }, {
- "time": 75276,
- "beat": "1"
- }, {
- "time": 76204,
- "beat": "2"
- }, {
- "time": 77248,
- "beat": "2"
- }, {
- "time": 78232,
- "beat": "1"
- }, {
- "time": 79168,
- "beat": "2"
- }, {
- "time": 81048,
- "beat": "1"
- }, {
- "time": 81996,
- "beat": "2"
- }, {
- "time": 83096,
- "beat": "1"
- }, {
- "time": 84064,
- "beat": "2"
- }, {
- "time": 85040,
- "beat": "1"
- }, {
- "time": 86008,
- "beat": "2"
- }, {
- "time": 86956,
- "beat": "1"
- }, {
- "time": 87976,
- "beat": "2"
- }, {
- "time": 88832,
- "beat": "1"
- }, {
- "time": 89844,
- "beat": "2"
- }, {
- "time": 90832,
- "beat": "1"
- }, {
- "time": 92672,
- "beat": "3"
- }, {
- "time": 93156,
- "beat": "3"
- }, {
- "time": 93720,
- "beat": "3"
- }, {
- "time": 94329,
- "beat": "3"
- }, {
- "time": 94812,
- "beat": "3"
- }, {
- "time": 95256,
- "beat": "3"
- }, {
- "time": 95720,
- "beat": "1"
- }, {
- "time": 96496,
- "beat": "2"
- }, {
- "time": 97556,
- "beat": "3"
- }, {
- "time": 98112,
- "beat": "3"
- }, {
- "time": 98624,
- "beat": "3"
- }, {
- "time": 99100,
- "beat": "3"
- }, {
- "time": 99604,
- "beat": "1"
- }, {
- "time": 100440,
- "beat": "2"
- }, {
- "time": 101420,
- "beat": "1"
- }, {
- "time": 102388,
- "beat": "2"
- }, {
- "time": 103336,
- "beat": "1"
- }, {
- "time": 104324,
- "beat": "2"
- }, {
- "time": 105172,
- "beat": "1"
- }, {
- "time": 106260,
- "beat": "3"
- }, {
- "time": 106836,
- "beat": "3"
- }, {
- "time": 107392,
- "beat": "3"
- }, {
- "time": 108028,
- "beat": "2"
- }, {
- "time": 108692,
- "beat": "1"
- }, {
- "time": 109540,
- "beat": "2"
- }, {
- "time": 110488,
- "beat": "1"
- }, {
- "time": 111932,
- "beat": "2"
- }, {
- "time": 112888,
- "beat": "1"
- }, {
- "time": 113796,
- "beat": "2"
- }, {
- "time": 114864,
- "beat": "1"
- }, {
- "time": 115904,
- "beat": "2"
- }, {
- "time": 116864,
- "beat": "2"
- }, {
- "time": 117792,
- "beat": "1"
- }, {
- "time": 119184,
- "beat": "2"
- }, {
- "time": 120244,
- "beat": "1"
- }, {
- "time": 121112,
- "beat": "2"
- }, {
- "time": 122121,
- "beat": "3"
- }, {
- "time": 122744,
- "beat": "3"
- }, {
- "time": 123260,
- "beat": "3"
- }, {
- "time": 123784,
- "beat": "3"
- }, {
- "time": 124217,
- "beat": "3"
- }, {
- "time": 125620,
- "beat": "1"
- }, {
- "time": 126668,
- "beat": "2"
- }, {
- "time": 127788,
- "beat": "1"
- }, {
- "time": 128796,
- "beat": "2"
- }, {
- "time": 129716,
- "beat": "1"
- }, {
- "time": 130884,
- "beat": "2"
- }, {
- "time": 131936,
- "beat": "1"
- }, {
- "time": 132932,
- "beat": "2"
- }, {
- "time": 134092,
- "beat": "1"
- }, {
- "time": 135124,
- "beat": "2"
- }, {
- "time": 136160,
- "beat": "1"
- }, {
- "time": 137128,
- "beat": "2"
- }, {
- "time": 139693,
- "beat": "3"
- }, {
- "time": 140208,
- "beat": "3"
- }, {
- "time": 140712,
- "beat": "3"
- }, {
- "time": 141216,
- "beat": "3"
- }, {
- "time": 141700,
- "beat": "3"
- }, {
- "time": 142164,
- "beat": "3"
- }, {
- "time": 142668,
- "beat": "3"
- }, {
- "time": 143164,
- "beat": "3"
- }, {
- "time": 143668,
- "beat": "1"
- }, {
- "time": 144484,
- "beat": "2"
- }, {
- "time": 145412,
- "beat": "1"
- }, {
- "time": 146340,
- "beat": "2"
- }, {
- "time": 147708,
- "beat": "3"
- }, {
- "time": 148304,
- "beat": "3"
- }, {
- "time": 148820,
- "beat": "3"
- }, {
- "time": 149312,
- "beat": "3"
- }, {
- "time": 149908,
- "beat": "1"
- }, {
- "time": 150804,
- "beat": "2"
- }, {
- "time": 151784,
- "beat": "3"
- }, {
- "time": 152328,
- "beat": "3"
- }, {
- "time": 152832,
- "beat": "3"
- }, {
- "time": 153236,
- "beat": "3"
- }, {
- "time": 153680,
- "beat": "1"
- }, {
- "time": 154518,
- "beat": "2"
}]
}, {
"name": "Freedom",
"duration": 153600,
@@ -2380,863 +1902,8 @@
"beat": "1"
}, {
"time": 3522,
"beat": "1"
- }, {
- "time": 4358,
- "beat": "2"
- }, {
- "time": 4661,
- "beat": "2"
- }, {
- "time": 5378,
- "beat": "1"
- }, {
- "time": 5682,
- "beat": "1"
- }, {
- "time": 5980,
- "beat": "1"
- }, {
- "time": 6557,
- "beat": "2"
- }, {
- "time": 6862,
- "beat": "2"
- }, {
- "time": 7166,
- "beat": "2"
- }, {
- "time": 7670,
- "beat": "1"
- }, {
- "time": 7974,
- "beat": "1"
- }, {
- "time": 8271,
- "beat": "1"
- }, {
- "time": 8719,
- "beat": "2"
- }, {
- "time": 9023,
- "beat": "2"
- }, {
- "time": 9322,
- "beat": "2"
- }, {
- "time": 9926,
- "beat": "0"
- }, {
- "time": 10234,
- "beat": "0"
- }, {
- "time": 11037,
- "beat": "2"
- }, {
- "time": 11341,
- "beat": "2"
- }, {
- "time": 11741,
- "beat": "1"
- }, {
- "time": 12044,
- "beat": "1"
- }, {
- "time": 12278,
- "beat": "2"
- }, {
- "time": 12578,
- "beat": "2"
- }, {
- "time": 12842,
- "beat": "1"
- }, {
- "time": 13155,
- "beat": "1"
- }, {
- "time": 13438,
- "beat": "2"
- }, {
- "time": 13744,
- "beat": "2"
- }, {
- "time": 13982,
- "beat": "1"
- }, {
- "time": 14289,
- "beat": "1"
- }, {
- "time": 14569,
- "beat": "2"
- }, {
- "time": 14875,
- "beat": "2"
- }, {
- "time": 15233,
- "beat": "1"
- }, {
- "time": 15544,
- "beat": "1"
- }, {
- "time": 15789,
- "beat": "2"
- }, {
- "time": 16099,
- "beat": "2"
- }, {
- "time": 16340,
- "beat": "1"
- }, {
- "time": 16641,
- "beat": "1"
- }, {
- "time": 16881,
- "beat": "2"
- }, {
- "time": 17186,
- "beat": "2"
- }, {
- "time": 17921,
- "beat": "1"
- }, {
- "time": 18193,
- "beat": "1"
- }, {
- "time": 18447,
- "beat": "1"
- }, {
- "time": 18697,
- "beat": "1"
- }, {
- "time": 19007,
- "beat": "1"
- }, {
- "time": 19738,
- "beat": "2"
- }, {
- "time": 20045,
- "beat": "2"
- }, {
- "time": 20340,
- "beat": "2"
- }, {
- "time": 21321,
- "beat": "2"
- }, {
- "time": 21623,
- "beat": "2"
- }, {
- "time": 21934,
- "beat": "2"
- }, {
- "time": 22223,
- "beat": "2"
- }, {
- "time": 23453,
- "beat": "2"
- }, {
- "time": 23767,
- "beat": "2"
- }, {
- "time": 24057,
- "beat": "2"
- }, {
- "time": 26197,
- "beat": "1"
- }, {
- "time": 26507,
- "beat": "1"
- }, {
- "time": 27085,
- "beat": "1"
- }, {
- "time": 27387,
- "beat": "1"
- }, {
- "time": 27698,
- "beat": "1"
- }, {
- "time": 28473,
- "beat": "3"
- }, {
- "time": 29066,
- "beat": "3"
- }, {
- "time": 29658,
- "beat": "3"
- }, {
- "time": 30197,
- "beat": "3"
- }, {
- "time": 30770,
- "beat": "3"
- }, {
- "time": 31071,
- "beat": "3"
- }, {
- "time": 31285,
- "beat": "2"
- }, {
- "time": 31596,
- "beat": "2"
- }, {
- "time": 32062,
- "beat": "1"
- }, {
- "time": 32367,
- "beat": "1"
- }, {
- "time": 32663,
- "beat": "1"
- }, {
- "time": 33129,
- "beat": "2"
- }, {
- "time": 33430,
- "beat": "2"
- }, {
- "time": 33736,
- "beat": "2"
- }, {
- "time": 34190,
- "beat": "1"
- }, {
- "time": 34491,
- "beat": "1"
- }, {
- "time": 34798,
- "beat": "1"
- }, {
- "time": 35218,
- "beat": "2"
- }, {
- "time": 35520,
- "beat": "2"
- }, {
- "time": 35829,
- "beat": "2"
- }, {
- "time": 36417,
- "beat": "3"
- }, {
- "time": 36731,
- "beat": "3"
- }, {
- "time": 37021,
- "beat": "3"
- }, {
- "time": 37337,
- "beat": "3"
- }, {
- "time": 38194,
- "beat": "1"
- }, {
- "time": 38504,
- "beat": "1"
- }, {
- "time": 39194,
- "beat": "2"
- }, {
- "time": 39509,
- "beat": "2"
- }, {
- "time": 40170,
- "beat": "1"
- }, {
- "time": 40471,
- "beat": "1"
- }, {
- "time": 41241,
- "beat": "2"
- }, {
- "time": 41551,
- "beat": "2"
- }, {
- "time": 42277,
- "beat": "1"
- }, {
- "time": 42583,
- "beat": "1"
- }, {
- "time": 42878,
- "beat": "1"
- }, {
- "time": 43417,
- "beat": "2"
- }, {
- "time": 43731,
- "beat": "2"
- }, {
- "time": 44029,
- "beat": "2"
- }, {
- "time": 45454,
- "beat": "3"
- }, {
- "time": 45917,
- "beat": "3"
- }, {
- "time": 46223,
- "beat": "3"
- }, {
- "time": 46429,
- "beat": "3"
- }, {
- "time": 46735,
- "beat": "3"
- }, {
- "time": 47197,
- "beat": "2"
- }, {
- "time": 47509,
- "beat": "2"
- }, {
- "time": 47803,
- "beat": "2"
- }, {
- "time": 49050,
- "beat": "1"
- }, {
- "time": 49354,
- "beat": "1"
- }, {
- "time": 49660,
- "beat": "1"
- }, {
- "time": 51274,
- "beat": "2"
- }, {
- "time": 51574,
- "beat": "2"
- }, {
- "time": 51885,
- "beat": "2"
- }, {
- "time": 53692,
- "beat": "1"
- }, {
- "time": 53995,
- "beat": "1"
- }, {
- "time": 54293,
- "beat": "1"
- }, {
- "time": 54600,
- "beat": "1"
- }, {
- "time": 54893,
- "beat": "1"
- }, {
- "time": 56858,
- "beat": "0"
- }, {
- "time": 57361,
- "beat": "0"
- }, {
- "time": 57969,
- "beat": "0"
- }, {
- "time": 58489,
- "beat": "0"
- }, {
- "time": 58986,
- "beat": "2"
- }, {
- "time": 59290,
- "beat": "2"
- }, {
- "time": 60113,
- "beat": "1"
- }, {
- "time": 60416,
- "beat": "1"
- }, {
- "time": 61138,
- "beat": "2"
- }, {
- "time": 61438,
- "beat": "2"
- }, {
- "time": 61741,
- "beat": "2"
- }, {
- "time": 62366,
- "beat": "1"
- }, {
- "time": 62675,
- "beat": "1"
- }, {
- "time": 63453,
- "beat": "2"
- }, {
- "time": 63756,
- "beat": "2"
- }, {
- "time": 64141,
- "beat": "3"
- }, {
- "time": 64745,
- "beat": "3"
- }, {
- "time": 65057,
- "beat": "3"
- }, {
- "time": 65833,
- "beat": "1"
- }, {
- "time": 66138,
- "beat": "1"
- }, {
- "time": 66994,
- "beat": "2"
- }, {
- "time": 67298,
- "beat": "2"
- }, {
- "time": 68093,
- "beat": "1"
- }, {
- "time": 68399,
- "beat": "1"
- }, {
- "time": 69121,
- "beat": "2"
- }, {
- "time": 69426,
- "beat": "2"
- }, {
- "time": 70138,
- "beat": "1"
- }, {
- "time": 70439,
- "beat": "1"
- }, {
- "time": 70746,
- "beat": "1"
- }, {
- "time": 71342,
- "beat": "2"
- }, {
- "time": 71653,
- "beat": "2"
- }, {
- "time": 73313,
- "beat": "3"
- }, {
- "time": 73857,
- "beat": "3"
- }, {
- "time": 74174,
- "beat": "3"
- }, {
- "time": 75786,
- "beat": "1"
- }, {
- "time": 76088,
- "beat": "1"
- }, {
- "time": 76396,
- "beat": "1"
- }, {
- "time": 77390,
- "beat": "2"
- }, {
- "time": 77692,
- "beat": "2"
- }, {
- "time": 77998,
- "beat": "2"
- }, {
- "time": 78977,
- "beat": "1"
- }, {
- "time": 79281,
- "beat": "1"
- }, {
- "time": 79590,
- "beat": "1"
- }, {
- "time": 80665,
- "beat": "2"
- }, {
- "time": 80975,
- "beat": "2"
- }, {
- "time": 82473,
- "beat": "1"
- }, {
- "time": 82782,
- "beat": "1"
- }, {
- "time": 83190,
- "beat": "2"
- }, {
- "time": 83499,
- "beat": "2"
- }, {
- "time": 83937,
- "beat": "3"
- }, {
- "time": 85038,
- "beat": "3"
- }, {
- "time": 85341,
- "beat": "3"
- }, {
- "time": 85953,
- "beat": "1"
- }, {
- "time": 86263,
- "beat": "1"
- }, {
- "time": 87086,
- "beat": "2"
- }, {
- "time": 87391,
- "beat": "2"
- }, {
- "time": 88123,
- "beat": "1"
- }, {
- "time": 88424,
- "beat": "1"
- }, {
- "time": 89153,
- "beat": "2"
- }, {
- "time": 89457,
- "beat": "2"
- }, {
- "time": 89766,
- "beat": "2"
- }, {
- "time": 90221,
- "beat": "1"
- }, {
- "time": 90524,
- "beat": "1"
- }, {
- "time": 91150,
- "beat": "3"
- }, {
- "time": 91451,
- "beat": "3"
- }, {
- "time": 91826,
- "beat": "3"
- }, {
- "time": 92136,
- "beat": "3"
- }, {
- "time": 93077,
- "beat": "1"
- }, {
- "time": 93386,
- "beat": "1"
- }, {
- "time": 94166,
- "beat": "2"
- }, {
- "time": 94480,
- "beat": "2"
- }, {
- "time": 95386,
- "beat": "1"
- }, {
- "time": 95686,
- "beat": "1"
- }, {
- "time": 96617,
- "beat": "2"
- }, {
- "time": 96926,
- "beat": "2"
- }, {
- "time": 97798,
- "beat": "1"
- }, {
- "time": 98103,
- "beat": "1"
- }, {
- "time": 98938,
- "beat": "2"
- }, {
- "time": 99246,
- "beat": "2"
- }, {
- "time": 99544,
- "beat": "2"
- }, {
- "time": 100077,
- "beat": "1"
- }, {
- "time": 100382,
- "beat": "1"
- }, {
- "time": 100680,
- "beat": "1"
- }, {
- "time": 101145,
- "beat": "2"
- }, {
- "time": 101447,
- "beat": "2"
- }, {
- "time": 101747,
- "beat": "2"
- }, {
- "time": 102325,
- "beat": "3"
- }, {
- "time": 102628,
- "beat": "3"
- }, {
- "time": 103481,
- "beat": "3"
- }, {
- "time": 103782,
- "beat": "3"
- }, {
- "time": 104854,
- "beat": "3"
- }, {
- "time": 105166,
- "beat": "3"
- }, {
- "time": 106094,
- "beat": "3"
- }, {
- "time": 106401,
- "beat": "3"
- }, {
- "time": 107266,
- "beat": "3"
- }, {
- "time": 107569,
- "beat": "3"
- }, {
- "time": 108506,
- "beat": "3"
- }, {
- "time": 108809,
- "beat": "3"
- }, {
- "time": 110938,
- "beat": "1"
- }, {
- "time": 111241,
- "beat": "1"
- }, {
- "time": 112218,
- "beat": "2"
- }, {
- "time": 112521,
- "beat": "2"
- }, {
- "time": 112823,
- "beat": "2"
- }, {
- "time": 113621,
- "beat": "1"
- }, {
- "time": 113930,
- "beat": "1"
- }, {
- "time": 114881,
- "beat": "2"
- }, {
- "time": 115191,
- "beat": "2"
- }, {
- "time": 115490,
- "beat": "2"
- }, {
- "time": 115989,
- "beat": "1"
- }, {
- "time": 116291,
- "beat": "1"
- }, {
- "time": 116596,
- "beat": "1"
- }, {
- "time": 117138,
- "beat": "2"
- }, {
- "time": 117447,
- "beat": "2"
- }, {
- "time": 117740,
- "beat": "2"
- }, {
- "time": 118830,
- "beat": "3"
- }, {
- "time": 119132,
- "beat": "3"
- }, {
- "time": 119449,
- "beat": "3"
- }, {
- "time": 119756,
- "beat": "3"
- }, {
- "time": 120885,
- "beat": "1"
- }, {
- "time": 121192,
- "beat": "1"
- }, {
- "time": 122073,
- "beat": "2"
- }, {
- "time": 122374,
- "beat": "2"
- }, {
- "time": 123157,
- "beat": "1"
- }, {
- "time": 123460,
- "beat": "1"
- }, {
- "time": 124402,
- "beat": "2"
- }, {
- "time": 124708,
- "beat": "2"
- }, {
- "time": 125533,
- "beat": "1"
- }, {
- "time": 125834,
- "beat": "1"
- }, {
- "time": 126806,
- "beat": "2"
- }, {
- "time": 127113,
- "beat": "2"
- }, {
- "time": 128186,
- "beat": "3"
- }, {
- "time": 128491,
- "beat": "3"
- }, {
- "time": 128953,
- "beat": "3"
- }, {
- "time": 129255,
- "beat": "3"
- }, {
- "time": 129941,
- "beat": "1"
- }, {
- "time": 130242,
- "beat": "1"
- }, {
- "time": 131093,
- "beat": "2"
- }, {
- "time": 131395,
- "beat": "2"
- }, {
- "time": 131702,
- "beat": "2"
- }, {
- "time": 132305,
- "beat": "1"
- }, {
- "time": 132609,
- "beat": "1"
- }, {
- "time": 133401,
- "beat": "2"
- }, {
- "time": 133706,
- "beat": "2"
- }, {
- "time": 134002,
- "beat": "2"
- }, {
- "time": 134550,
- "beat": "1"
- }, {
- "time": 134856,
- "beat": "1"
- }, {
- "time": 135593,
- "beat": "2"
- }, {
- "time": 135896,
- "beat": "2"
- }, {
- "time": 136206,
- "beat": "2"
- }, {
- "time": 137238,
- "beat": "3"
- }, {
- "time": 137538,
- "beat": "3"
- }, {
- "time": 137881,
- "beat": "3"
- }, {
- "time": 138183,
- "beat": "3"
- }, {
- "time": 138497,
- "beat": "3"
- }, {
- "time": 138802,
- "beat": "3"
- }, {
- "time": 141045,
- "beat": "1"
- }, {
- "time": 141351,
- "beat": "1"
- }, {
- "time": 143062,
- "beat": "2"
- }, {
- "time": 143367,
- "beat": "2"
- }, {
- "time": 144529,
- "beat": "1"
- }, {
- "time": 144833,
- "beat": "1"
- }, {
- "time": 146029,
- "beat": "2"
- }, {
- "time": 146339,
- "beat": "2"
- }, {
- "time": 147346,
- "beat": "1"
- }, {
- "time": 147652,
- "beat": "1"
- }, {
- "time": 147947,
- "beat": "1"
- }, {
- "time": 149938,
- "beat": "3"
- }, {
- "time": 150240,
- "beat": "3"
- }, {
- "time": 150539,
- "beat": "3"
- }, {
- "time": 150849,
- "beat": "3"
}]
}, {
"name": "Stranger in the Storm",
"duration": 170760,
@@ -3245,1016 +1912,8 @@
"beat": "0"
}, {
"time": 1286,
"beat": "0"
- }, {
- "time": 2053,
- "beat": "0"
- }, {
- "time": 2769,
- "beat": "0"
- }, {
- "time": 3093,
- "beat": "0"
- }, {
- "time": 3465,
- "beat": "0"
- }, {
- "time": 4194,
- "beat": "0"
- }, {
- "time": 4929,
- "beat": "0"
- }, {
- "time": 5501,
- "beat": "0"
- }, {
- "time": 6141,
- "beat": "1"
- }, {
- "time": 6845,
- "beat": "2"
- }, {
- "time": 7462,
- "beat": "1"
- }, {
- "time": 8149,
- "beat": "2"
- }, {
- "time": 8456,
- "beat": "2"
- }, {
- "time": 8954,
- "beat": "1"
- }, {
- "time": 9662,
- "beat": "2"
- }, {
- "time": 10285,
- "beat": "1"
- }, {
- "time": 10921,
- "beat": "2"
- }, {
- "time": 11235,
- "beat": "2"
- }, {
- "time": 11577,
- "beat": "1"
- }, {
- "time": 12373,
- "beat": "2"
- }, {
- "time": 13098,
- "beat": "1"
- }, {
- "time": 13398,
- "beat": "1"
- }, {
- "time": 13737,
- "beat": "2"
- }, {
- "time": 14050,
- "beat": "2"
- }, {
- "time": 14521,
- "beat": "1"
- }, {
- "time": 14837,
- "beat": "1"
- }, {
- "time": 15269,
- "beat": "2"
- }, {
- "time": 15593,
- "beat": "2"
- }, {
- "time": 15925,
- "beat": "1"
- }, {
- "time": 16248,
- "beat": "1"
- }, {
- "time": 16945,
- "beat": "3"
- }, {
- "time": 17254,
- "beat": "3"
- }, {
- "time": 17682,
- "beat": "3"
- }, {
- "time": 17996,
- "beat": "3"
- }, {
- "time": 18422,
- "beat": "3"
- }, {
- "time": 18734,
- "beat": "3"
- }, {
- "time": 19213,
- "beat": "3"
- }, {
- "time": 19515,
- "beat": "3"
- }, {
- "time": 20414,
- "beat": "1"
- }, {
- "time": 21101,
- "beat": "2"
- }, {
- "time": 21412,
- "beat": "2"
- }, {
- "time": 21765,
- "beat": "1"
- }, {
- "time": 22402,
- "beat": "2"
- }, {
- "time": 22702,
- "beat": "2"
- }, {
- "time": 23321,
- "beat": "3"
- }, {
- "time": 24065,
- "beat": "3"
- }, {
- "time": 24366,
- "beat": "3"
- }, {
- "time": 24814,
- "beat": "3"
- }, {
- "time": 25123,
- "beat": "3"
- }, {
- "time": 25589,
- "beat": "3"
- }, {
- "time": 25899,
- "beat": "3"
- }, {
- "time": 26265,
- "beat": "1"
- }, {
- "time": 26901,
- "beat": "2"
- }, {
- "time": 27207,
- "beat": "2"
- }, {
- "time": 27585,
- "beat": "1"
- }, {
- "time": 28285,
- "beat": "2"
- }, {
- "time": 29001,
- "beat": "1"
- }, {
- "time": 29606,
- "beat": "2"
- }, {
- "time": 29908,
- "beat": "2"
- }, {
- "time": 30310,
- "beat": "1"
- }, {
- "time": 30621,
- "beat": "1"
- }, {
- "time": 31057,
- "beat": "2"
- }, {
- "time": 31366,
- "beat": "2"
- }, {
- "time": 31825,
- "beat": "1"
- }, {
- "time": 32141,
- "beat": "1"
- }, {
- "time": 32541,
- "beat": "2"
- }, {
- "time": 32850,
- "beat": "2"
- }, {
- "time": 33197,
- "beat": "1"
- }, {
- "time": 33499,
- "beat": "1"
- }, {
- "time": 33941,
- "beat": "2"
- }, {
- "time": 34248,
- "beat": "2"
- }, {
- "time": 34537,
- "beat": "1"
- }, {
- "time": 34850,
- "beat": "1"
- }, {
- "time": 35201,
- "beat": "2"
- }, {
- "time": 35525,
- "beat": "2"
- }, {
- "time": 35881,
- "beat": "1"
- }, {
- "time": 36194,
- "beat": "1"
- }, {
- "time": 36526,
- "beat": "2"
- }, {
- "time": 36839,
- "beat": "2"
- }, {
- "time": 37282,
- "beat": "1"
- }, {
- "time": 37905,
- "beat": "2"
- }, {
- "time": 38207,
- "beat": "2"
- }, {
- "time": 38645,
- "beat": "1"
- }, {
- "time": 38949,
- "beat": "1"
- }, {
- "time": 39301,
- "beat": "2"
- }, {
- "time": 39602,
- "beat": "2"
- }, {
- "time": 40157,
- "beat": "3"
- }, {
- "time": 40965,
- "beat": "3"
- }, {
- "time": 41721,
- "beat": "3"
- }, {
- "time": 42031,
- "beat": "3"
- }, {
- "time": 42466,
- "beat": "3"
- }, {
- "time": 42790,
- "beat": "3"
- }, {
- "time": 43749,
- "beat": "1"
- }, {
- "time": 44057,
- "beat": "1"
- }, {
- "time": 44533,
- "beat": "2"
- }, {
- "time": 45149,
- "beat": "1"
- }, {
- "time": 45933,
- "beat": "2"
- }, {
- "time": 46247,
- "beat": "2"
- }, {
- "time": 46673,
- "beat": "1"
- }, {
- "time": 47317,
- "beat": "2"
- }, {
- "time": 47631,
- "beat": "2"
- }, {
- "time": 47973,
- "beat": "1"
- }, {
- "time": 49917,
- "beat": "3"
- }, {
- "time": 50621,
- "beat": "3"
- }, {
- "time": 51517,
- "beat": "1"
- }, {
- "time": 52313,
- "beat": "2"
- }, {
- "time": 52630,
- "beat": "2"
- }, {
- "time": 53401,
- "beat": "1"
- }, {
- "time": 53713,
- "beat": "1"
- }, {
- "time": 54382,
- "beat": "2"
- }, {
- "time": 54693,
- "beat": "2"
- }, {
- "time": 55390,
- "beat": "1"
- }, {
- "time": 55693,
- "beat": "1"
- }, {
- "time": 56277,
- "beat": "2"
- }, {
- "time": 56581,
- "beat": "2"
- }, {
- "time": 57186,
- "beat": "1"
- }, {
- "time": 57509,
- "beat": "1"
- }, {
- "time": 58186,
- "beat": "2"
- }, {
- "time": 58488,
- "beat": "2"
- }, {
- "time": 59070,
- "beat": "1"
- }, {
- "time": 59374,
- "beat": "1"
- }, {
- "time": 59990,
- "beat": "2"
- }, {
- "time": 60299,
- "beat": "2"
- }, {
- "time": 60826,
- "beat": "1"
- }, {
- "time": 61135,
- "beat": "1"
- }, {
- "time": 61646,
- "beat": "2"
- }, {
- "time": 61975,
- "beat": "2"
- }, {
- "time": 62774,
- "beat": "3"
- }, {
- "time": 63501,
- "beat": "3"
- }, {
- "time": 64277,
- "beat": "3"
- }, {
- "time": 64584,
- "beat": "3"
- }, {
- "time": 65173,
- "beat": "2"
- }, {
- "time": 65489,
- "beat": "2"
- }, {
- "time": 66053,
- "beat": "2"
- }, {
- "time": 66769,
- "beat": "2"
- }, {
- "time": 67089,
- "beat": "2"
- }, {
- "time": 67513,
- "beat": "2"
- }, {
- "time": 67827,
- "beat": "2"
- }, {
- "time": 68150,
- "beat": "1"
- }, {
- "time": 68452,
- "beat": "1"
- }, {
- "time": 68949,
- "beat": "1"
- }, {
- "time": 69693,
- "beat": "1"
- }, {
- "time": 70701,
- "beat": "0"
- }, {
- "time": 71410,
- "beat": "0"
- }, {
- "time": 72094,
- "beat": "0"
- }, {
- "time": 72397,
- "beat": "0"
- }, {
- "time": 72809,
- "beat": "0"
- }, {
- "time": 73442,
- "beat": "0"
- }, {
- "time": 74093,
- "beat": "1"
- }, {
- "time": 74805,
- "beat": "2"
- }, {
- "time": 75542,
- "beat": "1"
- }, {
- "time": 76321,
- "beat": "2"
- }, {
- "time": 76638,
- "beat": "2"
- }, {
- "time": 77037,
- "beat": "1"
- }, {
- "time": 77342,
- "beat": "1"
- }, {
- "time": 77745,
- "beat": "2"
- }, {
- "time": 78061,
- "beat": "2"
- }, {
- "time": 78442,
- "beat": "1"
- }, {
- "time": 79126,
- "beat": "2"
- }, {
- "time": 79437,
- "beat": "2"
- }, {
- "time": 79773,
- "beat": "1"
- }, {
- "time": 80088,
- "beat": "1"
- }, {
- "time": 80458,
- "beat": "2"
- }, {
- "time": 80773,
- "beat": "2"
- }, {
- "time": 81213,
- "beat": "1"
- }, {
- "time": 81962,
- "beat": "3"
- }, {
- "time": 82689,
- "beat": "3"
- }, {
- "time": 83453,
- "beat": "3"
- }, {
- "time": 84209,
- "beat": "3"
- }, {
- "time": 84510,
- "beat": "3"
- }, {
- "time": 84927,
- "beat": "3"
- }, {
- "time": 85230,
- "beat": "3"
- }, {
- "time": 85630,
- "beat": "3"
- }, {
- "time": 85953,
- "beat": "3"
- }, {
- "time": 87922,
- "beat": "1"
- }, {
- "time": 88629,
- "beat": "2"
- }, {
- "time": 88942,
- "beat": "2"
- }, {
- "time": 89345,
- "beat": "1"
- }, {
- "time": 90061,
- "beat": "2"
- }, {
- "time": 90371,
- "beat": "2"
- }, {
- "time": 90869,
- "beat": "1"
- }, {
- "time": 91473,
- "beat": "2"
- }, {
- "time": 91786,
- "beat": "2"
- }, {
- "time": 92142,
- "beat": "1"
- }, {
- "time": 92452,
- "beat": "1"
- }, {
- "time": 92924,
- "beat": "2"
- }, {
- "time": 93239,
- "beat": "2"
- }, {
- "time": 93853,
- "beat": "3"
- }, {
- "time": 94661,
- "beat": "3"
- }, {
- "time": 95389,
- "beat": "3"
- }, {
- "time": 96185,
- "beat": "3"
- }, {
- "time": 96493,
- "beat": "3"
- }, {
- "time": 97161,
- "beat": "1"
- }, {
- "time": 97853,
- "beat": "2"
- }, {
- "time": 98166,
- "beat": "2"
- }, {
- "time": 98545,
- "beat": "1"
- }, {
- "time": 99273,
- "beat": "2"
- }, {
- "time": 100098,
- "beat": "1"
- }, {
- "time": 100401,
- "beat": "1"
- }, {
- "time": 100805,
- "beat": "2"
- }, {
- "time": 101130,
- "beat": "2"
- }, {
- "time": 101513,
- "beat": "1"
- }, {
- "time": 104422,
- "beat": "3"
- }, {
- "time": 104723,
- "beat": "3"
- }, {
- "time": 105210,
- "beat": "3"
- }, {
- "time": 105519,
- "beat": "3"
- }, {
- "time": 105953,
- "beat": "3"
- }, {
- "time": 106261,
- "beat": "3"
- }, {
- "time": 106714,
- "beat": "3"
- }, {
- "time": 107030,
- "beat": "3"
- }, {
- "time": 107397,
- "beat": "1"
- }, {
- "time": 107701,
- "beat": "1"
- }, {
- "time": 108065,
- "beat": "2"
- }, {
- "time": 108401,
- "beat": "2"
- }, {
- "time": 108709,
- "beat": "1"
- }, {
- "time": 109011,
- "beat": "1"
- }, {
- "time": 109373,
- "beat": "2"
- }, {
- "time": 109707,
- "beat": "2"
- }, {
- "time": 110225,
- "beat": "1"
- }, {
- "time": 110538,
- "beat": "1"
- }, {
- "time": 110901,
- "beat": "2"
- }, {
- "time": 111224,
- "beat": "2"
- }, {
- "time": 111690,
- "beat": "1"
- }, {
- "time": 112325,
- "beat": "2"
- }, {
- "time": 112632,
- "beat": "2"
- }, {
- "time": 113041,
- "beat": "1"
- }, {
- "time": 113375,
- "beat": "1"
- }, {
- "time": 113770,
- "beat": "2"
- }, {
- "time": 114076,
- "beat": "2"
- }, {
- "time": 114453,
- "beat": "1"
- }, {
- "time": 114767,
- "beat": "1"
- }, {
- "time": 115143,
- "beat": "2"
- }, {
- "time": 115452,
- "beat": "2"
- }, {
- "time": 115865,
- "beat": "3"
- }, {
- "time": 116594,
- "beat": "3"
- }, {
- "time": 117298,
- "beat": "3"
- }, {
- "time": 117603,
- "beat": "3"
- }, {
- "time": 118013,
- "beat": "3"
- }, {
- "time": 118761,
- "beat": "3"
- }, {
- "time": 119070,
- "beat": "3"
- }, {
- "time": 119402,
- "beat": "3"
- }, {
- "time": 119706,
- "beat": "3"
- }, {
- "time": 120148,
- "beat": "3"
- }, {
- "time": 120450,
- "beat": "3"
- }, {
- "time": 120813,
- "beat": "3"
- }, {
- "time": 121134,
- "beat": "3"
- }, {
- "time": 121530,
- "beat": "1"
- }, {
- "time": 122370,
- "beat": "1"
- }, {
- "time": 123073,
- "beat": "1"
- }, {
- "time": 123396,
- "beat": "1"
- }, {
- "time": 123742,
- "beat": "1"
- }, {
- "time": 124046,
- "beat": "1"
- }, {
- "time": 124446,
- "beat": "2"
- }, {
- "time": 124774,
- "beat": "2"
- }, {
- "time": 125221,
- "beat": "2"
- }, {
- "time": 125538,
- "beat": "2"
- }, {
- "time": 125869,
- "beat": "2"
- }, {
- "time": 126183,
- "beat": "2"
- }, {
- "time": 126878,
- "beat": "1"
- }, {
- "time": 127713,
- "beat": "2"
- }, {
- "time": 128449,
- "beat": "1"
- }, {
- "time": 129137,
- "beat": "2"
- }, {
- "time": 129444,
- "beat": "2"
- }, {
- "time": 129793,
- "beat": "1"
- }, {
- "time": 130497,
- "beat": "2"
- }, {
- "time": 130809,
- "beat": "2"
- }, {
- "time": 131133,
- "beat": "1"
- }, {
- "time": 131709,
- "beat": "2"
- }, {
- "time": 132030,
- "beat": "2"
- }, {
- "time": 132345,
- "beat": "1"
- }, {
- "time": 133038,
- "beat": "2"
- }, {
- "time": 133348,
- "beat": "2"
- }, {
- "time": 133713,
- "beat": "1"
- }, {
- "time": 134014,
- "beat": "1"
- }, {
- "time": 134450,
- "beat": "2"
- }, {
- "time": 135437,
- "beat": "3"
- }, {
- "time": 136273,
- "beat": "3"
- }, {
- "time": 136961,
- "beat": "3"
- }, {
- "time": 137718,
- "beat": "3"
- }, {
- "time": 138393,
- "beat": "3"
- }, {
- "time": 138957,
- "beat": "1"
- }, {
- "time": 139642,
- "beat": "2"
- }, {
- "time": 140422,
- "beat": "1"
- }, {
- "time": 141077,
- "beat": "2"
- }, {
- "time": 141937,
- "beat": "1"
- }, {
- "time": 142626,
- "beat": "2"
- }, {
- "time": 142937,
- "beat": "2"
- }, {
- "time": 143305,
- "beat": "1"
- }, {
- "time": 143889,
- "beat": "2"
- }, {
- "time": 144202,
- "beat": "2"
- }, {
- "time": 144559,
- "beat": "1"
- }, {
- "time": 145253,
- "beat": "2"
- }, {
- "time": 145564,
- "beat": "2"
- }, {
- "time": 145928,
- "beat": "1"
- }, {
- "time": 146246,
- "beat": "1"
- }, {
- "time": 146667,
- "beat": "2"
- }, {
- "time": 147369,
- "beat": "1"
- }, {
- "time": 147670,
- "beat": "1"
- }, {
- "time": 148018,
- "beat": "2"
- }, {
- "time": 148754,
- "beat": "1"
- }, {
- "time": 149074,
- "beat": "1"
- }, {
- "time": 149369,
- "beat": "2"
- }, {
- "time": 150053,
- "beat": "1"
- }, {
- "time": 150375,
- "beat": "1"
- }, {
- "time": 150761,
- "beat": "2"
- }, {
- "time": 151477,
- "beat": "1"
- }, {
- "time": 151784,
- "beat": "1"
- }, {
- "time": 152202,
- "beat": "2"
- }, {
- "time": 152512,
- "beat": "2"
- }, {
- "time": 152937,
- "beat": "1"
- }, {
- "time": 153665,
- "beat": "3"
- }, {
- "time": 154593,
- "beat": "3"
- }, {
- "time": 155325,
- "beat": "3"
- }, {
- "time": 156097,
- "beat": "3"
- }, {
- "time": 156833,
- "beat": "3"
- }, {
- "time": 158457,
- "beat": "1"
- }, {
- "time": 159133,
- "beat": "2"
- }, {
- "time": 159769,
- "beat": "1"
- }, {
- "time": 160405,
- "beat": "2"
- }, {
- "time": 161086,
- "beat": "1"
- }, {
- "time": 161741,
- "beat": "2"
- }, {
- "time": 162492,
- "beat": "1"
- }, {
- "time": 163141,
- "beat": "2"
- }, {
- "time": 163467,
- "beat": "2"
- }, {
- "time": 163983,
- "beat": "0"
- }, {
- "time": 164578,
- "beat": "0"
- }, {
- "time": 164890,
- "beat": "0"
- }, {
- "time": 165253,
- "beat": "0"
- }, {
- "time": 165905,
- "beat": "1"
- }, {
- "time": 166614,
- "beat": "2"
- }, {
- "time": 166946,
- "beat": "2"
- }, {
- "time": 167349,
- "beat": "0"
- }, {
- "time": 168077,
- "beat": "0"
- }, {
- "time": 168793,
- "beat": "1"
- }, {
- "time": 169107,
- "beat": "1"
- }, {
- "time": 169497,
- "beat": "2"
- }, {
- "time": 169810,
- "beat": "2"
}]
}];
var speakersBeat = [{
"name": "Words Fly Fast",
@@ -4263,1430 +1922,8 @@
"beat": "1"
}, {
"time": 443,
"beat": "1"
- }, {
- "time": 747,
- "beat": "1"
- }, {
- "time": 1232,
- "beat": "1"
- }, {
- "time": 1579,
- "beat": "1"
- }, {
- "time": 1893,
- "beat": "1"
- }, {
- "time": 2224,
- "beat": "1"
- }, {
- "time": 2549,
- "beat": "1"
- }, {
- "time": 2853,
- "beat": "1"
- }, {
- "time": 3269,
- "beat": "1"
- }, {
- "time": 3712,
- "beat": "1"
- }, {
- "time": 4037,
- "beat": "1"
- }, {
- "time": 4352,
- "beat": "1"
- }, {
- "time": 4661,
- "beat": "1"
- }, {
- "time": 5072,
- "beat": "1"
- }, {
- "time": 5392,
- "beat": "1"
- }, {
- "time": 5728,
- "beat": "1"
- }, {
- "time": 6176,
- "beat": "1"
- }, {
- "time": 6587,
- "beat": "1"
- }, {
- "time": 7141,
- "beat": "1"
- }, {
- "time": 7541,
- "beat": "1"
- }, {
- "time": 7856,
- "beat": "1"
- }, {
- "time": 8171,
- "beat": "3"
- }, {
- "time": 8501,
- "beat": "2"
- }, {
- "time": 8816,
- "beat": "2"
- }, {
- "time": 9120,
- "beat": "3"
- }, {
- "time": 9424,
- "beat": "2"
- }, {
- "time": 9728,
- "beat": "2"
- }, {
- "time": 10032,
- "beat": "3"
- }, {
- "time": 10347,
- "beat": "2"
- }, {
- "time": 10651,
- "beat": "1"
- }, {
- "time": 10971,
- "beat": "2"
- }, {
- "time": 11275,
- "beat": "2"
- }, {
- "time": 11600,
- "beat": "2"
- }, {
- "time": 11915,
- "beat": "1"
- }, {
- "time": 12240,
- "beat": "2"
- }, {
- "time": 12560,
- "beat": "3"
- }, {
- "time": 12875,
- "beat": "2"
- }, {
- "time": 13184,
- "beat": "3"
- }, {
- "time": 13493,
- "beat": "2"
- }, {
- "time": 13813,
- "beat": "3"
- }, {
- "time": 14176,
- "beat": "3"
- }, {
- "time": 14517,
- "beat": "1"
- }, {
- "time": 14843,
- "beat": "2"
- }, {
- "time": 15147,
- "beat": "2"
- }, {
- "time": 15472,
- "beat": "3"
- }, {
- "time": 15781,
- "beat": "2"
- }, {
- "time": 16112,
- "beat": "2"
- }, {
- "time": 16432,
- "beat": "2"
- }, {
- "time": 16741,
- "beat": "2"
- }, {
- "time": 17056,
- "beat": "3"
- }, {
- "time": 17360,
- "beat": "3"
- }, {
- "time": 17685,
- "beat": "2"
- }, {
- "time": 17995,
- "beat": "3"
- }, {
- "time": 18299,
- "beat": "3"
- }, {
- "time": 18608,
- "beat": "3"
- }, {
- "time": 18917,
- "beat": "3"
- }, {
- "time": 19232,
- "beat": "1"
- }, {
- "time": 19547,
- "beat": "2"
- }, {
- "time": 19851,
- "beat": "3"
- }, {
- "time": 20171,
- "beat": "1"
- }, {
- "time": 20475,
- "beat": "3"
- }, {
- "time": 20805,
- "beat": "3"
- }, {
- "time": 21120,
- "beat": "1"
- }, {
- "time": 21435,
- "beat": "2"
- }, {
- "time": 21749,
- "beat": "2"
- }, {
- "time": 22059,
- "beat": "2"
- }, {
- "time": 22373,
- "beat": "2"
- }, {
- "time": 22699,
- "beat": "2"
- }, {
- "time": 23019,
- "beat": "1"
- }, {
- "time": 23323,
- "beat": "3"
- }, {
- "time": 23627,
- "beat": "3"
- }, {
- "time": 23931,
- "beat": "2"
- }, {
- "time": 24240,
- "beat": "2"
- }, {
- "time": 24549,
- "beat": "2"
- }, {
- "time": 24869,
- "beat": "2"
- }, {
- "time": 25189,
- "beat": "3"
- }, {
- "time": 25493,
- "beat": "2"
- }, {
- "time": 25819,
- "beat": "2"
- }, {
- "time": 26133,
- "beat": "1"
- }, {
- "time": 26437,
- "beat": "2"
- }, {
- "time": 26757,
- "beat": "2"
- }, {
- "time": 27061,
- "beat": "2"
- }, {
- "time": 27365,
- "beat": "2"
- }, {
- "time": 27669,
- "beat": "3"
- }, {
- "time": 27973,
- "beat": "3"
- }, {
- "time": 28277,
- "beat": "3"
- }, {
- "time": 28581,
- "beat": "3"
- }, {
- "time": 28885,
- "beat": "3"
- }, {
- "time": 29221,
- "beat": "2"
- }, {
- "time": 29557,
- "beat": "3"
- }, {
- "time": 29861,
- "beat": "2"
- }, {
- "time": 30197,
- "beat": "2"
- }, {
- "time": 30507,
- "beat": "2"
- }, {
- "time": 30827,
- "beat": "2"
- }, {
- "time": 31141,
- "beat": "2"
- }, {
- "time": 31483,
- "beat": "2"
- }, {
- "time": 31787,
- "beat": "2"
- }, {
- "time": 32091,
- "beat": "3"
- }, {
- "time": 32395,
- "beat": "3"
- }, {
- "time": 32731,
- "beat": "1"
- }, {
- "time": 33045,
- "beat": "2"
- }, {
- "time": 33349,
- "beat": "3"
- }, {
- "time": 33653,
- "beat": "2"
- }, {
- "time": 33957,
- "beat": "3"
- }, {
- "time": 34261,
- "beat": "2"
- }, {
- "time": 34576,
- "beat": "2"
- }, {
- "time": 34901,
- "beat": "2"
- }, {
- "time": 35211,
- "beat": "3"
- }, {
- "time": 35520,
- "beat": "2"
- }, {
- "time": 35829,
- "beat": "3"
- }, {
- "time": 36149,
- "beat": "3"
- }, {
- "time": 36464,
- "beat": "2"
- }, {
- "time": 36779,
- "beat": "3"
- }, {
- "time": 37083,
- "beat": "2"
- }, {
- "time": 37403,
- "beat": "2"
- }, {
- "time": 37707,
- "beat": "2"
- }, {
- "time": 38037,
- "beat": "2"
- }, {
- "time": 38341,
- "beat": "3"
- }, {
- "time": 38661,
- "beat": "2"
- }, {
- "time": 38976,
- "beat": "1"
- }, {
- "time": 39301,
- "beat": "1"
- }, {
- "time": 39611,
- "beat": "2"
- }, {
- "time": 39941,
- "beat": "2"
- }, {
- "time": 40256,
- "beat": "1"
- }, {
- "time": 40565,
- "beat": "2"
- }, {
- "time": 40885,
- "beat": "1"
- }, {
- "time": 41189,
- "beat": "1"
- }, {
- "time": 41499,
- "beat": "1"
- }, {
- "time": 41851,
- "beat": "1"
- }, {
- "time": 42155,
- "beat": "1"
- }, {
- "time": 42459,
- "beat": "1"
- }, {
- "time": 42976,
- "beat": "1"
- }, {
- "time": 43429,
- "beat": "1"
- }, {
- "time": 43733,
- "beat": "1"
- }, {
- "time": 44043,
- "beat": "1"
- }, {
- "time": 44357,
- "beat": "2"
- }, {
- "time": 44672,
- "beat": "2"
- }, {
- "time": 44987,
- "beat": "1"
- }, {
- "time": 45312,
- "beat": "1"
- }, {
- "time": 45744,
- "beat": "1"
- }, {
- "time": 46059,
- "beat": "1"
- }, {
- "time": 46373,
- "beat": "1"
- }, {
- "time": 46683,
- "beat": "2"
- }, {
- "time": 46992,
- "beat": "2"
- }, {
- "time": 47301,
- "beat": "1"
- }, {
- "time": 47605,
- "beat": "2"
- }, {
- "time": 47920,
- "beat": "2"
- }, {
- "time": 48229,
- "beat": "1"
- }, {
- "time": 48544,
- "beat": "2"
- }, {
- "time": 48859,
- "beat": "1"
- }, {
- "time": 49168,
- "beat": "1"
- }, {
- "time": 49477,
- "beat": "2"
- }, {
- "time": 49845,
- "beat": "1"
- }, {
- "time": 50160,
- "beat": "1"
- }, {
- "time": 50496,
- "beat": "2"
- }, {
- "time": 50805,
- "beat": "1"
- }, {
- "time": 51173,
- "beat": "1"
- }, {
- "time": 51477,
- "beat": "2"
- }, {
- "time": 51792,
- "beat": "2"
- }, {
- "time": 52107,
- "beat": "2"
- }, {
- "time": 52421,
- "beat": "1"
- }, {
- "time": 52869,
- "beat": "1"
- }, {
- "time": 53189,
- "beat": "1"
- }, {
- "time": 53595,
- "beat": "1"
- }, {
- "time": 53979,
- "beat": "1"
- }, {
- "time": 54288,
- "beat": "1"
- }, {
- "time": 54597,
- "beat": "3"
- }, {
- "time": 54907,
- "beat": "2"
- }, {
- "time": 55227,
- "beat": "3"
- }, {
- "time": 55531,
- "beat": "3"
- }, {
- "time": 55851,
- "beat": "2"
- }, {
- "time": 56165,
- "beat": "3"
- }, {
- "time": 56475,
- "beat": "3"
- }, {
- "time": 56789,
- "beat": "2"
- }, {
- "time": 57104,
- "beat": "2"
- }, {
- "time": 57408,
- "beat": "1"
- }, {
- "time": 57728,
- "beat": "3"
- }, {
- "time": 58053,
- "beat": "2"
- }, {
- "time": 58363,
- "beat": "1"
- }, {
- "time": 58667,
- "beat": "3"
- }, {
- "time": 58976,
- "beat": "3"
- }, {
- "time": 59307,
- "beat": "1"
- }, {
- "time": 59621,
- "beat": "3"
- }, {
- "time": 59947,
- "beat": "3"
- }, {
- "time": 60304,
- "beat": "2"
- }, {
- "time": 60608,
- "beat": "3"
- }, {
- "time": 60971,
- "beat": "1"
- }, {
- "time": 61339,
- "beat": "2"
- }, {
- "time": 61701,
- "beat": "1"
- }, {
- "time": 62032,
- "beat": "1"
- }, {
- "time": 62336,
- "beat": "3"
- }, {
- "time": 62640,
- "beat": "3"
- }, {
- "time": 62955,
- "beat": "3"
- }, {
- "time": 63269,
- "beat": "3"
- }, {
- "time": 63584,
- "beat": "2"
- }, {
- "time": 63904,
- "beat": "3"
- }, {
- "time": 64213,
- "beat": "3"
- }, {
- "time": 64555,
- "beat": "2"
- }, {
- "time": 64864,
- "beat": "3"
- }, {
- "time": 65179,
- "beat": "2"
- }, {
- "time": 65499,
- "beat": "2"
- }, {
- "time": 65824,
- "beat": "3"
- }, {
- "time": 66144,
- "beat": "2"
- }, {
- "time": 66464,
- "beat": "2"
- }, {
- "time": 66768,
- "beat": "3"
- }, {
- "time": 67093,
- "beat": "1"
- }, {
- "time": 67403,
- "beat": "3"
- }, {
- "time": 67707,
- "beat": "3"
- }, {
- "time": 68053,
- "beat": "2"
- }, {
- "time": 68368,
- "beat": "2"
- }, {
- "time": 68709,
- "beat": "1"
- }, {
- "time": 69024,
- "beat": "1"
- }, {
- "time": 69333,
- "beat": "2"
- }, {
- "time": 69648,
- "beat": "3"
- }, {
- "time": 69968,
- "beat": "2"
- }, {
- "time": 70283,
- "beat": "2"
- }, {
- "time": 70587,
- "beat": "3"
- }, {
- "time": 70896,
- "beat": "3"
- }, {
- "time": 71205,
- "beat": "3"
- }, {
- "time": 71525,
- "beat": "3"
- }, {
- "time": 71835,
- "beat": "3"
- }, {
- "time": 72139,
- "beat": "3"
- }, {
- "time": 72448,
- "beat": "3"
- }, {
- "time": 72779,
- "beat": "3"
- }, {
- "time": 73083,
- "beat": "2"
- }, {
- "time": 73387,
- "beat": "3"
- }, {
- "time": 73691,
- "beat": "1"
- }, {
- "time": 74016,
- "beat": "3"
- }, {
- "time": 74336,
- "beat": "2"
- }, {
- "time": 74667,
- "beat": "3"
- }, {
- "time": 74987,
- "beat": "3"
- }, {
- "time": 75296,
- "beat": "1"
- }, {
- "time": 75605,
- "beat": "3"
- }, {
- "time": 75915,
- "beat": "3"
- }, {
- "time": 76224,
- "beat": "3"
- }, {
- "time": 76549,
- "beat": "3"
- }, {
- "time": 76853,
- "beat": "3"
- }, {
- "time": 77157,
- "beat": "3"
- }, {
- "time": 77461,
- "beat": "3"
- }, {
- "time": 77776,
- "beat": "1"
- }, {
- "time": 78107,
- "beat": "2"
- }, {
- "time": 78421,
- "beat": "2"
- }, {
- "time": 78731,
- "beat": "2"
- }, {
- "time": 79045,
- "beat": "2"
- }, {
- "time": 79365,
- "beat": "2"
- }, {
- "time": 79669,
- "beat": "1"
- }, {
- "time": 79995,
- "beat": "1"
- }, {
- "time": 80309,
- "beat": "1"
- }, {
- "time": 80640,
- "beat": "1"
- }, {
- "time": 80965,
- "beat": "1"
- }, {
- "time": 81296,
- "beat": "1"
- }, {
- "time": 81856,
- "beat": "1"
- }, {
- "time": 82165,
- "beat": "2"
- }, {
- "time": 82491,
- "beat": "2"
- }, {
- "time": 82827,
- "beat": "2"
- }, {
- "time": 83136,
- "beat": "2"
- }, {
- "time": 83451,
- "beat": "2"
- }, {
- "time": 83765,
- "beat": "1"
- }, {
- "time": 84080,
- "beat": "1"
- }, {
- "time": 84389,
- "beat": "1"
- }, {
- "time": 84704,
- "beat": "1"
- }, {
- "time": 85040,
- "beat": "1"
- }, {
- "time": 85392,
- "beat": "2"
- }, {
- "time": 85696,
- "beat": "1"
- }, {
- "time": 86016,
- "beat": "1"
- }, {
- "time": 86325,
- "beat": "1"
- }, {
- "time": 86688,
- "beat": "1"
- }, {
- "time": 87019,
- "beat": "2"
- }, {
- "time": 87323,
- "beat": "2"
- }, {
- "time": 87643,
- "beat": "1"
- }, {
- "time": 87947,
- "beat": "1"
- }, {
- "time": 88272,
- "beat": "1"
- }, {
- "time": 88587,
- "beat": "1"
- }, {
- "time": 88901,
- "beat": "1"
- }, {
- "time": 89216,
- "beat": "1"
- }, {
- "time": 89520,
- "beat": "1"
- }, {
- "time": 89872,
- "beat": "1"
- }, {
- "time": 90176,
- "beat": "2"
- }, {
- "time": 90485,
- "beat": "2"
- }, {
- "time": 90800,
- "beat": "2"
- }, {
- "time": 91115,
- "beat": "1"
- }, {
- "time": 91424,
- "beat": "1"
- }, {
- "time": 91819,
- "beat": "1"
- }, {
- "time": 92304,
- "beat": "1"
- }, {
- "time": 92667,
- "beat": "1"
- }, {
- "time": 92992,
- "beat": "2"
- }, {
- "time": 93301,
- "beat": "3"
- }, {
- "time": 93659,
- "beat": "1"
- }, {
- "time": 93968,
- "beat": "3"
- }, {
- "time": 94272,
- "beat": "3"
- }, {
- "time": 94581,
- "beat": "2"
- }, {
- "time": 94885,
- "beat": "3"
- }, {
- "time": 95205,
- "beat": "3"
- }, {
- "time": 95525,
- "beat": "2"
- }, {
- "time": 95845,
- "beat": "3"
- }, {
- "time": 96155,
- "beat": "1"
- }, {
- "time": 96485,
- "beat": "2"
- }, {
- "time": 96811,
- "beat": "3"
- }, {
- "time": 97125,
- "beat": "3"
- }, {
- "time": 97451,
- "beat": "2"
- }, {
- "time": 97755,
- "beat": "3"
- }, {
- "time": 98069,
- "beat": "3"
- }, {
- "time": 98411,
- "beat": "2"
- }, {
- "time": 98725,
- "beat": "3"
- }, {
- "time": 99035,
- "beat": "3"
- }, {
- "time": 99349,
- "beat": "3"
- }, {
- "time": 99680,
- "beat": "1"
- }, {
- "time": 100000,
- "beat": "2"
- }, {
- "time": 100304,
- "beat": "3"
- }, {
- "time": 100624,
- "beat": "3"
- }, {
- "time": 100928,
- "beat": "3"
- }, {
- "time": 101232,
- "beat": "3"
- }, {
- "time": 101557,
- "beat": "3"
- }, {
- "time": 101888,
- "beat": "2"
- }, {
- "time": 102192,
- "beat": "3"
- }, {
- "time": 102507,
- "beat": "3"
- }, {
- "time": 102853,
- "beat": "3"
- }, {
- "time": 103157,
- "beat": "3"
- }, {
- "time": 103461,
- "beat": "3"
- }, {
- "time": 103765,
- "beat": "2"
- }, {
- "time": 104085,
- "beat": "1"
- }, {
- "time": 104395,
- "beat": "1"
- }, {
- "time": 104709,
- "beat": "2"
- }, {
- "time": 105013,
- "beat": "3"
- }, {
- "time": 105317,
- "beat": "2"
- }, {
- "time": 105627,
- "beat": "1"
- }, {
- "time": 105931,
- "beat": "3"
- }, {
- "time": 106240,
- "beat": "2"
- }, {
- "time": 106555,
- "beat": "3"
- }, {
- "time": 106864,
- "beat": "3"
- }, {
- "time": 107168,
- "beat": "3"
- }, {
- "time": 107472,
- "beat": "1"
- }, {
- "time": 107781,
- "beat": "2"
- }, {
- "time": 108091,
- "beat": "3"
- }, {
- "time": 108416,
- "beat": "2"
- }, {
- "time": 108731,
- "beat": "2"
- }, {
- "time": 109045,
- "beat": "2"
- }, {
- "time": 109349,
- "beat": "3"
- }, {
- "time": 109669,
- "beat": "2"
- }, {
- "time": 109979,
- "beat": "2"
- }, {
- "time": 110293,
- "beat": "3"
- }, {
- "time": 110597,
- "beat": "3"
- }, {
- "time": 110917,
- "beat": "3"
- }, {
- "time": 111221,
- "beat": "3"
- }, {
- "time": 111525,
- "beat": "3"
- }, {
- "time": 111840,
- "beat": "2"
- }, {
- "time": 112144,
- "beat": "3"
- }, {
- "time": 112459,
- "beat": "3"
- }, {
- "time": 112773,
- "beat": "3"
- }, {
- "time": 113093,
- "beat": "3"
- }, {
- "time": 113419,
- "beat": "3"
- }, {
- "time": 113723,
- "beat": "3"
- }, {
- "time": 114032,
- "beat": "2"
- }, {
- "time": 114336,
- "beat": "2"
- }, {
- "time": 114651,
- "beat": "3"
- }, {
- "time": 114965,
- "beat": "1"
- }, {
- "time": 115280,
- "beat": "2"
- }, {
- "time": 115584,
- "beat": "3"
- }, {
- "time": 115888,
- "beat": "3"
- }, {
- "time": 116208,
- "beat": "2"
- }, {
- "time": 116523,
- "beat": "3"
- }, {
- "time": 116837,
- "beat": "2"
- }, {
- "time": 117147,
- "beat": "3"
- }, {
- "time": 117451,
- "beat": "3"
- }, {
- "time": 117787,
- "beat": "3"
- }, {
- "time": 118101,
- "beat": "3"
- }, {
- "time": 118405,
- "beat": "3"
- }, {
- "time": 118741,
- "beat": "2"
- }, {
- "time": 119051,
- "beat": "2"
- }, {
- "time": 119360,
- "beat": "1"
- }, {
- "time": 119664,
- "beat": "2"
- }, {
- "time": 119973,
- "beat": "3"
- }, {
- "time": 120283,
- "beat": "2"
- }, {
- "time": 120603,
- "beat": "3"
- }, {
- "time": 120912,
- "beat": "3"
- }, {
- "time": 121216,
- "beat": "3"
- }, {
- "time": 121525,
- "beat": "3"
- }, {
- "time": 121829,
- "beat": "3"
- }, {
- "time": 122293,
- "beat": "1"
- }, {
- "time": 122779,
- "beat": "1"
- }, {
- "time": 123099,
- "beat": "1"
- }, {
- "time": 123504,
- "beat": "1"
- }, {
- "time": 123845,
- "beat": "1"
- }, {
- "time": 124352,
- "beat": "1"
- }, {
- "time": 124699,
- "beat": "1"
- }, {
- "time": 125024,
- "beat": "1"
- }, {
- "time": 125333,
- "beat": "1"
- }, {
- "time": 125648,
- "beat": "1"
- }, {
- "time": 125979,
- "beat": "1"
- }, {
- "time": 126325,
- "beat": "1"
- }, {
- "time": 126635,
- "beat": "1"
- }, {
- "time": 126960,
- "beat": "1"
- }, {
- "time": 127275,
- "beat": "1"
- }, {
- "time": 127589,
- "beat": "1"
- }, {
- "time": 128059,
- "beat": "1"
- }, {
- "time": 128523,
- "beat": "1"
- }, {
- "time": 128837,
- "beat": "2"
- }, {
- "time": 129173,
- "beat": "1"
- }, {
- "time": 129483,
- "beat": "2"
- }, {
- "time": 129813,
- "beat": "2"
- }, {
- "time": 130133,
- "beat": "1"
- }, {
- "time": 130437,
- "beat": "1"
- }, {
- "time": 130741,
- "beat": "1"
- }, {
- "time": 131109,
- "beat": "1"
- }, {
- "time": 131413,
- "beat": "1"
- }, {
- "time": 131739,
- "beat": "2"
- }, {
- "time": 132080,
- "beat": "2"
- }, {
- "time": 132384,
- "beat": "2"
- }, {
- "time": 132784,
- "beat": "1"
- }, {
- "time": 133093,
- "beat": "1"
- }, {
- "time": 133408,
- "beat": "2"
- }, {
- "time": 133739,
- "beat": "1"
- }, {
- "time": 134069,
- "beat": "1"
- }, {
- "time": 134389,
- "beat": "1"
- }, {
- "time": 134709,
- "beat": "1"
- }, {
- "time": 135019,
- "beat": "1"
- }, {
- "time": 135355,
- "beat": "1"
- }, {
- "time": 135733,
- "beat": "1"
- }, {
- "time": 136064,
- "beat": "2"
- }, {
- "time": 136384,
- "beat": "3"
- }, {
- "time": 136693,
- "beat": "1"
- }, {
- "time": 137024,
- "beat": "2"
- }, {
- "time": 137339,
- "beat": "2"
- }, {
- "time": 137776,
- "beat": "1"
- }, {
- "time": 138261,
- "beat": "1"
- }, {
- "time": 138741,
- "beat": "1"
- }, {
- "time": 139109,
- "beat": "1"
- }, {
- "time": 139435,
- "beat": "1"
- }, {
- "time": 139744,
- "beat": "2"
- }, {
- "time": 140048,
- "beat": "2"
- }, {
- "time": 140352,
- "beat": "3"
- }, {
- "time": 140656,
- "beat": "3"
- }, {
- "time": 140987,
- "beat": "2"
- }, {
- "time": 141291,
- "beat": "3"
- }, {
- "time": 141605,
- "beat": "3"
- }, {
- "time": 141909,
- "beat": "3"
- }, {
- "time": 142251,
- "beat": "1"
- }, {
- "time": 142555,
- "beat": "1"
- }, {
- "time": 142859,
- "beat": "3"
- }, {
- "time": 143184,
- "beat": "3"
- }, {
- "time": 143504,
- "beat": "3"
- }, {
- "time": 143813,
- "beat": "2"
- }, {
- "time": 144123,
- "beat": "3"
- }, {
- "time": 144427,
- "beat": "2"
- }, {
- "time": 144741,
- "beat": "3"
- }, {
- "time": 145061,
- "beat": "3"
- }, {
- "time": 145365,
- "beat": "3"
- }, {
- "time": 145685,
- "beat": "3"
- }, {
- "time": 146000,
- "beat": "3"
- }, {
- "time": 146309,
- "beat": "2"
- }, {
- "time": 146624,
- "beat": "3"
- }, {
- "time": 146928,
- "beat": "2"
- }, {
- "time": 147237,
- "beat": "2"
- }, {
- "time": 147547,
- "beat": "3"
- }, {
- "time": 147851,
- "beat": "2"
- }, {
- "time": 148165,
- "beat": "3"
- }, {
- "time": 148480,
- "beat": "3"
- }, {
- "time": 148784,
- "beat": "2"
- }, {
- "time": 149104,
- "beat": "3"
- }, {
- "time": 149413,
- "beat": "3"
- }, {
- "time": 149717,
- "beat": "3"
- }, {
- "time": 150032,
- "beat": "2"
- }, {
- "time": 150336,
- "beat": "2"
- }, {
- "time": 150651,
- "beat": "2"
- }, {
- "time": 150971,
- "beat": "3"
- }, {
- "time": 151285,
- "beat": "2"
- }, {
- "time": 151600,
- "beat": "3"
- }, {
- "time": 151904,
- "beat": "3"
- }, {
- "time": 152208,
- "beat": "3"
- }, {
- "time": 152517,
- "beat": "3"
- }, {
- "time": 152821,
- "beat": "3"
- }, {
- "time": 153248,
- "beat": "1"
- }, {
- "time": 153728,
- "beat": "1"
- }, {
- "time": 154208,
- "beat": "1"
- }, {
- "time": 154576,
- "beat": "1"
}]
}, {
"name": "Freedom",
"songBeats": [{
@@ -5694,1361 +1931,8 @@
"beat": "3"
}, {
"time": 315,
"beat": "3"
- }, {
- "time": 619,
- "beat": "1"
- }, {
- "time": 928,
- "beat": "1"
- }, {
- "time": 1355,
- "beat": "1"
- }, {
- "time": 1739,
- "beat": "1"
- }, {
- "time": 2176,
- "beat": "1"
- }, {
- "time": 2539,
- "beat": "1"
- }, {
- "time": 2848,
- "beat": "1"
- }, {
- "time": 3173,
- "beat": "2"
- }, {
- "time": 3488,
- "beat": "1"
- }, {
- "time": 4037,
- "beat": "1"
- }, {
- "time": 4480,
- "beat": "1"
- }, {
- "time": 4837,
- "beat": "1"
- }, {
- "time": 5163,
- "beat": "1"
- }, {
- "time": 5520,
- "beat": "2"
- }, {
- "time": 5899,
- "beat": "1"
- }, {
- "time": 6341,
- "beat": "1"
- }, {
- "time": 6704,
- "beat": "1"
- }, {
- "time": 7045,
- "beat": "2"
- }, {
- "time": 7365,
- "beat": "1"
- }, {
- "time": 7696,
- "beat": "1"
- }, {
- "time": 8080,
- "beat": "1"
- }, {
- "time": 8405,
- "beat": "1"
- }, {
- "time": 8709,
- "beat": "1"
- }, {
- "time": 9109,
- "beat": "1"
- }, {
- "time": 9483,
- "beat": "1"
- }, {
- "time": 9819,
- "beat": "1"
- }, {
- "time": 10128,
- "beat": "2"
- }, {
- "time": 10437,
- "beat": "2"
- }, {
- "time": 10747,
- "beat": "3"
- }, {
- "time": 11072,
- "beat": "2"
- }, {
- "time": 11387,
- "beat": "2"
- }, {
- "time": 11691,
- "beat": "3"
- }, {
- "time": 12005,
- "beat": "3"
- }, {
- "time": 12352,
- "beat": "2"
- }, {
- "time": 12656,
- "beat": "1"
- }, {
- "time": 12976,
- "beat": "2"
- }, {
- "time": 13296,
- "beat": "1"
- }, {
- "time": 13600,
- "beat": "3"
- }, {
- "time": 13904,
- "beat": "3"
- }, {
- "time": 14208,
- "beat": "2"
- }, {
- "time": 14528,
- "beat": "1"
- }, {
- "time": 14832,
- "beat": "2"
- }, {
- "time": 15147,
- "beat": "3"
- }, {
- "time": 15451,
- "beat": "2"
- }, {
- "time": 15755,
- "beat": "3"
- }, {
- "time": 16059,
- "beat": "3"
- }, {
- "time": 16363,
- "beat": "3"
- }, {
- "time": 16667,
- "beat": "2"
- }, {
- "time": 16981,
- "beat": "2"
- }, {
- "time": 17296,
- "beat": "1"
- }, {
- "time": 17600,
- "beat": "1"
- }, {
- "time": 17947,
- "beat": "2"
- }, {
- "time": 18256,
- "beat": "2"
- }, {
- "time": 18603,
- "beat": "3"
- }, {
- "time": 18949,
- "beat": "2"
- }, {
- "time": 19275,
- "beat": "2"
- }, {
- "time": 19589,
- "beat": "3"
- }, {
- "time": 19893,
- "beat": "2"
- }, {
- "time": 20213,
- "beat": "1"
- }, {
- "time": 20768,
- "beat": "1"
- }, {
- "time": 21083,
- "beat": "1"
- }, {
- "time": 21440,
- "beat": "1"
- }, {
- "time": 21765,
- "beat": "1"
- }, {
- "time": 22085,
- "beat": "1"
- }, {
- "time": 22512,
- "beat": "1"
- }, {
- "time": 22827,
- "beat": "1"
- }, {
- "time": 23189,
- "beat": "1"
- }, {
- "time": 23499,
- "beat": "1"
- }, {
- "time": 23803,
- "beat": "1"
- }, {
- "time": 24149,
- "beat": "1"
- }, {
- "time": 24480,
- "beat": "1"
- }, {
- "time": 24843,
- "beat": "1"
- }, {
- "time": 25269,
- "beat": "1"
- }, {
- "time": 25627,
- "beat": "1"
- }, {
- "time": 25968,
- "beat": "1"
- }, {
- "time": 26293,
- "beat": "1"
- }, {
- "time": 26597,
- "beat": "1"
- }, {
- "time": 26987,
- "beat": "1"
- }, {
- "time": 27360,
- "beat": "1"
- }, {
- "time": 27776,
- "beat": "1"
- }, {
- "time": 28128,
- "beat": "3"
- }, {
- "time": 28501,
- "beat": "2"
- }, {
- "time": 28848,
- "beat": "1"
- }, {
- "time": 29152,
- "beat": "2"
- }, {
- "time": 29467,
- "beat": "2"
- }, {
- "time": 29776,
- "beat": "1"
- }, {
- "time": 30085,
- "beat": "2"
- }, {
- "time": 30400,
- "beat": "3"
- }, {
- "time": 30715,
- "beat": "3"
- }, {
- "time": 31029,
- "beat": "1"
- }, {
- "time": 31392,
- "beat": "3"
- }, {
- "time": 31717,
- "beat": "1"
- }, {
- "time": 32048,
- "beat": "1"
- }, {
- "time": 32368,
- "beat": "1"
- }, {
- "time": 32741,
- "beat": "2"
- }, {
- "time": 33045,
- "beat": "3"
- }, {
- "time": 33467,
- "beat": "1"
- }, {
- "time": 33771,
- "beat": "2"
- }, {
- "time": 34091,
- "beat": "3"
- }, {
- "time": 34411,
- "beat": "2"
- }, {
- "time": 34731,
- "beat": "1"
- }, {
- "time": 35051,
- "beat": "3"
- }, {
- "time": 35387,
- "beat": "3"
- }, {
- "time": 35771,
- "beat": "1"
- }, {
- "time": 36181,
- "beat": "1"
- }, {
- "time": 36491,
- "beat": "3"
- }, {
- "time": 36805,
- "beat": "2"
- }, {
- "time": 37120,
- "beat": "2"
- }, {
- "time": 37445,
- "beat": "2"
- }, {
- "time": 37755,
- "beat": "3"
- }, {
- "time": 38080,
- "beat": "1"
- }, {
- "time": 38384,
- "beat": "2"
- }, {
- "time": 38704,
- "beat": "2"
- }, {
- "time": 39019,
- "beat": "3"
- }, {
- "time": 39344,
- "beat": "2"
- }, {
- "time": 39653,
- "beat": "2"
- }, {
- "time": 39963,
- "beat": "3"
- }, {
- "time": 40325,
- "beat": "1"
- }, {
- "time": 40629,
- "beat": "2"
- }, {
- "time": 40949,
- "beat": "1"
- }, {
- "time": 41253,
- "beat": "1"
- }, {
- "time": 41579,
- "beat": "2"
- }, {
- "time": 41952,
- "beat": "1"
- }, {
- "time": 42261,
- "beat": "2"
- }, {
- "time": 42571,
- "beat": "2"
- }, {
- "time": 42875,
- "beat": "3"
- }, {
- "time": 43269,
- "beat": "1"
- }, {
- "time": 43595,
- "beat": "3"
- }, {
- "time": 43915,
- "beat": "2"
- }, {
- "time": 44224,
- "beat": "3"
- }, {
- "time": 44565,
- "beat": "2"
- }, {
- "time": 44880,
- "beat": "3"
- }, {
- "time": 45189,
- "beat": "2"
- }, {
- "time": 45515,
- "beat": "2"
- }, {
- "time": 45840,
- "beat": "1"
- }, {
- "time": 46293,
- "beat": "1"
- }, {
- "time": 46597,
- "beat": "3"
- }, {
- "time": 46923,
- "beat": "3"
- }, {
- "time": 47227,
- "beat": "3"
- }, {
- "time": 47541,
- "beat": "2"
- }, {
- "time": 47861,
- "beat": "3"
- }, {
- "time": 48165,
- "beat": "2"
- }, {
- "time": 48469,
- "beat": "2"
- }, {
- "time": 48773,
- "beat": "2"
- }, {
- "time": 49083,
- "beat": "2"
- }, {
- "time": 49387,
- "beat": "2"
- }, {
- "time": 49701,
- "beat": "3"
- }, {
- "time": 50005,
- "beat": "3"
- }, {
- "time": 50315,
- "beat": "2"
- }, {
- "time": 50624,
- "beat": "3"
- }, {
- "time": 50997,
- "beat": "3"
- }, {
- "time": 51301,
- "beat": "2"
- }, {
- "time": 51611,
- "beat": "2"
- }, {
- "time": 51957,
- "beat": "3"
- }, {
- "time": 52267,
- "beat": "2"
- }, {
- "time": 52576,
- "beat": "3"
- }, {
- "time": 52880,
- "beat": "3"
- }, {
- "time": 53205,
- "beat": "2"
- }, {
- "time": 53520,
- "beat": "3"
- }, {
- "time": 53835,
- "beat": "3"
- }, {
- "time": 54139,
- "beat": "3"
- }, {
- "time": 54443,
- "beat": "3"
- }, {
- "time": 54752,
- "beat": "2"
- }, {
- "time": 55083,
- "beat": "1"
- }, {
- "time": 55424,
- "beat": "1"
- }, {
- "time": 56085,
- "beat": "1"
- }, {
- "time": 56400,
- "beat": "2"
- }, {
- "time": 56715,
- "beat": "3"
- }, {
- "time": 57093,
- "beat": "1"
- }, {
- "time": 57403,
- "beat": "1"
- }, {
- "time": 57728,
- "beat": "2"
- }, {
- "time": 58032,
- "beat": "2"
- }, {
- "time": 58336,
- "beat": "2"
- }, {
- "time": 58640,
- "beat": "3"
- }, {
- "time": 58944,
- "beat": "1"
- }, {
- "time": 59264,
- "beat": "3"
- }, {
- "time": 59579,
- "beat": "3"
- }, {
- "time": 59883,
- "beat": "3"
- }, {
- "time": 60208,
- "beat": "2"
- }, {
- "time": 60523,
- "beat": "2"
- }, {
- "time": 60837,
- "beat": "2"
- }, {
- "time": 61141,
- "beat": "1"
- }, {
- "time": 61451,
- "beat": "2"
- }, {
- "time": 61765,
- "beat": "2"
- }, {
- "time": 62085,
- "beat": "3"
- }, {
- "time": 62395,
- "beat": "2"
- }, {
- "time": 62704,
- "beat": "3"
- }, {
- "time": 63024,
- "beat": "2"
- }, {
- "time": 63344,
- "beat": "2"
- }, {
- "time": 63653,
- "beat": "2"
- }, {
- "time": 63957,
- "beat": "2"
- }, {
- "time": 64283,
- "beat": "2"
- }, {
- "time": 64608,
- "beat": "2"
- }, {
- "time": 64912,
- "beat": "3"
- }, {
- "time": 65253,
- "beat": "2"
- }, {
- "time": 65573,
- "beat": "2"
- }, {
- "time": 65904,
- "beat": "2"
- }, {
- "time": 66213,
- "beat": "2"
- }, {
- "time": 66533,
- "beat": "3"
- }, {
- "time": 66869,
- "beat": "1"
- }, {
- "time": 67173,
- "beat": "2"
- }, {
- "time": 67477,
- "beat": "2"
- }, {
- "time": 67787,
- "beat": "2"
- }, {
- "time": 68117,
- "beat": "2"
- }, {
- "time": 68437,
- "beat": "3"
- }, {
- "time": 68747,
- "beat": "2"
- }, {
- "time": 69067,
- "beat": "2"
- }, {
- "time": 69371,
- "beat": "3"
- }, {
- "time": 69675,
- "beat": "3"
- }, {
- "time": 70000,
- "beat": "3"
- }, {
- "time": 70389,
- "beat": "1"
- }, {
- "time": 70704,
- "beat": "2"
- }, {
- "time": 71013,
- "beat": "3"
- }, {
- "time": 71344,
- "beat": "2"
- }, {
- "time": 71653,
- "beat": "1"
- }, {
- "time": 71963,
- "beat": "1"
- }, {
- "time": 72272,
- "beat": "3"
- }, {
- "time": 72592,
- "beat": "2"
- }, {
- "time": 72896,
- "beat": "1"
- }, {
- "time": 73205,
- "beat": "3"
- }, {
- "time": 73563,
- "beat": "1"
- }, {
- "time": 73877,
- "beat": "2"
- }, {
- "time": 74181,
- "beat": "3"
- }, {
- "time": 74528,
- "beat": "3"
- }, {
- "time": 75019,
- "beat": "1"
- }, {
- "time": 75328,
- "beat": "1"
- }, {
- "time": 76011,
- "beat": "1"
- }, {
- "time": 76336,
- "beat": "1"
- }, {
- "time": 76651,
- "beat": "1"
- }, {
- "time": 77008,
- "beat": "1"
- }, {
- "time": 77429,
- "beat": "1"
- }, {
- "time": 77872,
- "beat": "1"
- }, {
- "time": 78293,
- "beat": "1"
- }, {
- "time": 78624,
- "beat": "1"
- }, {
- "time": 78933,
- "beat": "1"
- }, {
- "time": 79237,
- "beat": "1"
- }, {
- "time": 79616,
- "beat": "1"
- }, {
- "time": 80064,
- "beat": "1"
- }, {
- "time": 80459,
- "beat": "1"
- }, {
- "time": 80779,
- "beat": "1"
- }, {
- "time": 81125,
- "beat": "1"
- }, {
- "time": 81429,
- "beat": "1"
- }, {
- "time": 81733,
- "beat": "3"
- }, {
- "time": 82069,
- "beat": "1"
- }, {
- "time": 82373,
- "beat": "2"
- }, {
- "time": 82715,
- "beat": "2"
- }, {
- "time": 83051,
- "beat": "1"
- }, {
- "time": 83371,
- "beat": "3"
- }, {
- "time": 83723,
- "beat": "1"
- }, {
- "time": 84032,
- "beat": "3"
- }, {
- "time": 84357,
- "beat": "3"
- }, {
- "time": 84667,
- "beat": "3"
- }, {
- "time": 84971,
- "beat": "3"
- }, {
- "time": 85291,
- "beat": "3"
- }, {
- "time": 85605,
- "beat": "2"
- }, {
- "time": 85915,
- "beat": "2"
- }, {
- "time": 86229,
- "beat": "3"
- }, {
- "time": 86539,
- "beat": "3"
- }, {
- "time": 86864,
- "beat": "3"
- }, {
- "time": 87179,
- "beat": "2"
- }, {
- "time": 87488,
- "beat": "2"
- }, {
- "time": 87797,
- "beat": "2"
- }, {
- "time": 88107,
- "beat": "2"
- }, {
- "time": 88411,
- "beat": "3"
- }, {
- "time": 88731,
- "beat": "2"
- }, {
- "time": 89072,
- "beat": "2"
- }, {
- "time": 89387,
- "beat": "2"
- }, {
- "time": 89696,
- "beat": "3"
- }, {
- "time": 90005,
- "beat": "3"
- }, {
- "time": 90309,
- "beat": "3"
- }, {
- "time": 90619,
- "beat": "3"
- }, {
- "time": 90933,
- "beat": "2"
- }, {
- "time": 91253,
- "beat": "2"
- }, {
- "time": 91557,
- "beat": "2"
- }, {
- "time": 91931,
- "beat": "3"
- }, {
- "time": 92363,
- "beat": "2"
- }, {
- "time": 92741,
- "beat": "1"
- }, {
- "time": 93045,
- "beat": "3"
- }, {
- "time": 93472,
- "beat": "1"
- }, {
- "time": 93797,
- "beat": "3"
- }, {
- "time": 94112,
- "beat": "3"
- }, {
- "time": 94421,
- "beat": "3"
- }, {
- "time": 94752,
- "beat": "2"
- }, {
- "time": 95056,
- "beat": "2"
- }, {
- "time": 95392,
- "beat": "3"
- }, {
- "time": 95760,
- "beat": "1"
- }, {
- "time": 96069,
- "beat": "3"
- }, {
- "time": 96395,
- "beat": "2"
- }, {
- "time": 96715,
- "beat": "2"
- }, {
- "time": 97035,
- "beat": "2"
- }, {
- "time": 97344,
- "beat": "2"
- }, {
- "time": 97648,
- "beat": "2"
- }, {
- "time": 98048,
- "beat": "1"
- }, {
- "time": 98352,
- "beat": "2"
- }, {
- "time": 98656,
- "beat": "1"
- }, {
- "time": 98965,
- "beat": "2"
- }, {
- "time": 99269,
- "beat": "2"
- }, {
- "time": 99579,
- "beat": "3"
- }, {
- "time": 99893,
- "beat": "2"
- }, {
- "time": 100208,
- "beat": "3"
- }, {
- "time": 100512,
- "beat": "3"
- }, {
- "time": 100821,
- "beat": "3"
- }, {
- "time": 101131,
- "beat": "3"
- }, {
- "time": 101445,
- "beat": "3"
- }, {
- "time": 101749,
- "beat": "3"
- }, {
- "time": 102117,
- "beat": "2"
- }, {
- "time": 102421,
- "beat": "3"
- }, {
- "time": 102731,
- "beat": "3"
- }, {
- "time": 103045,
- "beat": "2"
- }, {
- "time": 103365,
- "beat": "3"
- }, {
- "time": 103669,
- "beat": "1"
- }, {
- "time": 103973,
- "beat": "2"
- }, {
- "time": 104309,
- "beat": "2"
- }, {
- "time": 104635,
- "beat": "2"
- }, {
- "time": 104960,
- "beat": "1"
- }, {
- "time": 105285,
- "beat": "1"
- }, {
- "time": 105589,
- "beat": "2"
- }, {
- "time": 105893,
- "beat": "1"
- }, {
- "time": 106240,
- "beat": "1"
- }, {
- "time": 106587,
- "beat": "1"
- }, {
- "time": 106891,
- "beat": "3"
- }, {
- "time": 107200,
- "beat": "2"
- }, {
- "time": 107504,
- "beat": "3"
- }, {
- "time": 107829,
- "beat": "2"
- }, {
- "time": 108144,
- "beat": "3"
- }, {
- "time": 108453,
- "beat": "2"
- }, {
- "time": 108848,
- "beat": "2"
- }, {
- "time": 109157,
- "beat": "1"
- }, {
- "time": 109493,
- "beat": "1"
- }, {
- "time": 109808,
- "beat": "3"
- }, {
- "time": 110123,
- "beat": "1"
- }, {
- "time": 110432,
- "beat": "1"
- }, {
- "time": 110741,
- "beat": "1"
- }, {
- "time": 111056,
- "beat": "1"
- }, {
- "time": 111403,
- "beat": "1"
- }, {
- "time": 111776,
- "beat": "1"
- }, {
- "time": 112128,
- "beat": "3"
- }, {
- "time": 112432,
- "beat": "3"
- }, {
- "time": 112757,
- "beat": "2"
- }, {
- "time": 113061,
- "beat": "3"
- }, {
- "time": 113365,
- "beat": "3"
- }, {
- "time": 113675,
- "beat": "2"
- }, {
- "time": 114005,
- "beat": "3"
- }, {
- "time": 114309,
- "beat": "2"
- }, {
- "time": 114613,
- "beat": "3"
- }, {
- "time": 114917,
- "beat": "2"
- }, {
- "time": 115227,
- "beat": "3"
- }, {
- "time": 115536,
- "beat": "3"
- }, {
- "time": 115845,
- "beat": "3"
- }, {
- "time": 116187,
- "beat": "2"
- }, {
- "time": 116539,
- "beat": "2"
- }, {
- "time": 116848,
- "beat": "3"
- }, {
- "time": 117157,
- "beat": "3"
- }, {
- "time": 117477,
- "beat": "2"
- }, {
- "time": 117781,
- "beat": "3"
- }, {
- "time": 118091,
- "beat": "2"
- }, {
- "time": 118416,
- "beat": "2"
- }, {
- "time": 118731,
- "beat": "3"
- }, {
- "time": 119045,
- "beat": "3"
- }, {
- "time": 119365,
- "beat": "3"
- }, {
- "time": 119739,
- "beat": "1"
- }, {
- "time": 120080,
- "beat": "1"
- }, {
- "time": 120432,
- "beat": "1"
- }, {
- "time": 120736,
- "beat": "3"
- }, {
- "time": 121040,
- "beat": "2"
- }, {
- "time": 121392,
- "beat": "3"
- }, {
- "time": 121707,
- "beat": "2"
- }, {
- "time": 122011,
- "beat": "3"
- }, {
- "time": 122331,
- "beat": "2"
- }, {
- "time": 122661,
- "beat": "2"
- }, {
- "time": 122997,
- "beat": "3"
- }, {
- "time": 123301,
- "beat": "3"
- }, {
- "time": 123605,
- "beat": "3"
- }, {
- "time": 123941,
- "beat": "3"
- }, {
- "time": 124256,
- "beat": "3"
- }, {
- "time": 124576,
- "beat": "2"
- }, {
- "time": 124880,
- "beat": "2"
- }, {
- "time": 125200,
- "beat": "3"
- }, {
- "time": 125525,
- "beat": "3"
- }, {
- "time": 125840,
- "beat": "2"
- }, {
- "time": 126155,
- "beat": "3"
- }, {
- "time": 126469,
- "beat": "2"
- }, {
- "time": 126779,
- "beat": "2"
- }, {
- "time": 127104,
- "beat": "3"
- }, {
- "time": 127413,
- "beat": "2"
- }, {
- "time": 127723,
- "beat": "3"
- }, {
- "time": 128027,
- "beat": "3"
- }, {
- "time": 128341,
- "beat": "3"
- }, {
- "time": 128651,
- "beat": "3"
- }, {
- "time": 128960,
- "beat": "3"
- }, {
- "time": 129280,
- "beat": "3"
- }, {
- "time": 129595,
- "beat": "3"
- }, {
- "time": 129909,
- "beat": "3"
- }, {
- "time": 130229,
- "beat": "3"
- }, {
- "time": 130533,
- "beat": "3"
- }, {
- "time": 130843,
- "beat": "2"
- }, {
- "time": 131211,
- "beat": "1"
- }, {
- "time": 131531,
- "beat": "2"
- }, {
- "time": 131845,
- "beat": "1"
- }, {
- "time": 132155,
- "beat": "3"
- }, {
- "time": 132480,
- "beat": "2"
- }, {
- "time": 132784,
- "beat": "3"
- }, {
- "time": 133099,
- "beat": "3"
- }, {
- "time": 133413,
- "beat": "3"
- }, {
- "time": 133744,
- "beat": "3"
- }, {
- "time": 134048,
- "beat": "2"
- }, {
- "time": 134352,
- "beat": "3"
- }, {
- "time": 134672,
- "beat": "3"
- }, {
- "time": 134987,
- "beat": "2"
- }, {
- "time": 135333,
- "beat": "3"
- }, {
- "time": 135637,
- "beat": "3"
- }, {
- "time": 135947,
- "beat": "3"
- }, {
- "time": 136261,
- "beat": "3"
- }, {
- "time": 136571,
- "beat": "3"
- }, {
- "time": 136885,
- "beat": "3"
- }, {
- "time": 137195,
- "beat": "3"
- }, {
- "time": 137504,
- "beat": "3"
- }, {
- "time": 137819,
- "beat": "3"
- }, {
- "time": 138123,
- "beat": "3"
- }, {
- "time": 138432,
- "beat": "3"
- }, {
- "time": 140544,
- "beat": "2"
- }, {
- "time": 140853,
- "beat": "2"
- }, {
- "time": 141163,
- "beat": "3"
- }, {
- "time": 141483,
- "beat": "1"
- }, {
- "time": 141845,
- "beat": "1"
- }, {
- "time": 142160,
- "beat": "1"
- }, {
- "time": 142512,
- "beat": "1"
- }, {
- "time": 142816,
- "beat": "2"
- }, {
- "time": 143141,
- "beat": "1"
- }, {
- "time": 143488,
- "beat": "1"
- }, {
- "time": 143888,
- "beat": "1"
- }, {
- "time": 144325,
- "beat": "1"
- }, {
- "time": 144645,
- "beat": "1"
- }, {
- "time": 144971,
- "beat": "1"
- }, {
- "time": 145280,
- "beat": "2"
- }, {
- "time": 145595,
- "beat": "1"
- }, {
- "time": 145899,
- "beat": "1"
- }, {
- "time": 146203,
- "beat": "2"
- }, {
- "time": 146608,
- "beat": "1"
- }, {
- "time": 146933,
- "beat": "1"
- }, {
- "time": 147264,
- "beat": "1"
- }, {
- "time": 147568,
- "beat": "1"
- }, {
- "time": 147883,
- "beat": "1"
- }, {
- "time": 148192,
- "beat": "1"
- }, {
- "time": 148501,
- "beat": "1"
- }, {
- "time": 148805,
- "beat": "1"
- }, {
- "time": 149109,
- "beat": "1"
- }, {
- "time": 149419,
- "beat": "1"
- }, {
- "time": 149728,
- "beat": "1"
- }, {
- "time": 150160,
- "beat": "1"
- }, {
- "time": 150464,
- "beat": "2"
}]
}, {
"name": "Stranger in the Storm",
"songBeats": [{
@@ -7056,1538 +1940,11 @@
"beat": "1"
}, {
"time": 469,
"beat": "1"
- }, {
- "time": 869,
- "beat": "1"
- }, {
- "time": 1221,
- "beat": "1"
- }, {
- "time": 1541,
- "beat": "1"
- }, {
- "time": 1941,
- "beat": "1"
- }, {
- "time": 2288,
- "beat": "1"
- }, {
- "time": 2635,
- "beat": "1"
- }, {
- "time": 2987,
- "beat": "2"
- }, {
- "time": 3339,
- "beat": "2"
- }, {
- "time": 3691,
- "beat": "1"
- }, {
- "time": 4043,
- "beat": "1"
- }, {
- "time": 4395,
- "beat": "1"
- }, {
- "time": 4752,
- "beat": "1"
- }, {
- "time": 5104,
- "beat": "2"
- }, {
- "time": 5627,
- "beat": "1"
- }, {
- "time": 5931,
- "beat": "2"
- }, {
- "time": 6240,
- "beat": "1"
- }, {
- "time": 6544,
- "beat": "2"
- }, {
- "time": 6869,
- "beat": "1"
- }, {
- "time": 7221,
- "beat": "1"
- }, {
- "time": 7573,
- "beat": "1"
- }, {
- "time": 7931,
- "beat": "1"
- }, {
- "time": 8272,
- "beat": "1"
- }, {
- "time": 8635,
- "beat": "1"
- }, {
- "time": 8944,
- "beat": "1"
- }, {
- "time": 9253,
- "beat": "3"
- }, {
- "time": 9637,
- "beat": "1"
- }, {
- "time": 9941,
- "beat": "3"
- }, {
- "time": 10245,
- "beat": "3"
- }, {
- "time": 10555,
- "beat": "3"
- }, {
- "time": 10875,
- "beat": "3"
- }, {
- "time": 11179,
- "beat": "2"
- }, {
- "time": 11488,
- "beat": "1"
- }, {
- "time": 11803,
- "beat": "1"
- }, {
- "time": 12107,
- "beat": "3"
- }, {
- "time": 12416,
- "beat": "2"
- }, {
- "time": 12720,
- "beat": "3"
- }, {
- "time": 13024,
- "beat": "1"
- }, {
- "time": 13344,
- "beat": "3"
- }, {
- "time": 13648,
- "beat": "2"
- }, {
- "time": 13952,
- "beat": "2"
- }, {
- "time": 14277,
- "beat": "1"
- }, {
- "time": 14635,
- "beat": "1"
- }, {
- "time": 14987,
- "beat": "1"
- }, {
- "time": 15296,
- "beat": "1"
- }, {
- "time": 15605,
- "beat": "3"
- }, {
- "time": 16112,
- "beat": "1"
- }, {
- "time": 16741,
- "beat": "1"
- }, {
- "time": 17045,
- "beat": "3"
- }, {
- "time": 17413,
- "beat": "1"
- }, {
- "time": 17723,
- "beat": "3"
- }, {
- "time": 18165,
- "beat": "1"
- }, {
- "time": 18507,
- "beat": "1"
- }, {
- "time": 18827,
- "beat": "1"
- }, {
- "time": 19157,
- "beat": "3"
- }, {
- "time": 19483,
- "beat": "2"
- }, {
- "time": 19787,
- "beat": "3"
- }, {
- "time": 20101,
- "beat": "3"
- }, {
- "time": 20416,
- "beat": "3"
- }, {
- "time": 20720,
- "beat": "2"
- }, {
- "time": 21035,
- "beat": "3"
- }, {
- "time": 21344,
- "beat": "2"
- }, {
- "time": 21691,
- "beat": "1"
- }, {
- "time": 22032,
- "beat": "1"
- }, {
- "time": 22357,
- "beat": "1"
- }, {
- "time": 22683,
- "beat": "3"
- }, {
- "time": 23061,
- "beat": "1"
- }, {
- "time": 23371,
- "beat": "3"
- }, {
- "time": 23675,
- "beat": "3"
- }, {
- "time": 23984,
- "beat": "2"
- }, {
- "time": 24288,
- "beat": "2"
- }, {
- "time": 24592,
- "beat": "3"
- }, {
- "time": 24896,
- "beat": "2"
- }, {
- "time": 25205,
- "beat": "1"
- }, {
- "time": 25509,
- "beat": "3"
- }, {
- "time": 25856,
- "beat": "1"
- }, {
- "time": 26160,
- "beat": "3"
- }, {
- "time": 26480,
- "beat": "3"
- }, {
- "time": 26789,
- "beat": "3"
- }, {
- "time": 27200,
- "beat": "1"
- }, {
- "time": 27696,
- "beat": "1"
- }, {
- "time": 28005,
- "beat": "1"
- }, {
- "time": 28331,
- "beat": "3"
- }, {
- "time": 28661,
- "beat": "2"
- }, {
- "time": 28987,
- "beat": "3"
- }, {
- "time": 29307,
- "beat": "3"
- }, {
- "time": 29632,
- "beat": "3"
- }, {
- "time": 29947,
- "beat": "2"
- }, {
- "time": 30251,
- "beat": "2"
- }, {
- "time": 30555,
- "beat": "2"
- }, {
- "time": 30864,
- "beat": "1"
- }, {
- "time": 31195,
- "beat": "3"
- }, {
- "time": 31504,
- "beat": "2"
- }, {
- "time": 31808,
- "beat": "3"
- }, {
- "time": 32112,
- "beat": "3"
- }, {
- "time": 32416,
- "beat": "3"
- }, {
- "time": 32720,
- "beat": "3"
- }, {
- "time": 33035,
- "beat": "3"
- }, {
- "time": 33339,
- "beat": "2"
- }, {
- "time": 33653,
- "beat": "2"
- }, {
- "time": 33957,
- "beat": "3"
- }, {
- "time": 34261,
- "beat": "3"
- }, {
- "time": 34571,
- "beat": "2"
- }, {
- "time": 34891,
- "beat": "1"
- }, {
- "time": 35195,
- "beat": "2"
- }, {
- "time": 35504,
- "beat": "2"
- }, {
- "time": 35829,
- "beat": "2"
- }, {
- "time": 36155,
- "beat": "2"
- }, {
- "time": 36469,
- "beat": "1"
- }, {
- "time": 36773,
- "beat": "3"
- }, {
- "time": 37077,
- "beat": "3"
- }, {
- "time": 37387,
- "beat": "3"
- }, {
- "time": 37701,
- "beat": "3"
- }, {
- "time": 38011,
- "beat": "3"
- }, {
- "time": 38336,
- "beat": "3"
- }, {
- "time": 38640,
- "beat": "3"
- }, {
- "time": 38981,
- "beat": "1"
- }, {
- "time": 39296,
- "beat": "2"
- }, {
- "time": 39605,
- "beat": "3"
- }, {
- "time": 39909,
- "beat": "3"
- }, {
- "time": 40213,
- "beat": "2"
- }, {
- "time": 40528,
- "beat": "2"
- }, {
- "time": 40848,
- "beat": "2"
- }, {
- "time": 41163,
- "beat": "2"
- }, {
- "time": 41477,
- "beat": "2"
- }, {
- "time": 41781,
- "beat": "2"
- }, {
- "time": 42165,
- "beat": "2"
- }, {
- "time": 42501,
- "beat": "2"
- }, {
- "time": 42821,
- "beat": "2"
- }, {
- "time": 43125,
- "beat": "3"
- }, {
- "time": 43440,
- "beat": "3"
- }, {
- "time": 43744,
- "beat": "3"
- }, {
- "time": 44059,
- "beat": "2"
- }, {
- "time": 44363,
- "beat": "3"
- }, {
- "time": 44683,
- "beat": "2"
- }, {
- "time": 44987,
- "beat": "3"
- }, {
- "time": 45328,
- "beat": "3"
- }, {
- "time": 45643,
- "beat": "2"
- }, {
- "time": 45957,
- "beat": "3"
- }, {
- "time": 46267,
- "beat": "3"
- }, {
- "time": 46576,
- "beat": "3"
- }, {
- "time": 46885,
- "beat": "3"
- }, {
- "time": 47221,
- "beat": "3"
- }, {
- "time": 47525,
- "beat": "3"
- }, {
- "time": 47829,
- "beat": "3"
- }, {
- "time": 48267,
- "beat": "1"
- }, {
- "time": 48683,
- "beat": "1"
- }, {
- "time": 48987,
- "beat": "1"
- }, {
- "time": 49419,
- "beat": "1"
- }, {
- "time": 49781,
- "beat": "1"
- }, {
- "time": 50107,
- "beat": "1"
- }, {
- "time": 50811,
- "beat": "2"
- }, {
- "time": 51120,
- "beat": "1"
- }, {
- "time": 51424,
- "beat": "2"
- }, {
- "time": 51744,
- "beat": "1"
- }, {
- "time": 52053,
- "beat": "1"
- }, {
- "time": 52400,
- "beat": "1"
- }, {
- "time": 52752,
- "beat": "1"
- }, {
- "time": 53067,
- "beat": "1"
- }, {
- "time": 53392,
- "beat": "1"
- }, {
- "time": 53797,
- "beat": "1"
- }, {
- "time": 54165,
- "beat": "2"
- }, {
- "time": 54528,
- "beat": "1"
- }, {
- "time": 54869,
- "beat": "1"
- }, {
- "time": 55184,
- "beat": "1"
- }, {
- "time": 55573,
- "beat": "1"
- }, {
- "time": 55931,
- "beat": "1"
- }, {
- "time": 56283,
- "beat": "1"
- }, {
- "time": 56635,
- "beat": "1"
- }, {
- "time": 56981,
- "beat": "1"
- }, {
- "time": 57344,
- "beat": "1"
- }, {
- "time": 57669,
- "beat": "1"
- }, {
- "time": 58053,
- "beat": "1"
- }, {
- "time": 58416,
- "beat": "1"
- }, {
- "time": 58768,
- "beat": "1"
- }, {
- "time": 59104,
- "beat": "1"
- }, {
- "time": 59456,
- "beat": "1"
- }, {
- "time": 59808,
- "beat": "1"
- }, {
- "time": 60160,
- "beat": "1"
- }, {
- "time": 60512,
- "beat": "1"
- }, {
- "time": 60869,
- "beat": "2"
- }, {
- "time": 61211,
- "beat": "1"
- }, {
- "time": 61579,
- "beat": "1"
- }, {
- "time": 61925,
- "beat": "1"
- }, {
- "time": 62283,
- "beat": "1"
- }, {
- "time": 62592,
- "beat": "2"
- }, {
- "time": 62912,
- "beat": "3"
- }, {
- "time": 63307,
- "beat": "1"
- }, {
- "time": 63627,
- "beat": "3"
- }, {
- "time": 63984,
- "beat": "1"
- }, {
- "time": 64288,
- "beat": "3"
- }, {
- "time": 64592,
- "beat": "3"
- }, {
- "time": 64901,
- "beat": "1"
- }, {
- "time": 65216,
- "beat": "3"
- }, {
- "time": 65525,
- "beat": "3"
- }, {
- "time": 65835,
- "beat": "3"
- }, {
- "time": 66139,
- "beat": "3"
- }, {
- "time": 66448,
- "beat": "3"
- }, {
- "time": 66757,
- "beat": "3"
- }, {
- "time": 67067,
- "beat": "3"
- }, {
- "time": 67371,
- "beat": "3"
- }, {
- "time": 67675,
- "beat": "3"
- }, {
- "time": 67984,
- "beat": "3"
- }, {
- "time": 68293,
- "beat": "3"
- }, {
- "time": 68624,
- "beat": "2"
- }, {
- "time": 68939,
- "beat": "2"
- }, {
- "time": 69243,
- "beat": "3"
- }, {
- "time": 69557,
- "beat": "1"
- }, {
- "time": 69867,
- "beat": "1"
- }, {
- "time": 70219,
- "beat": "1"
- }, {
- "time": 70571,
- "beat": "1"
- }, {
- "time": 70885,
- "beat": "2"
- }, {
- "time": 71195,
- "beat": "2"
- }, {
- "time": 71499,
- "beat": "1"
- }, {
- "time": 71813,
- "beat": "2"
- }, {
- "time": 72149,
- "beat": "1"
- }, {
- "time": 72464,
- "beat": "1"
- }, {
- "time": 72773,
- "beat": "3"
- }, {
- "time": 73083,
- "beat": "3"
- }, {
- "time": 73397,
- "beat": "2"
- }, {
- "time": 73707,
- "beat": "3"
- }, {
- "time": 74016,
- "beat": "3"
- }, {
- "time": 74325,
- "beat": "3"
- }, {
- "time": 74635,
- "beat": "3"
- }, {
- "time": 74981,
- "beat": "2"
- }, {
- "time": 75291,
- "beat": "3"
- }, {
- "time": 75605,
- "beat": "3"
- }, {
- "time": 75915,
- "beat": "3"
- }, {
- "time": 76245,
- "beat": "3"
- }, {
- "time": 76549,
- "beat": "2"
- }, {
- "time": 76864,
- "beat": "2"
- }, {
- "time": 77179,
- "beat": "2"
- }, {
- "time": 77488,
- "beat": "2"
- }, {
- "time": 77808,
- "beat": "2"
- }, {
- "time": 78123,
- "beat": "2"
- }, {
- "time": 78448,
- "beat": "3"
- }, {
- "time": 78784,
- "beat": "2"
- }, {
- "time": 79093,
- "beat": "3"
- }, {
- "time": 79403,
- "beat": "3"
- }, {
- "time": 79712,
- "beat": "3"
- }, {
- "time": 80016,
- "beat": "3"
- }, {
- "time": 80331,
- "beat": "3"
- }, {
- "time": 80635,
- "beat": "1"
- }, {
- "time": 81264,
- "beat": "1"
- }, {
- "time": 81605,
- "beat": "1"
- }, {
- "time": 81909,
- "beat": "2"
- }, {
- "time": 82219,
- "beat": "2"
- }, {
- "time": 82533,
- "beat": "1"
- }, {
- "time": 82848,
- "beat": "2"
- }, {
- "time": 83173,
- "beat": "2"
- }, {
- "time": 83488,
- "beat": "2"
- }, {
- "time": 83803,
- "beat": "2"
- }, {
- "time": 84139,
- "beat": "2"
- }, {
- "time": 84443,
- "beat": "2"
- }, {
- "time": 84752,
- "beat": "3"
- }, {
- "time": 85061,
- "beat": "2"
- }, {
- "time": 85371,
- "beat": "2"
- }, {
- "time": 85680,
- "beat": "2"
- }, {
- "time": 85984,
- "beat": "2"
- }, {
- "time": 86299,
- "beat": "2"
- }, {
- "time": 86608,
- "beat": "2"
- }, {
- "time": 86917,
- "beat": "2"
- }, {
- "time": 87227,
- "beat": "2"
- }, {
- "time": 87536,
- "beat": "2"
- }, {
- "time": 87840,
- "beat": "2"
- }, {
- "time": 88165,
- "beat": "2"
- }, {
- "time": 88507,
- "beat": "2"
- }, {
- "time": 88821,
- "beat": "2"
- }, {
- "time": 89152,
- "beat": "2"
- }, {
- "time": 89461,
- "beat": "2"
- }, {
- "time": 89861,
- "beat": "2"
- }, {
- "time": 90187,
- "beat": "2"
- }, {
- "time": 90496,
- "beat": "3"
- }, {
- "time": 90805,
- "beat": "2"
- }, {
- "time": 91109,
- "beat": "2"
- }, {
- "time": 91419,
- "beat": "2"
- }, {
- "time": 91728,
- "beat": "2"
- }, {
- "time": 92032,
- "beat": "3"
- }, {
- "time": 92347,
- "beat": "3"
- }, {
- "time": 92656,
- "beat": "3"
- }, {
- "time": 93024,
- "beat": "3"
- }, {
- "time": 93339,
- "beat": "2"
- }, {
- "time": 93653,
- "beat": "2"
- }, {
- "time": 93957,
- "beat": "2"
- }, {
- "time": 94277,
- "beat": "2"
- }, {
- "time": 94608,
- "beat": "3"
- }, {
- "time": 94917,
- "beat": "1"
- }, {
- "time": 95237,
- "beat": "2"
- }, {
- "time": 95568,
- "beat": "2"
- }, {
- "time": 95883,
- "beat": "2"
- }, {
- "time": 96187,
- "beat": "3"
- }, {
- "time": 96496,
- "beat": "2"
- }, {
- "time": 96816,
- "beat": "2"
- }, {
- "time": 97131,
- "beat": "3"
- }, {
- "time": 97435,
- "beat": "2"
- }, {
- "time": 97749,
- "beat": "2"
- }, {
- "time": 98053,
- "beat": "2"
- }, {
- "time": 98368,
- "beat": "3"
- }, {
- "time": 98683,
- "beat": "2"
- }, {
- "time": 98987,
- "beat": "2"
- }, {
- "time": 99301,
- "beat": "2"
- }, {
- "time": 99611,
- "beat": "3"
- }, {
- "time": 99925,
- "beat": "3"
- }, {
- "time": 100235,
- "beat": "3"
- }, {
- "time": 100544,
- "beat": "1"
- }, {
- "time": 100859,
- "beat": "2"
- }, {
- "time": 101163,
- "beat": "2"
- }, {
- "time": 101472,
- "beat": "2"
- }, {
- "time": 101909,
- "beat": "1"
- }, {
- "time": 102341,
- "beat": "1"
- }, {
- "time": 102736,
- "beat": "1"
- }, {
- "time": 103056,
- "beat": "1"
- }, {
- "time": 103429,
- "beat": "1"
- }, {
- "time": 103755,
- "beat": "1"
- }, {
- "time": 104080,
- "beat": "1"
- }, {
- "time": 104453,
- "beat": "2"
- }, {
- "time": 104773,
- "beat": "3"
- }, {
- "time": 105083,
- "beat": "2"
- }, {
- "time": 105413,
- "beat": "3"
- }, {
- "time": 105723,
- "beat": "2"
- }, {
- "time": 106037,
- "beat": "1"
- }, {
- "time": 106347,
- "beat": "2"
- }, {
- "time": 106661,
- "beat": "3"
- }, {
- "time": 106976,
- "beat": "3"
- }, {
- "time": 107280,
- "beat": "3"
- }, {
- "time": 107589,
- "beat": "3"
- }, {
- "time": 107893,
- "beat": "3"
- }, {
- "time": 108203,
- "beat": "3"
- }, {
- "time": 108512,
- "beat": "3"
- }, {
- "time": 108848,
- "beat": "3"
- }, {
- "time": 109152,
- "beat": "3"
- }, {
- "time": 109467,
- "beat": "3"
- }, {
- "time": 109803,
- "beat": "3"
- }, {
- "time": 110107,
- "beat": "3"
- }, {
- "time": 110421,
- "beat": "2"
- }, {
- "time": 110741,
- "beat": "2"
- }, {
- "time": 111045,
- "beat": "2"
- }, {
- "time": 111365,
- "beat": "2"
- }, {
- "time": 111675,
- "beat": "2"
- }, {
- "time": 111984,
- "beat": "1"
- }, {
- "time": 112299,
- "beat": "3"
- }, {
- "time": 112608,
- "beat": "3"
- }, {
- "time": 112928,
- "beat": "3"
- }, {
- "time": 113237,
- "beat": "3"
- }, {
- "time": 113557,
- "beat": "3"
- }, {
- "time": 113877,
- "beat": "3"
- }, {
- "time": 114187,
- "beat": "3"
- }, {
- "time": 114512,
- "beat": "1"
- }, {
- "time": 114832,
- "beat": "1"
- }, {
- "time": 115179,
- "beat": "1"
- }, {
- "time": 115541,
- "beat": "1"
- }, {
- "time": 115941,
- "beat": "1"
- }, {
- "time": 116267,
- "beat": "1"
- }, {
- "time": 116651,
- "beat": "1"
- }, {
- "time": 117013,
- "beat": "1"
- }, {
- "time": 117515,
- "beat": "2"
- }, {
- "time": 117867,
- "beat": "1"
- }, {
- "time": 118208,
- "beat": "1"
- }, {
- "time": 118539,
- "beat": "1"
- }, {
- "time": 118928,
- "beat": "2"
- }, {
- "time": 119280,
- "beat": "2"
- }, {
- "time": 119632,
- "beat": "2"
- }, {
- "time": 119947,
- "beat": "1"
- }, {
- "time": 120336,
- "beat": "1"
- }, {
- "time": 120693,
- "beat": "2"
- }, {
- "time": 121045,
- "beat": "2"
- }, {
- "time": 121397,
- "beat": "2"
- }, {
- "time": 121749,
- "beat": "2"
- }, {
- "time": 122069,
- "beat": "1"
- }, {
- "time": 122395,
- "beat": "1"
- }, {
- "time": 122811,
- "beat": "1"
- }, {
- "time": 123115,
- "beat": "1"
- }, {
- "time": 123515,
- "beat": "2"
- }, {
- "time": 123867,
- "beat": "2"
- }, {
- "time": 124192,
- "beat": "2"
- }, {
- "time": 124576,
- "beat": "2"
- }, {
- "time": 124933,
- "beat": "3"
- }, {
- "time": 125280,
- "beat": "1"
- }, {
- "time": 125637,
- "beat": "2"
- }, {
- "time": 125989,
- "beat": "3"
- }, {
- "time": 126341,
- "beat": "2"
- }, {
- "time": 126661,
- "beat": "1"
- }, {
- "time": 127013,
- "beat": "2"
- }, {
- "time": 127323,
- "beat": "2"
- }, {
- "time": 127637,
- "beat": "2"
- }, {
- "time": 127941,
- "beat": "2"
- }, {
- "time": 128267,
- "beat": "2"
- }, {
- "time": 128571,
- "beat": "2"
- }, {
- "time": 128875,
- "beat": "3"
- }, {
- "time": 129227,
- "beat": "3"
- }, {
- "time": 129531,
- "beat": "3"
- }, {
- "time": 129840,
- "beat": "2"
- }, {
- "time": 130187,
- "beat": "2"
- }, {
- "time": 130496,
- "beat": "2"
- }, {
- "time": 130805,
- "beat": "3"
- }, {
- "time": 131125,
- "beat": "2"
- }, {
- "time": 131440,
- "beat": "1"
- }, {
- "time": 131760,
- "beat": "2"
- }, {
- "time": 132069,
- "beat": "3"
- }, {
- "time": 132379,
- "beat": "3"
- }, {
- "time": 132688,
- "beat": "3"
- }, {
- "time": 133003,
- "beat": "3"
- }, {
- "time": 133323,
- "beat": "2"
- }, {
- "time": 133627,
- "beat": "2"
- }, {
- "time": 133952,
- "beat": "3"
- }, {
- "time": 134368,
- "beat": "3"
- }, {
- "time": 134672,
- "beat": "3"
- }, {
- "time": 134981,
- "beat": "2"
- }, {
- "time": 135339,
- "beat": "1"
- }, {
- "time": 135648,
- "beat": "1"
- }, {
- "time": 135963,
- "beat": "1"
- }, {
- "time": 136283,
- "beat": "1"
- }, {
- "time": 136587,
- "beat": "1"
- }, {
- "time": 136960,
- "beat": "2"
- }, {
- "time": 137312,
- "beat": "1"
- }, {
- "time": 137627,
- "beat": "1"
- }, {
- "time": 137936,
- "beat": "1"
- }, {
- "time": 138240,
- "beat": "2"
- }, {
- "time": 138549,
- "beat": "2"
- }, {
- "time": 138859,
- "beat": "1"
- }, {
- "time": 139168,
- "beat": "2"
- }, {
- "time": 139483,
- "beat": "1"
- }, {
- "time": 139936,
- "beat": "1"
- }, {
- "time": 140299,
- "beat": "1"
- }, {
- "time": 140800,
- "beat": "1"
- }, {
- "time": 141163,
- "beat": "2"
- }, {
- "time": 141483,
- "beat": "2"
- }, {
- "time": 141787,
- "beat": "3"
- }, {
- "time": 142091,
- "beat": "2"
- }, {
- "time": 142395,
- "beat": "1"
- }, {
- "time": 142731,
- "beat": "1"
- }, {
- "time": 143035,
- "beat": "2"
- }, {
- "time": 143349,
- "beat": "3"
- }, {
- "time": 143653,
- "beat": "3"
- }, {
- "time": 143957,
- "beat": "3"
- }, {
- "time": 144267,
- "beat": "3"
- }, {
- "time": 144581,
- "beat": "3"
- }, {
- "time": 144885,
- "beat": "3"
- }, {
- "time": 145189,
- "beat": "3"
- }, {
- "time": 145493,
- "beat": "3"
- }, {
- "time": 145797,
- "beat": "3"
- }, {
- "time": 146112,
- "beat": "3"
- }, {
- "time": 146427,
- "beat": "3"
- }, {
- "time": 146789,
- "beat": "3"
- }, {
- "time": 147099,
- "beat": "3"
- }, {
- "time": 147408,
- "beat": "3"
- }, {
- "time": 147712,
- "beat": "2"
- }, {
- "time": 148027,
- "beat": "2"
- }, {
- "time": 148331,
- "beat": "3"
- }, {
- "time": 148645,
- "beat": "3"
- }, {
- "time": 148955,
- "beat": "3"
- }, {
- "time": 149264,
- "beat": "3"
- }, {
- "time": 149579,
- "beat": "2"
- }, {
- "time": 149888,
- "beat": "3"
- }, {
- "time": 150192,
- "beat": "3"
- }, {
- "time": 150507,
- "beat": "2"
- }, {
- "time": 150811,
- "beat": "2"
- }, {
- "time": 151115,
- "beat": "3"
- }, {
- "time": 151419,
- "beat": "3"
- }, {
- "time": 151728,
- "beat": "3"
- }, {
- "time": 152037,
- "beat": "3"
- }, {
- "time": 152341,
- "beat": "3"
- }, {
- "time": 152656,
- "beat": "1"
- }, {
- "time": 153008,
- "beat": "1"
- }, {
- "time": 153365,
- "beat": "1"
- }, {
- "time": 153723,
- "beat": "1"
- }, {
- "time": 154048,
- "beat": "2"
- }, {
- "time": 154405,
- "beat": "1"
- }, {
- "time": 154752,
- "beat": "1"
- }, {
- "time": 155109,
- "beat": "1"
- }, {
- "time": 155429,
- "beat": "1"
- }, {
- "time": 155813,
- "beat": "1"
- }, {
- "time": 156165,
- "beat": "1"
- }, {
- "time": 156533,
- "beat": "1"
- }, {
- "time": 156837,
- "beat": "1"
- }, {
- "time": 157563,
- "beat": "1"
- }, {
- "time": 157867,
- "beat": "1"
- }, {
- "time": 158192,
- "beat": "2"
- }, {
- "time": 158507,
- "beat": "2"
- }, {
- "time": 158816,
- "beat": "2"
- }, {
- "time": 159120,
- "beat": "1"
- }, {
- "time": 159424,
- "beat": "2"
- }, {
- "time": 159739,
- "beat": "1"
- }, {
- "time": 160043,
- "beat": "1"
- }, {
- "time": 160347,
- "beat": "2"
- }, {
- "time": 160667,
- "beat": "1"
- }, {
- "time": 160981,
- "beat": "2"
- }, {
- "time": 161317,
- "beat": "2"
- }, {
- "time": 161627,
- "beat": "1"
- }, {
- "time": 161936,
- "beat": "1"
- }, {
- "time": 162261,
- "beat": "2"
- }, {
- "time": 162677,
- "beat": "1"
- }, {
- "time": 163061,
- "beat": "1"
- }, {
- "time": 163435,
- "beat": "1"
- }, {
- "time": 163749,
- "beat": "3"
- }, {
- "time": 164053,
- "beat": "3"
- }, {
- "time": 164379,
- "beat": "3"
- }, {
- "time": 164683,
- "beat": "2"
- }, {
- "time": 165003,
- "beat": "3"
- }, {
- "time": 165328,
- "beat": "2"
- }, {
- "time": 165632,
- "beat": "1"
- }, {
- "time": 165936,
- "beat": "3"
- }, {
- "time": 166240,
- "beat": "3"
- }, {
- "time": 166544,
- "beat": "3"
- }, {
- "time": 166859,
- "beat": "3"
- }, {
- "time": 167173,
- "beat": "3"
- }, {
- "time": 167477,
- "beat": "3"
- }, {
- "time": 167808,
- "beat": "2"
- }, {
- "time": 168171,
- "beat": "2"
- }, {
- "time": 168987,
- "beat": "1"
}]
}];
-var isDebug = true;
+var isDebug = false;
var globalSpeed = 20;
var currentRotationAngle = 0;
var fullLog = [];
var fpsText;
@@ -8625,8 +1982,57 @@
var lastBeatTime = 0;
var lastGateHitTime = 0;
var gatePenaltyValue = -2;
if (isDebug) {
+ songListV4 = [{
+ "name": "Words Fly Fast",
+ "duration": 156000,
+ "songBeats": [{
+ "t": 128,
+ "s": "1"
+ }, {
+ "t": 443,
+ "s": "1"
+ }, {
+ "t": 651,
+ "b": "1"
+ }, {
+ "t": 1256,
+ "b": "1"
+ }]
+ }, {
+ "name": "Freedom",
+ "duration": 153600,
+ "songBeats": [{
+ "t": 0,
+ "s": "3"
+ }, {
+ "t": 315,
+ "s": "3"
+ }, {
+ "t": 3218,
+ "b": "1"
+ }, {
+ "t": 3522,
+ "b": "1"
+ }]
+ }, {
+ "name": "Stranger in the Storm",
+ "duration": 170760,
+ "songBeats": [{
+ "t": 165,
+ "s": "1"
+ }, {
+ "t": 469,
+ "s": "1"
+ }, {
+ "t": 582,
+ "b": "0"
+ }, {
+ "t": 1286,
+ "b": "0"
+ }]
+ }];
songListV3 = [{
"name": "Words Fly Fast",
"duration": 5000,
// Real 157240,
@@ -9151,17 +2557,17 @@
// Menu tile positions and track names - arranged in vertical list with increased spacing
var menuData = [{
x: 0,
y: -700,
- text: songListV3[0] ? songListV3[0].name : "Track 01"
+ text: songListV4[0] ? songListV4[0].name : "Track 01"
}, {
x: 0,
y: 0,
- text: songListV3[1] ? songListV3[1].name : "Track 02"
+ text: songListV4[1] ? songListV4[1].name : "Track 02"
}, {
x: 0,
y: 700,
- text: songListV3[2] ? songListV3[2].name : "Track 03"
+ text: songListV4[2] ? songListV4[2].name : "Track 03"
}];
// Create menu tiles
for (var i = 0; i < menuData.length; i++) {
var tile = menuContainer.addChild(LK.getAsset('menuTile', {
@@ -9207,10 +2613,10 @@
}, delay);
// Add touch handler to menu tile
menuTile.down = function () {
// Load the selected track's song data
- if (gateManager && songListV3[trackIndex]) {
- gateManager.currentSong = songListV3[trackIndex];
+ if (gateManager && songListV4[trackIndex]) {
+ gateManager.currentSong = songListV4[trackIndex];
gateManager.resetSong();
}
// Reset speaker manager for the new song
if (speakerManager) {
@@ -9222,11 +2628,11 @@
oldSpeaker.destroy(); // Destroy the speaker object
}
}
speakerManager.speakers = []; // Ensure the speakers array is empty for re-initialization
- if (speakersBeat[trackIndex]) {
- // Ensure speakersBeat data exists for the track
- speakerManager.speakerSongData = speakersBeat[trackIndex];
+ if (songListV4[trackIndex]) {
+ // Use songListV4 for speaker data as well
+ speakerManager.speakerSongData = songListV4[trackIndex];
}
speakerManager.currentBeatIndex = 0;
// speakerManager.songStartTime will be set correctly below
}
remove background
remove background
Futuristic speaker in the shape of a white orb. Face view
white video camera icon
landscape of a furturistic world by night
a white music note
white sparkles emiting from the center. back background
clean red-violet beam from above
button in the shape of a protorealistic holographic futuristc Rectangle . Front view.
above the clouds by a bright night, no visible moon Photorealistic
White Clef de sol
A 20 nodes straight metalic lock chain. High definition. In-Game asset. 2d. High contrast. No shadows
a closed metalic padlock. No visible key hole.
white menu icon
in white