10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

JavaScript 音频库 Howler.js 2.0 版改进了 Web 音频的播放

  • 2016-08-02
  • 本文字数:1420 字

    阅读完需:约 5 分钟

JavaScript 音频库 Howler.js 当前已升级到 2.0 版本。该版本的更新中包括了“一系列的功能添加与改进”。

Howler.js 的作者 James Simpson ,也是游戏开发工作室 Goldfire Studios 的创建者,指出该版本是一次“彻底地改写”,并已完全地兼容 HTML5 和 Web Audio API。Simpson 随即指出这归功于数十名项目贡献者的工作。

Simpson 在博客帖子“ Howler.js 2.0 版发布了”中,将 howler.js 描述成“模块化的程序库”。文中提及 howler.js 考虑到去实现“可扩展添加更多高级功能的精益内核,例如若干支持 Web Audio API 扩展部分(空间音频、空间滤波器)的可用工具”。

“现在 Howler.js 已经模块化了。该内核体现了 howler.js 的初始目标,”Simpson 说,“该音频库提供使用 Web Audio API 的空间插件,这样增加了对空间和立体声支持。”

2.0 版本的最大改进是使用一种三层实现方法解决了在多种声音回放时的混淆问题,这也是 1.X 版本系列中的一个显著痛点。

这个改进需要开发人员更改使用 howler.js 处理音频的方法。Simpson 指出:

当前版本中的概念包括:全局(Howler)、组(Howl)和声音个体(Sound)。为对回放具有更好的控制,无论实现中是否使用了 Sprite 类,每个播放的声音都应去获取其可操控的 Sound 对象。这样,对于此后同一组中的一个或多个声音都可使用 Howl 对象的方法调用。

复制代码
Howler (全局) ->
Howl(组) ->
Sound(个体)

此外,在这次 howler.js 的重大升级中所提供的新方法包括:设置具有一旦触发就可自动自我移除特性的事件监听器的 once 方法、对当前正在播放的声音返回真值的 playing 方法、返回音源持续时间的 duration 方法、返回 Howl 对象加载状态的 state 方法,以及全新实现的全局 unload 方法,该方法卸载所有活动 Howl 对象并重置 AudioContext 对象,用于内存的清理。

Howler 2.0 版本还实现了对一些倍受欢迎功能的支持,包括:对 Dolby 音频和 CAFF 音频文件回放的支持,对除了.weba 类型文件以外的.webm 类型文件的支持。

版本中还实现了一些 howler.js 补丁,意图解决该音频库中的若干程序缺陷,其中包括对 ext 选项的改进,这使得该选项更加适用于音频流的播放(并在版本中提供了例子 SoundCloud)。此外,Howler.js 2.0 版解决了 unload 方法使用中潜在的内存泄漏问题,并且该 JavaScipt 库会自动回退到 HTML5 Audio 以兼容 HTTPS 页面内的 HTTP 文件的加载。

在 2.0 版本的所有突破性更新中,一个重要更新是 play 方法不再以回调函数形式使用,而是即时返回当前回放声音的标识符。Simpson 指出这意味着 play 方法将不能再以链接方式使用,但是他也阐明对其它方法的调用并未改变。

复制代码
// 获取给定回放声音的标识符。
var id = sound.play();
// 暂停回放。
sound.pause(id);

另一个重要革新是新版本中弃用了 fadeIn 和 fadeOut 方法,以支持单一的 fade 方法。

复制代码
// 声音淡入。
sound.fade(0, 1, 1000);
// 一旦上一个音频淡化结束,声音淡出。
sound.once('fade', function(){
sound.fade(1, 0, 1000);
});

可在此处查看howler.js 2.0 版的完整的更新日志。Howler.js 使用 MIT 许可发布,当前已经得到包括谷歌、迪斯尼、乐高、Mozilla 以及 NASA 等的应用。

查看英文原文: Audio Library Howler.js Has 2.0 Release to Make Some Noise About


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-08-02 19:007027
用户头像

发布了 227 篇内容, 共 82.9 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

云小课 | 华为云KYON之VPC终端节点

华为云开发者联盟

云小课 KYON企业级云网络 VPC终端节点

docker入门:极简方式发布springboot

小鲍侃java

8月日更

公司新来了一个质量工程师,说团队要保证 0 error,0 warning

华为云开发者联盟

DevOps 程序 华为云DevCloud 静态代码检查 质量工程师

华为云专家向宇:工欲善其事必先利其器,才能做数据的“管家”

华为云开发者联盟

云原生 物联网 时序数据库 时序 GaussDB(for Influx

用零代码开发应用到底要不要IT管?

明道云

学习心得-架构训练营-第一课

Fm

分析微信朋友圈的高性能复杂度

Rabbit

架构实战营

女朋友问我 LB 是谁?

程序员鱼皮

Java 负载均衡 架构 后端 技术选型

模块一作业

当归

干货!4大实验项目,深度解析Tag在可观测性领域的最佳实践!

观测云

可观测性 dataflux tag ngix

HTTP协议之:HTTP/1.1和HTTP/2

程序那些事

HTTP 程序那些事 HTTP协议 http2

教你使用ApiPost中的全局参数和目录参数

Proud lion

大前端 测试 后端 Postman 开发工具

关于告警管理的软件,您还只知道Pagerduty吗?

睿象云

运维 告警 运维平台 智能告警 告警管理

Go- 切片的使用

HelloBug

Go 语言 切片 追加 拷贝 扩缩容

如何用 Nacos 构建服务网格生态

阿里巴巴云原生

使用mock模拟登录接口数据

与风逐梦

大前端 后端 Mock

Go- 数组

HelloBug

数组 Go 语言

面试必备常见存储引擎与锁的分类,请查收

阿Q说代码

MySQL innodb 共享锁 意向锁 8月日更

Golang:定时器的终止与重置

Regan Yue

定时器 Go 语言 8月日更

我在组内的Nacos分享

捉虫大师

微服务 dubbo nacos 服务发现

一文了解NB-IoT四大关键特性以及实现技术

华为云开发者联盟

IoT 网络 NB- IoT 物理信号 窄带

餐饮店加盟该如何推广?

获客I3O6O643Z97

抖音、快手获客系统

模块一作业

berserker

架构实战营

仿照Hystrix,手写一个限流组件

码农参上

限流 Hystrix 8月日更

注意,开源Redis被爆高危漏洞,攻击者可远程注入代码

华为云数据库小助手

华为云 GaussDB GaussDB ( for Redis ) 华为云数据库

Go- 切片的定义

HelloBug

slice Go 语言 切片

【“互联网+”大赛华为云赛道】GaussDB命题攻略:支持三种开发语言,轻松完成数据库缓冲池

华为云开发者联盟

数据库 华为云 GaussDB 互联网+ 缓冲池

模块一作业

紫云

架构实战营

OpenJDK源码下载

4ye

源码 后端 JVM 8月日更

微服务容错组件Hystrix设计分析

慕枫技术笔记

分布式 后端 熔断

从源码分析创建线程池的4种方式

华为云开发者联盟

Java 工具 高并发 线程池 Executors

JavaScript音频库Howler.js 2.0版改进了Web音频的播放_JavaScript_James Chesters_InfoQ精选文章