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