From 2f13a09f5853b0edbe3d5a1e79b2c52a79190c6e Mon Sep 17 00:00:00 2001 From: Eduard Prigoana Date: Thu, 5 Feb 2026 17:31:54 +0000 Subject: [PATCH] fix constant skip issue --- js/player.js | 90 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 68 insertions(+), 22 deletions(-) diff --git a/js/player.js b/js/player.js index 74258b8..6a02c72 100644 --- a/js/player.js +++ b/js/player.js @@ -388,29 +388,27 @@ export class Player { this.audio.src = streamUrl; // Wait for audio to be ready before playing (prevents restart issues with blob URLs) - if (isTracker) { - await new Promise((resolve, reject) => { - const onCanPlay = () => { - this.audio.removeEventListener('canplay', onCanPlay); - this.audio.removeEventListener('error', onError); - resolve(); - }; - const onError = (e) => { - this.audio.removeEventListener('canplay', onCanPlay); - this.audio.removeEventListener('error', onError); - reject(e); - }; - this.audio.addEventListener('canplay', onCanPlay); - this.audio.addEventListener('error', onError); + await new Promise((resolve, reject) => { + const onCanPlay = () => { + this.audio.removeEventListener('canplay', onCanPlay); + this.audio.removeEventListener('error', onError); + resolve(); + }; + const onError = (e) => { + this.audio.removeEventListener('canplay', onCanPlay); + this.audio.removeEventListener('error', onError); + reject(e); + }; + this.audio.addEventListener('canplay', onCanPlay); + this.audio.addEventListener('error', onError); - // Timeout after 10 seconds - setTimeout(() => { - this.audio.removeEventListener('canplay', onCanPlay); - this.audio.removeEventListener('error', onError); - reject(new Error('Timeout waiting for audio to load')); - }, 10000); - }); - } + // Timeout after 10 seconds + setTimeout(() => { + this.audio.removeEventListener('canplay', onCanPlay); + this.audio.removeEventListener('error', onError); + reject(new Error('Timeout waiting for audio to load')); + }, 10000); + }); if (startTime > 0) { this.audio.currentTime = startTime; @@ -426,6 +424,30 @@ export class Player { this.applyReplayGain(); this.audio.src = streamUrl; + + // Wait for audio to be ready before playing + await new Promise((resolve, reject) => { + const onCanPlay = () => { + this.audio.removeEventListener('canplay', onCanPlay); + this.audio.removeEventListener('error', onError); + resolve(); + }; + const onError = (e) => { + this.audio.removeEventListener('canplay', onCanPlay); + this.audio.removeEventListener('error', onError); + reject(e); + }; + this.audio.addEventListener('canplay', onCanPlay); + this.audio.addEventListener('error', onError); + + // Timeout after 10 seconds + setTimeout(() => { + this.audio.removeEventListener('canplay', onCanPlay); + this.audio.removeEventListener('error', onError); + reject(new Error('Timeout waiting for audio to load')); + }, 10000); + }); + if (startTime > 0) { this.audio.currentTime = startTime; } @@ -473,6 +495,30 @@ export class Player { this.dashInitialized = false; } this.audio.src = streamUrl; + + // Wait for audio to be ready before playing + await new Promise((resolve, reject) => { + const onCanPlay = () => { + this.audio.removeEventListener('canplay', onCanPlay); + this.audio.removeEventListener('error', onError); + resolve(); + }; + const onError = (e) => { + this.audio.removeEventListener('canplay', onCanPlay); + this.audio.removeEventListener('error', onError); + reject(e); + }; + this.audio.addEventListener('canplay', onCanPlay); + this.audio.addEventListener('error', onError); + + // Timeout after 10 seconds + setTimeout(() => { + this.audio.removeEventListener('canplay', onCanPlay); + this.audio.removeEventListener('error', onError); + reject(new Error('Timeout waiting for audio to load')); + }, 10000); + }); + if (startTime > 0) { this.audio.currentTime = startTime; }