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

标签 java swing audio jpanel javasound

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");
这将在项目文件夹中搜索资源。还有其他用于不同目的的寻址模式,但这应有助于使基本代码正常工作。如果确实需要,可以直接从光盘位置读取程序,方法是在确认您具有正常的声音文件后才能解决。

关于java - 正在运行的.wav音频中显示运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64536221/

相关文章:

java - 创建名称为 'clientsDaoImpl' : Injection of autowired dependencies failed; 的 bean 时出错

java - 点击时使用 ImageView 填充屏幕

linux - 通过环境变量选择默认的 alsa PCM(不是卡)

java - 处理连接错误和 JSoup

java - 从 JTabbedPane 的选定选项卡获取 JTable

java - Belisha Beacon Java程序按钮查询

Java Swing - 按钮不会显示,直到光标悬停在它上面

actionscript-3 - as3声音类卸载声音

javascript - 如果内容加载太快,<audio>.addEventListener 进度将无法启动

java - Java 中的静态/实例初始化程序 block 以什么顺序运行?