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 // =========================================================== }