Guten Tag/Abend!
Ich versuche schon seit gestern eine MP3 Datei abzuspielen. Weil mir bewusst ist das Java kein MP3 unterstützt benutze ich als Library JLayer 1.0.1 zum dekodieren.
Man hört immer kurz ein Sound von der MP3 bevor der Code immer bei einer Zeile stecken bleibt und nicht weiter geht.
Hier der Code:
Falls jemand weiß warum das so ist oder ob ich was falsch gemacht hab bitte melden.
Ich versuche schon seit gestern eine MP3 Datei abzuspielen. Weil mir bewusst ist das Java kein MP3 unterstützt benutze ich als Library JLayer 1.0.1 zum dekodieren.
Man hört immer kurz ein Sound von der MP3 bevor der Code immer bei einer Zeile stecken bleibt und nicht weiter geht.
Hier der Code:
Java:
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
import javazoom.jl.decoder.Bitstream;
import javazoom.jl.decoder.Decoder;
import javazoom.jl.decoder.Header;
import javazoom.jl.decoder.SampleBuffer;
public class Main {
public static void main(String[] args) {
try {
InputStream is = new FileInputStream(new File("audioMp3.mp3"));
byte[] buffer = new byte[1024 * 15];
int len = 0;
SourceDataLine sdl = (SourceDataLine) AudioSystem.getLine(new DataLine.Info(SourceDataLine.class, new AudioFormat(44100, 16, 2, true, false)));
sdl.open();
sdl.start();
while((len = is.read(buffer, 0, buffer.length)) != -1) {
byte[] pcm = decode(buffer, 0, len);
sdl.write(pcm, 0, pcm.length); //<--- Hier genau bleibt er stecken!
}
sdl.stop();
sdl.drain();
sdl.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static byte[] decode(byte[] mp3, int off, int len) {
try {
Bitstream bitStream = new Bitstream(new ByteArrayInputStream(mp3, off, len));
Decoder decoder = new Decoder();
ByteBuffer byteBuffer = ByteBuffer.allocate(len * 2304 * 2).order(ByteOrder.LITTLE_ENDIAN);
Header frameHeader = null;
while((frameHeader = bitStream.readFrame()) != null) {
SampleBuffer sampleBuffer = (SampleBuffer) decoder.decodeFrame(frameHeader, bitStream);
short[] buffer = sampleBuffer.getBuffer();
byteBuffer.asShortBuffer().put(buffer);
bitStream.closeFrame();
}
bitStream.close();
byteBuffer.flip();
return byteBuffer.array();
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
}
Falls jemand weiß warum das so ist oder ob ich was falsch gemacht hab bitte melden.