JavaScript中播放音頻文件的幾種常用方法
前言
我們可以使用 <audio>
標(biāo)簽將音頻文件添加到頁(yè)面中。這是播放音頻文件而不涉及 JavaScript 的最簡(jiǎn)單方法。<audio>
標(biāo)簽的 src
屬性指定音頻文件的地址。它還具有其他有用的屬性,例如控制,自動(dòng)播放和循環(huán)。但是有時(shí)候,我們想要自動(dòng)控制并自動(dòng)播放聲音,例如在游戲中,單擊或任何其他事件時(shí)。在這種情況下,我們希望 JavaScript 根據(jù)我們的邏輯來(lái)控制和播放文件。
[在 JavaScript 中使用 .play() 播放音頻文件]
我們只需創(chuàng)建音頻對(duì)象實(shí)例即可使用 JavaScript 加載音頻文件,即使用 new Audio()
。加載音頻文件后,我們可以使用 .play()
函數(shù)對(duì)其進(jìn)行播放。
const music = new Audio('adf.wav'); music.play(); music.loop =true; music.playbackRate = 2; music.pause();qqazszdgfbgtyj
在上面的代碼中,我們加載一個(gè)音頻文件,然后簡(jiǎn)單地播放它。JavaScript 為我們提供了很多靈活性和大量功能。我們可以控制播放速率,循環(huán)播放音頻,暫停和播放聲音。唯一的問(wèn)題是,一次處理多個(gè)聲音,與最新技術(shù)相比,其控制能力有限。
[使用 Web Audio API 播放音頻文件]
盡管設(shè)置起來(lái)有些麻煩,但是 Web Audio API 為我們提供了很多靈活性和對(duì)聲音的控制。它是對(duì)典型 HTML5 音頻的重大改進(jìn),并允許復(fù)雜的音頻處理。它使用 HTML5 音頻將音頻元素表示為稱為音頻上下文的有向圖樣結(jié)構(gòu)上的節(jié)點(diǎn)。音頻源和目的地之間可以連接許多類型的節(jié)點(diǎn),例如音量節(jié)點(diǎn),可以幫助我們操縱音量。
<audio src='audio_file.mp3'></audio> const audioContext = new AudioContext(); const element = document.querySelector(audio); const source = audioContext.createMediaElementSource(element); source.connect(audioContext.destination) audio.play();
在這里,我們首先初始化音頻上下文,并獲得對(duì)音頻文件源的引用。然后,我們將該源連接到全球目標(biāo),然后完成音頻設(shè)置。
[使用 howler.js 庫(kù)以 JavaScript 播放音頻文件]
howler.js
是一個(gè)音頻處理庫(kù)。它使我們能夠利用 Web Audio API 的功能和 HTML 5 Audio 的簡(jiǎn)單性。它廣泛用于 react 類組件,以處理基于瀏覽器的音頻,尤其是在播放多個(gè)音頻源時(shí)。它可以使用 Howler 對(duì)象控制全局音頻上下文,然后使用 Howl 控制音頻或一組音頻。
<script src="https://cdnjs.cloudflare.com/ajax/libs/howler/2.2.1/howler.min.js"></script> <script> var sound = new Howl({ src: ['https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3'], volume: 1.0, onend: function () { alert('We finished with the setup!'); } }); sound.play() </script>
除 Internet Explorer 以外的所有主要瀏覽器都支持所有這些方法。Internet Explorer 不支持 Web Audio API 和 howler.js
。
附:利用JavaScript實(shí)現(xiàn)音頻文件的播放和暫停
HTML5 規(guī)定了一種通過(guò) audio 元素來(lái)包含音頻的標(biāo)準(zhǔn)方法。
audio 元素能夠播放聲音文件或者音頻流。
注意看,a.paused表示當(dāng)前音頻的狀態(tài),而音頻的暫停和播放對(duì)應(yīng)的方法分別為pause()和play() ——-(自認(rèn)為很值得注意的地方 我當(dāng)時(shí)就犯了這種錯(cuò)誤)
<button onclick="clickA(this)">播放/暫停</button> <audio id="audio" src="raw/1.mp3">您的瀏覽器不支持</audio> <script> var a = document.getElementById("audio"); function clickA() { //如果暫停 點(diǎn)擊即可播放 if (a.paused) { // 播放 a.play(); //如果播放 點(diǎn)擊暫停 } else if (a.play()) { //暫停 a.pause(); } } </script>
總結(jié)
到此這篇關(guān)于JavaScript中播放音頻文件的幾種常用方法的文章就介紹到這了,更多相關(guān)JS播放音頻文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
echarts中幾種漸變方式的具體實(shí)現(xiàn)方式
在使用echarts繪制圖表時(shí),有的時(shí)候需要使用漸變色,下面這篇文章主要給大家介紹了關(guān)于echarts中幾種漸變方式的具體實(shí)現(xiàn)方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11Electron中關(guān)于靜態(tài)資源加載問(wèn)題的解決方案
通常,我們?cè)谑褂胑lectron框架的時(shí)候會(huì)使用到loadFile/loadURL進(jìn)行頁(yè)面的加載,分別是加載本地文件和加載網(wǎng)絡(luò)文件,當(dāng)nuxtjs/nextjs想引入到electron中顯示時(shí),你會(huì)遇到資源路徑引用的問(wèn)題,所以本文給大家介紹了Electron中關(guān)于靜態(tài)資源加載問(wèn)題的解決方案2024-12-12JS模擬百度搜索框和選項(xiàng)卡的實(shí)現(xiàn)
本文主要介紹了JS模擬百度搜索框和選項(xiàng)卡的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03原生javascript上傳圖片帶進(jìn)度條【實(shí)例分享】
本文主要介紹了原生javascript上傳圖片帶進(jìn)度條的實(shí)例詳解。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04js保留兩位小數(shù)最簡(jiǎn)單的實(shí)現(xiàn)方法
JS數(shù)據(jù)格式化是在進(jìn)行web前端開(kāi)發(fā)時(shí)常碰到的事情,特別是在數(shù)據(jù)類型為Float的數(shù)據(jù)就需要特殊處理,如保留兩位小數(shù)、小數(shù)點(diǎn)后的數(shù)據(jù)是否需要四舍五入等等,下面這篇文章主要給大家介紹了關(guān)于js保留兩位小數(shù)最簡(jiǎn)單的實(shí)現(xiàn)方法,需要的朋友可以參考下2023-05-05使用Javascript在HTML中顯示實(shí)時(shí)時(shí)間
這篇文章主要為大家詳細(xì)介紹了使用Javascript在HTML中顯示實(shí)時(shí)時(shí)間,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06iframe的onload在Chrome/Opera中執(zhí)行兩次Bug的解決方法
創(chuàng)建iframe對(duì)象,添加load事件, 再將iframe添加到body中。Chrome/Opera中會(huì)造成load事件的handler執(zhí)行兩次。2011-03-03