h5錄音之recorder-core

一、使用場景:

調(diào)用移動(dòng)設(shè)備的錄音
  • 1)獲取錄音文件,執(zhí)行播放操作
  • 2)獲取錄音文件,執(zhí)行上傳服務(wù),通過服務(wù)解析成文字
  • 3)獲取錄音文件,執(zhí)行上傳服務(wù),通過服務(wù)對(duì)比進(jìn)行相應(yīng)反饋

二、js庫引入

1、方式一:使用script標(biāo)簽引入
// 引入js庫
<script src="項(xiàng)目路徑/src/recorder-core.js"></script>
// 引入需要使用到的音頻格式編碼引擎的js文件
<script src="項(xiàng)目路徑/src/engine/wav.js"></script>
// 如果要繪制音頻波形圖,需要引入
<script src="src/extensions/waveview.js"></script>
2、方式二:通過import引入
// 引入js庫
import Recorder from 'recorder-core'
// 引入需要使用到的音頻格式編碼引擎的js文件
import 'recorder-core/src/engine/wav'
// 如果要繪制音頻波形圖,需要引入
import 'recorder-core/src/extensions/waveview'

三、調(diào)用方法

注意:需要在https或者localhost環(huán)境下才能打開設(shè)備錄音權(quán)限。

1、調(diào)用設(shè)備錄音權(quán)限
export function recOpen (_this) {
  let This = _this;
  let rec = This.rec = Recorder({
      type: This.type || "wav", // wav格式, 需要使用的type類型,需提前把格式支持文件加載進(jìn)來
      bitRate: This.bitRate || 36, // 比特率kbps,越大音質(zhì)越好
      sampleRate: This.sampleRate || 18000, // 采樣率hz,每秒音波震動(dòng)次數(shù),越大細(xì)節(jié)越豐富
      onProcess: function(buffers, powerLevel, duration, sampleRate){
            buffers, // [[Int16,...],...]:緩沖的PCM數(shù)據(jù),為從開始錄音到現(xiàn)在的所有pcm片段,每次回調(diào)可能增加0-n個(gè)不定量的pcm片段
            powerLevel, // 輸入的音頻波動(dòng)值0-100
            duration, // 錄音持續(xù)時(shí)間ms
            sampleRate, // 錄音使用的采樣率
            // 利用waveview擴(kuò)展實(shí)時(shí)繪制波形
            This.wave.input(buffers[buffers.length-1],powerLevel,sampleRate);
      } //錄音實(shí)時(shí)回調(diào),大約1秒調(diào)用12次回調(diào)
  });
  rec.open(function(){
      console.log('打開成功:');
      // 渲染音頻波形圖
      This.wave = Recorder.WaveView({elem:".ctrlProcessWave"});
  },function(msg, isUserNotAllow){
      // 瀏覽器不支持錄音、用戶拒絕麥克風(fēng)權(quán)限、或者非安全環(huán)境(非https、file等 
      console.log((isUserNotAllow ? "UserNotAllow," : "") + "無法錄音:"+msg);
  });
}
2、開始錄音
export function recStart (_this) {
        if(!_this.rec){
            console.log('未打開錄音權(quán)限');
            return;
        }
       this.rec.start();
},
3、結(jié)束錄音,并釋放資源
export function recStop (_this) {
        let This = _this;
        let rec = This.rec;
        This.rec = null;
        if(!rec){
            console.log('未打開錄音權(quán)限');
            return;
        }
        rec.stop((blob, duration) => {
            // blob: 流文件,duration: 持續(xù)時(shí)間ms,這里可以執(zhí)行文件播放或者文件上傳
            _this.logs = {
                blob: blob,
                duration: duration,
            }
        }, (s) => {
           console.log("結(jié)束出錯(cuò):"+s);
        }, true); // true: 自動(dòng)關(guān)閉錄音權(quán)限釋放資源
}

四、總結(jié)

如果有更多的定制需要詳情見:
https://github.com/xiangyuecn/Recorder

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容