js-audio-recorder录音播放波形图
安装:
npm i js-audio-recorder
调用:
import Recorder from 'js-audio-recorder';
let recorder = new Recorder();
首先,要用到两个canvas标签
<canvas id="recordCanvas" ref="record"></canvas>
data() {
return {
recorder: null,
drawRecordId: null,
drawPlayId: null,
}
},
mounted(){
this.recorder = new Recorder()
}
其次,录音波形和播放波形,要用不同的方法获取,getRecordAnalyseData() 和 getPlayAnalyseData()
handleStart() {
this.recorder = new Recorder()
Recorder.getPermission().then(() => {this.recorder.start().then(() => {
this.drawRecord();
})
}, (error) => {
console.log(`${error.name} : ${error.message}`)
})
},
handleStop() {this.recorder.stop()
this.drawRecordId && cancelAnimationFrame(this.drawRecordId);
this.drawRecordId = null;
},
handlePlay() {this.recorder.play()
this.drawPlay();
},
最后,录音完了,要将 drawRecordId 和 drawPlayId 销毁
drawRecord(){
this.drawRecordId = requestAnimationFrame(this.drawRecord)
this.drawWave({
canvas: this.$refs.record,
dataArray: this.recorder.getRecordAnalyseData(),
});
},
drawPlay(){
this.drawPlayId = requestAnimationFrame(this.drawPlay);
this.drawWave({
canvas: this.$refs.play,
dataArray: this.recorder.getPlayAnalyseData(),
});
},
drawWave({canvas, dataArray}) {
const ctx = canvas.getContext("2d");
const bufferLength = dataArray.length;
ctx.fillStyle = "#fff";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.lineWidth = 2;
ctx.strokeStyle = "#409EFF";
ctx.beginPath();
var sliceWidth = (canvas.width * 1.0) / bufferLength,
x = 0;
for (var i = 0; i < bufferLength; i++) {
var v = dataArray[i] / 128.0;
var y = (v * canvas.height) / 2;
if (i === 0) {
ctx.moveTo(x, y);
} else {
ctx.lineTo(x, y);
}
x += sliceWidth;
}
ctx.lineTo(canvas.width, canvas.height / 2);
ctx.stroke();
},