/* * Copyright (C) 2014 Haruki Hasegawa * * 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.h6ah4i.android.media.standard.audiofx; import android.media.audiofx.Virtualizer; import android.util.Log; import com.h6ah4i.android.media.audiofx.IVirtualizer; import com.h6ah4i.android.media.utils.AudioEffectSettingsConverter; public class StandardVirtualizer extends StandardAudioEffect implements IVirtualizer { private static final String TAG = "StandardVirtualizer"; private IVirtualizer.OnParameterChangeListener mUserOnParameterChangeListener; private android.media.audiofx.Virtualizer.OnParameterChangeListener mOnParameterChangeListener = new android.media.audiofx.Virtualizer.OnParameterChangeListener() { @Override public void onParameterChange( android.media.audiofx.Virtualizer effect, int status, int param, short value) { StandardVirtualizer.this.onParameterChange(effect, status, param, value); } }; public StandardVirtualizer(int priority, int audioSession) throws IllegalStateException, IllegalArgumentException, UnsupportedOperationException, RuntimeException { super(new Virtualizer(priority, audioSession)); getVirtualizer().setParameterListener(mOnParameterChangeListener); initializeForCompat(); } /** * Get underlying Virtualizer instance. * * @return underlying Virtualizer instance. */ public Virtualizer getVirtualizer() { return (Virtualizer) super.getAudioEffect(); } @Override public void release() { super.release(); mOnParameterChangeListener = null; mUserOnParameterChangeListener = null; } @Override public boolean getStrengthSupported() { if (getVirtualizer() == null) { return false; } return getVirtualizer().getStrengthSupported(); } @Override public void setStrength(short strength) throws IllegalStateException, IllegalArgumentException, UnsupportedOperationException { checkIsNotReleased("setStrength()"); verifyStrengthParameterRange(strength); getVirtualizer().setStrength(strength); } @Override public short getRoundedStrength() throws IllegalStateException, IllegalArgumentException, UnsupportedOperationException { checkIsNotReleased("getRoundedStrength()"); return getVirtualizer().getRoundedStrength(); } @Override public void setProperties(IVirtualizer.Settings settings) throws IllegalStateException, IllegalArgumentException, UnsupportedOperationException { checkIsNotReleased(); verifySettings(settings); getVirtualizer().setProperties(AudioEffectSettingsConverter.convert(settings)); } @Override public IVirtualizer.Settings getProperties() throws IllegalStateException, IllegalArgumentException, UnsupportedOperationException { checkIsNotReleased("getProperties()"); return AudioEffectSettingsConverter.convert(getVirtualizer().getProperties()); } @Override public void setParameterListener(IVirtualizer.OnParameterChangeListener listener) { checkIsNotReleased("setParameterListener()"); mUserOnParameterChangeListener = listener; } /* package */void onParameterChange( android.media.audiofx.Virtualizer effect, int status, int param, short value) { IVirtualizer.OnParameterChangeListener listener = null; listener = mUserOnParameterChangeListener; if (listener != null) { listener.onParameterChange(this, status, param, value); } } // === Fix unwanted behaviors === private static final short STRENGTH_MIN = 0; private static final short STRENGTH_MAX = 1000; private static final short DEFAULT_STRENGTH = 750; void initializeForCompat() { try { getVirtualizer().setStrength(DEFAULT_STRENGTH); } catch (IllegalStateException e) { Log.e(TAG, "initializeForCompat()", e); } } private static void verifyStrengthParameterRange(short strength) { if (!(strength >= STRENGTH_MIN && strength <= STRENGTH_MAX)) throw new IllegalArgumentException("bad parameter value: strength = " + strength); } private static void verifySettings(IVirtualizer.Settings settings) { if (settings == null) throw new IllegalArgumentException("The parameter 'settings' is null"); verifyStrengthParameterRange(settings.strength); } // ============================== }