书接上文,上一篇博客我们知道了怎么通过MediaDevices获得用户的麦克风数据。
这篇博客我们就实现将用户的音频数据实时的绘制出来。
<!DOCTYPE html>
<head></head>
<body>
<canvas id="canvas" width="500" height="500"></canvas>
<script>
var constraints = {
audio: true, video: false }
var promise = navigator.mediaDevices.getUserMedia(constraints);
promise.then(function (stream) {
});
promise.catch(function (error) {
console.log(error)
});
</script>
</body>
保留上一篇博客代码的基本结构。我将对获取的MediaStream数据进行处理。
var audioCtx = new AudioContext();
var source = audioCtx.createMediaStreamSource(stream); // 从MediaStream中创建源
var analyser = audioCtx.createAnalyser();
source.connect(analyser); // 将源连接到分析器
analyser.fftSize = 256; // 用于计算频域信号时使用的 FFT (快速傅里叶变换) 的窗口大小。
var bufferLength = analyser.frequencyBinCount; // fftSize/2
var dataArray = new Uint8Array(bufferLength);
获取数据并绘制
var drawVisual;
var canvas = document.getElementById('canvas');
var canvasCtx = canvas.getContext("2d");
function draw() {
drawVisual = requestAnimationFrame(draw);
analyser.getByteFrequencyData(dataArray);
canvasCtx.fillStyle = 'rgb(0, 0, 0)';
canvasCtx.fillRect(0, 0, 500, 500);
var barWidth = 500 / bufferLength;
var barHeight