Wiedergabe von wav-Datei aus jar fehlerhaft

la_luna_llena

Neues Mitglied
Hallo,

ich habe ein Problem mit der Wiedergabe von wav Dateien. Seit Tagen ärgere ich mich damit rum, jetzt frag ich halt doch mal nach.

Also ich habe eine wav-Datei, die soll beim Klick auf einen Button abgespielt werden. Die Datei soll später mit in die jar-Datei exportiert werden und von dort abgespielt werden...

Das normale wav Abspielen habe ich (denke ich hingekriegt) und ich binde das auch als URL ein, damit der Pfad relativ sein kann.

Hier mal kurz mein Code:
Java:
private void playPressed() {
   try{
      URL url = getClass().getResource("/resources/test.wav");
      AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);
      System.out.println(url);
      AudioFormat af     = audioInputStream.getFormat();
      int size      = (int) (af.getFrameSize() * audioInputStream.getFrameLength());
      byte[] audio       = new byte[size];
      DataLine.Info info      = new DataLine.Info(Clip.class, af, size);
      audioInputStream.read(audio, 0, size);
           
      Clip clip = (Clip) AudioSystem.getLine(info);
      clip.open(af, audio, 0, size);
      clip.start();
                
      while (true) {
         try {
            System.out.println("läuft");
            Thread.sleep(100);
         } catch (Exception e) {}
         if (!clip.isRunning()) {
            clip.close();
            break;
         }
      }
}catch(Exception e){ e.printStackTrace(); }

Diese while-Schleife am Ende brauche ich, weil ich dem User manche Optionen erst bereitstellen will wenn der Sound zuende abgespielt wurde.

Folgendes passiert wenn ich jetzt diesen Button klicke: Ich höre ein kurzes knacken und dann ist Stille. Die "läuft"-Ausgabe aus der while-Schleife geht aber noch weiter, das heißt es wird wohl etwas abgespielt aber man hört halt nix. Eine Exception wird auch nicht geworfen. Die URL müsste auch stimmen, also der Pfad stimmt, und ich denke dieses Ausrufezeichen stimmt auch oder?:
jar:file:/home/Programm.jar!/resources/test.wav

Achso und wenn ich das Ganze nicht mit relativen Pfaden mache (also nicht aus der jar-Datei) dann funktioniert die Wiedergabe einwandfrei... aber ich wills eben in der jar-Datei haben....

Woran könnte das liegen, dass ich den Sound nur ganz kurz höre und danach nichts mehr obwohl es offenbar weiterläuft? Es scheint ja sonst alles zu laufen... Ich hab auch schon Google und alle möglichen Foren beschäftigt und niemand hat dasselbe Problem... Kann mir jemand weiterhelfen?

Danke schon einmal :)

la_luna_llena
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Dateien in einem JAR sind ZIP Komprimiert, weshalb du mit getClass().getRessourceAsStream(PFAD) zuerst einen InputStream organisieren musst, der ZIP komprimierte Ordner lesen kann.
 

la_luna_llena

Neues Mitglied
Das scheint der entscheidende Tipp zu sein. Vielen vielen Dank :)

Ich musste dann auch noch einen BufferedInputStream zwischenschalten, sonst hätte ich die Exception "mark/reset not supported" bekommen. Das wiederum habe ich (der Vollständigkeit wegen :)) hier gefunden:
audio - java.io.IOException: mark/reset not supported - Stack Overflow

Jetzt sieht der Code so aus und tut brav was er soll:

Java:
private void playPressed() {
		try{

			InputStream audioSrc = getClass().getResourceAsStream("resources/test.wav");
			InputStream bufferedIn = new BufferedInputStream(audioSrc);
			AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(bufferedIn);

            AudioFormat af     = audioInputStream.getFormat();
            int size      = (int) (af.getFrameSize() * audioInputStream.getFrameLength());
            byte[] audio       = new byte[size];
            DataLine.Info info      = new DataLine.Info(Clip.class, af, size);
            audioInputStream.read(audio, 0, size);
           
            Clip clip = (Clip) AudioSystem.getLine(info);
            clip.open(af, audio, 0, size);
            clip.start();
                
            while (true) {
            	try {
            		Thread.sleep(100);
            	} catch (Exception e) {}
            	if (!clip.isRunning()) {
            		clip.close();
            		break;
            	}
            }
                
                
        }catch(Exception e){ e.printStackTrace(); }

Endlich zuende geärgert. Danke :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Libgdx - Wiedergabe von Bildschirmgröße ist falsch Spiele- und Multimedia-Programmierung 0
M "Java Datei" Cannot be resolved to a variable Spiele- und Multimedia-Programmierung 2
H Musik Datei lädt nicht? Spiele- und Multimedia-Programmierung 8
K Das Leerzeichen der Tastatur wird nicht gleichgesetzt mit dem Leerzeichen aus der Text Datei Spiele- und Multimedia-Programmierung 5
P .Wav Datei vor main-Methode abspielen? Spiele- und Multimedia-Programmierung 9
F SO-Datei compilieren... Spiele- und Multimedia-Programmierung 1
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
G Audio-Datei analysieren Spiele- und Multimedia-Programmierung 3
J Programm kann Audio Datei nicht finden Spiele- und Multimedia-Programmierung 7
Polarfuchs Status von Midi Datei(wird gerade abgespielt oder nicht) Spiele- und Multimedia-Programmierung 0
T Minecraft Bukkit Plugin Text Datei auslesen Spiele- und Multimedia-Programmierung 1
E .jar-Datei tut nichts Spiele- und Multimedia-Programmierung 5
C Highscoreliste mit SharedPreferences oder XML-Datei? Spiele- und Multimedia-Programmierung 1
D Probleme mit der Runnable jar Datei Spiele- und Multimedia-Programmierung 3
I Minecraft NBT Minecraft *.dat-Datei - Verständnisproblem Spiele- und Multimedia-Programmierung 26
H wma Datei abspielen: java.io.IOException: Resetting to invalid mark Spiele- und Multimedia-Programmierung 11
L Werte aus einer .yml Datei lesen Spiele- und Multimedia-Programmierung 9
J Audio Input mit Datei abgleichen Spiele- und Multimedia-Programmierung 11
M Internet Java Spiel (.jar Datei) auf dem PC ausführen Spiele- und Multimedia-Programmierung 7
R Savegame als Datei, welche API-Klasse benutzen Spiele- und Multimedia-Programmierung 8
A Audio-Datei auf Mikrofonausgang senden? Spiele- und Multimedia-Programmierung 2
S MP3 Datei informationen bearbeiten Spiele- und Multimedia-Programmierung 9
Guybrush Threepwood Overhead: Ressourcen in Jar-Datei Spiele- und Multimedia-Programmierung 4
P .obj-Datei in Java3D laden: ParsingErrorException Spiele- und Multimedia-Programmierung 7
R JLayer player spielt nur eine mp3 Datei ab Spiele- und Multimedia-Programmierung 1
W Bitmap aus Datei erstellen Spiele- und Multimedia-Programmierung 5
A wav datei aus jar Abspielen Spiele- und Multimedia-Programmierung 7
M Das Frequenzspektrum einer WAV/MP3-Datei anzeigen Spiele- und Multimedia-Programmierung 6
N bei abspielen der wav datei fehler Spiele- und Multimedia-Programmierung 6
S benutzerdefiniertes Tileset in Datei speichern Spiele- und Multimedia-Programmierung 3
J Zeichnen in BufferedImage und dieses in Datei speichern Spiele- und Multimedia-Programmierung 2
R Wave-Datei mit JLayer abspielen Spiele- und Multimedia-Programmierung 4
M Directx Datei laden Spiele- und Multimedia-Programmierung 3
M Probleme mit WaveFront-Object - Datei Spiele- und Multimedia-Programmierung 7
M mehrere PNG in eine Datei Spiele- und Multimedia-Programmierung 3
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2
J Programm "fehlerhaft" als .jar Spiele- und Multimedia-Programmierung 4
T Variablen übergabe fehlerhaft Spiele- und Multimedia-Programmierung 2
G GO-Spiel in Java noch fehlerhaft hoffe um hilfe Spiele- und Multimedia-Programmierung 7

Ähnliche Java Themen

Neue Themen


Oben