new Vudio(audio, canvas, options) + vudio.dance(),让波形随音乐跳动
掘金上看到文章很有意思,借助 vudio.js 来实现,查看了下 vudio.js 插件,此插件的 npm 地址,但是打开 demo 无法查看效果。遂自己引入,写了一个 demo,将使用方式记录下。我用的是 vue3 + vite + ts,搭建项目请自行查找。
npm i vudio.js --save
import Vudio from 'vudio.js'
此时报需要 declare module 'vudio.js',再根目录下创建 xxx.d.ts 并申明:
declare module 'vudio.js'
具体代码如下:
<template>
<div>
<canvas width="256px" height="100px" id="canvas" ref="canvasObj"></canvas>
<audio src="../assets/mp3/dujiajiyi.mp3" id="audio" controls autoplay />
<button @click="play">播放</button>
</div>
</template>
<script setup lang="ts">
import Vudio from 'vudio.js'
const play = () => {
var audioObj = document.querySelector('#audio');
var canvasObj = document.querySelector('#canvas');
(audioObj as any).play();
var vudio = new Vudio(audioObj, canvasObj, {
effect: 'waveform', // 当前只有'waveform'这一个效果,哈哈哈
accuracy: 128, // 精度,实际表现为波形柱的个数,范围16-16348,必须为2的N次方
width: 256, // canvas宽度,会覆盖canvas标签中定义的宽度
height: 100, // canvas高度,会覆盖canvas标签中定义的高度
waveform: {
maxHeight: 80, // 最大波形高度
minHeight: 1, // 最小波形高度
spacing: 1, // 波形间隔
color: '#f00', // 波形颜色,可以传入数组以生成渐变色
shadowBlur: 0, // 阴影模糊半径
shadowColor: '#f00', // 阴影颜色
fadeSide: true, // 渐隐两端
horizontalAlign: 'center', // 水平对齐方式,left/center/right
verticalAlign: 'middle' // 垂直对齐方式 top/middle/bottom
}
});
// 调用dance方法开始得瑟吧
vudio.dance();
}
</script>
| 配置项 | 说明 |
|---|---|
| effect | 当前只有 'waveform' 这一个效果 |
| accuracy | 精度,波形柱个数,范围 16-16348,必须为 2 的 N 次方 |
| width / height | canvas 宽高,会覆盖 canvas 标签中定义的值 |
| waveform.maxHeight / minHeight | 最大 / 最小波形高度 |
| waveform.color | 波形颜色,可传数组生成渐变色 |
| waveform.fadeSide | 是否渐隐两端 |
| waveform.horizontalAlign / verticalAlign | 水平 / 垂直对齐方式 |
中途换个姿势得瑟也是可以的:
// 中途换个姿势得瑟也是可以的
vudio.setOption({
waveform: {
color: '#06f',
verticalAlign: 'bottom'
}
});