0

我的小项目有问题。每次音乐播放器将新歌曲加载到播放列表中或您按下列表中的歌曲以播放时,它都会占用大量内存,并且在您关闭它之前一直保持高位。我认为每次我使用文件读取器 API 时都会使用内存,但我也在使用jDataView.js脚本加载 ID3 信息,我也认为这会占用大量内存。

你们有什么建议,用 加载,存储和播放歌曲FileReader,而不占用内存?我试图查看是否可以在使用后清除 fileReader,但我找不到任何东西。我只在 Chrome 中测试过。

更新:我已经测试了我的项目,并发现它在尝试加载数据字符串时会占用内存。

reader.onloadend = function(evt) {
    if(typeof(e) != "undefined"){
        e.pause();
    }
    e = new Audio();
    e.src = evt.target.result; // evt.target.result call takes the memory
    e.setAttribute("type", songs[index]["file"].type);
    e.play();
    e.addEventListener("ended", function() { LoadAudioFile(index + 1) }, false);
};

还有另一种方法可以将数据加载到音频元素中吗?

4

1 回答 1

10

这不是因为,FileReader而是因为您将src音频元素的属性设为 1.33 * mp3filesize 字符串。因此,该src属性不是指向 mp3 资源的漂亮短 url,而是 base64 编码的整个 mp3 文件。你的浏览器没有崩溃真是个奇迹。

您根本不应该读取文件FileReader,而是从文件中创建一个 blob URL 并将其用作 src。

var url = window.URL || window.webkitURL;

//Src will be like "blob:http%3A//stackoverflow.com/d13eb575-4863-4f86-8727-6400119f4afc"
//A very short string that is pointing to the original resource in hard drive

var src = url.createObjectURL( mp3filereference );

audioElement.src = src;
于 2012-05-02T13:33:52.430 回答