使用 HTML5 可以同時播放同一個聲音多次嗎?


假設您想製作一個測驗應用程式。在其中,如果您點選了錯誤的選項,則會播放背景音訊,提示“錯誤答案”。但是,如果您同時點選了兩個或多個錯誤的選項,則您將無法聽到多次“錯誤答案”的聲音,因為它們在同一時間被點選。那麼,如何解決這個問題呢?

在本文中,您將瞭解使用 HTML5 是否可以同時播放同一個聲音多次。

答案是肯定的!

有兩種方法可以做到這一點。

讓我們在後續部分了解這些方法。

使用 cloneNode() 方法

使用此方法,我們只需要複製或克隆我們想要重複的音訊。

示例

<html > <head> <title> cloneNode() method </title> </head> <body> <h1> cloneNode() method </h1> <button onclick = “myOperation() > Options </button> <audio id=”example” controls autoplay> <source src="/example/audio.mp3" type="audio/mpeg"> <source src="/example/audio.ogg" type="audio/ogg"> </audio> <script> function myOperation() { const object = document.getElementById("example"); const copy = object.cloneNode(true); document.body.appendChild(copy); } </script> </body> </html>

點選選項按鈕時,音訊將被複制並播放,因為您已設定了自動播放控制。您點選按鈕的次數越多,音訊將同時播放的次數就越多。

<button> 標籤用於在 HTML 頁面上新增可點選的按鈕。它具有各種屬性,例如 type、name、formaction、value、autofocus、form 等。

示例

<button type = “submit” > Submit </button>

onclick 事件發生在使用者點選包含該事件的元素時。

語法

  • 在 HTML 中,<element onclick = “myCode” >

  • 在 Javascript 中,object.onclick = myFunction() { code};

示例

<button onclick = “getElementById( ‘example’)” > Example </button>

<audio> 標籤用於向 HTML 頁面新增音訊。它具有 id、controls 等屬性。controls 屬性用於新增音訊控制元件,例如播放、暫停、音量。autoplay 屬性用於自動播放音訊。

<source> 元素允許使用者指定音訊原始檔和要播放的音訊型別。

語法

<audio id= “ “  controls = “ ”>
   <source src = “source of audio” type = “ ” >
</audio>

示例

<audio id = “example” controls autoplay > <source src = “example.ogg” type = “audio/ogg> </audio>

cloneNode() 方法用於建立 HTML 元素的副本。它複製所有屬性和值。

語法

element.cloneNode()

引數

true, false

如果您想複製元素的子元素,則將引數設定為 true。否則,將其設定為 false。

示例

<script> const node = document.getElementById (‘ demo’); const clone = node.cloneNode(true); </script>

appendChild() 方法允許使用者新增一個元素或節點,該元素或節點成為父節點或元素的最後一個子元素。

在我們的程式碼中,它用於將音訊的副本附加到文件的 body 中。

語法

node.appendChild()

引數

要附加的節點或元素。

示例

建立一個<div> 元素並將其附加到文件的 body 中。

<script> let div = document.createElement (“div”); let node = document.createElement( “This is an example”); div.appendChild(node); document.body.appendChild(div); </script>

透過預載入多個版本的音訊

另一種多次播放音訊的方法是預載入多個版本的音訊。在本節中,讓我們探討預載入多個版本音訊的方法 -

示例

let n = 3; let sounds = []; const sources = [ “audio1.mp3”, “audio2.mp3”, “audio3.mp3”]; for (i = 0; i < n; i ++) sounds.push([]); for (i = 0; i < audioSource.length; i ++) for (j = 0; j < n; j ++) sounds[j].push(new Audio(sources[i])); let play = []; for (i = 0; i < audioSources.length; i ++) play[i] = 0; playSound = function (id, vol) { if (vol <= 1 && vol >= 0) sounds[play[id]][id].volume = vol; else sounds[play[id]][id].volume = 1; sounds[play[id]][id].play(); ++ play[id]; if (play[id] >= n) play[id] = 0; }

這裡,

變數n 用於指定您想要重複音訊的次數。

變數sounds 建立一個包含所有音訊的陣列。

for 迴圈用於建立n個不同的音訊副本。

push() 方法用於向陣列新增新項。

示例

const array = [ “this”, “is”, “an”]; array.push( “example”);

Audio() 物件建立並返回一個新的 HTML 音訊物件。

語法

new Audio()

變數 play 用於說明當前播放的是哪個版本的音訊。為此,我們再次使用了 for 迴圈。

playSound 是一個函式,我們告訴瀏覽器播放音訊。

volume 屬性設定當前播放音訊的音量。

語法

audio.volume = value

它是一個數字,指定音量。它必須介於 0 到 1 之間。

示例

1 是最大音量,即 100%,而 0 是最小音量,即靜音。

<script> let div = document.createElement (“div”); let node = document.createElement( “This is an example”); div.appendChild(node); document.body.appendChild(div); </script>

&& 是一個邏輯運算子。如果兩個布林運算元都為真,則運算子返回真,否則返回假。

示例

<p id = “example”></p> <script> let a= 4; let b = 6; document.getElementById( “example” ).innerHTML= (a < 5 && b > 5) + “<br>” + (a < 5 && b < 5); </script>

++ play[id] 用於指定瀏覽器,在每次音訊播放後,都會遞增,以便播放其他版本。

結論

在本文中,介紹了使用 HTML5 和 Javascript 同時多次播放同一個音訊的不同方法和途徑。

更新時間: 2022年10月12日

2K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告