HTML5 ——web audio API 音乐可视化(一)
使用Web Audio API可以对音频进行分析和操作,最终实现一个音频可视化程序。
最终效果请戳这里;
完整版代码请戳这里,如果还看得过眼,请给一个start⭐️
一、API###
- AudioContext: 该接口表示由音频模块链接而成的一个音频上处理下文,类似于- canvas里面- getContext(2d)返回的对象,对音频的一切 操作都在这个环境里进行;它包含各个- AudioNode对象以及他们相关联的对象,创建方法如下:-  - var ac = new window.AudioContect();
- AudioNode:音频节点,是一个音频处理模块,它包括- GainNode(音量控制器)、- BiquadFilterNode(滤波器)等;
- AudioContext的属性:- AudioContext.currentTime:- AudioContext从创建开始到当前的时间,单位秒,是一个只读属性,不可对其进行操作;
- AudioContext.destination:返回- AudioDestinationNode对象,所有音频输出的聚集地,所有的- AudioNode都直接或间接地链接到这里;
- AudioContext.state:返回- AudioContext的当前状态;
 
- 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();
 
- AudioBufferSourceNode:表示内存中的一段音频资源,其音频数据存储于AudioBuffer中(buffer属性中),创建方式:-  - var buffersource = ac.createBufferSource();- 此对象有3个常用的属性: -  1).buffer:AudioBuffer对象,表示要播放的音频资源数据。他有一个子属性:duration,该音资源的时长,单位秒; -  2).loop:是否循环播放,默认是false; -  3).onended:绑定音频播放完毕时调用的实践处理程序; - 常用的方法: - start/noteOn(when=ac.currentTime,offset=0,duration=buffer.duration-offset),开始播放音频。其中,when:何时开始播放;offset:从音频的第几秒开始播放;duration:播放几秒;
- 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 音乐可视化(一)的更多相关文章
- HTML5 ——web audio API 音乐可视化(二)
		上一篇 web audio API 音乐可视化(一)介绍了一些基本的API,以及如何简单的播放一个音频,本篇介绍一下怎么对获取到的音频进行分析,并将分析后的数据绘制成图像. 最终效果请戳这里; 完整版 ... 
- 【HTML5】Web Audio API打造超炫的音乐可视化效果
		HTML5真是太多炫酷的东西了,其中Web Audio API算一个,琢磨着弄了个音乐可视化的demo,先上效果图: 项目演示:别说话,点我! 源码已经挂到github上了,有兴趣的同学也可以去st ... 
- Web Audio API之手把手教你用web api处理声音信号:可视化音乐demo
		1.Web Audio API 介绍 Web Audio API 提供了在Web上控制音频的一个非常有效通用的系统 ,这些通用系统通俗的讲就是我们可以利用Web Audio API提供的各种方法操作各 ... 
- 关于HTML5音频——audio标签和Web Audio API各平台浏览器的支持情况
		对比audio标签 和 Web Audio API 各平台浏览器的支持情况: audio element Web Audio API desktop browsers Chrome 14 Yes ... 
- Web Audio API 实现音频可视化
		声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 一转眼就已经有三个月没写博客了,毕业季事情确实多,现在也终于完全毕业了,博客还是不能落下.偶尔还是要写一下. 玩HTML5的Audio A ... 
- 【Web Audio API】 — 那些年的 web audio
		转 TAT.Jdo:[Web Audio API] - 那些年的 web audio 这主题主要是早期对 web audio api的一些尝试,这里整理一下以便以后翻阅,如有错误,诚请指正. 在这之前 ... 
- 使用Web Audio API绘制音波图
		摘要:Web Audio API是对<audio> 标签功能上的补充,我们可以用它完成混音.音效.平移等各种复杂的音频处理,本文简单的使用其完成音波图的绘制. PS:本例子使用ES6编程, ... 
- H5的Web Audio Api
		概述 研究Web Audio Api的主要原因是:工作中需要在ios中实现声音的淡出效果,主要是通过setInterval来改audio标签的volume属性实现的,但是ios上面volume属性是只 ... 
- [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 ... 
随机推荐
- 推荐10 个短小却超实用的 JavaScript 代码段
			1. 判断日期是否有效 JavaScript中自带的日期函数还是太过简单,很难满足真实项目中对不同日期格式进行解析和判断的需要.jQuery也有一些第三方库来使日期相关的处理变得简单,但有时你可能只需 ... 
- 洛谷 P2481 [SDOI2010]代码拍卖会
			洛谷 这大概是我真正意义上的第一道黑题吧! 自己想出了一个大概,状态转移方程打错了一点点,最后还是得看题解. 一句话题意:求出有多少个\(n\)位的数,满足各个位置上的数字从左到右不下降,且被\(p\ ... 
- Consistent hashing
			Download source code - 20.3 KB What is libconhash libconhash is a consistent hashing library which c ... 
- Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用
			一.服务器核心知识 1.电脑和电脑的硬件组成 现在的人们几乎无时无刻不在使用着电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑,还是智慧型手机等等,这些东西都算是电脑.虽然接触这么多,但是 ... 
- 解决Object() takes on paramenters的问题
			先贴上今天的代码: 解决:是由于父类中的_init_()写成了_int_(),由于粗心导致,下次注意. 
- golang 实现并发计算文件数量
			package main import ( "fmt" "io/ioutil" "os" ) func listDir(path strin ... 
- 添加github ssh 公钥
			1.在控制台输入命令: ssh-keygen -t rsa -C "github上的邮箱地址" 2.将公匙复制后添加到github网站: id_rsa.pub文件 3.测试是 ... 
- Grunt JS构建环境搭建以及使用入门
			Grunt JS构建环境搭建以及使用入门 1.应用场景 一种自动化任务处理工具,对于日常的需求(代码规则检查.代码合并)可以实现自动化执行,只需要保留package.json和Gruntfile.js ... 
- numpy.linspace介绍
			numpy.linspace:在指定范围内返回均匀间隔的数组 In [12]: import numpy as np In [13]: result = np.linspace(1,10) #默认生成 ... 
- mysqlbinlog作用
			mysqlbinlog:解析mysql的binlog日志 在 mysql-bin.index里面记录了所有的binlog文件,它是一个索引 binlog日志的作用:用来记录mysql内部增删改查等对m ... 
