Parar som no Java

0 respostas
F
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.  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
			
		
	}

}
Criado 2 de fevereiro de 2013
Respostas 0
Participantes 1