O áudio é uma ferramenta bastante interessantesem produtos multimídia. Muitas vezes, um clipe de áudio é capaz de incrementar sua aplicação e chamar a atenção do usuário. Java aceita a execução de arquivos de som no formato .au, da Sun. Para executar um arquivo .au em um applet, poderemos utilizar um dos métodos play() da classe Applet:
void play(URL url);
void play(URL url, String name);
A diferença é que no primeiro método temos que especificar o path do arquivo de áudio. A instrução a seguir executa o arquivo de áudio exemplo.au no site www.sun.com:
play new( URL(http://www.sun.com/exemplo.au));
Já no segundo método não precisamos especificar o caminho completo do arquivo, o que é interessante se você precisar fazer alterações na estrutura de diretórios do servidor. Usaremos o método getCodeBase() para executar uma ação idêntica àquela executada no primeiro exemplo:
play(getCodeBase(), exemplo.au);
Essa instrução executa o arquivo
de áudio exemplo.au que encontra-se no mesmo diretório
que o applet Java.
O JDK oferece suporte embutido para que se possa trabalhar
com arquivos de áudio. Porém, se por alguma
razão o JDK que você está utilizando não
possui este suporte, você poderá usar um dos
muitos utilitários que fazem a conversão de
outros formatos de som para o formato .au da Sun Microsystems.
Um destes utilitários é o SOund eXchange (SOX),
desenvolvido por Lance Norskog. Este pequeno utilitário
permitirá que convertamos, por exemplo, o arquivo exemplo.wav
para exemplo.au da seguinte forma:
c:> sox exemplo.wav exemplo.au <ENTER>
Poderemos encontra o utilitário SOX em muitos endereços Web. Atualmente, ele pode ser encontrado, por exemplo, em http://www.spies.com/sox. Se este endereço não existir mais quando você for acessá-lo, uma simples busca pelas palavras sox junto com java em algum motor de busca na Web será suficiente para encontrá-lo.
Bem, acabamos de ver como funciona a execução de um clipe de áudio. Mas você pode estar pensando: por que é necessário criar um objeto AudioClip para executar um arquivo de áudio se podíamos utilizar o método play() da classe Applet ? A resposta é simples: a classe AudioClip é que fornecerá o método stop() para que você possa parar a execução do arquivo.
Como padrão, quando você iniciar a execução de um clipe de áudio, Java executará o clipe até chegar ao final. Mas poderão haver ocasiões em que você queira deter a execução em algum ponto. Nesses casos, será necessário usar o método stop(). O código a seguir, por exemplo, mosta como parar um clipe de áudio quando o usuário muda de página:
public class ex_audio
extends Applet
{
// outras instruções do applet
public void stop()
{
if (audioclip_longo ! = null) // assegura-se de que a referência
do clipe é válida
{
audioclip_longo.stop(); // para a execução do
clipe
}
}
}
Como você pode observar, o código anterior verifica antes a referência do objeto audioclip_longo para certificar-se de que ele não é nulo, o que significa que a variável contém um objeto AudioClip. Em seguida, é utlizado o método stop() para terminar a execução do clipe de áudio.
Existem ocasiões, porém, que precisamos executar um clipe de áudio repetidamente. Para estes casos, será utilizado o método loop() da classe AudioClip. O método loop() executa o mesmo arquivo de áudio até que você chame o método stop() ou até que seja iniciado um novo clipe. O exemplo a seguir (ex_loop.java) executa o arquivo de áudio especificado pelo parâmetro HTML CLIPEAUDIO. Para executar o clipe uma única vez, clicamos no botão Play; para executar repetidamente, clicamos no botão Loop; para parar a execução, clicamos no botão Parar.
import java.applet.*;
import java.awt.*;
public class ex_loop extends Applet
{
AudioClip aclip;
public void init()
{
aclip = getAudioClip(getCodeBase(), getParameter(CLIPEAUDIO));
add(new Button (Play));
add(new Button (Parar)):
add(new Button (Loop));
}
public void stop()
{
if (aclip ! = null)
aclip.stop();
}
public boolean action(Event evt, Object arg)
{
if (evt.target instanceof Button)
{
if (arg.equals(Play))
aclip.play();
else if (arg.equals(Parar))
aclip.stop();
else if (arg.equals(Loop))
aclip.loop();
return true;
}
return false;
}
}
Agora, para tentar reunir o que vimos em relação à clipes de áudio, vamos criar um applet (tudo.java) que possuirá dez arquivos de áudio e dez botões (numerados de 1 a 8). sempre que o usuário clicar em um destes botões numerados, será executado o arquivo de áudio correspondente:
import java.applet.*;
import java.awt.*;
public class tudo extends Applet
{
String items[] = {1,2",3",4",5",6",7",8'};
public void init()
{
setLayout (new GridLayout(1, 8));
for (int i = 0; i < items.length; i++)
add (new Button(items[i]));
}
public boolean action(Event evt, Object arg)
{
if (evt.target instanceof Button)
{
if (arg.equals(C))
play (getCodeBase(), 1.au);
else if (arg.equals(D))
play (getCodeBase(), 2.au);
else if (arg.equals(E))
play (getCodeBase(), 3.au);
else if (arg.equals(F))
play (getCodeBase(), 4.au);
else if (arg.equals(G))
play (getCodeBase(), 5.au);
else if (arg.equals(A))
play (getCodeBase(), 6.au);
else if (arg.equals(B))
play (getCodeBase(), 7.au);
else if (arg.equals(C))
play (getCodeBase(), 8.au);
return true; // event processed
}
return false; // events not processed
}
}
Na próxima semana, continuaremos nosso estudo sobre multimídia. Até lá!
Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.
Cristiano Trindade é desenvolvedor de sistemas e atualmente trabalha no mercado de aplicações para dispositivos móveis. Possui sólidos conhecimentos em Java, ASP, ASP.Net, ColdFusion e Javascript, C/C++, C# e Pascal.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.