Java Wav-Datei-Fehler (javax.sound.beprobt.UnsupportedAudioFileException: could not get audio input stream from input file)
Habe ich zwei Kurse in meinem Java-Projekt ist
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);
}
}
und die zweite ist 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();
}
}
}
Wenn ich versuche das Programm auszuführen, bekomme ich folgende Fehlermeldung
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1187)
at ReboundPanel.<init>(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)
Laut meinen Code, mein Ziel ist es, zwei zufriedene Gesichter bewegen sich im Rahmen und wenn Sie beide kollidieren sound zusammen mit dem Bild von Feuer/explosion sollte zeigen, und verschwinden
Bitte helfen ich habe, um zu zeigen, dieses Projekt zu meinem Lehrer...
Tut
Eine einfache Suche hat mir diesen link: stackoverflow.com/questions/11104118/...
ja, es existiert in dem Verzeichnis
explosion.wav
tatsächlich existieren in dem Verzeichnis, führen Sie den code aus? Ist es ein Gültiger wav
- Datei?Eine einfache Suche hat mir diesen link: stackoverflow.com/questions/11104118/...
ja, es existiert in dem Verzeichnis
InformationsquelleAutor user1991965 | 2013-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur weil eine Datei eine WAV -, bedeutet nicht, es wird unterstützt von JavaSound. Eine WAV-Datei ist ein container-format, und die eigentlichen raw-Daten (samples) können in verschiedenen Formaten, einschließlich signed/unsigned PCM bei einer Vielzahl von bit-Tiefe, oder es kann in einem komprimierten format. Ich kann nicht finden die Kompatibilitäts-Tabelle für JavaSound, aber die Kompatibilitäts-Tabelle für JMF (die Ihnen eine gute Idee ist) hier:
http://www.oracle.com/technetwork/java/javase/formats-138492.html
Die Lösung ist, konvertieren Sie die WAV-Datei zu einem generischen format, wie 16-bit-PCM mit einem Konvertierungsprogramm können, Lesen Sie Ihre aktuelle Datei (SoX, Adacity, QuickTime, ProTools, etc).
Um genauer zu sein, möchten Sie möglicherweise erstellen Sie eine WAV-Datei mit einer Farbtiefe von 16-bit (little-endian-dies ist der Standardwert, so dass, wenn Sie sehen es nicht keine Sorge), mono oder stereo arbeiten soll. Möglicherweise möchten Sie auch zu prüfen gängigen sample-raten wie 44,100 Hz oder 48,000 Hz (die meisten Computer heutzutage unterstützen sollte, die sowohl die Preise, aber auch die erstere etwas häufiger).
Antwort aktualisiert. Beachten Sie jedoch, dass Sie nicht verwenden können Java für die conversions, da java nicht Lesen können, die Dateien in den ersten Platz, es gewann T werden in der Lage, Sie zu bekehren.
"ich kann nicht finden die Kompatibilitäts-Tabelle für JavaSound" Da es funktioniert über SPI, ist es am besten, um die Informationen aus der J2SE zur Laufzeit. Siehe die Java Sound info. Seite für mehr details über SPI und die Java-Sound-Fähigkeiten (die über
AudioSystem
).Stimmt, aber es gibt eingebaute, Standard-Funktionen.
InformationsquelleAutor Bjorn Roche
Wäre die Frage "Warum nicht die samples spielen?" wäre die Antwort oben. Ein weiterer Weg, um es ist "The sound verwendet ein format oder Kodierung, die Java-Sound-API nicht verstehen".
..Was ist deine Frage?
InformationsquelleAutor Andrew Thompson