【问题标题】:Playing music in a Java game在 Java 游戏中播放音乐
【发布时间】:2015-04-08 18:14:19
【问题描述】:

我正在尝试在使用 Java 编程的游戏中添加一些背景音乐。我有编码,没有任何错误。

唯一的问题是没有音乐播放。

这是我编写的:

import sun.audio.AudioData;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public void startBGMusic()

    try{

        InputStream in = new FileInputStream(new File("opening1.mid"));
        AudioStream audioStream = new AudioStream(in);
         AudioPlayer.player.start(audioStream);

    }catch(Exception error){
          System.out.println("File Not Found");
          System.out.println(error);
}

任何帮助将不胜感激。谢谢!

【问题讨论】:

标签: java audio


【解决方案1】:

这行得通:

import sun.audio.*;
import java.io.*;

public class AudioTest{

    private static AudioStream theStream;

    //  Main method
    public static void main(String[] args){

        try{
            theStream = new AudioStream(new FileInputStream("opening1.mid"));
            AudioPlayer.player.start(theStream);
        }
        catch(Exception e){e.printStackTrace();}
    }//end main

}//end AudioTest class

【讨论】:

    【解决方案2】:

    我强烈推荐使用 javax.sound.sampled 库来制作游戏音频。据我所知,这些旧的 sun.audio 库已经过时或不推荐使用或其他东西。我根本不使用它们,所以我无法评论如何使用它们,或者在一个系统上运行的代码是否可以在另一个系统上运行。我不认为你可以有把握地假设它会。

    Java 教程Trail: Sound 有你需要的东西,尽管该教程确实很难阅读。

    播放声音部分将是重点。

    有些人利用 TinySound(在 github 上免费提供)等库来简化游戏 sf/x 编程。你可以在java游戏编程网站java-gaming.org/找到更多关于它和其他sf/x库的信息

    我发现自己想知道为什么这么多人最终尝试使用这些旧的 sun 库。也许这只是一个副作用:那些不可避免地最终会遇到问题并在 StackOverflow 上提问的人。因此,该人群“人数过多”?

    【讨论】:

      【解决方案3】:

      如果有帮助的话,这个方法对我来说非常有效:

      public synchronized void alarm(String audioString) 
      {
          try
          {
              Clip crit = AudioSystem.getClip();
              AudioInputStream inputStream1 = AudioSystem.getAudioInputStream(this.getClass().getResource(audioString));
              crit.open(inputStream1);
              crit.loop(Clip.LOOP_CONTINUOUSLY);
              crit.start();
      
          } catch (Exception e){System.err.println(e.getMessage());}
      }
      

      我在这个网站的其他地方找到了这段代码,请注意这不是我的主意,我没有为此获得任何功劳。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2011-08-01
        • 1970-01-01
        相关资源
        最近更新 更多