純js實現web端錄音與播放功能

純js實現web端錄音功能,功能並不是特別多,逐步增加中,詳細地址:github

getUserMedia在非localhost和127的情況下,需要開啓https,由於騰訊雲的沒備案,demo就不放了,可以自行獲取代碼並啓動測試。

實現方式

實現原理的話,主要是以下三點,

  • 利用webrtc的getUserMedia方法獲取設備音頻輸入,使用audioprocess得到音頻流(pcm流,範圍-1到1)。
  • 轉碼,利用前端中的ArrayBuffer等二進制操作按採樣位數處理流信息。
  • 使用decodeAudioData轉碼arraybuffer到audioBuffer並播放(小文件,大文件使用audio)。

使用方式

script方式

直接引入dist下的recorder.js即可

let recorder = new Recorder();

npm方式

安裝:

npm i js-audio-recorder

調用:

import Recorder from 'js-audio-recorder';

let recorder = new Recorder();

API

基本方法

// 開始錄音
recorder.start();
// 暫停錄音
recorder.pause();
// 繼續錄音
recorder.resume()
// 結束錄音
recorder.stop();
// 錄音播放
recorder.play();
// 銷燬錄音實例,釋放資源,fn爲回調函數,
recorder.destroy(fn);
recorder = null;

下載功能

// 下載pcm文件
recorder.downloadPCM();
// 下載wav文件
recorder.downloadWAV();
// 重命名pcm文件,wav也支持
recorder.downloadPCM('重命名');

獲取錄音時長

// 回調持續輸出時長
recorder.onprocess = function(duration) {
    console.log(duration);
}
// 手動獲取錄音時長
console.log(recorder.duration);

默認配置

sampleBits,採樣位數,默認是16
sampleRate,採樣頻率,瀏覽器默認的,我的chrome是48000
numChannels,聲道數,默認是1

傳入參數

new Recorder時支持傳入參數,

{
    sampleBits: 16,         // 採樣位數,範圍8或16
    sampleRate: 16000,      // 採樣率,範圍11025、16000、22050、24000、44100、48000
    numChannels: 1,         // 聲道,範圍1或2
}

注意

  1. 使用127.0.0.1或localhost嘗試,因爲getUserMedia在高版本的chrome下需要使用https。

兼容性

主要是以下幾個方面:

  • Web Audio Api

https://caniuse.com/#search=w...

  • getUserMedia

https://caniuse.com/#search=g...

  • Typed Arrays

https://caniuse.com/#search=t...

歡迎訪問和查看:recorder

其他資源

基於阿里雲實現簡單的語音識別功能
web Audio學習與音頻播放
web Audio實現pcm音頻數據收集
js實現pcm數據編碼
js轉化pcm到wav格式與播放

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章