Olá!
Estou fazendo um player, ele está quase pronto… tenho alguns bugs quando a música acaba e só tem ela na playlist (ai ela toca novamente), a música sai com um chiado estranho… gostaria que alguém pudesse me explicar como funciona a reprodução de audio em java, pois li alguns tutoriais e não entendi muito bem… tenho certeza que se eu entender como funciona realmente, eu resolvo esses bugs…
na minha classe Musica:
Método novaMusica()
[code]private void novaMusica() throws IOException, UnsupportedAudioFileException, LineUnavailableException {
AudioInputStream in = AudioSystem.getAudioInputStream(this.arquivo);
AudioInputStream din = null;
if (in != 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);
sDLine = getLine(decodedFormat);
aIOStream = din;
this.estadoMusica = Estado.STOP;
}
}[/code]
Método play()
[code]public void play() throws IOException, LineUnavailableException {
this.fireComecouMusicListener(new MusicEvent(this)); //disparando evento quando começa a música
this.estadoMusica = Estado.PLAY;
sDLine.start();
this.continua = true;
final byte[] data = new byte[4096];
new Thread(new Runnable() {
public void run() {
try {
while (continua) {
length = aIOStream.read(data, 0, data.length);
if (length > -1) {
sDLine.write(data, 0, length);
} else {
fireTerminouMusicListener(new MusicEvent(getMusica())); //disparando o evento quando
//termina a música
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}).start();
}[/code]
Método pause()
[code]public void pause() {
this.continua = false;
this.estadoMusica = Estado.PAUSE;
sDLine.stop();
}[/code]
Método stop()
[code]public void stop() throws IOException, UnsupportedAudioFileException, LineUnavailableException {
this.length = 0;
this.continua = false;
sDLine.drain();
sDLine.stop();
sDLine.close();
aIOStream.close();
this.novaMusica();
}[/code]
Abraços