Обнаружение конца звука WebAudio - PullRequest
0 голосов
/ 23 марта 2019

Я использую javascript для создания радио, и я пытаюсь дать ему различные функциональные возможности, но я должен быть в состоянии определить конец песни, чтобы она заработала.Есть ли способ сделать это?

Я пробовал разные методы, которые я нашел в Интернете, такие как .ended и тому подобное, но я не думаю, что они работают без использования html audio tag.Поэтому я попытался создать аудио-тег, который использует те же данные для источника, который использует мое радио js, и получить длину файла, чтобы остановить мой sourceNode в конце времени и создать новый, но я продолжаю получать нулевое значение, возвращаемое в качестве данных, так чтоэто тоже не работает.

Я хочу сделать что-то вроде:

 context.onended = function() {
    $.ajax({
        url: '../scripts/radio.php',
        data: {
          attr1: 'value1'
        },
        success: function(data) {
        console.log(data);

        fileChosen = true;
        setupAudioNodes();

        var request = new XMLHttpRequest();

        request.addEventListener("progress", updateProgress);
        request.addEventListener("load", transferComplete);
        request.addEventListener("error", transferFailed);
        request.addEventListener("abort", transferCanceled);

        request.open('GET', data, true);
        request.responseType = 'arraybuffer';

        // When loaded decode the data
        request.onload = function() {

            $("#title").html("Title");
            $("#album").html("Goes");
            $("#artist").html("Here");
            onWindowResize();
            $("#title, #artist, #album").css("visibility", "visible");

            // decode the data
            context.decodeAudioData(request.response, function(buffer) {
            // when the audio is decoded play the sound
            sourceNode.buffer = buffer;
            sourceNode.start(0);

            $("#freq, body").addClass("animateHue");
            //on error
            }, function(e) {
                console.log(e);
            });
        };
        request.send();

    }
    });

Я хочу, чтобы это запускалось в конце песни и воспроизводило следующий файл.Что бы сработало, если бы я мог узнать время окончания воспроизводимой в данный момент песни.

1 Ответ

0 голосов
/ 25 марта 2019

Чтобы устранить вышеуказанную проблему, я добавил событие .ended в функцию, в которой был установлен источник:

function setupAudioNodes() {
    // setup a analyser
    analyser = context.createAnalyser();
    // create a buffer source node
    sourceNode = context.createBufferSource();  
    //connect source to analyser as link
    sourceNode.connect(analyser);
    // and connect source to destination
    sourceNode.connect(context.destination);
    //start updating
    rafID = window.requestAnimationFrame(updateVisualization);
    //I had to place a function for the .ended event inside the function sourceNode was set up.
    sourceNode.onended = function() {
        sourceNode.stop(0);
        playFirst();
}
}
...