diff options
author | Roman Birg <roman@cyngn.com> | 2016-08-29 16:26:56 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2016-08-29 16:26:56 -0700 |
commit | 33b5c82b68ecf8c18f284214b65db0c2e80589ce (patch) | |
tree | 41741e034f2057289f485f49761ebe6bc2135532 /src/org/cyanogenmod/audiofx/backends/AndroidEffects.java | |
parent | 10fc11011278db3da38e3d28f729887426c1c3a1 (diff) | |
parent | 71e5da3c38e5a7e79d5c1f94a13f239cc7ca7458 (diff) | |
download | android_packages_apps_AudioFX-33b5c82b68ecf8c18f284214b65db0c2e80589ce.tar.gz android_packages_apps_AudioFX-33b5c82b68ecf8c18f284214b65db0c2e80589ce.tar.bz2 android_packages_apps_AudioFX-33b5c82b68ecf8c18f284214b65db0c2e80589ce.zip |
Merge "AudioFX: finish rename; persist process" into cm-13.0
Diffstat (limited to 'src/org/cyanogenmod/audiofx/backends/AndroidEffects.java')
-rw-r--r-- | src/org/cyanogenmod/audiofx/backends/AndroidEffects.java | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/src/org/cyanogenmod/audiofx/backends/AndroidEffects.java b/src/org/cyanogenmod/audiofx/backends/AndroidEffects.java new file mode 100644 index 0000000..fafcd34 --- /dev/null +++ b/src/org/cyanogenmod/audiofx/backends/AndroidEffects.java @@ -0,0 +1,200 @@ +/* + * Copyright (C) 2016 The CyanogenMod Project + * + * 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 org.cyanogenmod.audiofx.backends; + +import android.media.AudioDeviceInfo; +import android.media.audiofx.AudioEffect; +import android.media.audiofx.BassBoost; +import android.media.audiofx.PresetReverb; +import android.media.audiofx.Virtualizer; +import android.util.Log; + +import org.cyanogenmod.audiofx.Constants; + +/** + * EffectSet which comprises standard Android effects + */ +class AndroidEffects extends EffectSetWithAndroidEq { + + /** + * Session-specific bassboost + */ + private BassBoost mBassBoost; + + /** + * Session-specific virtualizer + */ + private Virtualizer mVirtualizer; + + /** + * Session-specific reverb + */ + private PresetReverb mPresetReverb; + + public AndroidEffects(int sessionId, AudioDeviceInfo deviceInfo) { + super(sessionId, deviceInfo); + } + + @Override + protected void onCreate() { + super.onCreate(); + + mBassBoost = new BassBoost(100, mSessionId); + mVirtualizer = new Virtualizer(100, mSessionId); + mPresetReverb = new PresetReverb(100, mSessionId); + } + + @Override + public void release() { + super.release(); + + try { + if (mBassBoost != null) { + mBassBoost.release(); + } + } catch (Exception e) { + // ignored; + } + try { + if (mVirtualizer != null) { + mVirtualizer.release(); + } + } catch (Exception e) { + // ignored + } + try { + if (mPresetReverb != null) { + mPresetReverb.release(); + } + } catch (Exception e) { + // ignored + } + mBassBoost = null; + mVirtualizer = null; + mPresetReverb = null; + } + + @Override + public synchronized void setDevice(AudioDeviceInfo deviceInfo) { + super.setDevice(deviceInfo); + } + + @Override + public void setGlobalEnabled(boolean globalEnabled) { + super.setGlobalEnabled(globalEnabled); + + if (!globalEnabled) { + // disable everything. it will get explictly enabled + // individually when necessary. + try { + if (mVirtualizer != null) { + mVirtualizer.setEnabled(false); + } + } catch (Exception e) { + Log.e(TAG, "Unable to disable virtualizer!", e); + } + try { + if (mBassBoost != null) { + mBassBoost.setEnabled(false); + } + } catch (Exception e) { + Log.e(TAG, "Unable to disable bass boost!", e); + } + try { + if (mPresetReverb != null) { + mPresetReverb.setEnabled(false); + } + } catch (Exception e) { + Log.e(TAG, "Unable to disable reverb!", e); + } + } + } + + @Override + public boolean hasVirtualizer() { + return mVirtualizer != null && mVirtualizer.getStrengthSupported(); + } + + @Override + public boolean hasBassBoost() { + return mBassBoost != null && mBassBoost.getStrengthSupported(); + } + + @Override + public void enableBassBoost(boolean enable) { + try { + if (mBassBoost != null) { + mBassBoost.setEnabled(enable); + } + } catch (Exception e) { + Log.e(TAG, "Unable to " + (enable ? "enable" : "disable") + " bass boost!", e); + } + } + + @Override + public void setBassBoostStrength(short strength) { + setParameterSafe(mBassBoost, BassBoost.PARAM_STRENGTH, strength); + } + + @Override + public void enableVirtualizer(boolean enable) { + try { + if (mVirtualizer != null) { + mVirtualizer.setEnabled(enable); + } + } catch (Exception e) { + Log.e(TAG, "Unable to " + (enable ? "enable" : "disable") + " virtualizer!", e); + } + } + + @Override + public void setVirtualizerStrength(short strength) { + setParameterSafe(mVirtualizer, Virtualizer.PARAM_STRENGTH, strength); + } + + @Override + public void enableReverb(boolean enable) { + try { + if (mPresetReverb != null) { + mPresetReverb.setEnabled(enable); + } + } catch (Exception e) { + Log.e(TAG, "Unable to " + (enable ? "enable" : "disable") + " preset reverb!", e); + } + + } + + @Override + public void setReverbPreset(short preset) { + setParameterSafe(mPresetReverb, PresetReverb.PARAM_PRESET, preset); + } + + @Override + public int getBrand() { + return Constants.EFFECT_TYPE_ANDROID; + } + + private void setParameterSafe(AudioEffect e, int p, short v) { + if (e == null) { + return; + } + try { + e.setParameter(p, v); + } catch (Exception ex) { + Log.e(TAG, "Failed to set param " + p + " for effect " + e.getDescriptor().name, ex); + } + } +} |