Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

play .wav sound file encoded in base64 with javascript

Am able to play sound with javascript through the following,

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

This plays the required sound but sometimes it loads slowly or might not even load at all so i encoded the sound in base 64 and tried to play it this way.

      var splash = { prefix: "data:audio/wav;base64,", sound: [ "*base64 string here*" ] };      var snd = new Audio(splash);      snd.play(); 

but the sound does not play, is there a way around it ?

like image 303
Udo Avatar asked Jul 20 '13 13:07

Udo


2 Answers

That doesn't look like the correct way to use the Audio constructor for HTMLAudioElement / <audio>.

Slight adjustment

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

If it works in console but not in script, it may be getting garbage collected, in which case scope it so it will stay

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); 
like image 89
Paul S. Avatar answered Sep 20 '22 12:09

Paul S.


var snd = new Audio("data:audio/x-wav;base64, <URI data>"); snd.play(); 

There is no need to declare splash as an object variable.

Base64 conversion can be done easily from: https://dopiaza.org/tools/datauri/index.php

like image 27
Fong Kah Chun Avatar answered Sep 23 '22 12:09

Fong Kah Chun