基于JS實(shí)現(xiàn)web端錄音與播放功能
純js實(shí)現(xiàn)web端錄音功能,功能并不是特別多,逐步增加中,詳細(xì)地址:github。
getUserMedia在非localhost和127的情況下,需要開啟https,由于騰訊云的沒備案,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
基本方法
// 開始錄音
recorder.start();
// 暫停錄音
recorder.pause();
// 繼續(xù)錄音
recorder.resume()
// 結(jié)束錄音
recorder.stop();
// 錄音播放
recorder.play();
// 銷毀錄音實(shí)例,釋放資源,fn為回調(diào)函數(shù),
recorder.destroy(fn);
recorder = null;
下載功能
// 下載pcm文件
recorder.downloadPCM();
// 下載wav文件
recorder.downloadWAV();
// 重命名pcm文件,wav也支持
recorder.downloadPCM('重命名');
獲取錄音時(shí)長
// 回調(diào)持續(xù)輸出時(shí)長
recorder.onprocess = function(duration) {
console.log(duration);
}
// 手動(dòng)獲取錄音時(shí)長
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...
歡迎訪問和查看:recorder。
總結(jié)
以上所述是小編給大家介紹的基于JS實(shí)現(xiàn)web端錄音與播放功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
ComboBox(下拉列表框)通過url加載調(diào)用遠(yuǎn)程數(shù)據(jù)的方法
這篇文章主要介紹了ComboBox(下拉列表框)通過url加載調(diào)用遠(yuǎn)程數(shù)據(jù)的方法 ,需要的朋友可以參考下2017-08-08
JavaScript中this的全面解析及常見實(shí)例
這篇文章主要給大家介紹了關(guān)于JavaScript中this的全面解析及常見實(shí)例的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
JS解決回調(diào)地獄為什么需要Promise來優(yōu)化異步編程
這篇文章主要為大家介紹了JS解決回調(diào)地獄為什么需要Promise來優(yōu)化異步編程原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
uniapp跨頁面?zhèn)髦祏ni.$emit和uni.$on的使用及踩坑實(shí)戰(zhàn)
使用uni.$emit觸發(fā)事件后,對(duì)應(yīng)的uni.$on就會(huì)監(jiān)聽到事件觸發(fā),在回調(diào)中去執(zhí)行相關(guān)的邏輯,下面這篇文章主要給大家介紹了關(guān)于uniapp跨頁面?zhèn)髦祏ni.$emit和uni.$on的使用及踩坑實(shí)戰(zhàn)的相關(guān)資料,需要的朋友可以參考下2023-04-04
JS一維數(shù)組轉(zhuǎn)多維數(shù)組樹的方法
這篇文章主要介紹了JS一維數(shù)組轉(zhuǎn)多維數(shù)組樹的方法,文章通過代碼示例給大家講解的非常詳細(xì),?對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-06-06
webpack file-loader和url-loader的區(qū)別
這篇文章主要介紹了webpack file-loader和url-loader的區(qū)別,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01

