()
| 415 | // ─── Wire transport buttons ─── |
| 416 | |
| 417 | export function wireTransportButtons() { |
| 418 | playBtn.addEventListener("click", togglePlayPause); |
| 419 | playMiniBtn?.addEventListener("click", togglePlayPause); |
| 420 | stopBtn.addEventListener("click", stopTransport); |
| 421 | loopBtn.addEventListener("click", toggleLoop); |
| 422 | wireLoopDrag(); |
| 423 | wireZoomButtons(); |
| 424 | wireLaneScrollSync(); |
| 425 | masterFader?.addEventListener("input", () => { |
| 426 | setMasterVolume(parseFloat(masterFader.value)); |
| 427 | applyMix(); |
| 428 | }); |
| 429 | masterFader?.addEventListener("dblclick", () => { |
| 430 | masterFader.value = "0.5"; |
| 431 | setMasterVolume(0.5); |
| 432 | applyMix(); |
| 433 | }); |
| 434 | wireSpeedControl(); |
| 435 | } |
| 436 | |
| 437 | function applySpeed(rate) { |
| 438 | const clamped = Math.max(0.25, Math.min(2, rate)); |
no test coverage detected