0

我在这里有 2 个函数: load 接收到 mp3 的路径,count 是正在加载的轨道数。当 for 循环到达最后一个轨道时,arraybufferList 包含所有歌曲的“arraybuffer”数组。然后将其传递给 loadData 函数,该函数使用 webaudioapi 函数“decodeAudioData”来解码所有信息并将所有内容放入“currentBuffer”中。然而,在关闭之外,“currentBuffer”似乎消失了(在我的谷歌浏览器调试器中)。

我正在尝试使用 wavesurfer.js 库并将其扩展到多个轨道。

load: function (src,count) {

        var my = this;
        var xhr = new XMLHttpRequest();
        xhr.responseType = 'arraybuffer';
        xhr.onload = function () {

            console.log("loading mp3 & putting inside arraybufferList");
            arraybufferList.push(xhr.response); 

            if (arraybufferList.length==count){
                console.log(arraybufferList);
                for (var i=0; i<arraybufferList.length; i++){
                    my.backend.loadData(
                        arraybufferList[i],
                        playList[i].draw.bind(playList[i])
                    );

                    console.log(playList);
                    //playList.push(my);    
                }

                console.log(playList);

            }       
        };

        xhr.open('GET', src, true);

        xhr.send();
    },

    loadData: function (audioData, cb) {
        var my = this;

        this.pause();

        this.ac.decodeAudioData(
            audioData,
            function (buffer) {
                my.currentBuffer = buffer;
                my.lastStart = 0;
                my.lastPause = 0;
                my.startTime = null;
                cb(buffer);

            },
            Error
        );
    },

在每个音频文件的开头创建一个对象,其中来自 loadData 的信息应该进入

var WaveSurfer = {
    init: function (params) {
        var my = this;

        var backend = WaveSurfer.Audio;

        if (!params.predrawn) {
            backend = WaveSurfer.WebAudio;
        }

        this.backend = Object.create(backend);
        this.backend.init(params);

        this.drawer = Object.create(WaveSurfer.Drawer);
        this.drawer.init(params);

        this.backend.bindUpdate(function () {
            my.onAudioProcess();
        });

        this.bindClick(params.canvas, function (percents) {
            my.playAt(percents);
        });
        playList.push(my);

    },

一些基本代码: ac: new (window.AudioContext || window.webkitAudioCont

4

0 回答 0