【问题标题】:Sound issues in jar filejar 文件中的声音问题
【发布时间】:2013-05-24 21:08:12
【问题描述】:

我有一个非常奇怪的问题我无法解决。

我目前正在制作游戏,我希望游戏中有声音。它应该作为 jar 文件运行,并且从 eclipse 运行时游戏运行良好。

SoundPlayer 是我在游戏中使用的外部 jar 库的一部分。然后它需要一个名称、一个文件夹并播放声音。声音位于 FTSound 对象类所在文件夹的子文件夹中。我检查了 jar,声音文件包含在内,它们与 eclipse 中的位置相同。现在来谈谈我遇到的奇怪问题:

当我通过双击运行 jar 文件时,除了声音之外一切正常。它完全不见了。但是,如果我通过 cmd 启动 jar,声音效果很好。这是完全相同的罐子。

有什么想法吗?非常感谢您的帮助!

声音用以下代码播放:

public static void playSound(final FTSound sound) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try{
                Clip clip = AudioSystem.getClip();
                AudioInputStream inputStream = AudioSystem.getAudioInputStream(sound.getClass().getResource(sound.getFolderName() + "/" + sound.getSoundName()));
                clip.open(inputStream);
                clip.start(); 
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();
}

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java eclipse audio jar javasound


【解决方案1】:

我想到了一些想法。你说你正在使用eclipse。当您将文件提取到 .jar 时,请确保您的音频文件都被提取到同一个位置。如果您单击包含声音文件的目录之外的 .jar 并且它不是快捷方式,但您在 cmd 的同一目录中运行,这可能会导致您描述的问题。虽然它并不能真正解决问题,但我建议的解决方法是编写一个蝙蝠来在命令提示符下启动游戏。这将为您提供一个可点击的文件,该文件也可以播放声音。我在您的代码中没有看到任何问题,如果您已经播放了声音,那么可能没有任何问题。另一件事:剪辑对象在几秒钟内无法正常运行。如果您正在寻找声音效果,那就太好了,否则,您应该尝试使用这种方法:

new Thread(new Runnable()
{
    SourceDataLine soundLine;
    public void run()
    {
      soundLine = null;
          int BUFFER_SIZE = 64*1024;  // 64 KB

              // Set up an audio input stream piped from the sound file.
              try {
                 AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(this.getClass().getResource("title.wav"));
                 AudioFormat audioFormat = audioInputStream.getFormat();
                 DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
                 soundLine = (SourceDataLine) AudioSystem.getLine(info);
                 soundLine.open(audioFormat);
                 soundLine.start();
                 int nBytesRead = 0;
                 byte[] sampledData = new byte[BUFFER_SIZE];
                 while (nBytesRead != -1) 
                 {
                    nBytesRead = audioInputStream.read(sampledData, 0, sampledData.length);
                    if (nBytesRead >= 0) 
                    {
                       // Writes audio data to the mixer via this source data line.
                       soundLine.write(sampledData, 0, nBytesRead);
                    }

                 }
              } catch (Exception ex) 
              {
                 ex.printStackTrace();
              }finally 
              {
                 soundLine.drain();
                 soundLine.close();
              }
        }
}).start();

【讨论】:

  • 感谢您的回答!我不确定我将如何解决这个问题。我也尝试了一段时间尝试您的解决方案,现在当我双击 jar 时我会听到声音。现在的问题是声音工作了一段时间,然后突然它消除了计算机上的所有声音,因此我需要重新启动它。我认为我的声卡可能是原因,但我不确定。
  • 是的,这听起来像是您的计算机特有的问题。不过,这种方法有时很有趣。在我朋友的电脑上,如果它关闭,它会打开他的声音;他有一个外星人。然而,在我的东芝上,它工作得非常好。不过,我不知道为什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
相关资源
最近更新 更多