Ich versuche hier OGG-Dateien unter Verwendung einer Antwort auf eine andere Frage zu spielen: Playing ogg files in eclipsejavax.sound.sampled.UnsupportedAudioFileException spielen OGG-Dateien mit javazoom
die javazoom library Verwendung, die ich erfolgreich für mein Projekt heruntergeladen und konfiguriert ist, ich versuche, die xav ‚s Antwort-Code zu verwenden:
import java.io.File;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
import javazoom.spi.PropertiesContainer;
public class OGGPlayer {
public final String fileName;
public boolean mustStop = false;
public OGGPlayer(String pFileName) {
fileName = pFileName;
}
public void play() throws Exception {
mustStop = false;
File file = new File(fileName);
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
if (audioInputStream == null) {
throw new Exception("Unable to get audio input stream");
}
AudioFormat baseFormat = audioInputStream.getFormat();
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(), 16, baseFormat.getChannels(),
baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);
AudioInputStream decodedAudioInputStream = AudioSystem.getAudioInputStream(decodedFormat,
audioInputStream);
if (!(decodedAudioInputStream instanceof PropertiesContainer)) {
throw new Exception("Wrong PropertiesContainer instance");
}
DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, decodedFormat);
SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
sourceDataLine.open(decodedFormat);
byte[] tempBuffer = new byte[4096];
// Start
sourceDataLine.start();
int nbReadBytes = 0;
while (nbReadBytes != -1) {
if (mustStop) {
break;
}
nbReadBytes = decodedAudioInputStream.read(tempBuffer, 0, tempBuffer.length);
if (nbReadBytes != -1)
sourceDataLine.write(tempBuffer, 0, nbReadBytes);
}
// Stop
sourceDataLine.drain();
sourceDataLine.stop();
sourceDataLine.close();
decodedAudioInputStream.close();
audioInputStream.close();
}
public void setMustStop(boolean pMustStop) {
mustStop = pMustStop;
}
public void stop() {
mustStop = true;
}
}
der Code macht Sinn für mich, aber ich habe Probleme einfach es zu benutzen. Ich kann die Klasse anscheinend nicht dazu bringen, meine OGG-Datei zu lesen, und ich habe sie auf verschiedene Arten modifiziert, um diese Funktion auszuführen. Ich habe gelesen, WAV-Dateien im selben Projekt, um die Dateien zu lesen vollständig erfolgreich mit
AudioInputStream audioIn = AudioSystem.getAudioInputStream(Thread.currentThread().getContextClassLoader().getResource("res/audio/" + fileName + ".wav"));
habe ich Variationen dieser versucht, die Datei-Klasse, als Ressourcen zu lesen, und ich kann meine OGG-Datei in die erfolgreich lokalisieren Projekt, aber es hält die Ausnahme
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input URL
wirft Dies ist mein vierte oder fünfte Versuch, in immer Audio-nicht-WAV-Audio in diesem Projekt zu spielen. Ich habe versucht, MP3s mit MediaPlayer und ein paar andere Möglichkeiten zu spielen, und dies ist meine zweite Methode, um OGG-Dateien abzuspielen. Ich versuche, große, lange Musikstücke als Hintergrund zu spielen, und ich kann sie nicht ausführen, da ich meine anderen WAV-Soundeffekte aufgrund der Dateigröße mache.
Jede Hilfe beim Spielen dieser OGG-Dateien würde sehr geschätzt werden. Ich fühle mich mit diesem Versuch meinem Ziel so nah, es scheint einfach und solide, aber es weigert sich einfach, meine Dateien richtig zu lesen. Vielen Dank im Voraus für jegliche Hilfe.
Der mp3spi-Code auf der JavaZoom-Site liest MP3. Sie benötigen den Vorbisspi von der JavaZoom-Site und den zugehörigen JOrbis-Code. –
Danke. Ich bin sehr enttäuscht von mir selbst. Dies ist ein sehr klarer Fall von Arbeiten viel zu spät und sehr albern und schwachsinnig. Danke für Ihre Hilfe. –