Będziesz prawdopodobnie wolą używać klasy SoundPool. Zmniejsza opóźnienia, gdy przychodzi czas na odtwarzanie dźwięku, i oferuje inne elementy, takie jak możliwość nadawania priorytetu dźwiękom, gdy jest ich zbyt wiele do grania na raz.
Od docs:
SoundPool to zbiór próbek, które można załadować do pamięci z zasobu wewnątrz APK lub z pliku w systemie plików. Biblioteka SoundPool wykorzystuje usługę MediaPlayer do dekodowania dźwięku do nieprzetworzonego 16-bitowego strumienia PCM mono lub stereo. Umożliwia to wysyłanie aplikacji ze skompresowanymi strumieniami bez konieczności obciążania procesora i opóźnienia dekompresji podczas odtwarzania.
Na przykład:
/**
* How many sounds can be played at once.
*/
private static final int MAX_SOUND_POOL_STREAMS = 4;
/**
* Modify this as part of your own priority scheme. Higher numbers mean higher
* priority. If you don't care, it's okay to use the same priority for every
* sound.
*/
private static final int NORMAL_PRIORITY = 10;
private int mySoundId;
@Override
public void setupContent() {
this.soundPool = new SoundPool(MAX_SOUND_POOL_STREAMS,
AudioManager.STREAM_MUSIC, 100);
this.mySoundId = this.soundPool.load(this.getApplicationContext(),
R.raw.mySound, 1);
}
@Override
private void playMySound() {
this.soundPool.play(this.mySoundId, 1, 1, NORMAL_PRIORITY, 0, 1);
}
Tutaj umieść wyjście logcat, w przeciwnym razie nie rozpoznajemy błędu. –