I am trying to create a small sound dashboard app (similar in functionality to Noisli). For every "sound" I am using a for loop in Svelte to generate its HTML:
{#each songList as {id, name}}
<button id="{name}Container" on:click={() => handleSong(name)} class="sound">
<p class="soundCaption">{name}</p>
<audio id="{name}" src="/audio/{name}.mp3" loop></audio>
</button>
{/each}
When the container is clicked it is then handled with this function:
function handleSound(soundName){
const audio = document.getElementById(soundName);
const temp = soundName + "Container";
var audioContainer = document.getElementById(temp);
if (audio.paused) {
audio.play();
audioContainer.style.backgroundColor = "rgba(0, 0, 0, 0.3)";
} else {
audio.pause();
audioContainer.style.backgroundColor = "rgba(0, 0, 0, 0.12)";
}
}
The problem I have is that on a local dev server the audio works & plays fine, however when I build it (using Vite) and deploy it (using Firebase hosting), the audio clips only play for a few seconds before throwing this error:
Media resource https://www.example.com/audio/example-sound.mp3 could not be decoded, error: Error Code: NS_ERROR_DOM_MEDIA_DECODE_ERR (0x806e0004)
Details: virtual mozilla::MediaResult __cdecl mozilla::FFmpegAudioDecoder<46465650>::DoDecode(mozilla::MediaRawData *, uint8_t *, int, bool *, mozilla::MediaDataDecoder::DecodedData &): FFmpeg audio error
Only Firefox gives me this error, however the problem happens in all browsers I've tried (Brave, Vivaldi, Firefox & Edge)
The audio clips work fine if you load them directly on the hosted version too, without any errors (e.g. https://www.example.com/audio/example-sound.mp3)
I have tried re-encoding all of the MP3 files with Audacity to no avail, and simplified all of the code within the handler (previously it would slowly fade sounds in/out etc.).
EDIT: After a lot of debugging I think the issue is to do with Cloudflare - I'm hosting two live websites on different domains both with this project on, one with Cloudflare and one without, and the one without it works perfectly fine.
Via Active questions tagged javascript - Stack Overflow https://ift.tt/nfDTGYI
Comments
Post a Comment