Воспроизведение звукового файла.wav, закодированного в base64 с использованием JavaScript.

Умею воспроизводить звук с помощью JavaScript через следующее,

    var snd = new Audio('sound.wav');
    snd.play();

При этом воспроизводится необходимый звук, но иногда он загружается медленно или может вообще не загружаться, поэтому я закодировал звук в base 64 и попытался воспроизвести его таким образом.

      var splash = {
prefix: "data:audio/wav;base64,",
sound: [ "*base64 string here*" ] };

    var snd = new Audio(splash); 
    snd.play();

но звук не играет, есть ли способ обойти это?

2 ответа

Решение

Это не похоже на правильный способ использования конструктора Audio для HTMLAudioElement / <audio>,

Небольшая регулировка

var snd = new Audio("data:audio/wav;base64," + base64string);
snd.play();

Если он работает в консоли, но не в скрипте, возможно, он собирает мусор, и в этом случае его объем остается таким, чтобы он оставался

var Sound = (function () {
    var df = document.createDocumentFragment();
    return function Sound(src) {
        var snd = new Audio(src);
        df.appendChild(snd); // keep in fragment until finished playing
        snd.addEventListener('ended', function () {df.removeChild(snd);});
        snd.play();
        return snd;
    }
}());
// then do it
var snd = Sound("data:audio/wav;base64," + base64string);
var snd = new Audio("data:audio/x-wav;base64, <URI data>");
snd.play();

Нет необходимости объявлять splash как переменную объекта.

Преобразование Base64 может быть легко сделано с: https://dopiaza.org/tools/datauri/index.php

Другие вопросы по тегам