当前位置: 首页 > 知识库问答 >
问题:

Java:sun.sudio:可能每次播放音频文件时都不加载吗?

欧阳乐生
2023-03-14

有没有办法播放相同的音频文件(使用 sun.audio),而不必每次都加载文件输入流?这就是我现在尝试的方式:

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 次时,我很快就会出现内存不足错误。我认为这是由于每次需要播放音频文件时我都会加载音频文件这一事实引起的。

我尝试在类的开头声明FileInpuStream和AudioStream,只在main方法的开头加载我的文件一次:

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;
    }
}

我希望只在游戏开始时调用nomnomloadhtml" target="_blank">方法。然而,当我尝试播放音频时,我只在第一次听到声音,而在接下来的nomnomplay尝试中没有任何声音。

如果能帮助解决这个问题,我将不胜感激。

共有1个答案

年凯康
2023-03-14

您可以将数据存储在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);
}

然后您基本上将数据存储一次,在定义的数组中(您不会重读文件,只是一个数组)…

 类似资料:
  • 本文向大家介绍java实现音频文件播放功能,包括了java实现音频文件播放功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现音频文件的播放功能的具体代码,供大家参考,具体内容如下 实现思路 1、首先获取音频文件的地址,然后通过IO流读取音频文件,加缓冲区,实现Player类的对象。 2、Player类主要用于播放器的初始化,以及通过它来实现一些音视频文件的播放,这个类需

  • 我有一个网页,提供通过手机动态下载mp3文件。我想添加一个功能,在下载文件之前,有人可以通过他们的台式机来收听这首歌。 我需要做什么?

  • 好吧,事情是这样的:我在做一个智力竞赛游戏,我决定给它放一张配乐。它是一个单一的音频文件,我上传到我的自定义域,并通过代码流。我还添加了播放/暂停按钮,这样播放器就可以播放和暂停音乐。音乐在框架1上自动播放,我的游戏的“开始”按钮在那里。但是,如果玩家答错了一个问题,他会回到第一帧。问题是音乐的另一个“实例”开始播放,导致两个音乐在同一时间播放。如果他再答错,就会有三首音乐回放,以此类推....我

  • 函数名称: 播放音频 函数功能: 在后台播放指定的声音文件 函数方法 media.playAudio(path,vol,flag) 参数 类型 必填 说明 path string 是 音频文件名,支持 mp3、m4a、m4r、ogg、wav vol string 否 音频音量,不写默认,使用当前设置的音量 flag string 否 是否循环播放,不写默认为 false - 不循环,true -

  • 我正在为android开发音乐播放器。我编写了一个代码,从android手机上获取所有音频(标题、艺术家姓名、uri、专辑艺术)。但问题是加载所有歌曲需要1分钟以上。所有音乐播放器应用如何处理此问题。有没有办法一首接一首地获取或加载音频歌曲并添加到RecyclerView中。比如Facebook新的订阅源。首先,当用户向下滚动时,它会加载几个故事,然后再加载几个故事。请帮我解决这个问题

  • 我正在开发一个包含一些音频播放器的RecyclerView的应用程序。应用程序将下载。3gp文件(如果尚未下载)。 当我单击playAudio按钮时,音频未被播放。 这是我的适配器代码: 我怎样才能解决这个问题?