告诉你个酷炫的玩法:让音乐动起来,你就能看到每一段音乐的节奏、旋律!这样不但好懂还能感受到音乐的魅力。现在就开始,跟我一起用Vue和Canvas做出一个既实用又有趣的音乐播放器。我全程指导你,教你学编程(学技术、写代码、Vue插件使用、音频处理等),保证到最后你对整个项目了如指掌,轻松掌握。
一、技术准备
搞定大事前要装上两款神器——Vue和Canvas。准备好没?跟着我来,先开机进入命令行模式(Ctrl+Alt+T哟),然后按照顺序输下面两条命令,轻松搞定Vue CLI:
npm install -g@vue/cli 安装完成后,使用以下命令创建一个新的Vue项目: 突然蹦出来一个叫"音乐视觉化应用"的玩意儿。 随后进入项目目录,并安装Canvas的依赖库:npm install -g @vue/clinpm install canvas --save
准备工作完成后,即可着手编写代码。vue create music-visualization-app二、编写HTML结构
首先,把这个叫做 app.vue 的玩意儿扔进src文件夹就行了。然后,咱们马上开始搭建起一个网页框架,并且还要加入一个Canvas画板来展示效果!
htmlcd music-visualization-app npm install canvas三、编写Vue组件
走到Vue里面的音乐炫景逛逛!差不多就是要你写个代码,要用上那啥”Visualizer.vue”文件哈。
“`javascript
export default {
mounted(){
我们就把这个显示板叫做canvas!就是用它来解决问题。
我们要用画布创建二维图像,就得用到[“2D”]这个参数~
//在此处编写音乐可视化逻辑代码
}
}
首先,拿Canvas和ctx这哥俩出来。然后,在那个已经装好的钩子函数里,咱就能开始做音乐可视化了~
四、使用音频数据进行可视化
export default { name: 'Visualizer', mounted() { const canvas = this.$refs.canvas; const ctx = canvas.getContext('2d'); // 在这里编写音乐可视化的逻辑代码 // 绘制可视化效果的函数 const drawVisualization = () => { // 清空画布 ctx.clearRect(0, 0, canvas.width, canvas.height); // 在这里编写绘制可视化效果的代码 // 循环调用绘制函数 requestAnimationFrame(drawVisualization); }; // 开始绘制可视化效果 requestAnimationFrame(drawVisualization); } };想要玩音乐互动秀场?别慌,用下我们的Vue就能搞定。注意这个Vue要用上HTML5的音频API指令才行~找个空闲时间,在Visualizer.vue文件里加一行代码,搞定音乐!
//在mounted钩子函数内
来听听音乐!新发现的歌曲在这里。建立个叫audio的音频对象,再把它的地址改成music.mp3就好了。
audio.autoplay = true;
创建音频的环境,是个新版本的音频控制!
首先要用audioContext搞出个mediaElementSource,接下来只需确认来源正确就能搞定了。
你知不知道,播放器就是用录音文件做出来的小玩意儿。要想亲自试着搞一个解析器?好说!找audioContext打个招呼就是了(方法就是调用‘createAnalyser’)就搞定!
analyser.fftSize = 256;
给您看看频率数据,这是我们用模拟器分析的音频信息。
source.connect(analyser);
export default { name: 'Visualizer', mounted() { const audio = new Audio(); audio.src = 'path/to/music.mp3'; audio.autoplay = true; const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const source = audioContext.createMediaElementSource(audio); const analyser = audioContext.createAnalyser(); source.connect(analyser); analyser.connect(audioContext.destination); const frequencyData = new Uint8Array(analyser.frequencyBinCount); // 在这里编写音频数据可视化的逻辑代码 const drawVisualization = () => { // 在这里使用频谱数据绘制可视化效果 requestAnimationFrame(drawVisualization); }; requestAnimationFrame(drawVisualization); } };直接连上音频输出设备就行了。
看这里!这是个超简单的编程入门教程,教你怎么通过 Audio 对象来设定音频位置和让它自己不断重复播放;再利用 AudioContext 这神奇工具将音频源头与分析器成功对接,最后就剩通过目的地输出成功连接了呐!
五、绘制音乐可视化效果
来,用画图API里的’drawVisualization’功能把你钟爱的音乐绘成炫酷的视觉影像!比如,试试看这个代码段,轻松就能描绘出一个直观易懂的频谱图表。
//在drawVisualization函数内
看看freqData数据。
清除画布,从左上角开始到右下角结束,宽度和高度都一样。
画布宽除以波段长,再乘2.5就是酒吧宽!
let barHeight;
let x =0;
好啦,让我们给这些数字取名吧!就从0开始数,一直数到拿到的频数有多长,再往上加不就是。
这儿得先把酒吧的高度乘以频道数据中的每个数字。
咱们把红绿蓝全改成「rgb(100+条高, 50, 50)」一口气画完这个矩形喽。
首先把xy轴放在正中间那(就是那个x,也就是你画面垂直长度减掉当前栏高再除以2);然后随便点两下,大小嘛就得是你刚刚指定的那货咯。
const drawVisualization = () => { analyser.getByteFrequencyData(frequencyData); ctx.clearRect(0, 0, canvas.width, canvas.height); const barWidth = canvas.width / frequencyData.length; for (let i = 0; i < frequencyData.length; i++) { const barHeight = frequencyData[i] / 255 * canvas.height; const x = i * barWidth; const y = canvas.height - barHeight; // 绘制频谱图的柱状条 ctx.fillStyle = `rgb(0, 0, ${barHeight})`; ctx.fillRect(x, y, barWidth, barHeight); } requestAnimationFrame(drawVisualization); };x += barWidth +1;
直接调用drawVisualization这个函数就行了。
这个小玩意儿能让屏幕变得锃亮、清晰。然后你就要按照频谱数据表格里的序号,找到每个柱子是怎么升上去的,最后用ctx.fillRect()画出完整画面来就可以了!
六、在应用中使用音乐可视化组件
在App.vue中引入并使用Visualizer组件:
看!就在组件文件夹里,有个叫Visualizer的小东西。
components:{
Visualizer,
#app {
display: flex;
七、运行应用
运行应用命令如下:
npm run serve
咱们试试看,直接在浏览器里输个”http://localhost:8080″能否打开网站!
快来学!用Vue和Canvas就能做一款炫酷的音乐游戏了!只要提取下歌曲的几个小细节,再找Canvas API帮忙画出,就可以直接玩起音乐了,多有趣!希望这个教程能对你有所启发,让你玩出更多新花样,说不定下一个火爆全网的音乐应用就出自你手!
npm run serve。
评论0