详解Howler.js Web音频播放终极解决方案


Posted in Javascript onAugust 23, 2020

前言

相信有很多人在写移动端音频播放的时候都踩过不少坑,特别是复杂音频项目在兼容多种设备的时候更是让你抓狂,比如ios端不能一开始就播放音频,必须要用户进行了操作。。。。

偶然间了解到了一个兼容所有设备和浏览器的音频引擎Howler.js 使用了一下非常完美

Howler.js 是一个新的 JavaScript 库用于处理 Web 中的音频,该库最初是为一个 HTML5 游戏引擎所开发,但也可用于其他的 Web 项目,Howler.js 基于 Google 的 Web Audio API,能够帮助你快速简单全面的控制音频。

特点及兼容性

  • Howler.js默认使用Web Audio,但在IE上可以自动转为HTML 5 Audio。这点很是贴心。
  • 移动端的Safari和Chrome都禁止网页自动播放声音,必须通过用户的操作,touch, click等触发。Howler.js可以设置成自动捕捉用户操作激活(解禁)声音播放。
  • Howler.js支持很多声音格式以兼容各种浏览器。MP3, MPEG, OPUS, OGG, OGA, WAV, AAC, CAF, M4A, MP4, WEBA, WEBM, DOLBY, FLAC.几乎涵盖了所有格式
  • 支持3D游戏
  • 自动缓存
  • 支持淡入淡出效果
  • 轻量
  • 纯JS
  • 无第三方依赖
  • 模块化

「更多特性可以去Github查看 Howler.js」

使用方法

官网上都有介绍 这里不过多讨论

import {Howl, Howler} from 'howler';

// 初始化一个音频类
const sound = new Howl({
 src: ['sound.webm', 'sound.mp3']
});

// 播放音频
sound.play();

// 改变全局音频声音大小
Howler.volume(0.5);

// 只想改变某个音频的大小可以在初始化的时候修改
const sound = new Howl({
 src: ['sound.webm', 'sound.mp3'],
 volume:0.5
});

使用Howler.js

最基本的,一个MP3播放:

var sound = new Howl({
 urls: ['sound.mp3']
}).play();

更多的播放选项:

var sound = new Howl({
 urls: ['sound.mp3', 'sound.ogg', 'sound.wav'],
 autoplay: true,
 loop: true,
 volume: 0.5,
 onend: function() {
  console.log('Finished!');
 }
});

定义和播放某一部分的音频

var sound = new Howl({
 urls: ['sounds.mp3', 'sounds.ogg'],
 sprite: {
  blast: [0, 1000],
  laser: [2000, 3000],
  winner: [4000, 7500]
 }
});

// shoot the laser!
sound.play('laser');

总结

自己封装的音频库多多少少会有一些性能和兼容问题,比如音频循环播放的时候Howler就处理的非常好不会有切割的感觉

 到此这篇关于详解Howler.js Web音频播放终极解决方案的文章就介绍到这了,更多相关Howler.js Web音频播放内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery 剧场版 你必须知道的javascript
May 27 Javascript
获取中文字符串的实际长度代码
Jun 05 Javascript
探寻Javascript执行效率问题
Nov 12 Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 Javascript
jquery siblings获取同辈元素用法实例分析
Jul 25 Javascript
AngularJS 实现JavaScript 动画效果详解
Sep 08 Javascript
bootstrap table分页模板和获取表中的ID方法
Jan 10 Javascript
通过一个简单的例子学会vuex与模块化
Nov 22 Javascript
JavaScript原生实现观察者模式的示例
Dec 15 Javascript
微信小程序实现漂亮的弹窗效果
May 26 Javascript
浅谈Node 异步IO和事件循环
May 05 Javascript
javascript 原型与原型链的理解及实例分析
Nov 23 Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 #Javascript
vue中watch和computed的区别与使用方法
Aug 23 #Javascript
vue动态设置页面title的方法实例
Aug 23 #Javascript
Vue管理系统前端之组件拆分封装详解
Aug 23 #Javascript
Vue中keep-alive组件的深入理解
Aug 23 #Javascript
google广告之另类js调用实现代码
Aug 22 #Javascript
JS typeof fn === 'function' && fn()详解
Aug 22 #Javascript
You might like
PHP版 汉字转码的实现详解
2013/06/09 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
一个JS翻页效果
2007/07/23 Javascript
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
python的继承知识点总结
2018/12/10 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
linux面试题参考答案(8)
2015/08/11 面试题
师德学习感言
2014/01/31 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
城市创卫标语
2014/06/17 职场文书
企业法人任命书
2015/09/21 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
初三化学教学反思
2016/02/22 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
nginx中proxy_pass各种用法详解
2021/11/07 Servers
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js