Datentypen wav Dateien abspielen mit JMF, Clip und Player klappt nicht. Lösung Codec?

bullrin

Mitglied
Hallo,

ich probiere nun schon längere Zeit einen kleinen Wav Player zu implementieren. Ich komme allerdings mit den Lösungen die ich im Internet finde nicht wirklich klar. Entweder werden ein paar WAV Dateien nicht abgespielt oder aber es wird gar nichts abgespielt. Eine Lösung habe ich gefunden die etwas besser funktioniert, allerdings terminiert diese nicht.

Java:
package soundtests;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.media.*;

public class Media2 {

	public static void main(String[] args) {
		URL u1 = null;
		try {
			u1 = new File("Mace.wav").toURI().toURL();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			Player p1 = Manager.createPlayer(u1);
			p1.start();
			
			try {
				Thread.sleep((long) (p1.getDuration().getSeconds()*1000));
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			p1.stop();
			p1.close();
			
			
			
		} catch (NoPlayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Konkret geht es darum die angehängte Datei abzuspielen.


Am liebsten wäre es mir eine AllinOne Lösung zu benutzen. D.h. eine die mit WAV und MP3s zurecht kommt. JLayer hat die WAV Datei leider auch nicht abgespielt und das MP3SPI auch nicht.
Ist es nicht möglich einfach einen standard Codec den jeder Windows Rechner ( am besten auch Linux aber erstmal nicht wichtig) besitzt anzusprechen und darüber eine Datei abzuspielen?

Wichtig ist das problemlos mehrere Dateien durchaus auch direkt hintereinander abgespielt werden können ohne hänger oder ähnliches.

Grüße
 

Anhänge

  • Mace.zip
    18,4 KB · Aufrufe: 5

bullrin

Mitglied
EDIT: ich merke gerade, dass mein Code ja doch funktioniert. Allerdings bekomme ich bei GetDuration komische Werte.
Mit Nanosecons bekomme ich 9223372036854775806 und das egal welche Datei ich abspiele. Ist das ein Wert weil irgendetwas überläuft?
 

bullrin

Mitglied
ein Edit Button scheint es hier ja nicht zu geben? ???:L

Ok nach etwas suchen habe ich rausgefunden das die getDuration Methode von JMF verbuggt ist und nicht immer korrekt funktioniert.

Nun bin ich auf das FMJ gestoßen, mit dem man angeblich den gleichen Code verwenden kann. Nur Frage ich mich wie ich meinen Code ändern muss, denke einen Import verändern?
 
S

Spacerat

Gast
FMJ un JMF verwende ich selber nur um mir anzusehen, wie einige Codecs funktionieren. Das JMF wird afaik nicht mehr weiter entwickelt, an seine Stelle tritt JavaFX. Aber selbst dort kann es sein, dass WAV-Dateien in U- bzw. A-LAW missachtet werden, obwohl solche durchaus im Umlauf zu sein scheinen. Mit dem Standard-API hat deswegen dieses hier schon immer hervorragend funktioniert. Weis nicht, ob JMF, FMJ oder gar JavaFX das auch bei WAV-Dateien unbedingt beachten. WAV-Dateien unterstützten bisher afaik U- und A-LAW nicht.
 

bullrin

Mitglied
vielen dank für deine Antwort :)

Ich habe deinen Code eingebaut und bin zu folgendem gekommen:
Java:
import java.awt.Frame;
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.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;

public class MediaAIS extends Frame {

	public static void main(String[] args) throws UnsupportedAudioFileException, IOException, LineUnavailableException {
		AudioInputStream ais = AudioSystem.getAudioInputStream(new File(
				"Mace.wav"));
		javax.sound.sampled.AudioFormat format = ais.getFormat();
		// ALAW/ULAW samples in PCM konvertieren
		if ((format.getEncoding() == AudioFormat.Encoding.ULAW)
				|| (format.getEncoding() == AudioFormat.Encoding.ALAW)) {
			AudioFormat tmp = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
					format.getSampleRate(), format.getSampleSizeInBits() * 2,
					format.getChannels(), format.getFrameSize() * 2,
					format.getFrameRate(), true);
			ais = AudioSystem.getAudioInputStream(tmp, ais);
			format = tmp;
		}
		
		DataLine.Info info= new DataLine.Info(Clip.class, format);//Line beschaffen
		Clip clip= (Clip) AudioSystem.getLine(info);
		clip.open(); // reserviert Ressourcen
		clip.start(); //Clip wird abgespielt 
		clip.stop();
		clip.close();
		
	}
}

leider quittiert mir das Programm die Ausführung mit folgender Meldung

Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at soundtests.MediaAIS.main(MediaAIS.java:18)

Hab ich etwas falsch gemacht, oder kann es die Datei tatsächlich nicht abspielen?


Grüße
 
S

Spacerat

Gast
Nö, da hast auf den ersten flüchtigen Blick nichts falsch gemacht, das Proggi kompiliert durch. Entweder stimmt die Pfadangabe zu "Mace.wav" nicht oder es ist keine WAV-Datei.
 

bullrin

Mitglied
mh aber die wav Datei ist aus einem Spiel und ich denke schon das es eine richtige Wav Datei ist. Kannst du die Datei runterladen und mal nach sehen? Wäre dir sehr dankbar :)

grüße
 
S

Spacerat

Gast
Äh, wiebidde? Woher denn? Dazu müsstest du sie vllt. mal hochladen. ;)
Eine Kleinigkeit fällt mir grad' noch auf; Das "clip.open();" in Zeile 32 ist nicht nur überflüssig, sondern liefert eine "IllegalArgumentException". Das hat aber nichts mit deinem aktuellen Problem zu tun. Also, soweit ich das ohne diese spezielle Datei nachvollzienen kann, stimmt der Pfad zu "Mace.wav", sonst käme eine "FileNotFoundException". Da es sich bei der Datei um eine WAV-Datei handeln soll, solltest du mal versuchen, diese Datei in einem Medien Player abzuspielen (z.B. VLC) oder zumindest irgendwie in Erfahrung bringen, ob sie nicht doch ein anderes Format hat. Im Zweifelsfalle sind Dateiendungen nämlich Schall und Rauch, wenn man es genau nimmt, werden diese selbst bei Microsoft (dem Erfinder von Dateiendungen) nicht mal mehr wirklich benötigt und verwirren (wie eh' und je) eigentlich nur.
Sicher ist zumindest, dass dein Code oben
1. eine FileNotFoundException wirft, wenn die Datei nicht gefunden wurde,
2. eine UsupportedAudioFileException, wenn es sich um eine von JavaSTD-API nicht unterstützte Datei handelt und
3. eine IllegalArgumentException wegen dem "open()" in Zeile 32, wenn sonst alles in Ordnung ist.

Hinzu kommt, das du von der Datei kaum etwas hören wirst, weil zwischen "start()" und "stop()" keine Zeit vergeht, in der etwas abgespielt werden könnte.
 
Zuletzt bearbeitet von einem Moderator:

bullrin

Mitglied
mh ich habe die Datei eigentlich im ersten Post hochgeladen, ist die bei euch nicht sichtbar?

die anderen Fehler werde ich mir gleich ansehen, danke :)
 
S

Spacerat

Gast
...sorry wegen DP... kann nicht mehr editieren!? :bahnhof:

Also mit der Datei hast es mir aber gegeben... es ist wahrhaftig eine RIFF-WAVE-Datei im ACM-Format. Warum die Java-Standard-API diese nicht unterstüzt bedarf näherer Untersuchungen.
 

bullrin

Mitglied
Also mit der Datei hast es mir aber gegeben... es ist wahrhaftig eine RIFF-WAVE-Datei im ACM-Format. Warum die Java-Standard-API diese nicht unterstüzt bedarf näherer Untersuchungen.

das scheint ja nicht so einfach zu werden...

alternativ könnte ich probieren mein Programm auf mp3 auszurichten. Müsste ich halt vorher konvertieren, aber vermutlich werde ich darum nicht vorbei kommen, wenn ich den Code einfach halten möchte.

Habe zwar noch rum gegoogelt aber nicht wirklich etwas hilfreiches zum gefürchteten Riff Format gefunden, bzw. wie man es in Java abspielt. WAV scheint wohl nicht mehr so aktuell zu sein, sodass sich niemand verpflichtet fühlt es umfassend in Java zu supporten. :rtfm:
 
S

Spacerat

Gast
:lol: Das MP3-Format wird ja vom Standard-API gar nicht unterstützt. Okay... das hier kann vllt. helfen, zu ergründen, warum Java auch nicht alles (selbst mit dieser U- bzw. A-LAW-Konvertierung) was WAV heisst abspielt, wenn dieses Format seinerseits sogar schon MP3-Kompressor-Methoden verwenden kann. :bahnhof:
Tja, kommst wohl ums Konvertieren nicht drum herum. JMF oder so wirds dann auch nicht können, vllt. aber JavaFX.
 

bullrin

Mitglied
danke für deine Hilfe und Bemühungen :)
Habe nun mit JLayer die Mp3 Unterstützung realisiert und es funktioniert besser als erwartet!

Thema erledigt :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
J mp4 dateien mit dem Java Media Framework abspielen. Allgemeine Java-Themen 2
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
L Methoden Verarbeitung von Größen Dateien Allgemeine Java-Themen 9
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
B Input/Output .java-Dateien auslesen Allgemeine Java-Themen 17
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
C Java-Dateien in einheitlichen Zeichensatz umwandeln Allgemeine Java-Themen 10
E Dateien aus / im JAR Allgemeine Java-Themen 2
K LibreOffice Tabelle Dateien im Format .ods bearbeiten Allgemeine Java-Themen 2
L Input/Output Dateien erstellen, wenn ein JAR ausgeführt wird Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben