详解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 相关文章推荐
动态加载iframe
Jun 16 Javascript
DOM精简教程
Oct 03 Javascript
ExtJS 简介 让你知道extjs是什么
Dec 29 Javascript
js对数字的格式化使用说明
Jan 12 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
Aug 11 Javascript
JS应用正则表达式转换大小写示例
Sep 18 Javascript
微信小程序实战之自定义抽屉菜单(7)
Apr 18 Javascript
Vue-Router进阶之滚动行为详解
Sep 13 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
Jul 07 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 jQuery
VueX模块的具体使用(小白教程)
Jun 05 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 ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
PHP中比较时间大小实例
2014/08/21 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
Vue运用transition实现过渡动画
2019/05/06 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
Python线程指南分享
2019/11/19 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
PHP面试题-$message和$$message的区别
2015/12/08 面试题
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
年终工作总结范文
2019/06/20 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL