【Web Audio API】 — 那些年的 web audio
转 TAT.Jdo:【Web Audio API】 — 那些年的 web audio
这主题主要是早期对 web audio api的一些尝试,这里整理一下以便以后翻阅,如有错误,诚请指正。
在这之前,先回顾一下那些年我们一起走过的web audio:
<bgsound>
在我印象当中,bgsound是个很古老的东西,接触互联网之后,那时兴起的个人blog都有一个增加小组件或者背景音乐的功能,就是允许你贴入一段代码来实现,那是我最早接触bgsound的时候;当然那时也只是会ctrl+c/v ~~
网上翻来些资料,大概是这样的:
早在1996年,IE3.0定义了<bgsound>的标签,这应该web最早的一个能播放音频的标签;但它却从未成为标准,由始至终只有IE支持该标签;提供的功能比较有限,简单的后台自动播放,支持.wav|.mid|.ua格式音频;
<embed>
IE推出bgsound之后没多久,作为当年浏览器厂商的大哥 – NetScape同年即推出了功能类似的标签<embed>;
个人觉得<embed>早期相对于<bgsound>而言,最大的两个特色:
1.有界面交互,可以让用户控制播放/暂停(该属性可选);
2.不止能播放音频格式文件,还能播放当时比较高端的VRML Live3D图形动画。
以浏览器厂商老大的身份,很快IE3V2+, 以及后续的 safari, opare, firefox均支持了<embed>。
<object>
随着web的快速发展,标准变得越来越重要,这时就有了W3C存在的理由,1997年伴随着HTML4的到来,W3C引入了<object>标签,囊括了图片、音频、视频等格式文件,可以说非常彪悍;作为第一款可以跨浏览器间播放音频的标签,基本能满足我们当时对嵌入媒体的欲望,但<object>同样存在自己的弊端,例如标签臃肿,依赖插件,SEO困难等;
<audio>
08年初,第一份正式的HTML5草案发布,引入更新的富媒体元素<video> <audio> <canvas>,这些标签的引入最大目的还是为了减少web富媒体应用对插件的依赖。仅从标签名来说就能很好区分各自的功能,这点无疑是非常有利于搜索引擎去索引资源的,相比<object>来说,最明显的特色即是:
标签语义化,结构更简单;
脱离插件;
简单的javascript内置方法以及事件交互。
看似对音频控制都比较完善,但开发者缺少了对音频数据的访问权限,在很多更动感的交互,更复杂的音效需求面前就显得力不从心了。
[Audio Data API]
为了解决现状,Mozilla社区提出了Audio Data API,对<audio>标签进行js能力方面的扩展,这套API主要还是以提供读取写入音频数据接口为主,例如:
// 定义音频对象
var audio = new Audio();
var bufferLenth;
audio.src = "song.ogg";
audio.addEventListener('MozAudioAvailable', handleWithSample, false);
audio.addEventListener('loadedmetadata', handleWithMeta, false);
audio.play();
function handleWithMeta () {
bufferLenth = audio.mozFrameBufferLength;
}
function handleWithSample (e) {
var samples = e.frameBuffer;
for (var i = 0; i < bufferLenth; i++) {
// do something with audio data
dosomething(samples[i])
}
}
基于MozAudioAvailable
事件驱动读取音频原始数据
注:该方法已无法正确执行,Firefox已转向Web Audio API的支持,后续的Firefox版本逐渐废弃了Audio Data API的旧接口。
但对于一个开发者来说,并非人人都是音频资深用户或者发烧级音乐玩家,而且在很多音频的专业效果处理上需涉及大量波形相关处理算法,这就直接把很多开发者拒之门外了,这也是为什么最后W3C推荐了 Web Audio API。
[Web Audio API]
Web Audio API最早是Chrome社区提出并支持的,Web Audio API 是一套全新的相对独立的接口系统,对音频文件拥有更高的处理权限以及内置相关的音频专业效果处理,可以完全独立于 <audio> 标签而存在。这里把内置相关音频专业效果处理
标红主要是因为,我个人觉得这是Web Audio API相对于Audio Data API最大的一个区别,也是为什么最终被W3C推荐的原因。
大概整了一下Web Audio API的新特点:
更精准的时间控制;
可完全独立<audio>,允许更多音频文件同时播放,用于游戏或者复杂音频应用场景;
模块化路由连接方式,让音频操作更加灵活形象;
4.实时的频域、时域数据访问/操作;
- 更多专业的音频处理方法
(1) 音道分离/合并;
(2) 音频延时效果;
(3) 内置频率滤波器;
(4) 音频空间感效果以及多普勒效应模拟;
(5) 音频卷积运算(用于声场环境模拟);
(6) 自定义波形生成器;
(7) 波形非线性失真处理。
【Web Audio API】 — 那些年的 web audio的更多相关文章
- Web性能API——帮你分析Web前端性能
前端性能统计必备api,有不知道的吗? 正文从这开始- 开发一个现代化的互联网网站是一项复杂的任务,需要各种职能的密切合作以应对用户日新月异的需求.其中,网页的性能直接决定了用户的体验,而随着新型客户 ...
- 【HTML5】Web Audio API打造超炫的音乐可视化效果
HTML5真是太多炫酷的东西了,其中Web Audio API算一个,琢磨着弄了个音乐可视化的demo,先上效果图: 项目演示:别说话,点我! 源码已经挂到github上了,有兴趣的同学也可以去st ...
- H5的Web Audio Api
概述 研究Web Audio Api的主要原因是:工作中需要在ios中实现声音的淡出效果,主要是通过setInterval来改audio标签的volume属性实现的,但是ios上面volume属性是只 ...
- 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 ...
- [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 ...
- 关于Web Audio API的入门
Web Audio API提供了一个简单强大的机制来实现控制web应用程序的音频内容.它允许你开发复杂的混音,音效,平移以及更多. 可以先看一下MDN的这篇文章<Web Audio API的运用 ...
- 使用Web Audio API绘制音波图
摘要:Web Audio API是对<audio> 标签功能上的补充,我们可以用它完成混音.音效.平移等各种复杂的音频处理,本文简单的使用其完成音波图的绘制. PS:本例子使用ES6编程, ...
- HTML5 ——web audio API 音乐可视化(二)
上一篇 web audio API 音乐可视化(一)介绍了一些基本的API,以及如何简单的播放一个音频,本篇介绍一下怎么对获取到的音频进行分析,并将分析后的数据绘制成图像. 最终效果请戳这里; 完整版 ...
- HTML5 ——web audio API 音乐可视化(一)
使用Web Audio API可以对音频进行分析和操作,最终实现一个音频可视化程序. 最终效果请戳这里; 完整版代码请戳这里,如果还看得过眼,请给一个start⭐ 一.API AudioContext ...
随机推荐
- Seastar 教程(二)
协程 注意:协程需要 C++20 和支持的编译器.已知 Clang 10 及更高版本可以工作. 使用 Seastar 编写高效异步代码的最简单方法是使用协程.协程没有传统continuation(如下 ...
- python如何data格式和时间戳的转换
Python 获取几天前的时间 计算几天前并转换为指定格式. import time import datetime # 先获得时间数组格式的日期 threeDayAgo = (datetime.da ...
- Lua中如何实现类似gdb的断点调试--03通用变量修改及调用栈回溯
在前面两篇01最小实现及02通用变量打印中,我们已经实现了设置断点.删除断点及通用变量打印接口. 本篇将继续新增两个辅助的调试接口:调用栈回溯打印接口.通用变量设置接口.前者打印调用栈的回溯信息,后者 ...
- Jmeter---压力模式
需求 下面有3个场景,思考一下在jmeter里面如何设计 场景1:有一个项目,500用户同时登录,响应时间能达到多少场景2:考勤打卡,最大吞吐量能达到多少(每秒最大能完成多少笔打卡业务)场景3:银行业 ...
- 矩池云上安装及使用Milvus教程
选择cuda10.1的镜像 更新源及拷贝文件到本地 apt-get update cp -r /public/database/milvus/ / cd /milvus/ cp ./lib/* /us ...
- 为什么不让用join?《死磕MySQL系列 十六》
大家好,我是咔咔 不期速成,日拱一卒 在平时开发工作中join的使用频率是非常高的,很多SQL优化博文也让把子查询改为join从而提升性能,但部分公司的DBA又不让用,那么使用join到底有什么问题呢 ...
- 从零开始,开发一个 Web Office 套件(9):拖动鼠标选中文字 Edge Case
这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...
- 微信网页JSDK接口-wx.chooseImage问题
wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceTy ...
- vue3-关于$props,$parents等引用元素和组件的注意事项
同一个组件内可以使用,但是在不同的组件内,不要用$parents或$refs来访问另一个组件内的数据, 这会使代码的耦合性变高,同时也会让代码的可读性变差, 在不同组件访问数据时,使用props等来传 ...
- centos7升级openssh8.7&openssl1.1.1l脚本
脚本下载地址或首页联系本人获取 https://files.cnblogs.com/files/blogs/705493/update_ssh.sh 需搭配openssh8.7和openssl1.1. ...