其他分享
首页 > 其他分享> > web技术分享| AudioContext 实现音频可视化

web技术分享| AudioContext 实现音频可视化

作者:互联网

要实现音频可视化,实现一些炫酷的效果需要借助 Web Audio API提供的一些方法 AudioContext

准备 audio 和 canvas 标签

<audio class="audio" ref='audio' :src='tune' @ended='ended'></audio>
<canvas ref='canvas' width='300px' height='300px'></canvas>

创建并返回一个新的AudioContext对象。

const ctx = new AudioContext();

创建一个新的MediaElementAudioSourceNode对象

const audioSrc = ctx.createMediaElementSource(this.audioElement);

创建AnalyserNode对象

const analyser = ctx.createAnalyser();

设置 fftSize 属性

analyser.fftSize = 512;

audioSrc 和 analyser 进行链接

AudioNode 接口的 connect() 方法使你能将一个节点的输出连接到一个指定目标,这个指定的目标可能是另一个 AudioNode(从而将音频数据引导到下一个指定节点)或一个AudioParam, 以便上一个节点的输出数据随着时间流逝能自动地对下一个参数值进行改变。

audioSrc.connect(analyser);

analyser 和 ctx.destination 进行链接

analyser.connect(ctx.destination)

歌曲播放进行中

visualization() {
    const arr = new Uint8Array(this.analyser.frequencyBinCount);
    this.analyser.getByteFrequencyData(arr);
    this.draw(arr);
},

使用canvas绘制音频图谱

this.canvas = this.$refs.canvas.getContext('2d');draw(arr) {    canvas.clearRect(0, 0, document.body.clientWidth, this.canvasHeight);    const start = ((document.body.clientWidth / 2) - ((arr.length / 2) * 3));    arr.forEach((item, index) => {        this.canvas.beginPath();        this.canvas.strokeStyle = '#B2AFF4';        this.canvas.lineWidth = 3;        this.canvas.moveTo(start + (index * 4), this.canvasHeight);        this.canvas.lineTo(start + (index * 4), this.canvasHeight - item / 2);        this.canvas.stroke();    });}

效果展示

在这里插入图片描述
在这里插入图片描述

标签:web,canvas,analyser,创建,音频,arr,可视化,AudioContext
来源: https://www.cnblogs.com/anyrtc/p/15632582.html