在java中使用声音

时间:2009-08-12 07:39:23

标签: java

嗨......我搜索了网站,发现了另一个正常运行的代码。

现在我有另一个问题:

当我从blow类创建对象并将音频地址发送到其构造函数时,我必须发送完整的地址,如:

“C:\ Documents and Settings \ TheHero \ My Documents \ NetBeansProjects \ project1 \ src \ project1 \ s1.wav”

但我想使用这个代码只是声音的名称:“s1.wav”。

我将声音复制到src文件夹中,然后使用“s1.wav”,结果是 “java.io.FileNotFoundException”。

如果我使用完整的声音地址,当我在另一台计算机上运行该程序时,它不起作用。我是正确的?

// ***************

公共类MusicPlayer {

private String filename;

public MusicPlayer(String filename) {
    this.filename = filename;
}
public void play() {
    try {
            InputStream in = new FileInputStream(filename);
            AudioStream as = new AudioStream(in);
            AudioPlayer.player.start(as); 

    } catch (IOException e) {
            e.printStackTrace();
    }          
}

// ***********

我对图像有同样的问题。当我使用这些代码时,我必须使用图像的完整地址

     File input = new File(imageName);
     image = ImageIO.read(input);

请有人帮助我!我真的需要这些! 谢谢大家......

3 个答案:

答案 0 :(得分:6)

您可以使用网址来检索图像和声音文件。例如:

new ImageIcon(getClass().getResource("/com/foo/myimage.png")));

...将从com.foo包中检索图像文件,假设它位于某个地方的类路径上(例如捆绑在一个jar文件中)。

修改

对于声音片段,您采取类似的方法;例如类似的东西:

URL url = getClass().getResource("/com/foo/sound.wav");
AudioStream as = new AudioStream(url.openStream());

答案 1 :(得分:1)

FileInputStream(filename)是关键。

文件名可以是绝对的或相对的。你似乎有两个问题。

1)。相对路径, s1.wav 将相对于正在运行的应用程序的工作目录,这几乎肯定不是您的src目录。

2)。不同机器上的绝对路径

C:\Documents and Settings\TheHero\My Documents\NetBeansProjects\  etc.

实际存在于远程机器上?

答案 2 :(得分:0)

不是将文件复制到 src ,而是将其复制到 bin 文件夹中。这是执行发生的地方。

如果不起作用,您可以致电:

Properties sysProps = System.getProperties();

然后遍历属性并查找当前工作目录。这就是你放置你的wav文件的地方。