亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在多軌設置中使用waveform.js 庫在音頻中尋找位置的問題

在多軌設置中使用waveform.js 庫在音頻中尋找位置的問題

侃侃無極 2022-07-21 10:57:39
我正在使用 wavesurfer.js 庫來創建多軌播放器。(https://wavesurfer-js.org/)我的 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>那么我的mixer.js文件如下:var audiofiles = ["drums.wav","bass.wav","vocals.wav",];var buttons = {    play: document.getElementById("btn_play"),    pause: document.getElementById("btn_pause"),    stop: document.getElementById("btn_stop")};var spectrum = [];var ready = [];for(var i=0; i<audiofiles.length; i++){ready.push('false');}for(var i=0; i<audiofiles.length; i++){    spectrum[i] = WaveSurfer.create({        container: '#player',        progressColor: "#28a745"    });        spectrum[i].on('ready', function () {        ready.pop();        ready.push = 'true';        checkAllReady();    });        spectrum[i].on('seek', function () {        console.log(i);        // var currentProgress = spectrum[i].getCurrentTime() / spectrum[i].getDuration();        // for(var j=0; j<audiofiles.length; j++){            // spectrum[j].seekTo(currentProgress);        // }    });    spectrum[i].load('separations/'+audiofiles[i]);}function checkAllReady(){   if(!ready.includes('false')){buttons.play.disabled = false;}}buttons.play.addEventListener("click", function(){    for(var i=0; i<audiofiles.length; i++){spectrum[i].play();}    buttons.stop.disabled = false;    buttons.pause.disabled = false;    buttons.play.disabled = true;}, false);然而,尋找一個位置只是重新調用相同的尋找函數,直到我得到一個Maximum call stack size exceeded錯誤。任何想法如何解決這個問題?
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

您是在詢問所選光譜的位置嗎?試試這個——如果這行得通?


spectrum[i].on('seek', function (position) {

     console.log(position)

});

通常事件還帶有事件參數,因此附加事件參數可以讓您更深入地了解并控制您需要做什么。


查看完整回答
反對 回復 2022-07-21
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

解決者:


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);

        }

    }

});


查看完整回答
反對 回復 2022-07-21
  • 2 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號