Problemas com MP3 SPI

1 resposta
J

e ai galera?
to usando essa classe junto com JFRAME, sendo que quando uma musica começa, por exemplo, o JFRAME fica como se fosse desabilitado. A musica fica tocando e nao da pra fazer nenhuma ação.
alguem teve um problema assim? como eu posso resolver?
tnks

1 Resposta

J

esse eh o codigo

import javax.sound.sampled.*;
import java.io.*;
import java.util.Map;
import org.tritonus.share.sampled.file.TAudioFileFormat;

public class Ler extends javax.swing.JFrame {

    SourceDataLine line;

    /** Creates new form NewJFrame */
    public Ler() {
	initComponents();
    }
                        
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("START");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("jButton2");

        jLabel1.setText("jLabel1");

        jLabel2.setText("jLabel2");

        jLabel3.setText("jLabel3");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(85, 85, 85)
                        .addComponent(jButton1)
                        .addGap(60, 60, 60)
                        .addComponent(jButton2))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(156, 156, 156)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1)
                            .addComponent(jLabel3))))
                .addContainerGap(117, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(123, 123, 123)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addGap(18, 18, 18)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel3)
                .addContainerGap(82, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
	try {
	    File file = new File("C:\\Users\\Jonnathan\\Documents\\NetBeansProjects\\JavaApplication2\\src\\javaapplication2\\musica.mp3");
	    // Play now.
	    AudioFileFormat baseFileFormat = null;
	    AudioFormat baseFormat2;
	    baseFileFormat = AudioSystem.getAudioFileFormat(file);
	    baseFormat2 = baseFileFormat.getFormat();
	    if (baseFileFormat instanceof TAudioFileFormat) {
		Map properties = ((TAudioFileFormat) baseFileFormat).properties();
		String titulo = (String) properties.get("title");
		jLabel1.setText("Nome: " + titulo);
		Long duracao = (Long) properties.get("duration");
		jLabel2.setText("" + ((duracao / 1000000) / 60) + " minutos e " + ((duracao / 1000000) % 60) + " segundos");
	    }
	    AudioInputStream in = AudioSystem.getAudioInputStream(file);
	    AudioInputStream din = 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);
	    // Play now.
	    rawplay(decodedFormat, din);
	    in.close();
	} catch (Exception e) {

	}
    }                                        

    private void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException, LineUnavailableException {
	byte[] data = new byte[4096];
	line = getLine(targetFormat);
	if (line != null) {
	    // Start
	    line.start();
	    int nBytesRead = 0, nBytesWritten = 0;
	    while (nBytesRead != 1) {
		nBytesRead = din.read(data, 0, data.length);
		if (nBytesRead != 1) {
		    nBytesWritten = line.write(data, 0, nBytesRead);
		    jButton1.setText("oi");
		}
	    }
	    // Stop
	    line.drain();
	    line.stop();
	    line.close();
	    din.close();
	}
    }

    private SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException {
	SourceDataLine res = null;
	DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
	res = (SourceDataLine) AudioSystem.getLine(info);
	res.open(audioFormat);
	return res;
    }

    public static void main(String args[]) {
	java.awt.EventQueue.invokeLater(new Runnable() {

	    public void run() {
		new Ler().setVisible(true);
	    }
	});
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    // End of variables declaration                   
}
Criado 28 de setembro de 2008
Ultima resposta 5 de out. de 2008
Respostas 1
Participantes 1