Toda vez que ocorre colisão com um item no cenário esse código entra em ação:
try {
InputStream is = getClass().getResourceAsStream("beep.wav");
Player sound = Manager.createPlayer(is, "audio/x-wav");
sound.realize();
sound.prefetch();
sound.start();
}
catch(Exception e) {
System.out.println(e);
}
O som é tocado algumas vezes, mas depois de um tempo simplesmente não toca mais e ocorre a exception:
Porque isso está acontecendo e como corrigir?
olha, já que ninguém respondeu. vou tentar ajudar.
eu tinha um problema parecido quando testava em celulares motorola.
o som pegava algumas vezes mas depois parava de tocar mas não dava exception.
eu acho que seja um bug isso, mas, nao consegui entender direito esse problema.
O que fiz foi evitar que o mesmo som seja tocado novamente antes de terminar o som anterior.
se ainda tiver com problemas tenta ao inves de usar:
sound.realize();
sound.prefetch();
chamar o construtor novamente.
foi como eu disse ,esse foi um problema que até hoje nao tenho solução sensata.
uma observação muito importante é que quando eu testava nos emuladores nao tocava som mas funcionava direitinho no dispositivo e vice-versa.
NUNCA CONFIE NOS EMULADORES
ESPERO TER AJUDADO!
edprado, já me indicaram um caminho que funcionou muito bem. Em vez de criar o som e executá-lo toda vez que ocorre o evento respectivo (item, fase, etc), cria-se o som e todas suas configurações, e chama .start() toda vez que o evento para o som for acionado. Exemplo:
private InputStream is;
private Player sound;
.............
try {
is = getClass().getResourceAsStream("beep.wav");
sound = Manager.createPlayer(is, "audio/x-wav");
sound.realize();
sound.prefetch();
}
catch(Exception e) {
System.out.println(e);
}
.................
Agora, cada vez que precisar tocar o som, você faz:
try {
sound.start();
}
catch(Exception e) {
System.out.println(e);
}
O único problema ocorre quando o som é tocado antes que o som anterior pare de tocar. Mas aí é só fazer esse teste que você mencionou!
Obrigado, espero ter contribuído também.