content: /*******************************************************************************
   * Copyright 2011 See AUTHORS file.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *   http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   ******************************************************************************/
  package com.badlogic.gdx.backends.android;
  
  import java.io.IOException;
  
  import android.media.MediaPlayer;
  import android.util.Log;
  
  import com.badlogic.gdx.audio.Music;
  
  public class AndroidMusic implements Music {
  	private final AndroidAudio audio;
  	private MediaPlayer player;
  	private boolean isPrepared = true;
  	private boolean isPaused = false;
  	private float volume = 1;
  	
  	AndroidMusic (AndroidAudio audio, MediaPlayer player) {
  		this.audio = audio;
  		this.player = player;
  	}
  
  	@Override public void dispose () {		
  		if(player == null) return;
  		try {
  			if (player.isPlaying()) player.stop();
  			player.release();
  		} catch(Throwable t) {
  			Log.e("AndroidMusic", "error while disposing AndroidMusic instance, non-fatal");
  		} finally {
  			player = null;
  			synchronized(audio.musics) {
  				audio.musics.remove(this);
  			}
  		}
  	}
  
  	@Override public boolean isLooping () {
  		return player.isLooping();
  	}
  
  	@Override public boolean isPlaying () {
  		return player.isPlaying();
  	}
  
  	@Override public void pause () {
  		if (player.isPlaying()) player.pause();
  		isPaused = true;
  	}
  
  	@Override public void play () {
  		if (player.isPlaying()) return;
  
  		try {
  			if (!isPrepared) {
  				player.prepare();
  				isPrepared = true;
  			}
  			player.start();
  			isPaused = false;
  		} catch (IllegalStateException e) {
  			e.printStackTrace();
  		} catch (IOException e) {
  			e.printStackTrace();
  		}
  	}
  	
  	@Override public boolean isPaused() {
  		return isPaused;
  	}
  
  	@Override public void setLooping (boolean isLooping) {
  		player.setLooping(isLooping);
  	}
  
  	@Override public void setVolume (float volume) {
  		player.setVolume(volume, volume);
  		this.volume = volume;
  	}
  
  	@Override public void stop () {
  		isPaused = false;
  		if(isPrepared) {
  			player.seekTo(0);
  		}
  		player.stop();		
  		isPrepared = false;
  	}
  	
  	public float getPosition () {
  		return player.getCurrentPosition() / 1000f;
  	}
  	
  	@Override
  	public float getVolume() {
  		return volume;
  	}
  }
  