- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不确定我的措辞是否正确,但这是我正在尝试做的事情。
我正在使用一个函数来呈现 wavesurfer 的多个实例在页面上。
开箱即用,这很简单,因为您只需声明 wavesurfer 的每个单独实例:
var wavesurfer1 = WaveSurfer.create({
container: domEl,
barWidth: 3,
.....
var wavesurfer2 = WaveSurfer.create({
container: domEl,
barWidth: 3,
.....
但是我预加载了 JSON 存储的波形数据,而不是在页面加载时加载任何音频文件,只有当用户单击播放按钮时,音频文件才会加载。实例数量及其 ID 也将动态创建。
我的逻辑可行,但我无法定位每个独特的 wavesurfer 实例,因为它们不是唯一的 - 因此我的问题是,我在官方网站(或 git)上找不到任何信息) 关于针对个别实例。我假设 container
可以做到这一点,但找不到任何关于如何做到这一点的信息,所以我正在尝试另一种方式。
在渲染每个 wavesurfer 实例的函数中,我们有这个(domEl
被传递到函数中并创建一个唯一的 div
和 id
对于每个波形容器):
var wavesurfer = WaveSurfer.create({
container: domEl,
barWidth: 3,
waveColor: '#CCC',
progressColor: 'white',
backend: 'MediaElement',
mediaType:'audio',
height: 80,
cursorColor: 'white',
responsive: true,
hideScrollbar: true
});
以及加载实际音频的函数:
$('.m-btn-player').on('click', function() {
id = $(this).data("id");
var url = "/play?id="+id;
wavesurfer.load(url);
wavesurfer.play();
})
这是可行的,但是由于 wavesurfer 的每个实例都被声明为 wavesurfer
,因此无论单击哪个播放按钮,它都会将音频加载到每个实例中。
我认为我可以做的是在渲染函数中使用动态生成的名称声明 wavesurfer 的每个实例,即:
// `id` is passed to the function
var wavesurfer+id = WaveSurfer.create({
container: domEl,
barWidth: 3,
....
然后:
wavesurfer+id.load(url);
wavesurfer+id.play();
但这行不通(根据我读到的有关动态变量名的内容,我什至认为这不可能)。
我还读到过我应该为这样的事情使用 hashmaps 但不知道如何使用它们,所以如果是这样,或者你可以看到另一种方法我可以完成这项工作我真的很感激一些建议。
如果这种方法完全错误,我如何在不为每个实例声明对象名称的情况下定位多个 wavesurfer 实例?我在任何地方都找不到任何解释如何执行此操作的内容。
最佳答案
经过反复试验,我破解了它。
你需要设置一个对象数组:
var wavesurfer = [];
然后在渲染函数中创建每个实例时将每个单独的 id 传递给它:
function render(id, selector, peaks, url) {
var domEl = document.createElement('div');
domEl.setAttribute("id", "t-"+id);
document.querySelector(selector).appendChild(domEl);
trackid = "t"+id;
wavesurfer[trackid] = WaveSurfer.create({
container: domEl,
barWidth: 3,
waveColor: '#CCC',
progressColor: 'white',
backend: 'MediaElement',
mediaType:'audio',
height: 80,
cursorColor: 'white',
responsive: true,
hideScrollbar: true
});
// Make sure you reference each method the same way...
wavesurfer[trackid].drawBuffer();
wavesurfer[trackid].load(url, peaks, false); //false prevents preload of audio file
return wavesurfer[trackid];
}
调用渲染函数:
render(1, ".tk1", [....], 'http://example.com/file.mp3');
然后您可以使用对象标识符定位每个玩家,在本例中传递给函数的 id 是 1
:
wavesurfer[t1].playPause();
所以一个用例可能是:
<div class="tk1">
<button type="button" onClick="wavesurfer['t1'].playPause();">PLAY</button>
<script>
render(1, ".tk1", [-0.39,0.4,-0.9,0.91,-0.32,0.34,-0.95,0.98,-0.54,0.74,-0.9,0.91,-0.33,0.37,-0.96,0.98,-0.9,0.91,-0.79,0.76,-0.95,0.95,-0.88,0.87,-0.91,0.94,-0.55,0.6,-0.97,0.96,-0.43,0.43,-0.91,0.91,-0.51,0.4,-0.98,0.94,-0.55,0.76,-0.91,0.91,-0.33,0.37,-0.98,0.98,-0.39,0.41,-0.92,0.91,-0.31,0.34], 'http://example.com/file.mp3');
</script>
</div>
<div class="tk2">
<button type="button" onClick="wavesurfer['t2'].playPause();">PLAY</button>
<script>
render(2, ".tk2", [-0.39,0.4,-0.9,0.91,-0.32,0.34,-0.95,0.98,-0.54,0.74,-0.9,0.91,-0.33,0.37,-0.96,0.98,-0.9,0.91,-0.79,0.76,-0.95,0.95,-0.88,0.87,-0.91,0.94,-0.55,0.6,-0.97,0.96,-0.43,0.43,-0.91,0.91,-0.51,0.4,-0.98,0.94,-0.55,0.76,-0.91,0.91,-0.33,0.37,-0.98,0.98,-0.39,0.41,-0.92,0.91,-0.31,0.34], 'http://example.com/file2.mp3');
</script>
</div>
关于javascript - 动态创建多个具有唯一名称的 wavesurfer 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50569574/
我在使用 Wavesurfer 的网络项目中遇到了障碍。我已经在我的项目中安装了 wavesurfer.js 和 react-wavesurfer 作为节点模块。 Wavesurfer.js 似乎工作
1.查看效果图 向前选中: 向后选中: 代码如下(示例): ?
我尝试了github示例中的一些不同脚本以及我的脚本: https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/wavesurfer.mi
我正在使用WaveSurferJs播放流音频并在 wavesurfer init 后端设置为 MediaElement。还绘制了峰值 var wavesurfer = WaveSurfer.creat
我正在使用 katspaugh's waveSurfer library用于播放声音文件。 我编写代码以这种方式显示“耗时/总时间”。 waveSurfer.on('play', function()
我想使用 wavesurfer.js 添加数字音频文件的时间线,不幸的是我的代码不起作用。我可以知道从哪里可以加载我的文件的timeline.js 吗? Wavesurfer 时间线插件是否已弃用?
有人能发现这里的问题吗? var wavesurfer = WaveSurfer.create({ container: '#waveform', waveColor: 'vio
我已经建立了一个waveurfer音频模型,该模型在chrome和firefox上运行良好。它马上开始。当我想在safari上点击播放时,它等待整个文件下载完毕,然后才播放...我在safari上打开
我正在使用 wavesurfer.js当页面上只有一个实例时效果很好,但我有多个实例并且不知道(因为我是一个 javascript 新手)如何将播放按钮链接到不同的实例。 我只需要一些帮助...这就是
不确定我的措辞是否正确,但这是我正在尝试做的事情。 我正在使用一个函数来呈现 wavesurfer 的多个实例在页面上。 开箱即用,这很简单,因为您只需声明 wavesurfer 的每个单独实例: v
我一直在开发一个允许用户点击并操作 mp3 文件的在线应用程序,我正在尝试将本地文件从我的计算机加载到 wavesurfer 对象中,但我在 chrome 中不断收到此错误: "Access to X
我需要获取音频的当前播放时间。我一直在使用 react-wavesurfer播放音频的包,我可以看到 wavesurfer.js有一种获取当前播放时间的方法,但我似乎无法弄清楚如何用 React 来做
我正在尝试使用 wavesurfer.js 为使用 JavaScript 动态创建的元素创建波形。这是我的代码: $(document).ready(function() { var id = 9
大家好,下面是我的代码示例,我试图让 $scope.icon 在 wavesurfer 的函数处理程序中更新为新值,但它似乎对我不起作用,无论我做什么做。有人对此有想法吗? msp.controlle
我想实时显示正在播放的轨道的剩余时间,但由于我的 javascript 技能不是很先进,所以无法弄明白。 Wavesurfer.js 提供了一个叫getCurrentTime()的函数,但是我不知道怎
我想在我的 Angular 项目上运行 WaveSurfer.js,但它不能像我想要的那样工作。WaveSurfer 在 Index 中完美运行。但是,我想要在我的组件中使用 WaveSurfer,但
Wavesurfer.js 很棒,但有点令人困惑。 我已经实现了wavesurfer,但是我想构建一种方法来剪切用户选择的音频区域并将其粘贴到新的音频缓冲区中。目前,我正在控制台登录区域 js 文件以
到目前为止,在我的研究中,我已经能够使用 Node.js 和 Express 向动态网页提供文件,如下所示。 app.use(express.static('./public')); 然后链接到公共(
我正在尝试在我的 react 应用程序中使用 wavesurfer.js 渲染音频文件。我是个菜鸟,我想知道为什么我总是收到“找不到容器元素”消息。 简而言之,这是我需要知道的。 提前致谢! impo
我不熟悉es6,想在我的项目中使用react-wavesurfer。文档在这里:https://github.com/mspae/react-wavesurfer但示例使用是在 es6 中,我不确定如
我是一名优秀的程序员,十分优秀!