×
Namespaces

Variants
Actions
Revision as of 15:34, 16 August 2013 by lpvalente (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

From Nokia Developer 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 15:34.
81 page views in the last 30 days.
×