2013-07-20 84 views
7

我能夠通過以下使用JavaScript播放聲音編碼的文件,播放.wav聲音以base64的JavaScript

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

此播放所需的聲音,但有時加載緩慢或者甚至可能根本無法加載 所以我在64位編碼聲音,並試圖用這種方式播放。

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

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

但聲音不起作用,有沒有辦法解決它?

+0

你做什麼現在:

Base64編碼轉換就可以很容易地從做?你爲什麼要將音頻編碼爲base64! – adeneo

+0

這樣它會玩的更快,我看到它在一個插件中完成,谷歌屁滾動 – Udo

+0

如果你這麼說! – adeneo

回答

24

這看起來不像正確的方式使用音頻構造函數爲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); 
+0

感謝百萬@paul s。,但你認爲加載速度更快,base64或聲音文件? – Udo

+2

@UD創建它取決於你的意思是「加載速度更快」。 _ ** base64 ** _表示頁面加載時間較長,具體取決於服務器的_ping_和聲音文件大小**可能比頁面+文件**更長,因爲**初始加載**因爲base64佔用更多空間,但是一旦頁面被加載,聲音將立即可用。或者,如果您使用_ **文件** _,則**網頁的加載速度會更快**,但當您想要播放聲音時,從服務器獲取聲音時,**可能會延遲**。 –

+0

@UDcreate它取決於。當gzip時,base64非常快。原始聲音文件具有二進制格式,因此它在開始時更加平滑。無論如何,wav格式非常大​​。沒有什麼會告訴你事實,但性能測試。 – Frizi