html5 canvas+js音频可视化动画特效

html5 canvas+js音频可视化动画特效

添加时间:2021-01-08 09:41:09
站长推荐丨赞助论坛,可获取海量资源终身免费下载权限奥!
举报 举报
收藏
预览
附件 附件
  • 模板类型模板类型:canvas
  • 模板颜色模板颜色:初级
  • 下载积分下载积分:28 米粒
  • 下载权限下载权限:

    赞助会员

html5 canvas+js实现的音频可视化动画特效,选择一首本地音频文件播放查看效果。
html5 canvas+js音频可视化动画特效
分类:html5 > canvas 难易:初级

js代码

<script type="text/javascript">

window.onload = function () {
 
 var file = document.getElementById("file");
 var audio = document.getElementById("audio");

 file.onchange = function () {
     //part1: 画布
     var canvas = document.getElementById("canvas");
     var context = canvas.getContext("2d");

     canvas.width = window.innerWidth;
     canvas.height = window.innerHeight;
     var WIDTH = canvas.width;
     var HEIGHT = canvas.height;

     //part2: 音频
     var files = this.files;//声音文件
     audio.src = URL.createObjectURL(files[0]);
     audio.load();

     //part3: 分析器
     var AudCtx = new AudioContext();//音频内容
     var src = AudCtx.createMediaElementSource(audio);
     var analyser = AudCtx.createAnalyser();

     src.connect(analyser);
     analyser.connect(AudCtx.destination);
     analyser.fftSize = 128;//快速傅里叶变换, 必须为2的N次方

     var bufferLength = analyser.frequencyBinCount;// = fftSize * 0.5

     //part4: 变量
     var barWidth = (WIDTH / bufferLength) - 1;//间隔1px
     var barHeight;

     var dataArray = new Uint8Array(bufferLength);//8位无符号定长数组

     //part5: 动态监听
     function renderFrame() {
         requestAnimationFrame(renderFrame);//方法renderFrame托管到定时器,无限循环调度,频率<16.6ms/次

         context.fillStyle = "#000";//黑色背景
         context.fillRect(0, 0, WIDTH, HEIGHT);//画布拓展全屏,动态调整

         analyser.getByteFrequencyData(dataArray);//获取当前时刻的音频数据

         //part6: 绘画声压条
         var x = 0;
         for (var i = 0; i < bufferLength; i++) {
             var data = dataArray[i];//int,0~255

             var percentV = data / 255;//纵向比例
             var percentH = i / bufferLength;//横向比例

             barHeight = HEIGHT * percentV;

             //gbk,0~255
             var r = 255 * percentV;//值越大越红
             var g = 255 * percentH;//越靠右越绿
             var b = 50;

             context.fillStyle = "rgb(" + r + "," + g + "," + b + ")";
             context.fillRect(x, HEIGHT - barHeight, barWidth, barHeight);

             x += barWidth + 1;//间隔1px
         }
     }

     renderFrame();

     //part7: 播放声音
     audio.play();
 };
};
</script>
相关内容推荐
资源求助发帖
查看更多发帖

*

回帖描述:

*

链接类型:

*

下载链接:

密码:
发帖规则:回帖内容为会员之间的私信,普通网友无法查看。
免责声明:回帖中提供的链接内容仅供会员之间学习参考使用,获取内容后请在法律法规范围内使用。回帖提供的内容应符合法律法规要求,不得违反法律法律的要求。
站点权责:回帖内容如违反法律法规,站点有权封停账号使用权利。对用户举报的内容,站点有责任及时删除违规内容。
热点内容推荐
标题:html5 canvas+js音频可视化动画特效

*

描述:
平均回复时间:3-10分钟
规则介绍:悬赏寻求论坛网友分享资源,站点对分享内容的准确性,合法性,版权等没有足够的监管能力。如果您发现资源不正确,无法使用,不符合法律法律等情况,您可以直接举报资源。站长将尽快核实您的举报,并根据情况,采取封号,退换米粒等处理。

*

回帖描述:

*

链接类型:

*

阅读权限:

*

下载链接:

密码:
发帖规则:回帖内容为会员之间的私信,普通网友无法查看。
免责声明:回帖中提供的链接内容仅供会员之间学习参考使用,获取内容后请在法律法规范围内使用。回帖提供的内容应符合法律法规要求,不得违反法律法律的要求。
站点权责:回帖内容如违反法律法规,站点有权封停账号使用权利。对用户举报的内容,站点有责任及时删除违规内容。
  • 背景波浪
  • 背景波浪
  • 波浪
  • 波浪
客服
在线咨询
周一 至 周日 9:00 ~ 22:00
QQ:1326974360
微信:juyoubuluo6688
客服热线
18205485173
工作日 9:00 ~ 18:00
微信扫码咨询
客户服务
欢迎咨询服务
咨询量较多时,请耐心等待
社群

关注公众号

获取更多资讯

扫码进群(QQ)

与更多大牛交流沟通

0.137680s