summaryrefslogtreecommitdiffstats
path: root/src/org/cyanogenmod/audiofx/audiofx/backends/AndroidEffects.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/cyanogenmod/audiofx/audiofx/backends/AndroidEffects.java')
-rw-r--r--src/org/cyanogenmod/audiofx/audiofx/backends/AndroidEffects.java185
1 files changed, 185 insertions, 0 deletions
diff --git a/src/org/cyanogenmod/audiofx/audiofx/backends/AndroidEffects.java b/src/org/cyanogenmod/audiofx/audiofx/backends/AndroidEffects.java
new file mode 100644
index 0000000..090eb73
--- /dev/null
+++ b/src/org/cyanogenmod/audiofx/audiofx/backends/AndroidEffects.java
@@ -0,0 +1,185 @@
+package com.cyngn.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 com.cyngn.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);
+ }
+ }
+}