package rabbitescape.ui.android.sound; import android.content.res.Resources; import android.media.SoundPool; public class SoundEffects { private static final float VOLUME = 1.0f; private final SoundPool soundPool; private final Resources resources; private LoadedClips clips; private SoundEffectsLoadingThread loadingThread; public SoundEffects( SoundPool soundPool, Resources resources ) { this.soundPool = soundPool; this.resources = resources; clips = null; loadingThread = null; } public void ensureLoaded() { if ( clips == null ) { loadClips(); } } public void clear() { killLoadingThread(); clips.clear(); } private void killLoadingThread() { if ( loadingThread == null ) { return; } loadingThread.pleaseStop(); while( loadingThread.isRunning() ) { try { loadingThread.join(); } catch ( InterruptedException e ) { // Nothing to do here } } loadingThread = null; } public void play( String sound ) { try { Integer id = clips.get( "sounds/" + sound + ".ogg" ); if ( id != null ) { soundPool.play( id, VOLUME, VOLUME, 1, 0, 1 ); } } catch ( Throwable t ) { // Ignore failures caused by sound problems t.printStackTrace(); } } private void loadClips() { clips = new LoadedClips(); loadingThread = new SoundEffectsLoadingThread( soundPool, resources, clips ); loadingThread.start(); } }