2013-03-13 13 views
6

Ich habe den folgenden Code-Schnipsel:Java ogg zu wav Konvertierung

File file = new File(sourceFile); 
AudioInputStream in = AudioSystem.getAudioInputStream(file); 
AudioInputStream din = null; 
AudioFormat baseFormat = in.getFormat(); 

AudioFormat decodedFormat = new AudioFormat(
       AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 
       16, baseFormat.getChannels(), baseFormat.getChannels() * 2, 
       baseFormat.getSampleRate(), false); 

din = AudioSystem.getAudioInputStream(decodedFormat, in); 
AudioSystem.write(din, AudioFileFormat.Type.WAVE, new File(targetFile)); 

ich diesen Code schrieb Dateien MP3 und OGG transfrom in WAV-Dateien. Diese Formate werden nicht von Java standardmäßig unterstützt, wie ich es verstehe, so hatte ich verschiedene Gläser zu meinem Classpath hinzufügen, wie hier beschrieben:

http://www.javazoom.net/mp3spi/documents.html

http://www.javazoom.net/vorbisspi/documents.html

Der Code läuft gut, wenn ich die Umwandlung MP3-Dateien. Aber wenn ich versuche, OGG-Dateien zu konvertieren bekomme ich folgende Fehlermeldung:

java.lang.IllegalArgumentException: Unsupported conversion: PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian from VORBISENC 44100.0 Hz, unknown bits per sample, stereo, 1 bytes/frame, 16000.0 frames/second 

Nun ist dies nur ausgelöst, wenn die Input selbst decodiert zu werden, was bedeutet, dass die ogg-Datei successfuly analysiert wurde.

AudioSystem.getTargetEncodings(sourceFormat) 

Der obige Code gibt keine Werte zurück, wenn keine MP3- oder OGG-Dateien verarbeitet werden. Der einzige Unterschied ist, dass MP3 gut funktioniert.

Ich habe alle von der vorherigen Verbindung referenzierten Dateien hinzugefügt, die für die ogg-Konvertierung benötigt werden, mit Ausnahme der neuesten Version von jogg-0.0.7.jar, weil ich sie nicht finden konnte.

Ich habe versucht verschiedene Lösungen wie JAVE, aber ich brauche es auch auf MAC laufen, und JAVE wird nicht auf MAC ohne irgendeine spezielle Implementierung laufen.

Hat jemand einen Vorschlag, was das Problem verursachen könnte? Gibt es eine Möglichkeit, die OGG-Datei in WAV zu konvertieren?

EDIT:

Ow wow ich erkennen, was das Problem ist ... Nach dem Everthing Lesen auf dem Handbuch habe ich gelernt, dass zwei verschiedene Arten von SPIs mit (wie in diesem Fall MP3 und OGG) kann dazu führen, Probleme. Ich habe die MP3 spi maven-Abhängigkeit entfernt und der Fehler ist verschwunden. Dachte das Ergebnis wav ist grundsätzlich leer. Irgendwelche Vorschläge dazu? Ich werde mich freuen, wenn ich OGG zur WAV-Transformation zur Arbeit bringen kann, kann ich MP3 auf andere Weise transformieren.

Meine pom Abhängigkeit sieht wie folgt aus:

<dependency> 
    <groupId>com.googlecode.soundlibs</groupId> 
    <artifactId>vorbisspi</artifactId> 
    <version>1.0.3-1</version> 
</dependency> 

Diese Downloads, die ich alle Gläser denke, ich brauche, um OGG Transformation Arbeit zu machen. (Sieht aus wie nicht.)

+1

Ist das was du willst? https://poi1.googlecode.com/files/jogg-0.0.7.jar – longhua

+0

Ich fand, dass Jar, ich konnte einfach nicht die Maven Abhängigkeit dafür finden, also wollte ich es nicht verwenden. Ich habe versucht, es aus einem lib-Ordner, aber kein bueno zum Klassenpfad hinzuzufügen. Sry, ich habe viel Zeit mit diesem Thema verschwendet, das habe ich vergessen zu erwähnen. –

+1

Hinzufügen tritonus_jorbis-0.3.6.jar (http://tritonus.org/tritonus_share-0.3.6.jar) kann OGG korrekt in WAV konvertieren. Nicht sicher warum. – longhua

Antwort

2

Verwenden Sie tritonus_jorbis-0.3.6.jar anstelle von vorbisspi1.0.2.jar.

Beim Decodieren des ursprünglichen AudioInputStream-Objekts ruft das AudioSystem den FormatConversionProvider von SPI ab und überprüft eins nach dem anderen, bis es eins findet, das funktionieren kann. Daher ist die Reihenfolge des Klassenpfads wichtig.

Überprüfen Sie Ihren Klassenpfad, um sicherzustellen, dass "org.tritonus.sampled.convert.jorbis.JorbisFormatConversionProvider" verwendet wird. Überprüfen Sie jedes JAR im Klassenpfad; Durchsuchen Sie die folgende Datei darin. Oder platziere tritonus_jorbis-0.3.6.jar ganz am Anfang des Klassenpfades.

META-INF\services\javax.sound.sampled.spi.FormatConversionProvider 

Für wie Classpath, um in Maven angeben, lesen Sie in diesem Beitrag: Maven classpath order issues.

+0

Ich habe versucht, es hat nicht geholfen, oder konnte es einfach nicht zur Arbeit bekommen. : ( –

+0

Welche JARs hast du in deiner Bibliothek? – longhua

+0

Ich werde meine Frage bearbeiten, dort kannst du meine Abhängigkeit sehen. Ich habe alles andere gelöscht, damit nichts mit irgendetwas in Konflikt kommen kann. (Wie mp3 spi) –

1

Eigentlich können Sie mp3spi und vorbisspi zusammen verwenden. Sie müssen nur sicherstellen, dass Maven die richtige Version von tritonus-share verwendet. Wenn Sie sich auf den transitiven Abhängigkeitsmechanismus von Maven verlassen, erhalten Sie Tritonus-Share 0.3.7-1, dem die Klasse org.tritonus.share.sampled.convert.TMatrixFormatConversionProvider fehlt. Das ist was vordispi bricht.

Ich musste nur explizit eine Abhängigkeit von tritonus-share 0.3.7-2 zu meiner pom.xml hinzufügen und nun funktioniert sowohl die ogg als auch die mp3-Wiedergabe über die Java Sound API.

Sehen Sie mein Blog-Post für Details: http://odoepner.wordpress.com/2013/07/19/play-mp3-or-ogg-using-javax-sound-sampled-mp3spi-vorbisspi/

0

Sie könnten FFsampledSP (Teil SampledSP) zu versuchen.

Es ist eine FFmpeg basierte Implementierung für Win und OSX, die die javax.sound.sampled Schnittstellen implementiert. OGG, FLAC usw. werden unterstützt. Es ist im Grunde der gleiche Decoder wie in anderen FFmpeg-Anwendungen (wie der VLC Player und so viele andere).