ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
866
866
EMPFEHLEN
-
Hi Leute
Für ein kleines Programm das ich zur Zeit zu programmieren versuche habe ich mir folgende SoundMachine-Klasse geschrieben (mit Hilfe einiger Threads aus dem Forum hier). Diese Klasse soll bei aufruf der Methode play() die Datei "alarm.wav" abspielen.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
import java.io.File; import javax.sound.sampled.*; public class SoundMachine { private Clip clip; public static void main(String[] args) { SoundMachine sound = new SoundMachine(); System.out.println("initialized"); sound.play(); System.out.println("finished"); } public SoundMachine() { try { //AudioInputStream ais = AudioSystem.getAudioInputStream(getClass().getResource("alarm.wav")); //AudioInputStream ais = AudioSystem.getAudioInputStream(new File("C:\\windows\\media\\chimes.wav")); AudioInputStream ais = AudioSystem.getAudioInputStream(new File("C:\\alarm.wav")); AudioFormat format = ais.getFormat(); DataLine.Info info = new DataLine.Info(Clip.class, format, ((int) ais.getFrameLength() * format.getFrameSize())); clip = (Clip) AudioSystem.getLine(info); clip.open(ais); FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); gainControl.setValue(1.0F); } catch (Exception e) { e.printStackTrace(); } } public void play() { clip.start(); clip.loop(-1); } public void stop() { clip.stop(); } }
Nun habe ich das Problem, dass ich immer die folgende Fehlermeldung bekomme. Wenn ich es mit der Windows Sounds aus C:\windows\media versuche (Zeile 18), kriege ich keine Fehlermeldung aber auch keinen Sound.
Wär froh über euere Hilfe, denn ich komm zur Zeit einfach nicht auf einen grünen Zweig.javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1170)
at SoundMachine.<init>(SoundMachine.java:19)
at SoundMachine.main(SoundMachine.java:9)
Exception in thread "main" java.lang.NullPointerException
at SoundMachine.play(SoundMachine.java:34)
at SoundMachine.main(SoundMachine.java:11)
initialized
Grüsse
Flo
-
18.10.11 16:12 #2
Moin,
ein Blick in die API (http://download.oracle.com/javase/6/docs/api/) sagt dazu folgendes :
Da ist dann wohl was mit der Datei nicht in Ordnung ...An UnsupportedAudioFileException is an exception indicating that an operation failed because a file did not contain valid data of a recognized file type and format.
Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
Da ansonsten keine Software auf meinem PC Probleme mit dieser Datei hat befürchte ich, dass wohl Java ein Problem mit irgendwas an meiner Datei hat. Nur habe ich keine Ahnung was das sein könnte.
Hinzu kommt noch der Effekt, dass das Programm mit den Win-Sounds zwar keine Problem hat, sie aber trotzdem nicht abspielt.Geändert von flofank (18.10.11 um 16:40 Uhr)
-
Ich habe den Java-Code verwendet, um eine Windows Datei namens Ding.wav abzuspielen. Die JVM hat keine Fehler gemeldet, ich konnte aber nichts hören.
Im folgenden Link findest Du den nötigen lauffähigen Java-Code (nicht von mir): http://www.anyexample.com/programmin...sound_file.xmlGeändert von j2se (18.10.11 um 22:28 Uhr)
-
-
So - Hab mir den Link jetzt mal genauer angeschaut und dabei folgende Lösung für mein Problem erhalten. Die ursprüngliche Datei funktioniert immer noch nicht aber mit Win-Sounds komme ich jetzt zu recht.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
import java.io.File; import javax.sound.sampled.*; public class SoundMachine extends Thread{ private File sf; private final int EXTERNAL_BUFFER_SIZE = 524288; private SourceDataLine line = null; private AudioInputStream ais = null; public SoundMachine(String path) { try { sf = new File(path); } catch (Exception e) { System.out.println("No Wave file found at :" + path); } init(); } public void init() { long now = System.currentTimeMillis(); if (!sf.exists()) { System.out.println("Wave file not found: " + sf.getName()); return; } try { ais = AudioSystem.getAudioInputStream(sf); } catch (Exception e) { e.printStackTrace(); return; } AudioFormat format = ais.getFormat(); DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); try { line = (SourceDataLine) AudioSystem.getLine(info); line.open(format); } catch (Exception e) { e.printStackTrace(); return; } FloatControl gain = (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN); gain.setValue(gain.getMaximum()); } @Override public void run() { line.start(); int nBytesRead = 0; byte[] abData = new byte[EXTERNAL_BUFFER_SIZE]; try { while(nBytesRead != -1) { nBytesRead = ais.read(abData, 0, abData.length); if (nBytesRead >= 0) { line.write(abData, 0, nBytesRead); } } } catch (Exception e) { e.printStackTrace(); return; } finally { line.drain(); line.close(); } } }
Hatte dann aber das Problem, dass ich meinen (sehr kurzen) Alarmsound mit dieser Klasse nicht vernünftig Loopen konnte (Ladezeiten zwischen loops). Deshalb machte ich mich noch einmal auf die Suche mit Google und landete wieder bei den Clips.
Hier jetzt meine finale Lösung:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import java.io.File; import javax.sound.sampled.*; public class SoundMachine3 { Clip clip; public SoundMachine3(String path) { try { AudioInputStream ais = AudioSystem.getAudioInputStream(new File(path)); clip = AudioSystem.getClip(); clip.open(ais); } catch (Exception e) { e.printStackTrace(); } } public void start() { clip.loop(10); } }
Achja - Falls jemand noch ne Idee hat wieso meine Wav-Datei nicht funktioniert freue ich mich über jeden Hinweis.
Gruss
Flo
-
19.10.11 12:30 #7SE Tutorials.de Gastzugang
nicht unterstütztes Format !
Die Java Sound API kann nun mal nur mit sehr wenigen Formaten umgehen. Im groben sind das WAV , SND und AU. Und da WAV nicht gleich WAV ist gibt auch innerhalb eines Format-Containers *WAV* mehrere Formate *mono/stereo/multi-Channel , 8Bit/16Bit , Abtastraten , etc* ... und davon kann Java nun mal nur sehr wenig und ganz bestimmte. Und wenn deine WAV da nicht reinpasst dann kann Java damit auch nichts anfangen.
Wenn du wirklich ALLE Container mit allen Formaten abspielen willst brauchst du eine Lib die das auch kann ... mit Java selbst ist das nur sehr beschränkt möglich.
Ähnliche Themen
-
Java Abspielen von Wave-Dateien
Von chrian im Forum JavaAntworten: 8Letzter Beitrag: 14.02.11, 18:14 -
Mp3, Wma, Wave über Java Player abspielen. Grundlegende Fragen
Von P_H_I_L im Forum JavaAntworten: 0Letzter Beitrag: 12.03.09, 09:04 -
Wave in Ressource einbinden und abspielen
Von horstxxl im Forum VisualStudio & MFCAntworten: 3Letzter Beitrag: 28.10.07, 22:53 -
Java & Mp3 / Ogg Vobis / Wave
Von Thomas Darimont im Forum JavaAntworten: 0Letzter Beitrag: 20.08.04, 18:22 -
Mozilla und Audio(WAVE) abspielen
Von deepgreen im Forum HTML & XHTMLAntworten: 1Letzter Beitrag: 20.06.03, 03:28





Zitieren

Login





