这篇文章将为大家详细讲解有关HTML5中如何开发动态音频图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>概要强>
用到的技术点:
(1) js
(2)帆布+音频
(3) Web音频API
实现方式:
(1)首先对于界面实现的考虑,由于区块非常多,我们使用传统dom节点实现是非常困难的(会占用大量的电脑CPU)。在这里,我们考虑使用帆布进行渲染
(2)前端中,我们遵循尽量少用js控制dom节点的原则。能用css3实现的特效,就不要用js实现。(因为js不是标记语言,而是脚本语言,不与HTML5是同一种语言。会浪费浏览器大量时间加载,造成浏览器性能的浪费),因此,用js就少用dom,用dom就尽量用css。
(3)通过Web音频API在音频节点上进行音频操作(即实现音频可视化),流程图如下:
在图中,音频上下文提供了音频处理的一套系统方法。输入源指音乐文件,通过名称引入;效果就是对输入源进行加工,如制作音频图,音波图,3 d环绕,低音音效等;输出就是把效果输出到耳机,扬声器等目的地。
<强>帆布引入强>
在当下,除了布局使用dom节点外,特效基本都是通过画布上实现了。
帆布好处:
(1)写特效非常强大,性能优
(2)用于做游戏。由于flash将于2020年退役,现在的游戏开始转向用HTML5制作
(3)前端渲染大数据,数据可视化,大屏数据展示
帆布流程:通过js创建画笔
& lt; ! DOCTYPE html> & lt; html  lang=癳n"祝辞 & lt; head> ,,,& lt; meta charset=癠TF-8"比; ,,,& lt; meta name=皏iewport",内容=翱矶?设备宽度,初始=1.0,比; ,,,& lt; title> Document ,,,& lt; style 类型=拔谋?css"比; ,,,,,,,* { ,,,,,,,,,,,保证金:,0; ,,,,,,,,,,,/*,外边距为0,使画布能够占满全屏,*/,,,,,,,} ,,,,,,,{#画布 ,,,,,,,,,,,背景:,线性渐变( ,,,,,,,,,,,,,,,135度, ,,,,,,,,,,,,,,,rgb (142132133), 0%, ,,,,,,,,,,,,,,,rgb (230132110), 100% ,,,,,,,,,,,); ,,,,,,,,,,,/*创建线性渐变图像*/,,,,,,,} ,,,,,,, ,,,& lt;/style> & lt;/head> & lt; body> ,,,& lt; canvas id=癱anvas",宽度=?00“,身高=?00“祝辞& lt;/canvas> ,,,& lt; script> ,,,,,,,var cxt=canvas.getContext (& # 39; 2 d # 39;);//创建了画笔 ,,,,,,,cxt.beginPath();//开始画 ,,,,,,,cxt.closePath();//画完的了 ,,,,,,, ,,,,,,,cxt.fillStyle=& # 39; # f2f& # 39;; ,,,,,,,cxt.arc (250250100 0 2 * Math.PI假); ,,,,,,,cxt.fill (); ,,,& lt;/script> & lt;/body> & lt;/html>
在创建线性渐变图像时,若100%后边加“,”,谷歌便加载不出来,若不加,便能加载出来。但是不知道为何
这里尤其注意js里帆布的流程,创建画笔——》开始画——》画完了——》补充颜色,形状信息。其中前三步都是套路,只有如何去画根据任务的不同,代码不同
<强> Web音频APi流程强>
& lt; ! DOCTYPE html> & lt; html  lang=癳n"祝辞 & lt; head> ,,,& lt; meta charset=癠TF-8"比; ,,,& lt; meta name=皏iewport",内容=翱矶?设备宽度,初始=1.0,比; ,,,& lt; title> Document & lt;/head> & lt; body> ,,,& lt; audio id=癮udio", src=https://www.yisu.com/zixun/癿p3/1.mp3”控制> 音频> <>脚本 var oCtx=new AudioContext();//创建音频对象 var oAudio=document.querySelector(“音频”); var audioSrc=oCtx.createMediaElementSource (oAudio);//给音频对象创建媒体源 var分析器=oCtx.createAnalyser();//创建分析机 audioSrc.connect(分析器);//把分析机连接到媒体源上 analyser.connect (oCtx.destination);//把分析机得到的结果和扬声器相连> 脚本 身体>