详解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 第三章章节总结的例子
Mar 23 Javascript
点击表单提交时出现jQuery没有权限的解决方法
Jul 23 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
Nov 28 Javascript
javascript发送短信验证码实现代码
Nov 12 Javascript
Node.js程序中的本地文件操作用法小结
Mar 06 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
Apr 25 Javascript
JavaScript实现一个空中避难的小游戏
Jun 06 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
Jul 24 Javascript
JS 验证码功能的三种实现方式
Nov 26 Javascript
Vue前端判断数据对象是否为空的实例
Sep 02 Javascript
Vant picker 多级联动操作
Nov 02 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的面试题集
2006/11/19 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
eclipse php wamp配置教程
2016/06/30 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
javascript 三种编解码方式
2010/02/01 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
python 文件和路径操作函数小结
2009/11/23 Python
python time模块用法实例详解
2014/09/11 Python
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
获取Django项目的全部url方法详解
2017/10/26 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
优秀团队获奖感言
2014/02/19 职场文书
法律进社区实施方案
2014/03/21 职场文书
公务员年终个人总结
2015/02/12 职场文书
火烧圆明园观后感
2015/06/03 职场文书
幽灵公主观后感
2015/06/09 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript