清除Clip / AudioStream中的数据以释放内存

时间:2014-03-04 19:04:36

标签: java out-of-memory clip

我有一些代码可以作为超级基本的音乐播放器:

import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class MusicPlayer{

private Clip c;
private boolean playing;

public MusicPlayer(){
    playing = false;
}

public void play(String fileName) {
    if(playing == false){
        try {
            c.drain();
            c.flush();
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(fileName));
            c = AudioSystem.getClip();
            c.open(audioInputStream);
            c.start();
            playing = true;
        } catch(Exception ex) {
            System.out.println("Error with playing sound:" + ex);
            ex.printStackTrace();
        }
    }
}

public void stop(){
    if(playing == true){
        c.stop();
        playing = false;
    }
}

}

问题是,如果我尝试打开太多的wav文件,程序会崩溃并出现OutOfMemoryError。为程序提供更多内存(开始时不太理想)仍然意味着每次打开新文件时程序运行速度都会变慢。你可以看到我试图通过以下方式解决这个问题:

c.drain();
c.flush();

但显然这还不够。任何帮助表示赞赏!

0 个答案:

没有答案