由于“无法加载资源:net :: ERR_CONNECTION_RESET”,网页上的音频文件在一段延长的时间后停止播放

时间:2016-12-05 19:40:54

标签: javascript html audio web web-applications

我有一个循环播放音频的网页。经过一段时间后,雨声不再发出错误 “Failed to load resource: net::ERR_CONNECTION_RESET (https://kozysounds.com/audio/rain.m4a )”, 除非重新加载页面,否则无法再次启动。

尝试重播音频而不重新加载页面会产生以下异常:kozysounds.com/:1 Uncaught (in promise) DOMException: The play() request was interrupted by a call to pause().

对于导致它的原因及其仅影响雨音频文件的原因有任何想法吗?

网页在这里:https://kozysounds.com/

使用Javascript:

var audioList = document.querySelectorAll(".audio-file"); // Grab all audio elements
var playButtonList = document.querySelectorAll(".play-button"); //Grab all play buttons
var sliderList = document.querySelectorAll(".slider"); // Grab all sliders
var images = []; // Don't need to use this, it is just for pre-loading images

/* TODO:
    - Fix play/pause DOM exception
    - Crossfade audio to remove noticeable cutoff
*/

// Preloads images
function preloadImages() {
    for (var i = 0; i < arguments.length; i++) {
        images[i] = new Image();
        images[i].src = preloadImages.arguments[i];
    }
}

//-----------------------Button stuff----------------------------

function enablePlayButtons(playButtonList) {
    //console.log("Play button list: " + playButtonList);
    for (var i = 0; i < playButtonList.length; i++) {
        playButtonList[i].addEventListener("mouseover", highlightPlayButton, false);
        playButtonList[i].addEventListener("mouseout", unHighlightPlayButton, false);
        playButtonList[i].addEventListener("click", play, false);
    }

}

function enablePauseButtons(pauseButtonList) {
    //console.log("Pause button list: " + pauseButtonList);
    for (var i = 0; i < pauseButtonList.length; i++) {
        pauseButtonList[i].addEventListener("mouseover", highlightPauseButton, false);
        pauseButtonList[i].addEventListener("mouseout", unHighlightPauseButton, false);
        pauseButtonList[i].addEventListener("click", pause, false);
    }
}

function highlightPlayButton() {
    this.src = "./img/play-filled.png";
}

function unHighlightPlayButton() {
    this.src = "./img/play.png";
}

function highlightPauseButton() {
    this.src = "./img/pause-filled.png";
}

function unHighlightPauseButton() {
    //console.log(this);
    this.src = "./img/pause.png";
}

// Probably a better way of doing this
function play() {
    var audio = this.parentNode.getElementsByClassName("audio-file")[0];
    var button = this.parentNode.getElementsByClassName("play-button")[0];
    audio.play();
    this.src = "./img/pause.png"; // Swap to pause image
    button.className = "pause-button";
    button.removeEventListener("mouseover", highlightPlayButton, false); // Remove old event listeners
    button.removeEventListener("mouseout", unHighlightPlayButton, false);
    button.removeEventListener("click", play, false);
    enablePauseButtons(this.parentNode.getElementsByClassName("pause-button")); // Enable listeners for the new pause button
}

// Probably a better way of doing this
function pause() {
    var audio = this.parentNode.getElementsByClassName("audio-file")[0];
    var button = this.parentNode.getElementsByClassName("pause-button")[0];
    audio.pause();
    this.src = "./img/play.png"; // Swap to play image
    button.className = "play-button";
    button.removeEventListener("mouseover", highlightPauseButton, false); // Remove old event listeners
    button.removeEventListener("mouseout", unHighlightPauseButton, false);
    button.removeEventListener("click", pause, false);
    enablePlayButtons(this.parentNode.getElementsByClassName("play-button")); // Enable listeners for the new play button

}

//----------------------------------------------------------

function enableSliders(sliderList) {
    for (var i = 0; i < sliderList.length; i++) {
        var slider = sliderList[i];
        noUiSlider.create(slider, {
            start: .5,
            range: {
                'min': 0,
                'max': 1
            }
        });
        bindValues(sliderList[i]); // Bind slider value to audio volume
    }
}

function bindValues(slider) {
    slider.noUiSlider.on('update', function(values, handle) {
        slider.parentNode.getElementsByClassName("audio-file")[0].volume = values[handle]; // Get the audio file assoiated with the slider and set its volume
    });
}

preloadImages(
    "img/handle.png", // Preload the images for better responsiveness
    "img/pause.png", // Better than loading images upon event triggers e.g. on mouseover
    "img/play.png",
    "img/pause-filled.png",
    "img/play-filled.png"
);

enablePlayButtons(playButtonList); // Initialize the play buttons
enableSliders(sliderList); // Initialize the sliders

HTML:

<!DOCTYPE html>
<html>

<head>
    <link rel='shortcut icon' type='image/x-icon' href='img/favicon.ico'>
    <title>Kozy</title>
    <link href="https://bootswatch.com/sandstone/bootstrap.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=Roboto:100,400" rel="stylesheet">
    <link href="css/nouislider.css" rel="stylesheet">
    <link href="css/index.css" rel="stylesheet">
</head>

<body>
    <div class="header"></div>
    <div class="title-section">
        <h1 id="title">Kozy</h1>
        <hr id="title-underline">
        <p id="title-note">Work | Study | Focus</p>
    </div>
    <div class="sound-board">
        <div class="sb-row">
            <span class="audio-block">
                <img class="play-button" src="img/play.png">
                <div class="slider" id="rain-slider"></div>
                <h2>Rain</h2>
                <audio class="audio-file" id="rain" loop preload="auto">
                    <source src="audio/rain.m4a" type="audio/mp4">
                </audio>         
            </span>
            <span class="audio-block">
                <img class="play-button" src="img/play.png">
                <div class="slider" id="fire-slider"></div>
                <h2>Fire</h2>
                <audio class="audio-file" id="fire" loop preload="auto">
                    <source src="audio/fire.m4a" type="audio/mp4">
                </audio>
            </span>
            <span class="audio-block">
                <img class="play-button" src="img/play.png">
                <div class="slider" id="waves-slider"></div>
                <h2>Waves</h2>
                <audio class ="audio-file" id="waves" loop preload="auto">
                    <source src="audio/waves.m4a" type="audio/mp4">
                </audio>
            </span>
            <span class="audio-block">
                <img class="play-button" src="img/play.png">
                <div class="slider" id="cafe-slider"></div>
                <h2>Cafe</h2>
                <audio class ="audio-file" id="cafe" loop preload="auto">
                    <source src="audio/cafe.m4a" type="audio/mp4">
                </audio>
            </span>
            <span class="audio-block">
                <img class="play-button" src="img/play.png">
                <div class="slider" id="jungle-slider"></div>
                <h2>Jungle</h2>
                <audio class ="audio-file" id="jungle" loop preload="auto">
                    <source src="audio/jungle.m4a" type="audio/mp4">
                </audio>
            </span>
            <span class="audio-block">
                <img class="play-button" src="img/play.png">
                <div class="slider" id="thunder-slider"></div>
                <h2>Thunder</h2>
                <audio class ="audio-file" id="thunder" loop preload="auto">
                    <source src="audio/thunder.m4a" type="audio/mp4">
                </audio>
            </span>
        </div>
    </div>
    <div class="footer">
        <a target="_blank" href="https://kozysounds.com/sources.html">Audio Sources</a>
        <span id="divider">|</span>
        <a target="_blank" href="http://newtopwallpapers.com/wp-content/uploads/2013/04/Rain-Falling-on-Trees.jpeg">Background Source</a>
    </div>
    <!-- Scripts-->
    <script src="js/nouislider.min.js"></script>
    <script src="js/index.js"></script>
    <script src="https://www.gstatic.com/firebasejs/3.5.2/firebase-app.js"></script>
    <script>
    // Initialize Firebase
    var config = {
        apiKey: "apiKey",
        authDomain: "authDomain",
        databaseURL: "databaseURL",
        storageBucket: "storageBucket",
        messagingSenderId: "messagingSenderId"
    };
    firebase.initializeApp(config);
    </script>
</body>

</html>

0 个答案:

没有答案