diff options
author | Steve Kondik <steve@cyngn.com> | 2016-04-18 23:50:06 -0700 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-04-19 02:35:00 -0700 |
commit | 06520d1a7702109e2d4c24dd02918d8861d2a2ab (patch) | |
tree | 27a84e061126f272ded7482f0c0de2479383f2b6 /src | |
parent | f9384d7f647b8acdaa242e54369ca40d9ecbc744 (diff) | |
download | android_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
Diffstat (limited to 'src')
-rw-r--r-- | src/com/cyngn/audiofx/backends/AndroidEffects.java | 114 | ||||
-rw-r--r-- | src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java | 14 | ||||
-rw-r--r-- | src/com/cyngn/audiofx/service/SessionManager.java | 6 |
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 |