Fórum Ajuda com Java #584708
10/08/2017
0
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
Curtir tópico
+ 0Posts
11/08/2017
Santos
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!
Gostei + 0
11/08/2017
Rodrigo Costa
Gostei + 0
11/08/2017
Rodrigo Costa
/*
* 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 {
}
}
}
Gostei + 0
14/08/2017
Estevão Dias
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.
Gostei + 0
16/08/2017
Rodrigo Costa
Gostei + 0
16/08/2017
Rodrigo Costa
Gostei + 0
18/08/2017
Rodrigo Costa
Gostei + 0
18/08/2017
Rodrigo Costa
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;
}
}
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)