Воспроизведение звукового файла.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