2008-10-09 33 views
79

Tôi đang viết một ứng dụng dhtml tạo ra một mô phỏng tương tác của một hệ thống. Dữ liệu cho mô phỏng được tạo từ một công cụ khác và đã có một lượng dữ liệu kế thừa rất lớn.Nền tảng chéo, cách trình duyệt chéo để phát âm thanh từ Javascript?

Một số bước trong mô phỏng yêu cầu chúng tôi phát các clip âm thanh "lồng tiếng". Tôi đã không thể tìm thấy một cách dễ dàng để thực hiện điều này trên nhiều trình duyệt.

Soundmanager2 đến khá gần với những gì tôi cần, nhưng nó sẽ chỉ phát tệp mp3 và dữ liệu cũ cũng có thể chứa một số tệp .wav.

Có ai có bất kỳ thư viện nào khác có thể trợ giúp không?

+5

Rất vui khi bạn tìm thấy giải pháp của mình, nhưng độc lập với giải pháp đó, bạn có thể cân nhắc chuyển đổi các tệp .wav đó thành tệp .mp3. Nếu chất lượng âm thanh thấp hơn một chút, bạn có thể giảm kích thước tệp xuống từ bất cứ đâu từ 1/3 đến 1/10 kích thước của tệp sóng. Có thể làm cho mọi việc trở nên nhạy hơn một chút khi chơi âm thanh. – infocyde

Trả lời

62

Bạn sẽ phải bao gồm một plug-in như Real Audio hoặc QuickTime để xử lý các tập tin .wav, nhưng điều này nên làm việc ...

//====================================================================== 
var soundEmbed = null; 
//====================================================================== 
function soundPlay(which) 
    { 
    if (!soundEmbed) 
     { 
     soundEmbed = document.createElement("embed"); 
     soundEmbed.setAttribute("src", "/snd/"+which+".wav"); 
     soundEmbed.setAttribute("hidden", true); 
     soundEmbed.setAttribute("autostart", true); 
     } 
    else 
     { 
     document.body.removeChild(soundEmbed); 
     soundEmbed.removed = true; 
     soundEmbed = null; 
     soundEmbed = document.createElement("embed"); 
     soundEmbed.setAttribute("src", "/snd/"+which+".wav"); 
     soundEmbed.setAttribute("hidden", true); 
     soundEmbed.setAttribute("autostart", true); 
     } 
    soundEmbed.removed = false; 
    document.body.appendChild(soundEmbed); 
    } 
//====================================================================== 
+14

Tôi không bao giờ hiểu được phiếu bầu. Những công việc này. Tôi đã triển khai nó trong ứng dụng của mình. Tại sao nó xứng đáng được bỏ phiếu xuống? – dacracot

+1

Là người hỏi câu hỏi, tôi cũng thắc mắc. Nó trông giống như một giải pháp khá tốt/đơn giản với tôi. Ai đó có thể bình luận về những gì sai? –

+2

Tôi không biết tại sao bạn bị bỏ phiếu, có thể cho việc sử dụng các từ "âm thanh thực" hoặc "quicktime" .. ?? Có lẽ người downvoted bạn không có đầu mối về cách nó đã được thực hiện? Đối với tôi, +1, mã của bạn chỉ tương tự như mã được sử dụng trong plugin jQuery được nêu trong câu trả lời được chấp nhận nhất ... – karlipoppins

8

Tôi tin rằng cách đơn giản và thuận tiện nhất là phát âm thanh bằng cách sử dụng một đoạn Flash nhỏ. Tôi đánh giá cao nó không phải là một giải pháp JavaScript nhưng nó là cách dễ nhất để đạt được mục tiêu của bạn

Một số liên kết thêm từ trước similar question:

+1

Nhưng tôi không thể tìm thấy bất kỳ giải pháp flash nào sẽ phát các tệp WAV. Nó xuất hiện flash chỉ hỗ trợ MP3. Tôi sẽ xem plugin của scriptaculous, nhưng tôi ghét phải bao gồm toàn bộ thư viện bổ sung cho chức năng này một chút. –

9

mã dacracots là phần cơ bản sạch sẽ, nhưng có thể được viết mà không có suy nghĩ thứ hai? Tất nhiên bạn kiểm tra sự tồn tại của một đoạn mã trước đó trước và lưu các dòng tạo bản sao trùng lặp.

var soundEmbed = null; 
//===================================================================== 

function soundPlay(which) 
{ 
    if (soundEmbed) 
     document.body.removeChild(soundEmbed); 
    soundEmbed = document.createElement("embed"); 
    soundEmbed.setAttribute("src", "/snd/"+which+".wav"); 
    soundEmbed.setAttribute("hidden", true); 
    soundEmbed.setAttribute("autostart", true); 
    document.body.appendChild(soundEmbed); 
} 

Đến với suy nghĩ ở đây khi quét tìm giải pháp cho tình huống tương tự. Thật không may trình duyệt của tôi Mozilla/5.0 (X11; U; Linux i686; en-US; rv: 1.9.0.15) Gecko/2009102814 Ubuntu/8.04 (hardy) Firefox/3.0.15 chết khi thử điều này.

Sau khi cài đặt bản cập nhật mới nhất, firefox vẫn bị treo, opera vẫn hoạt động.

5

Bạn có thể sử dụng thẻ HTML5 <audio>.

+0

Câu hỏi được đặt ra cụ thể cho giải pháp "Đa nền tảng, trình duyệt chéo". Thẻ HTML5 '

+0

NB vào năm 2018 HTML5 Âm thanh được hỗ trợ bởi tất cả trừ Opera. –

6

Tôi thích câu trả lời của dacracot ... đây là một giải pháp tương tự trong jQuery:

function Play(sound) { 
    $("#sound_").remove() 
    $('body').append('<embed id="sound_" autostart="true" hidden="true" src="/static/sound/' + sound + '.wav" />'); 
} 
3
<audio controls> 
    <source src="horse.ogg" type="audio/ogg"> 
    <source src="horse.mp3" type="audio/mpeg"> 
Your browser does not support the audio element. 
</audio> 

Xem http://www.w3schools.com/html/html5_audio.asp để biết thêm chi tiết.

1

Có một giải pháp đơn giản hơn nhiều so với việc này hơn là phải sử dụng các trình cắm thêm. IE có thuộc tính bgsound riêng của nó và có một cách khác bạn có thể làm cho nó hoạt động cho tất cả các trình duyệt khác.Hãy xem hướng dẫn của tôi tại đây = http://www.andy-howard.com/how-to-play-sounds-cross-browser-including-ie/index.html

+0

Giải pháp của bạn trông thú vị, tôi sẽ thử. Lưu ý, có một nhận xét trên trang bạn đã liên kết để chỉ ra rằng trong IE11, âm thanh đang chạy trong một vòng lặp vô tận. Đây có phải là vấn đề không? Có cách nào để tránh nó không? –

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