Fórum Ajuda com Java #584708

10/08/2017

0

Olá preciso da ajuda de vocês, fiz um programa e preciso que quando eu clique no botao reproduza uma musica, isso consegui fazer porem, se eu clicar mais de uma vez rapidamente no botao de play ou resume ele toca a musica embolado, como resolvo isso?


package prejarvis;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
*
* @author Rodrigo Costa
*/


public class Musica {

FileInputStream FIS;
BufferedInputStream BIS;

public long pauseLocation;
public long songTotalLength;
public String fileLocation;
boolean tocando = false;


public Player player;

public void play(String path){
if(tocando == false){
try {

FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);

player = new Player(BIS);


songTotalLength = FIS.available();
fileLocation = path + "";


} catch (FileNotFoundException | JavaLayerException ex) {
} catch(Exception ex){
}

new Thread(){
@Override
public void run(){
try {

player.play();
} catch (JavaLayerException ex) {
}
}
}.start();

}else{

}

}

public void resume(){

try {

FIS = new FileInputStream(fileLocation);
BIS = new BufferedInputStream(FIS);

player = new Player(BIS);

FIS.skip(songTotalLength - pauseLocation);

} catch (FileNotFoundException |JavaLayerException ex) {
} catch (IOException ex) {
}

new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}

}.start();
}

public void pause(){
if (player != null) {
try {
pauseLocation = FIS.available();
player.close();
} catch (IOException ex) {
}

} else {
}

}

public void stop(){
if (player != null) {

player.close();

} else {
}

}

}
Rodrigo Costa

Rodrigo Costa

Responder

Posts

11/08/2017

Santos

Opa Rodrigo. Beleza?

Cara, provavelmente está ocorrendo de que quando você clica no botão play uma outra vez, a música começa a tocar novamente sem a outra parar.

O que você pode fazer é verificar se o play já foi clicado (utilizando uma variável) e se clicar novamente, você pause a música.

Aí você evita esse conflito dos áudios tocando simultaneamente.

Abraços!
Responder

Gostei + 0

11/08/2017

Rodrigo Costa

vc fala pra eu clicar um metodo no caso? poderia me exemplificar algo?
Responder

Gostei + 0

11/08/2017

Rodrigo Costa

por exemplo eu fiz essa alteração, resolveu a parte de tocar as duas, ai a depois que ele retorna o primeiro true ele nao reproduz mais, eu tenho que criar um metodo?
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package prejarvis;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
*
* @author Rodrigo Costa
*/


public class Musica {

FileInputStream FIS;
BufferedInputStream BIS;

public long pauseLocation;
public long songTotalLength;
public String fileLocation;
boolean tocando = false;


public Player player;
//aqui foi feita a alteração que está citada acima
public boolean play(String path){
if(tocando == false){
try {

FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);

player = new Player(BIS);


songTotalLength = FIS.available();
fileLocation = path + "";



} catch (FileNotFoundException | JavaLayerException ex) {
} catch(Exception ex){
}

new Thread(){
@Override
public void run(){
try {

player.play();
} catch (JavaLayerException ex) {
}
}
}.start();

}else{

}
return tocando = true;

}

public void resume(){

try {

FIS = new FileInputStream(fileLocation);
BIS = new BufferedInputStream(FIS);

player = new Player(BIS);

FIS.skip(songTotalLength - pauseLocation);

} catch (FileNotFoundException |JavaLayerException ex) {
} catch (IOException ex) {
}

new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}

}.start();
}

public void pause(){
if (player != null) {
try {
pauseLocation = FIS.available();
player.close();
} catch (IOException ex) {
}

} else {
}

}

public void stop(){
if (player != null) {

player.close();

} else {
}
}

}
Responder

Gostei + 0

14/08/2017

Estevão Dias

Fala Rodrigo, tudo bem?

Eu separaria os métodos sim. No método tocar você pode iniciar a leitura e o buffer e atribuir true a tocando. No método parar você pode limpar o buffer e atribuir false a tocando. No método tocando você apenas retorna o valor da variável, sendo este um ponto comum para identificar se algo está em execução. No botão play, primeiro você checa se está tocando e para, depois toca, se não apenas toca. No pause verifica se está tocando, se não retorna, caso contrário para. Blz?

Um abraço.
Responder

Gostei + 0

16/08/2017

Rodrigo Costa

como faço pra limpar o buffer? poderia me dar um exemplo?
Responder

Gostei + 0

16/08/2017

Rodrigo Costa

é que ainda sou um programador novato kkkk, faz uns 6 meses que programo e gostaria de saber se pode me mostrar como limpar o buffer
Responder

Gostei + 0

18/08/2017

Rodrigo Costa

gente nao encontro nada na internet sobre limpar o buffer podem me mostrar como?
Responder

Gostei + 0

18/08/2017

Rodrigo Costa

Galera valeu pela ajuda segue aqui o código corrigido, fiz o seguinte: criei um if pra cada botao e para o play e para o resume a codição seria se o metodo tocando fosse false

package prejarvis;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
*
* @author Rodrigo Costa
*/


public class Musica {

FileInputStream FIS;
BufferedInputStream BIS;

public long pauseLocation;
public long songTotalLength;
public String fileLocation;
boolean tocando;
public Player player;

public boolean play(String path){


if(tocando == false){
try {

FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);

player = new Player(BIS);


songTotalLength = FIS.available();
fileLocation = path + "";



} catch (FileNotFoundException | JavaLayerException ex) {
} catch(Exception
ex){
}

new Thread(){
@Override
public void run(){
try {

player.play();
} catch (JavaLayerException ex) {
}
}
}.start();

}else{

}
return tocando = true;

}

public boolean resume(){
if (tocando == false) {


try {

FIS = new FileInputStream(fileLocation);
BIS = new BufferedInputStream(FIS);

player = new Player(BIS);

FIS.skip(songTotalLength - pauseLocation);

} catch (FileNotFoundException |JavaLayerException ex) {
} catch (IOException ex) {
}

new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}

}.start();
} else {
}

return tocando = true;
}

public boolean pause(){
if (player != null) {
try {
pauseLocation = FIS.available();
player.close();
} catch (IOException ex) {
}

} else {
}
return tocando = false;

}


}
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar