无法获取WAV文件

时间:2015-01-10 04:07:55

标签: java audio

我试图播放WAV片段并遇到一些问题。以下是我使用的代码:

public class NewClass { 
private File soundFile = new File("/Project/src/model/soundfile.wav");

public NewClass() {

    JLabel playArea = new JLabel();
    playArea.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
        AudioClip clip = null;
        try {
        clip = Applet.newAudioClip(soundFile.toURI().toURL());
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
        e1.printStackTrace();
        }
    clip.play();    
    });
}

我在src文件夹中有一个单独的文件夹(模型),我有任何图像或在这种情况下保存WAV文件(我知道我的MVC不对,但这是另一天的问题)。它运行没有任何例外,但只是没有发挥任何作用。我在前一段时间写过的另一个项目中使用过相同的代码snippit并且它工作正常,所以我一直坚持为什么它现在搞砸了。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

所以我切换到了Clip类而不是AudioClip并让它运行起来。这是为我做的代码:

File pop;

try {
        pop = new File(StartView.class.getResource("/model/pop.wav")
                .toURI());
    } catch (URISyntaxException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

void playSound(File soundIn) {   // Use pop as the input argument

        File soundFile = soundIn;
        AudioInputStream sound = null;

        try {
            sound = AudioSystem.getAudioInputStream(soundFile);
        } catch (UnsupportedAudioFileException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        DataLine.Info info = new DataLine.Info(Clip.class,
                sound.getFormat());
        clip = null;
        try {
            clip = (Clip) AudioSystem.getLine(info);
        } catch (LineUnavailableException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            clip.open(sound);
        } catch (LineUnavailableException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        clip.start();
}

我不能说为什么以前的代码不起作用,但切换到Clip似乎已经完成了这个伎俩。