基于JS實(shí)現(xiàn)web端錄音與播放功能
純js實(shí)現(xiàn)web端錄音功能,功能并不是特別多,逐步增加中,詳細(xì)地址:github。
getUserMedia在非localhost和127的情況下,需要開(kāi)啟https,由于騰訊云的沒(méi)備案,demo就不放了,可以自行獲取代碼并啟動(dòng)測(cè)試。
實(shí)現(xiàn)方式
實(shí)現(xiàn)原理的話,主要是以下三點(diǎn),
- 利用webrtc的getUserMedia方法獲取設(shè)備音頻輸入,使用audioprocess得到音頻流(pcm流,范圍-1到1)。
- 轉(zhuǎn)碼,利用前端中的ArrayBuffer等二進(jìn)制操作按采樣位數(shù)處理流信息。
- 使用decodeAudioData轉(zhuǎn)碼arraybuffer到audioBuffer并播放(小文件,大文件使用audio)。
使用方式
script方式
直接引入dist下的recorder.js即可
let recorder = new Recorder();
npm方式
安裝:
npm i js-audio-recorder
調(diào)用:
import Recorder from 'js-audio-recorder'; let recorder = new Recorder();
API
基本方法
// 開(kāi)始錄音 recorder.start(); // 暫停錄音 recorder.pause(); // 繼續(xù)錄音 recorder.resume() // 結(jié)束錄音 recorder.stop(); // 錄音播放 recorder.play(); // 銷(xiāo)毀錄音實(shí)例,釋放資源,fn為回調(diào)函數(shù), recorder.destroy(fn); recorder = null; 下載功能 // 下載pcm文件 recorder.downloadPCM(); // 下載wav文件 recorder.downloadWAV(); // 重命名pcm文件,wav也支持 recorder.downloadPCM('重命名'); 獲取錄音時(shí)長(zhǎng) // 回調(diào)持續(xù)輸出時(shí)長(zhǎng) recorder.onprocess = function(duration) { console.log(duration); } // 手動(dòng)獲取錄音時(shí)長(zhǎng) console.log(recorder.duration);
默認(rèn)配置
sampleBits,采樣位數(shù),默認(rèn)是16
sampleRate,采樣頻率,瀏覽器默認(rèn)的,我的chrome是48000
numChannels,聲道數(shù),默認(rèn)是1
傳入?yún)?shù)
new Recorder時(shí)支持傳入?yún)?shù),
{ sampleBits: 16, // 采樣位數(shù),范圍8或16 sampleRate: 16000, // 采樣率,范圍11025、16000、22050、24000、44100、48000 numChannels: 1, // 聲道,范圍1或2 }
注意
使用127.0.0.1或localhost嘗試,因?yàn)間etUserMedia在高版本的chrome下需要使用https。
兼容性
主要是以下幾個(gè)方面:
Web Audio Api
https://caniuse.com/#search=w...
getUserMedia
https://caniuse.com/#search=g...
Typed Arrays
https://caniuse.com/#search=t...
歡迎訪問(wèn)和查看:recorder。
總結(jié)
以上所述是小編給大家介紹的基于JS實(shí)現(xiàn)web端錄音與播放功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
JS一分鐘在github+Jekyll的博客中添加訪問(wèn)量功能的實(shí)現(xiàn)
這篇文章主要介紹了JS一分鐘在github+Jekyll的博客中添加訪問(wèn)量功能的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04JS字符串分割方法整理匯總示例講解(3種截取方法和6個(gè)輔助方法)
JavaScript在開(kāi)發(fā)中常常會(huì)需要截取字符串,而JS提供了slice()?、substring()、substr()?3種方法實(shí)現(xiàn)截取操作。另外還有字符串相關(guān)的6種輔助方法:indexOf()、lastIndexOf()、split()、join()、concat()、charAt()?。2023-02-02ECharts實(shí)現(xiàn)數(shù)據(jù)超出Y軸最大值max但不隱藏
這篇文章主要為大家介紹了ECharts實(shí)現(xiàn)數(shù)據(jù)超出Y軸最大值max但不隱藏實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10JS實(shí)現(xiàn)勻速運(yùn)動(dòng)的代碼實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)勻速運(yùn)動(dòng)的代碼實(shí)例,有需要的朋友可以參考一下2013-11-11一個(gè)XML格式數(shù)據(jù)轉(zhuǎn)換為圖表的例子
這個(gè)例子使用的是轉(zhuǎn)換為VML的語(yǔ)法,換成其他如SVG的語(yǔ)法,就可以轉(zhuǎn)換成為SVG圖形,單元數(shù)量可以任意加。2010-02-02javascript如何實(shí)現(xiàn)create方法
這篇文章主要介紹了javascript如何實(shí)現(xiàn)create方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11js實(shí)現(xiàn)文本上下來(lái)回滾動(dòng)
本文主要分享了js實(shí)現(xiàn)文本上下來(lái)回滾動(dòng)的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02Bootstrap輪播插件中圖片變形的終極解決方案 使用jqthumb.js
這篇文章主要介紹了Bootstrap輪播插件中圖片變形的終極解決方案,使用jqthumb.js,感興趣的小伙伴們可以參考一下2016-07-07