Javascript 在多轨设置中使用waveform.js库查找音频位置时出现的问题

Javascript 在多轨设置中使用waveform.js库查找音频位置时出现的问题,javascript,html5-canvas,wavesurfer.js,Javascript,Html5 Canvas,Wavesurfer.js,我正在使用wavesurfer.js库创建一个多轨播放器。() 我的HTML非常简单: <div id="player"></div> <div id="player_controls"> <button class="btn btn-sm btn-dark" disabled="disabled" id="btn_play"><i

我正在使用wavesurfer.js库创建一个多轨播放器。()

我的HTML非常简单:

<div id="player"></div>

<div id="player_controls">
    <button class="btn btn-sm btn-dark" disabled="disabled" id="btn_play"><i class="fas fa-play"></i></button>
    <button class="btn btn-sm btn-dark" disabled="disabled" id="btn_pause"><i class="fas fa-pause"></i></button>
    <button class="btn btn-sm btn-dark" disabled="disabled" id="btn_stop"><i class="fas fa-stop"></i></button>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.3.7/wavesurfer.min.js"></script>
<script type="text/javascript" src="mixer.js"></script>

但是,搜索到某个位置只需重新调用相同的seek函数,直到我得到一个
超过最大调用堆栈大小的
错误。有什么办法解决这个问题吗?

你是在询问所选光谱的位置吗? 试试这个-如果这个有效

spectrum[i].on('seek', function (position) {
     console.log(position)
});

一般来说,事件还附带事件参数,因此附加事件参数可以让您对所需操作有更多的了解和控制。

您是在询问所选频谱的位置吗? 试试这个-如果这个有效

spectrum[i].on('seek', function (position) {
     console.log(position)
});
通常情况下,事件还附带事件参数,因此附加事件参数可以让您对所需操作有更多的了解和控制。

(代表问题作者发布解决方案,将其移动到答案空间)

决议人:

spectrum[i].on('seek', function(position){
    console.log(position);
    for(var j=0; j<audiofiles.length; j++){
        var currentProgress = spectrum[j].getCurrentTime() / spectrum[j].getDuration();
        if(currentProgress!=position){
            spectrum[j].seekTo(position);
        }
    }
});
spectrum[i].打开('seek',函数(位置){
控制台日志(位置);
for(var j=0;j(代表问题作者发布解决方案,将其移动到答案空间)

决议人:

spectrum[i].on('seek', function(position){
    console.log(position);
    for(var j=0; j<audiofiles.length; j++){
        var currentProgress = spectrum[j].getCurrentTime() / spectrum[j].getDuration();
        if(currentProgress!=position){
            spectrum[j].seekTo(position);
        }
    }
});
spectrum[i].打开('seek',函数(位置){
控制台日志(位置);

对于(var j=0;jIs是否可以为相同的代码提供JSFIDLE或codepen?@abhijat_saxena我没有将其包含在代码段中,因为如果没有.wav文件,它根本无法运行。我有一个建议的答案-你能看到这是否有效吗,我正在搜索-是否可以为相同的代码提供JSFIDLE或codepen?@abhijat_saxena我没有将其包含在代码段中。)代码片段,因为如果没有.wav文件,它将无法运行我有一个建议的答案-你能看到这是否有效吗,我正在搜索-谢谢你的答案,是的
console.log()
为我提供了正确的位置,但是,当我试图让其他曲目搜索到相同的位置时,它只会不断重新触发事件,直到我得到一个
最大调用堆栈大小超过
错误。有没有办法解决这个问题?基本上我想
seekTo()
在不反复调用同一函数的情况下,其余曲目的位置对此位不太确定-但是为了阻止事件冒泡-可以使用position.stopPropogation();(但不太确定)检查此项-再次感谢您的输入,但不幸的是,这对我不起作用。请尝试为此调用堆栈大小超出的问题请求一个单独的新线程。也许有人可以帮忙谢谢您的回答,是的,
console.log()
为我提供了正确的位置,但是,当我试图让其他曲目搜索到相同的位置时,它只会不断重新触发事件,直到我得到一个
最大调用堆栈大小超过
错误。有没有办法解决这个问题?基本上我想
seekTo()
在不反复调用同一函数的情况下,其余曲目的位置对此位不太确定-但是为了阻止事件冒泡-可以使用position.stopPropogation();(但不太确定)检查此项-再次感谢您的输入,但不幸的是,这对我不起作用。请尝试为此调用堆栈大小超出问题请求一个单独的新线程。也许有人可以提供帮助
spectrum[i].on('seek', function(position){
    console.log(position);
    for(var j=0; j<audiofiles.length; j++){
        var currentProgress = spectrum[j].getCurrentTime() / spectrum[j].getDuration();
        if(currentProgress!=position){
            spectrum[j].seekTo(position);
        }
    }
});