【问题标题】:Java LWJGL OGG Background MusicJava LWJGL OGG 背景音乐
【发布时间】:2015-04-13 07:43:02
【问题描述】:

在我的游戏中,我有一个很长的 ogg 文件(大约 8 到 20 mb),而其他一些机器无法将其直接读入内存。所以我读到有些游戏使用流和播放方法。是否有任何 lib/code 示例可以实时加载和播放 ogg 文件(使用 LWJGL)? 感谢您的帮助:)

【问题讨论】:

  • 一般来说,您希望在游戏中尽可能多地压缩文件。从下载游戏需要多长时间来看,单个音乐曲目 20MB 根本无法接受。
  • 我的错误,我的背景声音大约 5 分钟长(~9 mb):)

标签: java stream lwjgl playback ogg


【解决方案1】:

您是否特别需要播放 OGG 文件?如果没有,有很多在线转换器可以将其转换为 MP3、WAV 等。

另外,您是否特别需要使用 LWJGL 玩它?这在默认的 java 中是很有可能的,就像这样:

static String randomName = "TreasureQuest";
public static Clip clip = null;
public static void playSound(String name) throws Exception{
    if (clip != null && clip.isOpen()) clip.close();
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("music/" + name + ".wav").getAbsoluteFile());
        clip = AudioSystem.getClip();

        clip.open(audioInputStream);
        FloatControl gainControl = 
                (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
            gainControl.setValue(0f);

        System.out.println(clip.getFrameLength() + " | " + clip.getFramePosition());
        clip.start();


}

就我个人而言,我在我的 LWJGL 游戏中使用它,它运行得非常好。

如果你必须播放OGG文件,特别是必须用LWJGL播放,我建议你使用OpenAL。 You can find the documentation for playing OGG files here.

【讨论】:

    【解决方案2】:

    @Joehot200 所以我有两个音乐引擎 - java clip 和 lwjgl,所以它不知道我将使用哪一个:)

    我的代码与您的代码非常相似(但它包括 ogg 解压缩),并且加载时间仍然很长 - 我想读取我的声音文件并同时播放我读取的内容(如 YOUTUBE)。这是我的一段代码:

    public static Clip DecodeOgg(String filename)
    {
        try
        {
            File file = new File(filename);
            // Get AudioInputStream from given file.
            AudioInputStream in= AudioSystem.getAudioInputStream(file);
            AudioInputStream din = null;
            if (in != null)
            {
                AudioFormat baseFormat = in.getFormat();
                AudioFormat  decodedFormat = new AudioFormat(
                        AudioFormat.Encoding.PCM_SIGNED,
                        baseFormat.getSampleRate(),
                        16,
                        baseFormat.getChannels(),
                        baseFormat.getChannels() * 2,
                        baseFormat.getSampleRate(),
                        false);
                // Get AudioInputStream that will be decoded by underlying VorbisSPI
                din = AudioSystem.getAudioInputStream(decodedFormat, in);
    
                Clip clip = AudioSystem.getClip();
                clip.open(din);
    
                return clip;
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    
        return null;
    }
    

    【讨论】:

    • 您是否特别需要加载OGG?我的游戏中有一个 5 分钟的音乐曲目,由我在上面以 WAV 格式发布的完全相同的代码加载。此外,它几乎是立即加载的。
    • 我需要一个压缩音乐文件(对于我游戏中的一个位置,我有两个长的 ogg 文件 - 白天和晚上),8mb 和 80mb 之间的差异很大。问题是我将解压缩的 ogg 文件加载到内存中然后播放。这才是真正的问题……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多