详解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 相关文章推荐
完整显示当前日期和时间的JS代码
Sep 17 Javascript
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
Mar 28 Javascript
js获取IFRAME当前的URL的方法
Nov 13 Javascript
javascript实现简单计算器效果【推荐】
Apr 19 Javascript
JavaScript-html标题滚动效果的简单实现
Sep 08 Javascript
利用bootstrapValidator验证UEditor
Sep 14 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
Mar 21 Javascript
简单实现JavaScript弹幕效果
Aug 27 Javascript
Node.js 基础教程之全局对象
Aug 06 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
Feb 03 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 变量定义方法
2009/06/14 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python Celery定时任务的示例
2018/03/13 Python
Python socket处理client连接过程解析
2020/03/18 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
Linux操作面试题
2015/02/11 面试题
编程输出如下图形
2013/11/24 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
回门宴答谢词
2014/01/13 职场文书
挂靠协议书范本
2014/04/22 职场文书
个人校本研修方案
2014/05/26 职场文书
团日活动总结怎么写
2014/06/25 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
主题班会开场白
2015/06/01 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python