fix: swap audio element immediately during crossfade so pause controls the correct track

This commit is contained in:
Armin 2026-07-08 16:04:10 +02:00
commit ba7d3d0310

View file

@ -1263,13 +1263,14 @@ function playTrack(i) {
fg.gain.linearRampToValueAtTime(0, now + cd);
ng.gain.setValueAtTime(0, now);
ng.gain.linearRampToValueAtTime(1, now + cd);
audio = audioNext;
audioNext = audio === audioElA ? audioElB : audioElA;
clearTimeout(crossfadeTimer);
crossfadeTimer = setTimeout(() => {
crossfadeTimer = null;
if (audio === audioElA) { audioElA.pause(); audioElA.removeAttribute('src'); audioElA.load(); }
else { audioElB.pause(); audioElB.removeAttribute('src'); audioElB.load(); }
audio = audioNext;
audioNext = audio === audioElA ? audioElB : audioElA;
audioNext.pause();
audioNext.removeAttribute('src');
audioNext.load();
isCrossfading = false;
}, cd * 1000 + 100);
updateUI();
@ -1371,6 +1372,7 @@ playBtn.addEventListener('click', () => {
audio.play().catch(() => {});
} else {
audio.pause();
if (isCrossfading) audioNext.pause();
}
});
prevBtn.addEventListener('click', prevTrack);