純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
}
注意
- 使用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格式與播放