public class

Music

extends BaseAudioEntity
package org.andengine.audio.music;

import org.andengine.audio.BaseAudioEntity;
import org.andengine.audio.music.exception.MusicReleasedException;

import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;

/**
 * (c) 2010 Nicolas Gramlich
 * (c) 2011 Zynga Inc.
 * 
 * @author Nicolas Gramlich
 * @since 14:53:12 - 13.06.2010
 */
public class Music extends BaseAudioEntity {
	// ===========================================================
	// Constants
	// ===========================================================

	// ===========================================================
	// Fields
	// ===========================================================

	private MediaPlayer mMediaPlayer;

	// ===========================================================
	// Constructors
	// ===========================================================

	Music(final MusicManager pMusicManager, final MediaPlayer pMediaPlayer) {
		super(pMusicManager);

		this.mMediaPlayer = pMediaPlayer;
	}

	// ===========================================================
	// Getter & Setter
	// ===========================================================

	public boolean isPlaying() throws MusicReleasedException {
		this.assertNotReleased();

		return this.mMediaPlayer.isPlaying();
	}

	public MediaPlayer getMediaPlayer() throws MusicReleasedException {
		this.assertNotReleased();

		return this.mMediaPlayer;
	}

	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================

	@Override
	protected MusicManager getAudioManager() throws MusicReleasedException {
		return (MusicManager)super.getAudioManager();
	}

	@Override
	protected void throwOnReleased() throws MusicReleasedException {
		throw new MusicReleasedException();
	}

	@Override
	public void play() throws MusicReleasedException {
		super.play();

		this.mMediaPlayer.start();
	}

	@Override
	public void stop() throws MusicReleasedException {
		super.stop();

		this.mMediaPlayer.stop();
	}

	@Override
	public void resume() throws MusicReleasedException {
		super.resume();

		this.mMediaPlayer.start();
	}

	@Override
	public void pause() throws MusicReleasedException {
		super.pause();

		this.mMediaPlayer.pause();
	}

	@Override
	public void setLooping(final boolean pLooping) throws MusicReleasedException {
		super.setLooping(pLooping);

		this.mMediaPlayer.setLooping(pLooping);
	}

	@Override
	public void setVolume(final float pLeftVolume, final float pRightVolume) throws MusicReleasedException {
		super.setVolume(pLeftVolume, pRightVolume);

		final float masterVolume = this.getAudioManager().getMasterVolume();
		final float actualLeftVolume = pLeftVolume * masterVolume;
		final float actualRightVolume = pRightVolume * masterVolume;

		this.mMediaPlayer.setVolume(actualLeftVolume, actualRightVolume);
	}

	@Override
	public void onMasterVolumeChanged(final float pMasterVolume) throws MusicReleasedException {
		this.setVolume(this.mLeftVolume, this.mRightVolume);
	}

	@Override
	public void release() throws MusicReleasedException {
		this.assertNotReleased();

		this.mMediaPlayer.release();
		this.mMediaPlayer = null;

		this.getAudioManager().remove(this);

		super.release();
	}

	// ===========================================================
	// Methods
	// ===========================================================

	public void seekTo(final int pMilliseconds) throws MusicReleasedException {
		this.assertNotReleased();

		this.mMediaPlayer.seekTo(pMilliseconds);
	}

	public void setOnCompletionListener(final OnCompletionListener pOnCompletionListener) throws MusicReleasedException {
		this.assertNotReleased();

		this.mMediaPlayer.setOnCompletionListener(pOnCompletionListener);
	}

	// ===========================================================
	// Inner and Anonymous Classes
	// ===========================================================
}