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. 10 个省时间的 PyCharm 技巧,提升工作效率,杠杠滴!
  2. 设主存容量为1MB,外存容量为400MB,计算机系统的地址寄存器有32位,那么虚拟存储器的最大容量是( )
  3. Spring框架----Spring常用IOC注解的分类
  4. php面试题汇总一(基础篇附答案)
  5. 微信表情包储服务器,微信新功能!不用存图就能发出海量表情包
  6. python3.6安装步骤-手动安装python3.6的操作过程详解
  7. android学习笔记之Fragment(一)
  8. PowerBuilder制作纸牌游戏
  9. iMC iNode客户端上岗证
  10. 千方百剂医药管理系统对接第三方WMS系统(天力士物流)
  11. 银联POS工作密钥生成
  12. 七部门查处奥数班遇尴尬 学生齐喊“出去”
  13. 计算机音乐狂浪乐谱,当代歌曲 - 听海(流行歌曲 简谱)
  14. 常用的特效功能实现代码
  15. Paypal国际版网站集成简易教程
  16. 本周周报-20220109
  17. TIVA 123GXL的边沿计数模式测量低频PWM
  18. Python学习日记1
  19. 图卷积(1)——从欧式空间到非欧式空间
  20. Mas短信开发增值服务平台建设

热门文章

  1. 【cocos shader 005】 Grid3D 网格 吸入 扩散 效果 实例讲解
  2. 华为Vs爱立信:非卫翰思无能 而是任正非太厉害
  3. Cocos2d游戏开发学习记录——2.使用Cocos2D Graphic实现僵尸的移动
  4. 站长必读:防御DDOS攻击终极指南
  5. Django——CBV
  6. 记两岸同胞的逻辑碰撞
  7. hive中的数据类型
  8. AS作业三仿微信APP实现对有recycleView的页面进行点击跳转设计
  9. 亿级Web系统搭建:单机到分布式集群
  10. 校园笔记-CSS-网页穿上美丽外衣