使用Web Audio API可以对音频进行分析和操作,最终实现一个音频可视化程序。

最终效果请戳这里;

完整版代码请戳这里,如果还看得过眼,请给一个start⭐️

一、API###

  1. AudioContext: 该接口表示由音频模块链接而成的一个音频上处理下文,类似于canvas里面getContext(2d)返回的对象,对音频的一切 操作都在这个环境里进行;它包含各个AudioNode对象以及他们相关联的对象,创建方法如下:

    var ac = new window.AudioContect();

  2. AudioNode:音频节点,是一个音频处理模块,它包括GainNode(音量控制器)、BiquadFilterNode(滤波器)等;

  3. AudioContext的属性:

    • AudioContext.currentTime: AudioContext从创建开始到当前的时间,单位秒,是一个只读属性,不可对其进行操作;
    • AudioContext.destination:返回AudioDestinationNode对象,所有音频输出的聚集地,所有的AudioNode都直接或间接地链接到这里;
    • AudioContext.state:返回AudioContext的当前状态;
  4. AudioContext的方法:

    • AudioContext.close():关闭音频环境,释放正在使用的音频资源;

    • AudioContext.createBuffer():创建一个空的AudioBuffer对象,并能通过AudioBufferSourceNode来进行数据填充和播放;AudioBuffer可以通过AudioContect.createBuffer方法创建或使用Audio

    • AudioContext.createBufferSource():创建一个空的AudioBufferSourceNode对象,并能通过AudioBuffer来进行数据填充和播放;

    • AudioCount.createAnalyser():创建一个AnalyserNode,他可以用来显示音频时间和频率的数据。

    • AudioContext.decodeAudioData(arrayBuffer,succ(buffer),err):从ArrayBuffer对象中异步解码音频文件,这个ArrayBuffer对象通常是通过使用responseType为arraybuffer类型的XMLHttpRequest方法来获取.接受三个参数,第一个是AudioData数据,第二个是解码成功的回调函数,第三个是失败的回调函数。

    • createGain()/createGainNode():创建GainNode对象,通过改变其value的值可以改变音频音量,创建方法:

      var gainNode = ac.createGain() || ac.createGainNode();

  5. AudioBufferSourceNode:表示内存中的一段音频资源,其音频数据存储于AudioBuffer中(buffer属性中),创建方式:

    var buffersource = ac.createBufferSource();

    此对象有3个常用的属性:

    ​ 1).buffer:AudioBuffer对象,表示要播放的音频资源数据。他有一个子属性:duration,该音资源的时长,单位秒;

    ​ 2).loop:是否循环播放,默认是false;

    ​ 3).onended:绑定音频播放完毕时调用的实践处理程序;

    常用的方法:

    1. start/noteOn(when=ac.currentTime,offset=0,duration=buffer.duration-offset),开始播放音频。其中,when:何时开始播放;offset:从音频的第几秒开始播放;duration:播放几秒;
    2. stop/noteOff(when=ac.currentTime):结束播放;

二、播放一个音频###

通过xhr 获取到arrayBuffer类型的音频资源,用audioContext对象的decodeAudioData方法将arrayBuffer类型解析为buffer类型,用audioContext对象的createBufferSource()方法创建一个bufferSource对象,将刚才解析的buffer 数据复制给bufferSource对象的buffer属性,bufferSource对象用contect()方法链接audioContext对象的 destination 属性,最后调用bufferSource对象的“start/noteOn”方法播放音频。

实例代码:

   //获取到arrayBuffer类型的音频资源

   var xhr = new XMLHttpRequest();
function getMusic(name){
xhr.abort();
xhr.open("get","media/"+name); // 文件位于media文件夹下,要获取的音频文件名为 name
xhr.responseType = "arraybuffer"; //返回类型设置为
xhr.onload = function(){
console.log(xhr.response); //ArrayBuffer 类型的返回数据
};
xhr.send();
}
   //用decodeAudioData方法将arrayBuffer类型解析为buffer类型
var ac = new window.AudioContext(); //接上例
xhr.onload = function(){
ac.decodeAudioData(xhr.response,function(buffer){
var bufferSource = ac.createBufferSource();
bufferSource.buffer = buffer;
bufferSource.connect(ac.destination);
bufferSource[bufferSource.start ? "start" : "noteOn"](0); //播放
},function(err){
console.log(err)
})
};

实现对音量的控制:

改变音量要用到gainNode对象,用gainNode对象链接到destination对象,然后让bufferSource对象链接到gainNode对象,对音量的控制,是对gainNode对象的gain.value 对象的改变达到的效果。

   //音量控制元素
<input type="range" id="volume" mix="0" max="100" value="50">
   var gainNode = ac[ac.createGain ? "createGain" :"createGainNode"]();
gainNode.connect(ac.destination); function getMusic(name){
//...代码同上,只有一处需要修改
bufferSource.connect(gainNode); //因为上面已经将gainNode连接到ac.destination了,所以这里只需链接到gainNode即可;
}
$("#volume").change(function(){
changeVolume($(this).val()/$(this).attr("max"));
})
function changeVolume(num){
gainNode.gain.value = num * num;
}

以上代码就可以实现获取音频进行播放了,当然这只是一个开始,接下来一篇对音频进行分析。

HTML5 ——web audio API 音乐可视化(一)的更多相关文章

  1. HTML5 ——web audio API 音乐可视化(二)

    上一篇 web audio API 音乐可视化(一)介绍了一些基本的API,以及如何简单的播放一个音频,本篇介绍一下怎么对获取到的音频进行分析,并将分析后的数据绘制成图像. 最终效果请戳这里; 完整版 ...

  2. 【HTML5】Web Audio API打造超炫的音乐可视化效果

    HTML5真是太多炫酷的东西了,其中Web Audio API算一个,琢磨着弄了个音乐可视化的demo,先上效果图: 项目演示:别说话,点我!  源码已经挂到github上了,有兴趣的同学也可以去st ...

  3. Web Audio API之手把手教你用web api处理声音信号:可视化音乐demo

    1.Web Audio API 介绍 Web Audio API 提供了在Web上控制音频的一个非常有效通用的系统 ,这些通用系统通俗的讲就是我们可以利用Web Audio API提供的各种方法操作各 ...

  4. 关于HTML5音频——audio标签和Web Audio API各平台浏览器的支持情况

    对比audio标签 和 Web Audio API 各平台浏览器的支持情况:   audio element Web Audio API desktop browsers Chrome 14 Yes  ...

  5. Web Audio API 实现音频可视化

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 一转眼就已经有三个月没写博客了,毕业季事情确实多,现在也终于完全毕业了,博客还是不能落下.偶尔还是要写一下. 玩HTML5的Audio A ...

  6. 【Web Audio API】 — 那些年的 web audio

    转 TAT.Jdo:[Web Audio API] - 那些年的 web audio 这主题主要是早期对 web audio api的一些尝试,这里整理一下以便以后翻阅,如有错误,诚请指正. 在这之前 ...

  7. 使用Web Audio API绘制音波图

    摘要:Web Audio API是对<audio> 标签功能上的补充,我们可以用它完成混音.音效.平移等各种复杂的音频处理,本文简单的使用其完成音波图的绘制. PS:本例子使用ES6编程, ...

  8. H5的Web Audio Api

    概述 研究Web Audio Api的主要原因是:工作中需要在ios中实现声音的淡出效果,主要是通过setInterval来改audio标签的volume属性实现的,但是ios上面volume属性是只 ...

  9. [Javascript] Intro to the Web Audio API

    An introduction to the Web Audio API. In this lesson, we cover creating an audio context and an osci ...

随机推荐

  1. Android REST webservice 类

    App与后台交互,后台使用的是Jersey RESTful 服务.在APP端使用Android 内部集成的HttpClient接口,无需引入第三方jar包, import org.apache.htt ...

  2. Twitter的RPC框架Finagle简介

    Twitter的RPC框架Finagle简介 http://www.infoq.com/cn/news/2014/05/twitter-finagle-intro

  3. Ad Exchange

    品友互动-基于大数据技术的人工智能决策平台 http://www.ipinyou.com.cn/about?flag=milestones

  4. eclipse/IDEA使用maven

    下载,解压(无须安装),配置环境变量,命令行下mvn -v测试.https://www.cnblogs.com/luotaoyeah/p/3764533.html eclipse使用maven 为ec ...

  5. 004-shiro简介

    一.什么是shiro shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权限框架,它和 ...

  6. python3条件表达式和字符串

    1.布尔表达式 布尔表达式的值只有两个:真和假.在python中,真值为1,假值为0 2.逻辑操作符 三种逻辑操作:and.or.not 3.条件语句 if. if...else.if...elif. ...

  7. Flume日志收集 总结

    Flume是一个分布式.可靠.和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据: 同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力. (1) 可靠 ...

  8. AVL(二叉平衡树) 的实现

    一颗AVL树是其每个节点的左子树与右子树的高度最多差1的二叉查找树. 在插入过程中,利用旋转的办法保持这个性质. 共分四种情形: 1.  树T的左孩子的左子树上新插入节点导致破坏平衡性: 如下图左边所 ...

  9. c++ ScopeExitGuard

    说到Native Languages就不得不说资源管理,因为资源管理向来都是Native Languages的一个大问题,其中内存管理又是资源当中的一个大问题,由于堆内存需要手动分配和释放,所以必须确 ...

  10. go——函数

    1.定义 函数是结构化编程的最小单元模式.它将复杂的算法过程分解为若干个较小任务,隐藏相关细节,使程序结构更加清晰,易于维护.函数被设计成相对独立,通过接收输入参数完成一段算法指令,输出或存储相关结果 ...