无法在挥杆时播放声音

时间:2014-11-19 09:53:29

标签: java swing javasound audio-player

每次按下按钮,我都会尝试播放.wav文件。

我已将资源与项目一起放在工作区中。这是错的吗?

我收到此错误消息:

  

javax.sound.sampled.AudioInputStream@341bdd4c   /home/fred/workspace/Projekt/src/GUI/sound/gangnam.wav   java.lang.IllegalArgumentException:格式无效

以下是代码:

public static void main (String [] args) {
    JFrame customBoardFrame = new JFrame("Custom Size.");
    customBoardFrame.getContentPane().add(new customSize());    
    customBoardFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    customBoardFrame.setSize(450, 310);
    customBoardFrame.setVisible(true);
    customBoardFrame.setResizable(false);
}

public class customSize extends JPanel implements ActionListener {

    JButton playButton = new JButton(" >> PLAY <<");
    JButton stopButton = new JButton(" >> STOP <<");
    JButton pauseButton = new JButton(" >> PAUSE <<");

    public customSize(){

        setLayout(null);

        playButton.setBounds(12, 173, 116, 40);
        add(playButton);

        playButton.addActionListener(this);
        pauseButton.addActionListener(this);
        stopButton.addActionListener(this);

        stopButton.setBounds(140, 173, 117, 40);
        add(stopButton);

        pauseButton.setBounds(269, 173, 140, 40);
        add(pauseButton);

    }

    public void actionPerformed(ActionEvent e){

        if (e.getSource().equals(playButton)) {

            try {
                String soundName = "gangnam.wav";    
                AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile());
                System.out.println(audioInputStream);
                System.out.println(new File (soundName).getAbsolutePath());
                Clip clip = AudioSystem.getClip();
                clip.open(audioInputStream);
                clip.start();
            } catch (Exception e1) {
                System.out.println("Error.");
            }

        }
        if (e.getSource().equals(stopButton)) {
            System.out.println("Stop music.");
        }
        if (e.getSource().equals(pauseButton)) {
            System.out.println("Pause music.");
        }

    }
}

2 个答案:

答案 0 :(得分:1)

尝试解决此问题的第一步是手动检查wav文件本身的属性。在Windows中,您可以右键单击并选择属性。然后,有第二个选项卡,其中包含比特率和fps。

Java可以支持44100 fps和16位编码。但是现在有DAW可以产生48000或96000 fps的wav文件,或24位或32位编码。 Java目前不支持这些,AFAIK。

如果您有这样的文件,您可以使用Audacity程序轻松将其修改为可接受的格式(立体声,16位,44100fps),这是一个免费下载。只要确保从他们的主页获得它。我第一次下载它,Popuppalooza几个小时,直到我能够摆脱所有随附的垃圾软件。主站点下载(请参阅维基百科的链接)应该没问题。

答案 1 :(得分:0)

检查音频文件格式。 您的系统格式支持的所有格式都可以通过javax.sound.sampled.AudioSystem.getAudioFileTypes()

进行检查