package rabbitescape.ui.android.sound; import android.app.Activity; import android.content.res.Resources; import android.media.AudioManager; import android.media.SoundPool; import rabbitescape.render.androidlike.Sound; import rabbitescape.render.androidutil.SoundResources; public class AndroidSound implements SoundResources<Activity>, Sound { private SoundPool soundPool = null; private SoundEffects sounds = null; private MusicPlayer music = new MusicPlayer( null, null, null ); private boolean muted = true; private Resources resources = null; @Override public void start( Activity activity ) { activity.setVolumeControlStream( AudioManager.STREAM_MUSIC ); resources = activity.getResources(); init(); } @SuppressWarnings( "deprecation" ) // SoundPool constructor deprecated in API level 21 private void init() { if ( !muted ) { if( soundPool == null ) { soundPool = new SoundPool( 3, AudioManager.STREAM_MUSIC, 100 ); sounds = new SoundEffects( soundPool, resources ); music = new MusicPlayer( soundPool, resources, music ); sounds.ensureLoaded(); } music.ensureLoadedAndPlay(); } } @Override public void pause() { music.pause(); } @Override public void dispose() { if ( soundPool != null ) { soundPool.release(); soundPool = null; } if ( sounds != null ) { sounds.clear(); } if ( music != null ) { music.clear(); // Don't set to null here since we want to hold on to current track } } @Override public void setMusic( String track ) { music.switchTrack( track, muted ); } @Override public void playSound( String sound ) { if ( sounds != null && !muted ) { sounds.play( sound ); } } @Override public void mute( boolean muted ) { if ( this.muted == muted ) { return; } this.muted = muted; if ( muted ) { dispose(); } else { init(); } } }