javascript - 如何在 wavesurfer.js 中播放一个区域?
问题描述
我最近发现了 wavesurfer.js 并将其集成到语言学家的 Web 界面中(使他们能够播放他们检索到的查询结果的音频)。由于单词和声音的对齐并不总是理想的,我正在使用区域插件来让他们突出他们想要听的延伸 - 或者至少这是计划。在过去的几天里,我一直在努力让它发挥作用。我对 JavaScript 知之甚少 - 我正在研究我找到的示例,试图使它们适应我的需要。请在批评时保持温和.. ;-)
我想要什么:允许用户在单击(或按下按钮时)拖动选择一个区域并播放一次(或可能作为循环)。根据需要调整区域。这是我得到的:
var RegionsPlugin = window.WaveSurfer.regions;
var wavesurfer = WaveSurfer.create({
container: '#waveform',
waveColor: 'blue',
progressColor: 'purple',
barHeight: 2,
backend: 'MediaElement',
plugins: [
RegionsPlugin.create({
})
]
});
wavesurfer.load('http://url.to.wav');
wavesurfer.on('ready', function () {
wavesurfer.enableDragSelection({});
});
wavesurfer.on('region-click', function(region, e) {
console.log(region.start);
console.log(region.end);
e.stopPropagation();
wavesurfer.play(region.start, region.end);
});
这种在 Firefox(在 Mac 上)中有效,但在 Opera 和 Chrome 中,它总是从音频剪辑的开头开始播放。我在 Firefox 中说“有点效果”,因为它只在第二次单击时才开始播放该区域(显然没有任何内容写入控制台)。我不确定第一次点击会发生什么...
我怀疑这真的很容易 - 但对我来说不是......
与频谱图插件有关的另外两件事(上面未显示代码):
- 有没有办法修改频谱图中的频率范围?我正在与之合作的语音专家对她无法放大前 5000Hz 的事实感到非常不满。
- 偶尔(但并非始终如一 - 重新加载通常会解决此问题 - 加载频谱图时我收到错误消息“TypeError:缓冲区为空”。任何我应该开始寻找问题的建议。
我正在使用最新版本的 wavesurfer.js。我在 wavesurfer.js 的 GitHub 站点上的“问题”下发布了相同的帮助请求,但尚未收到任何输入 - 现在希望在这里获得一些输入。如果开发人员回复我,我会更新内容。提前感谢您的帮助!
塞巴斯蒂安
解决方案
在 wavesurfer.enableDragSelection({}); 之后添加这些行 在你的代码中。应该管用。
wavesurfer.addRegion({
start: 0, // time in seconds
end: 3, // time in seconds
color: 'hsla(100, 100%, 30%, 0.1)'
});
推荐阅读
- python - Python:将变量从一个函数返回到另一个函数而不重新运行第一个函数
- c++ - 如何编译 SNAP c++ 源代码而不会出现架构错误?
- javascript - 保存回调函数范围
- java - 在 Libgdx 中旋转四元数
- javascript - 如何处理 CustomElement 之间的依赖关系
- javascript - 在 Postman GET 工作正常但 POST 方法继续发送请求。使用猫鼬,Javascript
- java - 我如何将数组中的所有数字相加并在java中将它们打印为整数值?
- bokeh - 散景:figure.line 的 hovertool 的自定义回调
- php - 如何使全局变量在整个 php 应用程序中可用以节省 SQL 请求
- scala - 这种模式匹配是多余的吗?