Java AudioClip - 没有声音,没有错误

时间:2011-11-26 21:57:46

标签: java audio applet

我已经阅读过有关java AudioClip的先前问题并完成了我的研究,但我仍然无法弄清楚为什么会这样 AudioClip无法播放。 .wav剪辑在Eclipse IDE中可以正常运行,它也位于相应的目录中;如果是文件 在错误的目录中,此代码段会抛出错误消息。

我的教授要求我们使用这种格式audioClip = Applet.newAudioClip(new File(filePath).toURI().toURL());

播放audioClip

执行时,底部的播放方法会被调用但是没有声音! 任何帮助,将不胜感激。

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.net.MalformedURLException;

public class PlaySoundApplet extends Applet implements ActionListener
{
    private static final long serialVersionUID = 1L;
    Button play,stop;
    AudioClip audioClip;

  public void init()
  {
      play = new Button("Play");
      add(play);
      play.addActionListener(this);

      stop = new Button("Stop");
      add(stop);
      stop.addActionListener(this);

      try
      {  
          String filePath = "." + File.separator + "audio" + File.separator + "island_music.wav";

          File file = new File(filePath);

          if (file.exists())
          {
              audioClip = Applet.newAudioClip(file.toURI().toURL());
          }
          else
          {
              throw new RuntimeException("Directory " + filePath + " does not exist"); //debugging
          }
      }
      catch (MalformedURLException malformedURLException)
      {
          throw new RuntimeException("Malformed URL: " + malformedURLException);  //debugging
      }
  }

  public void actionPerformed(ActionEvent ae)
  {
      Button source = (Button)ae.getSource();

      if (source.getLabel() == "Play")
      {
          audioClip.play();
          System.out.println("Play was executed");
      }
      else if(source.getLabel() == "Stop")
      {
          audioClip.stop();
          System.out.println("Stop was executed");
      }
  }
}

2 个答案:

答案 0 :(得分:0)

你的意思是在你构建你的程序并运行它后声音不起作用?您应该将wav文件嵌入资源文件夹并使用getResources()来查找文件。或者另一种选择是扫描本地目录以查找具有匹配名称和文件扩展名的文件对象。不能给我的顶部示例代码抱歉(从手机输入)。

此外,您还会抛出格式错误的URL异常,因此如果URL错误,您将不会收到错误。你不应该抛出它...使用try {...} catch(MalformedURLException mex){system.out.println(mex.getMessage())};代替。

答案 1 :(得分:0)

尝试使用简单leftright.wav的代码。

  

.. leftright.wav有效!!

大多数媒体格式(声音,图像,视频等)都被称为“容器格式”。媒体的编码可以是任何数量的类型。 Java读取一些编码,但不读取其他编码。

  

所以我猜我必须尝试不同类型的.wav文件?

如果是应用程序资源,我倾向于将当前的WAV转换为与Java Sound兼容的类型。