0

私の小さなプロジェクトに問題があります。音楽プレーヤーが新しい曲をプレイリストに読み込んだり、リストの曲を押して再生したりするたびに、大量のメモリを使用し、シャットダウンするまでハイのままになります。filereader 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

これは、オーディオ要素の属性を 1.33 * mp3filesize 文字列にFileReaderしているためではありません。そのため、属性は mp3 リソースを指す素敵な短い URLsrcではなく、base64 エンコーディングの mp3 ファイル全体です。srcブラウザがクラッシュしなかったのは不思議です。

ファイルをまったく読み取る必要はありませんが、ファイル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 に答える