运行 .wav 音频中显示运行时错误

Runtime error showing in running .wav audio

import java.awt.event.*;
import javax.swing.*;
import javax.sound.sampled.*;
import java.net.URL;
import java.io.*;

class SoundTest
{
    public static void main(String[] args) throws Exception
    {
        URL file = new URL("file:C:/Users/a/Documents/My/baby.wav");

        AudioInputStream ais = AudioSystem.getAudioInputStream(file);
        Clip clip = AudioSystem.getClip();
        clip.open(ais);

        JButton button = new JButton("Play Clip");
        button.addActionListener( new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                clip.setFramePosition(0);
                clip.start();
            }
        });

        JOptionPane.showMessageDialog(null, button);
    }
}

我正在尝试此代码,但是当我尝试 运行 它显示错误 -

javax.sound.sampled.UnsupportedAudioFileException:
    could not get audio input stream from input URL (in javax.sound.sampled.AudioSystem) 

请任何人解决我的问题

您输入的 URL 的字符串不正确,请试试这个:

C:\Users\a\Documents\My\baby.wav

我还建议阅读资源文件夹中的文件,而不是从系统上的任何位置阅读文件,this 博客 post 对资源的解释做得不错。

如果您想要一种更简单的方法来访问不同的文件,我看到您正在使用 Swing 库,因此请考虑使用 JFileChooser 组件。

编辑:更改了URL路径

似乎最有可能发生两件事中的一件(或两件!)。一个是文件的寻址不起作用。另一种是文件是Java不支持的格式

我会在评论中请求提供信息,但那里的内容变得非常混乱!

能告诉我们wav文件的格式吗?尝试检查它的属性。当然,Java 将支持 16 位、44100 fps、单声道或立体声、little endian,这是最常见的格式。如果 OS 中的属性不完整,您可以使用 Audacity 检查属性。现在有很多文件是 24 位或 32 位,或 48000fps 甚至 92000fps,Java 还不支持它们,afaik。

“安全”测试声音是 this thunder clap 在 Freesound.org。您可以在页面右侧的规格中看到它是 16 位、44100 fps 立体声。我会下载它并将其添加到您的程序中,而不是尝试从其网站位置播放它。

为了帮助测试寻址是否有问题,我会将声音放在与 SoundTest.java 文件相同的文件夹中。然后,使用以下行获取文件的 URL.

URL url = this.getClass().getResource("soundfilename.wav");

这将在项目文件夹中搜索资源。还有其他用于不同目的的寻址模式,但这应该有助于使基本代码正常工作。让您的程序直接从光盘位置读取,如果确实需要,可以在验证您有一个工作的声音文件后解决。