0
votes

I'm changing an HTML5 Audio Tag source dynamically based on a current image in the gallery.

But my HTML5 Audio player won't play at all for some reason.

Here is my player:

<div id="audioPlayer">
    <a onclick="playSound()">
        <audio class="audioPlayer" preload="none" controls src="">
            <source type="audio/ogg" src="" class="audio-ogg" />
            <source type="audio/mpeg" src="" class="audio-mp3" />
            <source type="audio/wav" src="" class="audio-wav" />
        </audio>
        <img src="img/playBtn.png" alt="Play" />
    </a>
</div>


function loadSound(galleryIndex) {
    document.getElementsByClassName('audio-ogg')[0].src = "sounds/" + galleryAudio.sounds[galleryIndex].ogg;
    document.getElementsByClassName('audio-mp3')[0].src = "sounds/" + galleryAudio.sounds[galleryIndex].mp3;
    document.getElementsByClassName('audio-wav')[0].src = "sounds/" + galleryAudio.sounds[galleryIndex].wav;
}

function playSound() {
    // galleryAudio.tag.play();
    // console.log(document.getElementsByClassName('audioPlayer')[0]);
    galleryAudio.tag.play();
    return false;
}

function initialise() {
    galleryAudio.tag = document.getElementsByClassName('audioPlayer')[0];
}

var galleryAudio = {
    tag: null,
    sounds: [{
            "ogg": "square.ogg",
            "mp3": "square.mp3",
            "wav": "square.wav"
        }, {
            "ogg": "rectangle.ogg",
            "mp3": "rectangle.mp3",
            "wav": "rectangle.wav"
        }, {
            "ogg": "circle.ogg",
            "mp3": "circle.mp3",
            "wav": "circle.wav"
        }, {
            "ogg": "equilateral-triangle.ogg",
            "mp3": "equilateral-triangle.mp3",
            "wav": "equilateral-triangle.wav"
        }, {
            "ogg": "isosceles-triangle.ogg",
            "mp3": "isosceles-triangle.mp3",
            "wav": "isosceles-triangle.wav"
        }, {
            "ogg": "right-angle-triangle.ogg",
            "mp3": "right-angle-triangle.mp3",
            "wav": "right-angle-triangle.wav"
        }, {
            "ogg": "scalene-triangle.ogg",
            "mp3": "scalene-triangle.mp3",
            "wav": "scalene-triangle.wav"
        }, {
            "ogg": "pentagon.ogg",
            "mp3": "pentagon.mp3",
            "wav": "pentagon.wav"
        }, {
            "ogg": "hexagon.ogg",
            "mp3": "hexagon.mp3",
            "wav": "hexagon.wav"
        }, {
            "ogg": "heptagon.ogg",
            "mp3": "heptagon.mp3",
            "wav": "heptagon.wav"
        }, {
            "ogg": "octagon.ogg",
            "mp3": "octagon.mp3",
            "wav": "octagon.wav"
        }
    ]
};

window.addEventListener('load', initialise, true);

Why won't my audio player play?

2
what is the <a> doing ?Harsha Venkatram
Calling my play sound method on my custom play buttonJamesking56
which browser are you testing it on?razz

2 Answers

1
votes

Because loadSound is never called.

window is loaded
  └─ initialise()

button clicked
  └─ playSound()
       └─ galleryAudio.tag.play()

Try this:

 <audio oncanplay="playSound()" src="...">
0
votes

I've fixed it!

Turns out, if you have <source> tags with src="" in the audio tag, it'll try to play the blank audio source.

I just had to remove that and hey presto!