summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2016-04-18 23:50:06 -0700
committerSteve Kondik <steve@cyngn.com>2016-04-19 02:35:00 -0700
commit06520d1a7702109e2d4c24dd02918d8861d2a2ab (patch)
tree27a84e061126f272ded7482f0c0de2479383f2b6
parentf9384d7f647b8acdaa242e54369ca40d9ecbc744 (diff)
downloadandroid_packages_apps_AudioFX-06520d1a7702109e2d4c24dd02918d8861d2a2ab.tar.gz
android_packages_apps_AudioFX-06520d1a7702109e2d4c24dd02918d8861d2a2ab.tar.bz2
android_packages_apps_AudioFX-06520d1a7702109e2d4c24dd02918d8861d2a2ab.zip
modiofx: Fix various issues with Android FX
* Add device selection and internal effect tracking * Stop calling setGlobalEnabled unconditionally Change-Id: I617a03b12275c16b0efef6d215b5b7499cd98524
-rw-r--r--src/com/cyngn/audiofx/backends/AndroidEffects.java114
-rw-r--r--src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java14
-rw-r--r--src/com/cyngn/audiofx/service/SessionManager.java6
3 files changed, 100 insertions, 34 deletions
diff --git a/src/com/cyngn/audiofx/backends/AndroidEffects.java b/src/com/cyngn/audiofx/backends/AndroidEffects.java
index 470a49b..4a89b32 100644
--- a/src/com/cyngn/audiofx/backends/AndroidEffects.java
+++ b/src/com/cyngn/audiofx/backends/AndroidEffects.java
@@ -7,6 +7,9 @@ import android.media.audiofx.PresetReverb;
import android.media.audiofx.Virtualizer;
import android.util.Log;
+import com.cyngn.audiofx.Constants;
+import com.cyngn.audiofx.activity.MasterConfigControl;
+
/**
* EffectSet which comprises standard Android effects
*/
@@ -35,8 +38,11 @@ class AndroidEffects extends EffectSetWithAndroidEq {
protected void onCreate() {
super.onCreate();
- mBassBoost = new BassBoost(100, mSessionId);
- mVirtualizer = new Virtualizer(100, mSessionId);
+ final String dev = MasterConfigControl.getDeviceIdentifierString(getDevice());
+ if (!Constants.DEVICE_SPEAKER.equals(dev)) {
+ mBassBoost = new BassBoost(100, mSessionId);
+ mVirtualizer = new Virtualizer(100, mSessionId);
+ }
mPresetReverb = new PresetReverb(100, mSessionId);
}
@@ -46,17 +52,23 @@ class AndroidEffects extends EffectSetWithAndroidEq {
super.release();
try {
- mBassBoost.release();
+ if (mBassBoost != null) {
+ mBassBoost.release();
+ }
} catch (Exception e) {
// ignored;
}
try {
- mVirtualizer.release();
+ if (mVirtualizer != null) {
+ mVirtualizer.release();
+ }
} catch (Exception e) {
// ignored
}
try {
- mPresetReverb.release();
+ if (mPresetReverb != null) {
+ mPresetReverb.release();
+ }
} catch (Exception e) {
// ignored
}
@@ -66,45 +78,93 @@ class AndroidEffects extends EffectSetWithAndroidEq {
}
@Override
+ public synchronized void setDevice(AudioDeviceInfo deviceInfo) {
+ super.setDevice(deviceInfo);
+
+ // set up and tear down effects which aren't supported on the speaker
+ final String dev = MasterConfigControl.getDeviceIdentifierString(deviceInfo);
+ if (Constants.DEVICE_SPEAKER.equals(dev)) {
+ try {
+ if (mBassBoost != null) {
+ mBassBoost.release();
+ }
+ } catch (Exception e) {
+ // skip it
+ }
+ try {
+ if (mVirtualizer != null) {
+ mVirtualizer.release();
+ }
+ } catch (Exception e) {
+ // skip it
+ }
+ mBassBoost = null;
+ mVirtualizer = null;
+ } else {
+ try {
+ if (mBassBoost == null) {
+ mBassBoost = new BassBoost(100, mSessionId);
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "Error creating BassBoost!", e);
+ }
+ try {
+ if (mVirtualizer == null) {
+ mVirtualizer = new Virtualizer(100, mSessionId);
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "Error creating Virtualizer!", e);
+ }
+ }
+ }
+
+ @Override
public void setGlobalEnabled(boolean globalEnabled) {
- if (globalEnabled != isGlobalEnabled()) {
- if (!globalEnabled) {
- // disable everything. it will get explictly enabled
- // individually when necessary.
- try {
+ 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 {
+ } 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 {
+ } 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);
}
+ } catch (Exception e) {
+ Log.e(TAG, "Unable to disable reverb!", e);
}
}
- super.setGlobalEnabled(globalEnabled);
}
@Override
public boolean hasVirtualizer() {
- return mVirtualizer.getStrengthSupported();
+ return mVirtualizer != null && mVirtualizer.getStrengthSupported();
}
@Override
public boolean hasBassBoost() {
- return mBassBoost.getStrengthSupported();
+ return mBassBoost != null && mBassBoost.getStrengthSupported();
}
@Override
public void enableBassBoost(boolean enable) {
try {
- mBassBoost.setEnabled(enable);
+ if (mBassBoost != null) {
+ mBassBoost.setEnabled(enable);
+ }
} catch (Exception e) {
Log.e(TAG, "Unable to " + (enable ? "enable" : "disable") + " bass boost!", e);
}
@@ -118,7 +178,9 @@ class AndroidEffects extends EffectSetWithAndroidEq {
@Override
public void enableVirtualizer(boolean enable) {
try {
- mVirtualizer.setEnabled(enable);
+ if (mVirtualizer != null) {
+ mVirtualizer.setEnabled(enable);
+ }
} catch (Exception e) {
Log.e(TAG, "Unable to " + (enable ? "enable" : "disable") + " virtualizer!", e);
}
@@ -132,7 +194,9 @@ class AndroidEffects extends EffectSetWithAndroidEq {
@Override
public void enableReverb(boolean enable) {
try {
- mPresetReverb.setEnabled(enable);
+ if (mPresetReverb != null) {
+ mPresetReverb.setEnabled(enable);
+ }
} catch (Exception e) {
Log.e(TAG, "Unable to " + (enable ? "enable" : "disable") + " preset reverb!", e);
}
@@ -150,7 +214,7 @@ class AndroidEffects extends EffectSetWithAndroidEq {
}
private void setParameterSafe(AudioEffect e, int p, short v) {
- if (!e.hasControl()) {
+ if (e == null) {
return;
}
try {
diff --git a/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java b/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java
index fa9a58b..81cd53c 100644
--- a/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java
+++ b/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java
@@ -40,14 +40,9 @@ public abstract class EffectSetWithAndroidEq extends EffectSet {
@Override
public void setGlobalEnabled(boolean globalEnabled) {
- if (isGlobalEnabled() != globalEnabled) {
- // disable it if needed. it will be explicitly enabled
- // in a subsequent call if necessary.
- if (!globalEnabled) {
- mEqualizer.setEnabled(false);
- }
- }
super.setGlobalEnabled(globalEnabled);
+
+ enableEqualizer(globalEnabled);
}
@Override
@@ -113,6 +108,11 @@ public abstract class EffectSetWithAndroidEq extends EffectSet {
return mEqualizer.getCenterFreq(band);
}
+ @Override
+ public synchronized void setDevice(AudioDeviceInfo deviceInfo) {
+ super.setDevice(deviceInfo);
+ }
+
private synchronized void setBandLevelSafe(short band, short level) {
try {
mEqualizer.setBandLevel(band, level);
diff --git a/src/com/cyngn/audiofx/service/SessionManager.java b/src/com/cyngn/audiofx/service/SessionManager.java
index ac1e0b8..d51bb5a 100644
--- a/src/com/cyngn/audiofx/service/SessionManager.java
+++ b/src/com/cyngn/audiofx/service/SessionManager.java
@@ -184,8 +184,10 @@ class SessionManager extends AudioOutputChangeListener implements AudioSystem.Ef
final boolean globalEnabled = prefs.getBoolean(DEVICE_AUDIOFX_GLOBAL_ENABLE,
DEVICE_DEFAULT_GLOBAL_ENABLE);
- // global bypass toggle
- session.setGlobalEnabled(globalEnabled);
+ if ((flags & ALL_CHANGED) > 0) {
+ // global bypass toggle
+ session.setGlobalEnabled(globalEnabled);
+ }
if (globalEnabled) {
// tell the backend it's time to party