public abstract class

BaseAudioEntity

extends Object
implements IAudioEntity
package org.andengine.audio;

import org.andengine.audio.exception.AudioException;

/**
 * (c) 2010 Nicolas Gramlich
 * (c) 2011 Zynga Inc.
 * 
 * @author Nicolas Gramlich
 * @since 16:35:37 - 13.06.2010
 */
public abstract class BaseAudioEntity implements IAudioEntity {
	// ===========================================================
	// Constants
	// ===========================================================

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

	private final IAudioManager<? extends IAudioEntity> mAudioManager;

	protected float mLeftVolume = 1.0f;
	protected float mRightVolume = 1.0f;

	private boolean mReleased;

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

	public BaseAudioEntity(final IAudioManager<? extends IAudioEntity> pAudioManager) {
		this.mAudioManager = pAudioManager;
	}

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

	public boolean isReleased() {
		return this.mReleased;
	}

	protected IAudioManager<? extends IAudioEntity> getAudioManager() throws AudioException {
		this.assertNotReleased();

		return this.mAudioManager;
	}

	public float getActualLeftVolume() throws AudioException {
		this.assertNotReleased();

		return this.mLeftVolume * this.getMasterVolume();
	}

	public float getActualRightVolume() throws AudioException {
		this.assertNotReleased();

		return this.mRightVolume * this.getMasterVolume();
	}

	protected float getMasterVolume() throws AudioException {
		this.assertNotReleased();

		return this.mAudioManager.getMasterVolume();
	}

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

	protected abstract void throwOnReleased() throws AudioException ;

	@Override
	public float getVolume() throws AudioException {
		this.assertNotReleased();

		return (this.mLeftVolume + this.mRightVolume) * 0.5f;
	}

	@Override
	public float getLeftVolume() throws AudioException {
		this.assertNotReleased();

		return this.mLeftVolume;
	}

	@Override
	public float getRightVolume() throws AudioException {
		this.assertNotReleased();

		return this.mRightVolume;
	}

	@Override
	public final void setVolume(final float pVolume) throws AudioException {
		this.assertNotReleased();

		this.setVolume(pVolume, pVolume);
	}

	@Override
	public void setVolume(final float pLeftVolume, final float pRightVolume) throws AudioException {
		this.assertNotReleased();

		this.mLeftVolume = pLeftVolume;
		this.mRightVolume = pRightVolume;
	}

	@Override
	public void onMasterVolumeChanged(final float pMasterVolume) throws AudioException {
		this.assertNotReleased();
	}

	@Override
	public void play() throws AudioException {
		this.assertNotReleased();
	}

	@Override
	public void pause() throws AudioException {
		this.assertNotReleased();
	}

	@Override
	public void resume() throws AudioException {
		this.assertNotReleased();
	}

	@Override
	public void stop() throws AudioException {
		this.assertNotReleased();
	}

	@Override
	public void setLooping(final boolean pLooping) throws AudioException {
		this.assertNotReleased();
	}

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

		this.mReleased = true;
	}

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

	protected void assertNotReleased() throws AudioException {
		if(this.mReleased) {
			this.throwOnReleased();
		}
	}

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