2008-10-09 137 views
79

我在寫一個創建系統交互式模擬的dhtml應用程序。用於模擬的數據是從另一個工具生成的,並且已經有大量的遺留數據。跨平臺,跨瀏覽器的方式來播放Javascript的聲音?

模擬中的某些步驟需要我們播放音頻的「配音」剪輯。我一直無法找到一種簡單的方法在多個瀏覽器中完成此操作。

Soundmanager2非常接近我所需要的,但它只會播放mp3文件,並且遺留數據也可能包含一些.wav文件。

有沒有人有任何其他庫可能有幫助?

+5

很高興你找到你的解決方案,但獨立於此,你可能想考慮將這些.wav文件轉換爲.mp3文件。如果稍微降低音質,您可以從波形文件大小的1/3到1/10的任何位置獲得文件大小。在播放聲音時可能會讓事情更有響應。 – infocyde 2010-09-13 18:35:23

回答

62

您必須包括一個插件,如Real音頻或QuickTime處理的.wav文件,但這應該工作...

//====================================================================== 
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

我從來不理解贊成票。這工作。我已將它部署在我的應用程序中。爲什麼它值得投票? – dacracot 2008-10-09 17:02:01

+1

作爲問這個問題的人,我也想知道。對我來說,這看起來是一個很好的/簡單的解決方案。有人會評論什麼是錯的嗎? – 2008-10-09 17:57:40

+2

我不知道你爲什麼被拒絕,可能是因爲使用了「真正的音頻」或「quicktime」這兩個詞。也許那個貶低你的人不知道它是如何完成的?至於我,+1,你的代碼幾乎與jQuery插件中使用的代碼大致相同,只是在最接受的答案中聲明的代碼... – karlipoppins 2008-10-23 15:59:43

8

我相信最簡單最方便的方法就是使用小型Flash剪輯播放聲音。我很欣賞它不是一個JavaScript的解決方案,但它是爲了實現自己的目標

從以前similar question一些額外的鏈接最簡單的方法:

+1

但我找不到任何將播放WAV文件的Flash解決方案。它出現閃光燈只支持MP3。 我會看看scriptaculous的插件,但我討厭爲這個功能包含一個額外的庫。 – 2008-10-09 15:59:56

9

dacracots代碼是乾淨的基本dom,但也許寫沒有第二個想法? 當然,您首先檢查一個早期嵌入的存在,然後保存嵌入創建線的副本 。

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); 
} 

在掃描解決方案時發現了一些類似的情況。不幸的是我的瀏覽器Mozilla/5.0(X11; U; Linux i686; en-US; rv:1.9.0.15)Gecko/2009102814 Ubuntu/8.04(hardy)Firefox/3.0.15在試用時死亡。

安裝最新的更新後,Firefox仍然崩潰,歌劇保持活着。

5

您可以使用HTML5 <audio>標記。

6

我喜歡dacracot的答案...這裏是jQuery中類似的解決方案:

function Play(sound) { 
    $("#sound_").remove() 
    $('body').append('<embed id="sound_" autostart="true" hidden="true" src="/static/sound/' + sound + '.wav" />'); 
}