Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Como trabalhar com múltiplos arquivos de áudio em Java ME

From Wiki
Jump to: navigation, search
Article Metadata

Compatibilidade
Artigo
Tradução:
Por maiconherverton
Última alteração feita por lpvalente em 16 Aug 2013

A maioria dos aparelhos irá gerar uma exceção se você tentar manter dois sons carregados ao mesmo tempo, por isso o truque é liberar o som anterior antes de jogar o próximo. O código abaixo mostra uma classe ShaderManager, que mantém o par de todos os sons em seu midlet em uma hashtable. Ele também mantém o controle do tempo que o último som foi tocado, porque se você tentar reproduzir dois sons muito próximos uns dos outros ele irá falhar na maioria dos aparelhos.

import java.io.InputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
 
 
public class SoundManager
{
private static Hashtable mapSound = new Hashtable();
private static long timeLastSound = 0;
private static boolean enabled = true;
 
static public Player getPlayer(String sound)
{
Player player;
player = (Player)mapSound.get(sound);
if (player == null)
{
try
{
String fileSpec = "/";
fileSpec += sound;
InputStream is = SoundManager.class.getResourceAsStream(fileSpec);
if (fileSpec.endsWith("amr"))
player = Manager.createPlayer(is, "audio/amr");
else if (fileSpec.endsWith("mid"))
player = Manager.createPlayer(is, "audio/midi");
mapSound.put(sound, player);
}
catch (Exception ex)
{
DebugStuff.print(ex.toString());
}
}
return player;
}
 
public static void playSound(String sound)
{
if (!enabled) return;
if (Math.abs(System.currentTimeMillis() - timeLastSound) < 250)
{
DebugStuff.print("tente executar 2 sons muito em breve");
return;
}
timeLastSound = System.currentTimeMillis();
Player player = getPlayer(sound);
try
{
Enumeration enumValues;
Player playerOther;
for (enumValues = mapSound.elements(); enumValues.hasMoreElements() ;)
{
playerOther = (Player)enumValues.nextElement();
if (playerOther != player && playerOther.getState() == Player.STARTED)
playerOther.deallocate();
}
if (player.getState() == Player.STARTED)
{
DebugStuff.print("sound already started");
return;
}
player.start();
}
catch (Exception e)
{
DebugStuff.print(e.toString());
}
}
 
public static void setEnabled(boolean enabled)
{
SoundManager.enabled = enabled;
}
 
}

Como chamar usar o ShaderManager:

SoundManager.playSound("sound1.amr");

(Repare que eu estou usando o formato AMR ao invés de .wav, porque AMR é muito menor, tem mais ou menos o mesmo e é igualmente bem suportado como o formato WAV.)

This page was last modified on 16 August 2013, at 12:34.
230 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×