Pessoal gostaria de saber como eu faço pra parar um som no Java atraves de botões, consegui montar um código aqui mas ele executa apenas uma vez e para. Eu queria colocar no aplicativo a opção do usuário desabilitar o som. Pesquisei mas não consegui nada ainda.
O som roda normalmente, fiz usando as classes: java.io.File, javax.sound.sampled.AudioInputStream e javax.sound.sampled.AudioSystem. Já até criei os botões. No método no qual a musica é tocada, ele recebe uma variavel int. Se essa variável for 1, executa a midia "1", se for 2 executa a midia "2". Por enquanto carreguei apenas 2 musicas, mas pretendo carregar mais e tocá-las sequencialmente, pois trata-se de um jogo. Aqui ele roda repetidamente através do método loop(), usado na Classe Clip, que gera o som. Mas eu queria que ao terminar ele gerasse uma musica aleatoriamente e colocasse pra tocar.
Se alguem tiver alguma ideia disso, estou me esforçando a bastante tempo mas ainda não consegui. Ai vai meu código: :)
package main;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
/*
* Classe para tocar som em Java
*
*
* */
public class TocandoAudio2 extends JFrame implements ActionListener {
Color cor = new Color(208,217,251);
JLabel label;
JButton botao, parar, loop;
ButtonHandler handler = new ButtonHandler();
public TocandoAudio2(){
super("Janela de som");
this.setSize(600, 400);
this.getContentPane().setBackground(cor);
this.setLayout(null);
label = new JLabel("Tocador de audio");
label.setBounds(10, 30, 100, 20);
this.getContentPane().add(label);
label.setVisible(true);
botao = new JButton("Tocar outro som");
botao.setBounds(10, 60, 100, 20);
this.getContentPane().add(botao);
botao.setVisible(true);
botao.addActionListener(this);
parar = new JButton("Parar som");
parar.setBounds(10, 90, 100, 20);
this.getContentPane().add(parar);
parar.setVisible(true);
parar.addActionListener(handler);
loop = new JButton("Continuar Som");
loop.setBounds(10, 120, 100, 20);
this.getContentPane().add(loop);
loop.setVisible(true);
loop.addActionListener(handler);
// chama o metodo
TocaAudio(2);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true); // deixa tudo visivel
}
private void TocaAudio(int seleciona){
try{
// Audios do jogo
AudioInputStream stream1 = AudioSystem.getAudioInputStream(new File("c:/davidgueta.wav"));
AudioInputStream stream2 = AudioSystem.getAudioInputStream(new File("c:/pitbull.wav"));
// definicao
AudioFormat format = stream1.getFormat();
// Regula o formato
if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
format.getSampleSizeInBits()*2,
format.getChannels(),
format.getFrameSize()*2,
format.getFrameRate(),
true); // big endian
stream1 = AudioSystem.getAudioInputStream(format, stream1);
stream2 = AudioSystem.getAudioInputStream(format, stream2);
}
// Create the clip
DataLine.Info info = new DataLine.Info(
Clip.class, stream1.getFormat(), ((int)stream1.getFrameLength()*format.getFrameSize()));
Clip clip = (Clip) AudioSystem.getLine(info);
// Executa a musica depois de tudo carregado
if(seleciona == 1){
clip.open(stream1);
//clip.start();
clip.loop(1000);
}else if(seleciona == 2){
clip.open(stream2);
//clip.start();
clip.loop(1000);
}else if(seleciona == 0){
clip.stop();
}
}catch(MalformedURLException e){
} catch (UnsupportedAudioFileException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // Termina metodo
private class ButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == botao){ // Iniciar som
TocaAudio(0);
JOptionPane.showMessageDialog(null, "Clicou parar");
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new TocandoAudio2();
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}