Eu tive alguns problemas de performance ao usar o SoundPool. Toda vez que eu tocava um som, a taxa de atualização (frame rate) caía. Isso é absolutamente inadimissível em jogos que precisam de uma alta taxa de atualização (FPS).

Estou usando arquivos *.ogg e a inicialização do SoundPool é feita durante a inicialização do jogo. Eu tentei tocar o som no loop principal (game loop), em outra thread e através de um serviço (service) e todas as tentativas resultaram na mesma queda na taxa de atualização (FPS).

Exemplo básico abaixo:

Após alguns testes, notei que algumas vezes a função “play” demorava 8ms para executar e algumas vezes ela executava instantaneamente.

Então eu fiz mais dois testes:

1) tocar o som em intervalos de 1000ms -> a lentidão sempre acontecia

2) tocar o som em intervalos de 200ms -> a lentidão nunca acontecia

Conclusão, parece que quando não há nada para ser tocado, o SoundPool está resetando e quando vai tocar algo depois, ele demora para inicializar.

Resolvi o problema tocando um som infinitamente em mudo e a lentidão nunca mais aconteceu!

Se você tiver uma solução melhor ou tiver uma explicação melhor, comente abaixo!