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

问题描述

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) 

请任何人解决我的问题

解决方法

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

我会在评论中要求提供信息,但是那里的事情变得很混乱!

您能告诉我们wav文件的格式吗?尝试检查其属性。当然,Java将支持16位,44100 fps,单声道或立体声,小端格式,这是最常见的格式。如果操作系统中的属性不完整,则可以使用Audacity检查属性。如今,有更多文件为24位或32位,48000fps甚至92000fps,而Java尚不支持它们,afaik。

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

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

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

这将在项目文件夹中搜索资源。还有其他用于不同目的的寻址模式,但这应有助于使基本代码正常工作。如果确实需要,可以直接从光盘位置读取程序,方法是在确认您有正常的声音文件后进行处理。

,

您输入的URL字符串不正确,请尝试以下操作:

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

我还建议您从资源文件夹中而不是从系统上的任何位置读取文件,this博客文章在解释资源方面做得不错。

如果您希望使用一种更简便的方法来访问不同的文件,我发现您正在使用Swing库,因此请考虑使用JFileChooser组件。

编辑:更改的URL路径

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...