webAudio是网页上除了audio之外可以用来播放声音的东西,和audio相比,webAudio就显得更加专业,可操作性更强。今天我们就通过几个小demo来简单认识一下webAudio,看看这东西怎么玩。利用webAudio发声

我们知道audio是无法自己发出声音的,只能通过链接到mp3等文件,然后播放发声,但是webAduio自己是可以发出声音的:

上面就是一个简单的demo,鼠标移不同的键上会有不同的声音,这个是怎么做到的呢?

在讲解之前,我先抛出一个webAudio播放声音的一般套路,因为和audio那种简单的播放声音方式不同,webAudio播放声音是有一套流程的。

webAudio播放声音必须要有一个声音源,这个声音源可以来自声音数据,也可以利用webAudio创造一个音调;有了声音源之后,我们就可以在后面链接处理器,比如控制音量的处理器,声音波形的处理器等,过滤器可以多个,一个链接一个;最后需要链接扬声器,播放声音。

知道了上面的套路之后,那么对于理解代码将会有所帮助,现在看看webAudio播放声音的关键代码:

var oscillator = audioCtx.createOscillator(); //webAudio创造的音调

var gainNode = audioCtx.createGain(); //控制音量的过滤器

oscillator.connect(gainNode);//声音源链接过滤器

gainNode.connect(audioCtx.destination);//过滤器链接杨声器我们可以看到它们是用connect来链接的,按照上面的顺序,一个链接一个。

audioCtx.createOscillator创造的音调有几个参数,第一个是type,type表明声波的不同类型,有sine,square,sawtooth,triangle四种类型;frequency表示声音的频率,这里通过设置不同的频率来发出不同的声音。

需要注意的是,在webAudio中的声音源只能播放一次,例如上面的createOscillator一旦调用了start,那么就不能调用第二次。如果需要多次调用,每次都需要重新生一个声音源。XHR获取声音

之前我们说到,webAudio中的声音源可以来自声音数据,这里webAudio播放的声音数据为ArrayBuffer格式的。那么如何通过XHR获取声音呢?

jQuery的ajax底层就是封装了XHR,但是jQuery的ajax没有接受arraryBuffer类型的数据,因此为了可以获取到arrayBuffer数据,我们需要用原始的XHR:

var request = new XMLHttpRequest(); //建立一个请求

request.open('GET', 'a.mp3', true); //配置好请求类型,文件路径等

request.responseType = 'arraybuffer'; //配置数据返回类型

// 一旦获取完成,对音频进行进一步操作,比如解码

request.onload =function(){}

request.send();

接下来我们将传过来的arrayBuffer进行解析,解析之后就可以作为声音源进行播放了。

audioContext.decodeAudioData(arraybuffer, function(buffer) {

var audioBufferSouceNode = audioContext.createBufferSource();

audioBufferSouceNode.buffer = buffer;

});audioCtx.createGain()是创建一个声音的控制器,用来控制声音的音量的,它会链接在声音源的后面。

audioContext的suspend和resume是用来暂停和恢复声音播放的,然后audioContext的onended事件将会在声音停止后调用。文件选择获取声音

上面讲了XHR获取声音,我们是通过XHR设置arrayBuffer类型来获取内容,那如何通过文件选择来获取声音呢?

var file = this.files[0];

var fileReader = new FileReader();

fileReader.onload = function(e) {

var arraybuffer = e.target.result;

audioContext.decodeAudioData(arraybuffer, function(buffer) {

var audioBufferSouceNode = audioContext.createBufferSource();

audioBufferSouceNode.buffer = buffer;

});

}

fileReader.readAsArrayBuffer(file);

这里要做的是将得到的file对象转换成arrayBuffer。

webaudio ajax,初识webAudio相关推荐

  1. webaudio ajax,Web Audio 入门之读取左右声道数据

    说到音频,大家应该立刻会想到Audio,和Audio标签完全不同,Web Audio的功能更为强大.Audio 和 Web Audio的关系,就像img和canvas的关系一样. Web Audio ...

  2. jQuery的Ajax初识

    1. 什么是Ajax? Ajax是"Asynchronous Javascript And XML(异步Javascript和XML)"的缩写, 是指一种创建交互式网页应用的网站开 ...

  3. AJAX初识(原生JS版AJAX和Jquery版AJAX)

    一.什么是JSON 1.介绍JSON独立于语言,是一种与语言无关的数据格式.JSON指的是JavaScript对象表示法(JavaScript Object Notation)JSON是轻量级的文本数 ...

  4. day059-60 ajax初识 登录认证练习 form装饰器, form和ajax上传文件 contentType

    一.ajax 的特点 1.异步交互:客户端发出一个请求后,需要等待服务器响应结束后, 才能发出第二个请求 2.局部刷新:给用户的感受是在不知不觉中完成请求和响应过程. 二.ajax 模板示例 ($.a ...

  5. JSON基础与数据解析、JSON方法、AJAX初识

    JSON JavaScript Object Notation js对象标记 是对象,是轻量级数据交互的格式,不能有方法 它基于 JavaScript 语法,但与之不同:JavaScript不是JSO ...

  6. lkmusic项目改进版本之WebAudio版本支持音乐可视化 已更新至github 欢迎下载

    亲们如果觉得好请fork我的github lkmusic 效果预览图(2016-4-26日已经改进) 更新: 优化界面效果 修复播放完成后不会自动切换处于暂停状态的bug 已经上传至github(敬请 ...

  7. ajax商城模板,AJAX模板

    $.ajax({ type:"",//Ajax请求的提交方式(GET或POST) dataType:"text",//请求的类型 url:"" ...

  8. ajax用jquery怎么实现,ajax使用jquery的实现方式

    1.jquery的ajax方法. $("#ajaxbtn").click(function(){ $.ajax({ url:"json.do", beforeS ...

  9. SpringMVC (注解、拦截器、json、Ajax)

    SpringMVC 1.回顾MVC 1.1 什么是mvc MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务逻辑.数据.显示分离的方法来 ...

最新文章

  1. 如何做一个听话的 “输入框”
  2. 文青不适合看的电影《雪国列车》
  3. echarts 3d地图_独占进博会800m2展厅!3D炫酷光影秀带你邂逅金山往事..._政务_澎湃新闻...
  4. react 更新input 默认值setfieldsvalue_值得收藏的React知识点查漏补缺
  5. day03:关于惯性导航工具箱的学习与使用:use of the progen
  6. Spring 各种注解(@)的含义与认识
  7. Linux 高性能服务器编程——多进程编程
  8. python内置的字典dict中元素_Python内置字典;dict ,set
  9. 《MySQL技术内幕 InnoDB存储引擎》.pdf
  10. 安徽大学计算机基础知识答案,安徽大学大学计算机基础选择题
  11. 如何安装GlobalMapper
  12. 一名赣州车主处理“碰瓷”过程,值得认真学习(转帖)
  13. SpringBoot搭建个人博客v1.0 - 博客管理功能实现(七)
  14. Arduino案例实操 -- OLED中文显示(IIC)
  15. 计算机课堂活跃小游戏,几个课堂小游戏(能活跃课堂气氛)
  16. \u开头的unicode中的\u被转义\\u的问题处理
  17. 相信就能创造无限可能,捂碳星球荣获海南青创大赛一等奖
  18. 计算机应用公式求和,Excel函数教程:与求和有关的函数
  19. 圣诞邮件怎么写?收藏住~
  20. 卡券php小程序,微信小程序领取卡券 - osc_88a08cel的个人空间 - OSCHINA - 中文开源技术交流社区...

热门文章

  1. 成都拓嘉恒业:开女装网店,如果线上线下找货源
  2. delphi 自定义popupmenu_Delphi PopupMenu菜单为ListView的每个Items使用[原创]
  3. make zImage
  4. unity2d 实现物体跟随鼠标绕一个点旋转效果
  5. CountDownTimer 倒计时,定时器工具类
  6. 转细述揉弦(揉音)作者:Ake
  7. 10 分钟了解 Actor 模型
  8. CentOS防火墙添加端口
  9. 微信小程序 登录 服务器 c,asp.net core 3.x 微信小程序登录库(也可用于abp)
  10. 茶楼软件有哪些管理功能