JS实现可视化音频效果的实例代码


Posted in Javascript onJanuary 16, 2020

效果如图:

背景图片可以换成自己喜欢的或者不用,线条的颜色粗细也可以自己调整。

JS实现可视化音频效果的实例代码

代码如下(可直接复制使用):

<html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>可视化音频</title>
 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <style> body {
 display: block;
 background: url("./8.jpg");
 background-position: center;
 background-repeat: no-repeat;
 background-attachment: fixed;
 background-size:100%;
 }
 </style>
 </head>
 <body>
 <input type="file" style="color:red;" name="" value="" id="musicFile"><input type="button" name="startStop" value="暂停" id="startStop">
 <p id="tip" style="color:red;"></p>
 <canvas id="canvas"></canvas>
  <script>
   window.onload = function () {
   canvas.width = window.innerWidth;
   canvas.height = window.innerHeight;
   var canvasCtx = canvas.getContext("2d");
   
   var AudioContext = window.AudioContext || window.webkitAudioContext || window.mozAudioContext;
   var audioContext = new AudioContext();//实例化
   
   $('#musicFile').change(function(){
  //当选择歌曲时,判断当前audioContext的状态,如果在进行中则关闭音频环境,
  //释放audioContext的所有资源,并重新实例化audioContext
  if(audioContext.state == 'running'){
   audioContext.close();
   audioContext = new AudioContext();
  }
    if (this.files.length == 0) return;
    var file = $('#musicFile')[0].files[0];
    var fileReader = new FileReader();
    fileReader.readAsArrayBuffer(file);
    fileReader.onload = function(e) {
    var count = 0;
    $('#tip').text('开始解码')
    var timer = setInterval(function(){
     count++;
     $('#tip').text('解码中,已用时'+count+'秒')
    },1000)
    audioContext.decodeAudioData(e.target.result, function(buffer) {
     clearInterval(timer)
     $('#tip').text('解码成功,用时共计:'+count+'秒')
     var audioBufferSourceNode = audioContext.createBufferSource();
     var analyser = audioContext.createAnalyser();
     analyser.fftSize = 256;
   audioBufferSourceNode.connect(analyser);
   analyser.connect(audioContext.destination);
   audioBufferSourceNode.buffer = buffer;
   audioBufferSourceNode.start();
   var bufferLength = analyser.frequencyBinCount;
   var dataArray = new Uint8Array(bufferLength);

   //播放暂停音频
   startStop.onclick = function() {
    if(audioContext.state === 'running') {
     audioContext.suspend().then(function() {
     $("#startStop").val('播放');
    });
    } else if(audioContext.state === 'suspended') {
     audioContext.resume().then(function() {
     $("#startStop").val('暂停');
    }); 
    }
   }
   
   var oW = canvas.width;
   var oH = canvas.height;
   var color1 = canvasCtx.createLinearGradient(oW / 2, oH / 2-10, oW / 2, oH / 2 - 150);
   var color2 = canvasCtx.createLinearGradient(oW / 2, oH / 2+10, oW / 2, oH / 2 + 150);
   color1.addColorStop(0, '#1E90FF');
   color1.addColorStop(.25, '#FF7F50');
   color1.addColorStop(.5, '#8A2BE2');
   color1.addColorStop(.75, '#4169E1');
   color1.addColorStop(1, '#00FFFF');
   
   color2.addColorStop(0, '#1E90FF');
   color2.addColorStop(.25, '#FFD700');
   color2.addColorStop(.5, '#8A2BE2');
   color2.addColorStop(.75, '#4169E1');
   color2.addColorStop(1, '#FF0000');
   function draw() {
    drawVisual = requestAnimationFrame(draw);
    var barHeight;
       // 自定义获取数组里边数据的频步
       canvasCtx.clearRect(0, 0, oW, oH);
       for (var i = 0; i < bufferLength; i++) {
       barHeight = dataArray[i];
       analyser.getByteFrequencyData(dataArray);
       // 绘制向上的线条
    canvasCtx.fillStyle = color1; 
    /* context.fillRect(x,y,width,height)
     * x,y是坐标
     * width,height线条的宽高
     */
    canvasCtx.fillRect(oW / 2 + (i * 8), oH / 2, 2, -barHeight);
        canvasCtx.fillRect(oW / 2 - (i * 8), oH / 2, 2, -barHeight);
        // 绘制向下的线条
        canvasCtx.fillStyle = color2; 
        canvasCtx.fillRect(oW / 2 + (i * 8), oH / 2, 2, barHeight);
        canvasCtx.fillRect(oW / 2 - (i * 8), oH / 2, 2, barHeight);
       }
   };
   draw();
    })
    }
   })
   }
  </script>
 </body>
</html>

总结

以上所述是小编给大家介绍的JS实现可视化音频效果的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
爆炸式的JS圆形浮动菜单特效代码
Mar 03 Javascript
超轻量级的基于jquery的三级展开列表
Apr 26 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
Feb 07 Javascript
js库Modernizr的介绍和使用
May 07 Javascript
JavaScript中exec函数用法实例分析
Jun 08 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
Oct 26 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
May 17 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
原生js中ajax访问的实例详解
Sep 19 Javascript
Vue瀑布流插件的使用示例
Sep 19 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
May 24 Javascript
js实现div色块碰撞
Jan 16 #Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
Jan 16 #Javascript
vue列表数据发生变化指令没有更新问题及解决方法
Jan 16 #Javascript
使用Karma做vue组件单元测试的实现
Jan 16 #Javascript
js实现div色块拖动录制
Jan 16 #Javascript
微信小程序实现二维码签到考勤系统
Jan 16 #Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 #Javascript
You might like
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
原生js实现轮播图
2017/02/27 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
React实现轮播效果
2020/08/25 Javascript
python计算一个序列的平均值的方法
2015/07/11 Python
Python 操作文件的基本方法总结
2017/08/10 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
Python的垃圾回收机制详解
2019/08/28 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
师范生实习个人的自我评价
2013/09/28 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
2014年教研员工作总结
2014/12/23 职场文书
公司行政管理制度范本
2015/08/05 职场文书
遗嘱范文
2015/08/07 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书