(t)
| 194 | } |
| 195 | |
| 196 | function onEngineTime(t) { |
| 197 | const dur = curDuration() || 1; |
| 198 | state.progress = Math.max(0, Math.min(1, t / dur)); |
| 199 | const head = app.querySelector(".playhead"); |
| 200 | const cur = app.querySelector(".wave-times .cur"); |
| 201 | if (head) head.style.left = state.progress * 100 + "%"; |
| 202 | if (cur) cur.textContent = fmt(t); |
| 203 | paintWaveProgress(); |
| 204 | } |
| 205 | |
| 206 | // Load a track: fetch detail, build lanes, spin up the Web Audio engine. |
| 207 | async function openTrack(card, { autoplay = false } = {}) { |
nothing calls this directly
no test coverage detected