2013-07-20 32 views
7

Am có thể chơi âm thanh với javascript thông qua những điều sau đây,chơi .wav âm thanh tập tin mã hóa trong base64 với javascript

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

này đóng âm thanh cần thiết nhưng đôi khi nó tải chậm hoặc có thể thậm chí không tải ở tất cả nên tôi đã mã hóa âm thanh trong cơ sở 64 và cố gắng phát âm thanh theo cách này.

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

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

nhưng âm thanh không phát, có cách nào không?

+0

Bạn đã làm gì bây giờ? Tại sao bạn mã hóa âm thanh thành base64! – adeneo

+0

để phát nhanh hơn, tôi thấy nó được thực hiện trong plugin, google fart cuộn – Udo

+0

Nếu bạn nói như vậy! – adeneo

Trả lời

24

Điều đó không giống như cách đúng để sử dụng công cụ xây dựng Âm thanh cho HTMLAudioElement/<audio>.

nhẹ điều chỉnh

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

Nếu nó hoạt động trong giao diện điều khiển nhưng không có trong kịch bản, nó có thể nhận được thu gom rác thải, trong đó trường hợp phạm vi nó để nó sẽ ở lại

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

cảm ơn một triệu @paul s., Nhưng bạn nghĩ gì là tải nhanh hơn, base64 hoặc tệp âm thanh? – Udo

+2

@UDtạo nó phụ thuộc vào ý bạn là "tải nhanh hơn". _ ** base64 ** _ có nghĩa là trang mất nhiều thời gian hơn để tải, tùy thuộc vào kích thước tệp _ping_ và kích thước tệp của máy chủ ** có thể dài hơn trang + tệp ** cho ** tải ban đầu ** vì base64 chiếm nhiều không gian hơn nhưng một khi trang được tải, âm thanh sẽ có sẵn ngay lập tức. Ngoài ra, nếu bạn sử dụng tệp _ ** ** _, trang ** tải nhanh hơn **, nhưng có ** có thể bị chậm trễ ** khi âm thanh được tìm nạp từ máy chủ khi bạn muốn phát. –

+0

@UDcreate Nó phụ thuộc. Khi gzipped, base64 khá nhanh. Tệp âm thanh thô có định dạng nhị phân, do đó, nó được đánh giá nhiều hơn ngay từ đầu. Dù sao, định dạng wav là rất lớn. Không có gì sẽ cho bạn biết sự thật nhưng kiểm tra hiệu suất. – Frizi

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

Có không cần phải khai báo splash làm biến đối tượng.

Chuyển đổi Base64 có thể được thực hiện dễ dàng từ: https://dopiaza.org/tools/datauri/index.php

Các vấn đề liên quan