Como executar aquivos de som (wav, mp3, etc) numa aplicação java?

24 respostas
L

Como executar arquivos de som no java? (*.wav. *.mp3, *.mid, etc…)???
Valeu!

24 Respostas

M

Já pelo menos procuraste? A resposta não é tão difícil de achar procurando num mecanismo de busca por “java mp3” ou “java media”.

Até!

M

AudioClip clip = Applet.newAudioClip(urlDoSom);
clip.start();//toca só uma vez
clip.loop();//toca o som repetidamente
clip.stop();//para de tocar
acho que não funciona com mp3… mas já serve

V

Para tocar mp3:
http://www.javazoom.net/index.shtml

Para tocar MID, use a classe Sequencer.
Para tocar WAV (se for desktop), use a classe DataLine e AudioSystem.

Se for em applets, use o AudioClip.

Veja o artigo:

A

[quote=ViniGodoy]Para tocar mp3:
http://www.javazoom.net/index.shtml

Para tocar MID, use a classe Sequencer.
Para tocar WAV (se for desktop), use a classe DataLine e AudioSystem.

Se for em applets, use o AudioClip.

Veja o artigo:

ViniGodoy…
é a segunda vez k mandas um link pra javazoom…vou la é me perco todo…
tenho um codigo k toca midi usei o sequencer…para mp3 tens de implementar uma classe para mp3 e fazer o import do java.io.File e mais umas cenas…tb ando na peskisa…pra por no meu player

V

Então olha isso aqui também:
http://www.javalobby.org/java/forums/t18465.html

Eu usei para tocar uns sons num jogo que eu fiz. Para mim foi relativamente fácil, pq por lá eu já tocava MP3 usando o DataLine. E bastou aproveitar os streams do javazoom.

V

Ah, quase me esqueço. Um colega do GUJ também postou informações sobre a javazoom:
http://dcbasso.blogspot.com/

A

ViniGodoy:
Então olha isso aqui também:
http://www.javalobby.org/java/forums/t18465.html

Eu usei para tocar uns sons num jogo que eu fiz. Para mim foi relativamente fácil, pq por lá eu já tocava MP3 usando o DataLine. E bastou aproveitar os streams do javazoom.

Mestre ViniGodoy
nao tenho nada contra sua excelencia …apenas keria k fosses mais explicativo…e peço desculpa por ser mal educado no post anterior…

V

Alkamavo:

Mestre ViniGodoy
nao tenho nada contra sua excelencia …apenas keria k fosses mais explicativo…e peço desculpa por ser mal educado no post anterior…

Você foi grosso? Juro que nem pareceu (ou pelo menos nem notei)! hehehehehehe
Não era a minha idéia ser também, se pareceu, não era a intenção… rs

O duro de texto é que não tem entonação de voz.

A

pois é…devia ter uma app aki no forum para post de voz…hehehehj

A

ViniGodoy:
Ah, quase me esqueço. Um colega do GUJ também postou informações sobre a javazoom:
http://dcbasso.blogspot.com/

Valeu VinyGodoy…este cara tirou minha hora do almoço…tenho de matutar nas cenas dele a esta hora…este java faz.me mal…tira-me até o apetite de tanta curiosidade.

M

ViniGodoy:
Ah, quase me esqueço. Um colega do GUJ também postou informações sobre a javazoom:
http://dcbasso.blogspot.com/

Aqui tem um tópico que ele criou sobre o assunto

http://www.guj.com.br/posts/list/71782.java

A

Mark_Ameba:
ViniGodoy:
Ah, quase me esqueço. Um colega do GUJ também postou informações sobre a javazoom:
http://dcbasso.blogspot.com/

Aqui tem um tópico que ele criou sobre o assunto

http://www.guj.com.br/posts/list/71782.java

Obrigadão…Mark_ameba

L

Cara, se estiver te incomodando é só não me responder…
Aliás, você nem respondeu…
Esse site é para ajudar a comu e não para ofender e criticar…
Parece que não enchergou o seu lugar ainda…

L

Valeu, ViniGodoy!!!
Vou dar uma estudada… Mas não pretendo me aprofundar tanto… Só preciso de um alerta sonoro, que não seja o beep, rsrsrs, para soar a um determinado momento… Sakas?
Valeu mesmo!
T+

V

Ah, se é só um beep, use a classe Toolkit da AWT:

Toolkit.getDefaultToolkit().beep();
M

será q alguém poderia postar um exemplo de reprodução de mp3 em java??

eu sempre me perco nesse negocio, soh consigo toca wav!!

V

O site do Javazoom ali atrás tem exemplos.

Veja também: http://www.javalobby.org/java/forums/t18465.html

F

Já passei por isso também, é complicado, nessa área precisamos de auxílio e tem gente que ainda atrapalha…

L

Se alguém ainda estiver precisando, fiz uma aplicação bem simples que executa um arquivo mp3 utilizando as APIS do javazoom.

Tudo que vc precisa antes de começar é baixar os MP3SPI no site do http://www.javazoom.net/index.shtml.
Adicionar ao classpath os jars jl1.0.1.jar, mp3spi1.9.5.jar e tritonus_share.jar e dar os devidos imports.

segue o código:

Classe musica (crio um objeto vinculado ao arquivo MP3)

import java.io.File;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;

public class Music {

    private File track;
    private SourceDataLine line;
    private AudioInputStream din;
    private AudioFormat decodeFormat;
    public Music()
    {
        this.track = null;
        this.line = null;
        this.din = null;
    }

    public Music(File music)
    {
        try
        {
            //abre arquivo de audio
            this.track = music;
            //cria um strem de entrada do arquivo
            AudioInputStream ais = AudioSystem.getAudioInputStream(this.track);
            //seleciona o formato do arquivo de audio
            AudioFormat baseFormat = ais.getFormat();
            //configura a decodificação
            decodeFormat = new AudioFormat(
                AudioFormat.Encoding.PCM_SIGNED, // Encoding to use
                baseFormat.getSampleRate(),	  // sample rate (same as base format)
                16,				  // sample size in bits (thx to Javazoom)
                baseFormat.getChannels(),	  // # of Channels
                baseFormat.getChannels()*2,	  // Frame Size
                baseFormat.getSampleRate(),	  // Frame Rate
                false				  // Big Endian
            );

            din = AudioSystem.getAudioInputStream(decodeFormat, ais);
            DataLine.Info info = new DataLine.Info(SourceDataLine.class, getDecodeFormat());
	    this.line = (SourceDataLine) AudioSystem.getLine(info);
        }
        catch(Exception e){}
    }
...geters e seters.

A classe Play (é runnable pois executo a musica em uma Thread… em caso de duvidas aqui no fórum tem vários exemplos de Thread)

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.SourceDataLine;
import javax.swing.JOptionPane;

/**
 *
 * @author lucas
 */
public class Play implements Runnable {

    private boolean waiting = false;
    private SourceDataLine line;
    private AudioInputStream din;
    private AudioFormat decodeFormat;

    public Play (Music track)
    {
        this.line = track.getLine();
        this.din = track.getDin();
        this.decodeFormat = track.getDecodeFormat();

    }

    //metodo para pausar a thread.. a propria thread deve se parar, e não uma thread externa
    public synchronized void aguardar() {
        waiting = true;
    }

    //metodo para reiniciar uma thread
    public void continuar() {
        waiting = false;
        synchronized(this) {
            this.notify();
        }
    }
    
     //aqui executa a musica
    public void run() {
        try
        {
            if(line != null)
            {
		line.open(decodeFormat);
		byte[] data = new byte[4096];
		// Start
		line.start();
        	int nBytesRead;
               //toca enquanto a musica não acaba
		while ((nBytesRead = din.read(data, 0, data.length)) != -1)
                {
                    //se for solicitado para para  a propria thread para
                    while (waiting) {
                        synchronized (this) {
                            wait(); //Note que essa thread mesmo chama o wait
                        }
                    }
                    line.write(data, 0, nBytesRead);
		}
		// Stop
		line.drain();
		line.stop();
		line.close();
		din.close();
            }
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Erro:"+e.getMessage());
        }
    }
}

e para executar basta fazer assim :

Music track = new Music("/home/lucas/Music/eric clapton-layla.mp3"); //no windows seria C:\\diretório em que a musica se encontra\\eric clapton-layla.mp3
Play play = new Play(track);
Thread newThrd = new Thread(play);
newThrd.start();

Só…

Abraço galera

V

Ué, o que você está usando do Javazoom aí? Aparentemente você só usa a javax.sound.

Sua classe ficou muito parecida com as classes de som que tenho aqui. A única diferença é que minha classe soundmanager dispara a thread do som sozinha, num threadpool. Em seguida, ela retorna um objeto do tipo “PlayingStreamed”, com os métodos de play e pause.

L

Preferi usar uma classe para realizar o play pois usarei a mesma para executar um modo playlist.
O conteúdo encontrei no site do javazoom, que na verdade é o conjunto dos 3 jars.
Posta seu exemplo ai, tenho certeza que pode ajudar (vou dar uma olhada pra tentar melhorar a minha :smiley: ).

Abraço galera.

V

As classes são as mesmas que estão no projeto vikanoid:
http://www.pontov.com.br/site/index.php/component/content/article/55-artigos/133-meus-jogos

Baixe o projeto e monte o Java Game Framework no seu eclipse. As classes estão no pacote jgf.sound
Elas são adicionadas ao projeto towel também.

L

Da hora :smiley:
Vou baixar aqui e dar uma olhada, nada melhor que bom código pra aprender mais.

Vlw Vini

Abraço galera

S

marcelo_emanoel:
AudioClip clip = Applet.newAudioClip(urlDoSom);
clip.start();//toca só uma vez
clip.loop();//toca o som repetidamente
clip.stop();//para de tocar
acho que não funciona com mp3… mas já serve

Poderia explicar melhor isso?

Criado 2 de dezembro de 2007
Ultima resposta 16 de jul. de 2013
Respostas 24
Participantes 10