百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Web 应用 2D/3D 音频控制库

zhezhongyun 2025-01-10 18:36 110 浏览

howlerjs 是一个轻量级的 JavaScript 音频库,适用于在 Web 应用中集成音频功能,无论简单的背景音乐播放,复杂的音频、游戏,3D 音效管理,howler 都可以提供强大而灵活的音频控制能力,包括播放、暂停、快进、快退、调整播放速率、音量控制、淡入淡出效果和循环播放等。

安装使用:

import { Howl, Howler } from 'howler';
// 初始化
const sound = new Howl({
  src: ['sound.webm', 'xxx.mp3']
});
// 播放
sound.play();
// 音量控制
Howler.volume(0.5);

示例:

基础配置:

src:定义要加载的音频轨道的源文件,可以是 URL 或 base64 数据。如果文件没有扩展名,需要使用 format 属性明确指定格式。

volume:设置特定音轨的音量,范围从 0.0 到 1.0。

html5:是否强制使用 HTML5 Audio,适用于大文件,以便不必等待整个文件下载和解码完成即可播放。

loop:是否无限循环播放。

preload:是否自动开始下载音频文件。如果使用 HTML5 Audio,可以设置为 'metadata' 预加载数据。

autoplay:是否自动开始播放。

mute:是否加载时静音音频。

sprite: 定义音频精灵。偏移量和持续时间以毫秒为单位定义。可选的第三个参数用于设置精灵是否循环。

rate:设置播放速率,范围从 0.5 到 4.0,1.0 为正常速度。

pool:定义非活动声音池的大小。停止或播放结束的声音会被标记为结束并准备清理,以提高性能。

format:howler 会自动检测文件格式,但在某些情况下(如 SoundCloud 流)可能需要明确指定格式。

xhr:使用 Web Audio 时,howler 使用 XHR 请求加载音频文件。如果需要发送自定义头部、设置 HTTP 方法或启用 withCredentials,可以使用此参数。

onload:当声音加载完成时触发。

onloaderror:当声音无法加载时触发。

onplayerror:当声音无法播放时触发。

onplay:当声音开始播放时触发。

onend:当声音播放结束时触发(如果是循环播放,则在每次循环结束时触发)。

onpause:当声音被暂停时触发。

onstop:当声音被停止时触发。

onmute:当声音被静音或取消静音时触发。

onvolume:当声音的音量改变时触发。

onrate:当声音的播放速率改变时触发。

onseek:当声音被快进或快退时触发。

onfade:当声音完成淡入或淡出时触发。

onunlock:当音频通过触摸/点击事件自动解锁时触发。

3D 音频配置:

orientation:设置音频源在 3D 笛卡尔坐标空间中指向的方向。根据声音的锥形属性,指向远离监听器的声音可能会变得安静或无声。数组中的三个值分别代表在 X、Y、Z 轴上的方向向量,默认值为 [1, 0, 0]。

stereo:设置音频源的立体声平移值,用于控制声音在左右声道之间的平衡。-1.0 表示完全在左侧,1.0 表示完全在右侧。

pos:设置音频源在 3D 空间中的位置,相对于全局监听器的位置。数组中的三个值分别代表在 X、Y、Z 轴上的位置。

pannerAttr:设置声音或声音组的 panner 节点属性。可以使用 pannerAttr 方法来设置所有可用的选项。

onstereo:当当前声音的立体声平移值改变时触发。

onpos:当当前声音的监听器位置改变时触发。

onorientation:当当前声音的监听器方向改变时触发。

功能和特性:

音频精灵:允许开发者将多个音频片段组合到一个文件中,这样可以减少 HTTP 请求的数量,提高加载效率。

空间音频:howler 支持立体声和 3D 音频效果,使得开发者可以创建具有空间感的音频体验。

全编解码器支持:howler 支持多种音频格式,包括但不限于 MP3、MPEG、OPUS、OGG、OGA、WAV、AAC、CAF、M4A、MP4、WEBA、WEBM、DOLBY 和 FLAC。

跨平台兼容性:howler 默认使用 Web Audio API,如果浏览器不支持,则回退到 HTML5 Audio。这种设计确保了它可以在所有主流浏览器和平台上运行。

自动缓存:howler 会自动缓存加载的音频文件,并在后续的调用中重用这些缓存,这样可以提高性能并减少带宽消耗。

模块化:howler 的模块化架构允许开发者只加载所需的部分,这样可以减少最终应用的体积。同时,开发者也可以根据需要扩展库,添加自定义功能。

使用场景:

游戏开发:在游戏开发中,howler 可以用来管理背景音乐、音效和角色语音。

多媒体应用:在需要播放音频的多媒体应用中,howler 提供了丰富的控制选项和良好的用户体验。

教育工具:在教育应用中,howler 可以用来创建互动式音频教程和语音反馈。

音乐播放器:howler 可以用来创建自定义的音乐播放器,支持多种音频格式和播放控制。


《前端资源推荐》收集各种前端组件 UI 框架、JS 插件工具、中后台系统模板、动画库、低代码、可视化资源、开源项目、学习资源、特效源码等,如有其他优秀资源,欢迎发消息投稿,感谢点赞、转发、关注!!!

GitHub:https://github.com/goldfire/howler.js

官方文档:https://howlerjs.com/

相关推荐

Python入门学习记录之一:变量_python怎么用变量

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

python变量命名规则——来自小白的总结

python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...

Python入门学习教程:第 2 章 变量与数据类型

2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...

绘制学术论文中的“三线表”具体指导

在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...

Python基础语法知识--变量和数据类型

学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...

一文搞懂 Python 中的所有标点符号

反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...

Python变量类型和运算符_python中变量的含义

别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...

从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序

在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...

Python中下划线 ‘_’ 的用法,你知道几种

Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...

解锁Shell编程:变量_shell $变量

引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...

一文学会Python的变量命名规则!_python的变量命名有哪些要求

目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...

更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for

src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...

C++第五课:变量的命名规则_c++中变量的命名规则

变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....

Rust编程-核心篇-不安全编程_rust安全性

Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...

探秘 Python 内存管理:背后的神奇机制

在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...