java输入错误重新输入无法获取,Java Wav文件错误(javax.sound.sampled.UnsupportedAudioFileException:无法从输入文件中获取音频输入流)...

I have two Classes in my Java Project one is

Rebound

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Rebound

{

public static void main (String[] args)

{

JFrame frame = new JFrame ("Rebound");

frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

frame.getContentPane().add(new ReboundPanel());

frame.pack();

frame.setVisible(true);

}

}

and the second one is ReboundPanel

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.sound.sampled.*;

import java.io.File;

import java.io.IOException;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.Clip;

import javax.sound.sampled.LineUnavailableException;

import javax.sound.sampled.SourceDataLine;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.LineEvent;

import javax.sound.sampled.LineListener;

public class ReboundPanel extends JPanel

{

private final int WIDTH = 600, HEIGHT = 300;

private final int DELAY = 20, IMAGE_SIZE = 35;

private ImageIcon image1, image2, image3;

private Timer timer;

private int x1, y1, moveX1, moveY1, x2, y2, moveX2, moveY2, x3, y3;

Clip clip;

DataLine.Info info;

public ReboundPanel() throws Exception

{

timer = new Timer(DELAY, new ReboundListener());

image1 = new ImageIcon ("happyFace1.gif");

image2 = new ImageIcon ("happyFace2.gif");

x1 = 0;

y1 = 100;

x2 = 40;

y2 = 0;

moveX1 = moveY1 = 3;

moveX2 = moveY2 = 5;

setPreferredSize (new Dimension(WIDTH, HEIGHT));

setBackground (Color.black);

timer.start();

image3 = new ImageIcon ("fire.gif");

File soundFile = new File("explosion.wav");

AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile);

DataLine.Info info = new DataLine.Info (Clip.class, sound.getFormat());

clip = (Clip) AudioSystem.getLine(info);

clip.open(sound);

clip.start();

}

public void paintComponent (Graphics page)

{

super.paintComponent (page);

image1.paintIcon (this, page, x1, y1);

image2.paintIcon (this, page, x2, y2);

image3.paintIcon (this, page, x2, y2);

}

private class ReboundListener implements ActionListener

{

public void actionPerformed (ActionEvent event)

{

x1 += moveX1;

y1 += moveY1;

x2 += moveX2;

y2 += moveY2;

if (x1 <= 0 || x1 >= WIDTH-IMAGE_SIZE)

moveX1 = moveX1 * -1;

if (y1 <= 0 || y1 >= HEIGHT-IMAGE_SIZE)

moveY1 = moveY1 * -1;

if (x2 <= 0 || x2 >= WIDTH-IMAGE_SIZE)

moveX2 = moveX2 * -1;

if (y2 <= 0 || y2 >= HEIGHT-IMAGE_SIZE)

moveY2 = moveY2 * -1;

if (Math.abs(y1-y2) <= IMAGE_SIZE-2 && Math.abs(x1-x2)<= IMAGE_SIZE-2)

{

moveY2 = moveY2 * -1;

moveX2 = moveX2 * -1;

moveY1 = moveY1 * -1;

moveX1 = moveX1 * -1;

x3=x2;

y3=y2-2*IMAGE_SIZE;

clip.loop(Clip.LOOP_CONTINUOUSLY);

}

if (Math.abs(y1-y2) >= 4*IMAGE_SIZE && Math.abs(x1-x2) >= 4*IMAGE_SIZE)

{

x3=-200;

y3=-200;

if (clip.isRunning()) clip.stop();

}

repaint();

}

}

}

When I try to run the program I get the following error

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file

at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1187)

at ReboundPanel.(ReboundPanel.java:47)

at Rebound.main(Rebound.java:21)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

at ReboundPanel$ReboundListener.actionPerformed(ReboundPanel.java:99)

at javax.swing.Timer.fireActionPerformed(Timer.java:312)

at javax.swing.Timer$DoPostEvent.run(Timer.java:244)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)

at java.awt.EventQueue.access$200(EventQueue.java:103)

at java.awt.EventQueue$3.run(EventQueue.java:682)

at java.awt.EventQueue$3.run(EventQueue.java:680)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

According to my Code my goal is to make two happy faces move in the frame and when they both collide a sound along with an image of fire/explosion should show up and disappear

Please help I have to show this project to my instructor...

解决方案

Just because a file is a WAV doesn't mean it is supported by JavaSound. A WAV file is a container format, and the actual raw data (the samples) may be in different formats, including signed/unsigned PCM at a variety of bit depths or it may be in a compressed format. I can't find the compatibility table for JavaSound, but the compatibility table for JMF (which will give you a good idea) is here:

The solution is to convert the WAV file to a more generic format, like 16-bit PCM using a conversion program that can read your current file (SoX, Adacity, QuickTime, ProTools, etc).

To be more precise, you may want to create a WAV file with a bit depth of 16-bits (little endian -- this is the default, so if you don't see it don't worry), stereo or mono should work. You may also want to consider common sample rates such as 44,100 Hz, or 48,000 Hz (most computers nowadays should support both rates, but the former is somewhat more common).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值