有没有办法播放相同的音频文件(使用sun.audio)而不必每次都加载Fileinputstream?这就是我现在正在尝试做的事情:
public static void nomnom() throws Exception
{
FileInputStream in = new FileInputStream ("nomnom.au");
AudioStream as = new AudioStream (in);
AudioPlayer.player.start (as);
ContinuousAudioDataStream loop = null;
}
尽管" nomnom.au"只有几秒钟,当我重复这个方法(播放声音)大约30次时,我很快得到一个OutofMemoryError。我认为这是因为我每次需要播放时都会加载音频文件。
我尝试在课程的最开始声明FileInputStream和AudioStream,只在主方法的开头加载我的文件:
public class Snake
{
static InputStream in;
static AudioStream as;
.
.
.
public static void nomnomload () throws Exception
{
in = new FileInputStream ("nomnom.au");
as = new AudioStream (in)
}
public static void nomnomplay() throws Exception
{
AudioPlayer.player.start (as);
ContinuousAudioDataStream loop = null;
}
}
我希望只在游戏开始时调用nomnomload方法。但是,当我尝试播放音频时,我只是第一次听到声音,而后来尝试运行nomnomplay则没有任何内容。
非常感谢您解决此问题的任何帮助。
答案 0 :(得分:0)
您可以将数据存储在byte []缓冲区中。
例如,您可以修改load()
功能
static byte[] buffer;
public static void nomnomload() throws Exception {
if (buffer == null) {
FileInputStream fis = new FileInputStream("nomnom.au");
buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
}
in = new ByteArrayInputStream(buffer);
as = new AudioStream(in);
}
然后你基本上将数据存储在一个已定义的数组中(你不会重读文件,只是一个数组)...