wavesurfer.js
v7 (中文网)
wavesurfer.js 是一个轻量、交互式的 HTML5 波形渲染与播放库。无需任何复杂配置,即可在 Web 应用中提供极其流畅、高清晰度且极具现代感的波形可视化与编辑能力。
import WaveSurfer from 'wavesurfer.js' const wavesurfer = WaveSurfer.create({ container: '#waveform', waveColor: '#4F4A85', progressColor: '#383351', url: '/audio.mp3', }) wavesurfer.on('ready', () => { wavesurfer.play() })
实时修改配置参数、管理选区插件、导入自定义音频,并即时同步生成可直接复制的初始化代码。
本地音频 - 快速解码加载
允许在波形图上创建并保存特定的选择范围,支持拖拽和拉伸。
当前没有定义任何区域。在波形图上拖拽鼠标,或者点击上方按钮随机创建一个。
| 选区名称 | 开始位置 | 结束位置 | 持续时长 | 操作 |
|---|
选择内置免跨域音频
或拖入本地音频 (免跨域限制)
点击此处或将音频文件拖到这
支持 MP3, WAV, OGG, M4A 等
你可以使用包管理器安装 wavesurfer.js,并在你的现代前端工程化项目中导入它。由于库中已经直接携带了完整的 TypeScript 类型声明,因此无需为它安装额外的包。
如果你只想在基础的 HTML 网页中以最快速度验证功能,也可以直接引用 UNPKG 的 UMD 编译好的脚本标签。它会将库导出为全局变量 WaveSurfer。
完整的自动生成 API 参考位于官方文档站 wavesurfer.xyz/docs/api。以下汇总了最常用的核心 API 组成:
通过向 WaveSurfer.create() 传入配置对象来初始化波形图:
通过 wavesurfer 实例,可以在代码中精确操控播放状态:
你可以通过订阅事件来触发业务逻辑:
wavesurfer.js 团队原生维护了许多插件,允许开发者零成本扩展波形图的高级交互:
在波形图上叠加可视化的交互选区。支持设置不同的颜色、拖动位置、拉伸大小,常用于音频分段打标、裁剪以及循环区间播放。
在音频波形的下方或上方显示精细的标尺,显示当前播放的秒数以及刻度,极其适合音频轨道精确定位。
当波形图被放大后,Minimap 会在主波形图下方渲染一个全局小图,指示出当前屏幕可见部分的框线,起到类似地图导航的作用。
允许通过用户的麦克风直接实时进行录音,并随着音量的接收即时绘制出当前的声波图,常用于实时音视频采集应用中。
当用户的鼠标滑过波形图时,会在光标下方绘制一条高亮的时间垂线,并浮现出悬停位置所对应的具体秒数,提升交互的严谨度。
不仅仅展示时域音量,还会结合快速傅里叶变换 (FFT) 渲染出频域频谱图,完美地分析音频不同频率段的能量分布情况。
wavesurfer.js v7 被渲染至隔离的 Shadow DOM 树中。这使用户网页中原有的 CSS 样式无法干扰波形图元素。
不过,你可以使用 CSS 的 ::part() 伪元素选择器,选择并定制 Shadow DOM 中带有 part 属性的各种元素。
在网页全局 CSS 文件中,你可以直接通过 container 的 ID 或者 class 穿透自定义波形的光标、选区背景与样式。
/* 修改波形图寻址光标 */ #waveform ::part(cursor):before { content: '🏄'; } /* 修改 Regions 音频选区的字体家族 */ #waveform ::part(region) { font-family: fantasy; }
你可以使用浏览器的开发者工具 (F12) 审查波形图的容器。在 #shadow-root 内部,每个带有 part="..." 属性的 DOM 节点都是合法的穿透定位点。
part="wrapper" - 最外层波形图容器
part="canvas-container" - 绘图 Canvas 所在的盒子
part="cursor" - 随时间播放而滑动的垂直定位光标线
part="region" - 当开启选区插件后,对应的选区覆盖层 DOM
测试采用了 Cypress 框架,混合了标准的 API 端到端 (E2E) 功能测试与高精度的像素级视觉回归测试。