166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen/* 266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Copyright (C) 2010-2011 The Android Open Source Project 366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Licensed under the Apache License, Version 2.0 (the "License"); 566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * you may not use this file except in compliance with the License. 666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * You may obtain a copy of the License at 766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * http://www.apache.org/licenses/LICENSE-2.0 966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 1066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Unless required by applicable law or agreed to in writing, software 1166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * distributed under the License is distributed on an "AS IS" BASIS, 1266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * See the License for the specific language governing permissions and 1466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * limitations under the License. 1566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 1666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 1766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenpackage com.android.musicfx; 1866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 1966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.content.Context; 2066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.content.SharedPreferences; 2166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.media.MediaPlayer; 2266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.media.audiofx.AudioEffect; 2366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.media.audiofx.BassBoost; 2466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.media.audiofx.Equalizer; 2566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.media.audiofx.PresetReverb; 2666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.media.audiofx.Virtualizer; 2766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.util.Log; 2866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 2966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport java.util.Arrays; 3066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport java.util.concurrent.ConcurrentHashMap; 3166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 3266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen/** 3366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * The Common class defines constants to be used by the control panels. 3466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 3566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenpublic class ControlPanelEffect { 3666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 3766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static String TAG = "MusicFXControlPanelEffect"; 3866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 3966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 4066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Audio session priority 4166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 4266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static final int PRIORITY = 0; 4366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 4466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 4566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * The control mode specifies if control panel updates effects and preferences or only 4666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * preferences. 4766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 4866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen static enum ControlMode { 4966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 5066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Control panel updates effects and preferences. Applicable when audio session is delivered 5166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * by user. 5266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 5366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen CONTROL_EFFECTS, 5466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 5566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Control panel only updates preferences. Applicable when there was no audio or invalid 5666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * session provided by user. 5766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 5866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen CONTROL_PREFERENCES 5966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 6066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 6166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen static enum Key { 62bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen global_enabled, virt_enabled, virt_strength_supported, virt_strength, virt_type, bb_enabled, 63bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen bb_strength, te_enabled, te_strength, avl_enabled, lm_enabled, lm_strength, eq_enabled, 64bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen eq_num_bands, eq_level_range, eq_center_freq, eq_band_level, eq_num_presets, eq_preset_name, 65bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen eq_preset_user_band_level, eq_preset_user_band_level_default, 66bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen eq_preset_opensl_es_band_level, eq_preset_ci_extreme_band_level, eq_current_preset, 67bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen pr_enabled, pr_current_preset 6866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 6966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 7066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Effect/audio session Mappings 7166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 7266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Hashmap initial capacity 7366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 7466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static final int HASHMAP_INITIAL_CAPACITY = 16; 7566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 7666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Hashmap load factor 7766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 7866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static final float HASHMAP_LOAD_FACTOR = 0.75f; 7966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 8066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * ConcurrentHashMap concurrency level 8166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 8266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static final int HASHMAP_CONCURRENCY_LEVEL = 2; 8366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 8466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 8566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Map containing the Virtualizer audio session, effect mappings. 8666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 8766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static final ConcurrentHashMap<Integer, Virtualizer> mVirtualizerInstances = new ConcurrentHashMap<Integer, Virtualizer>( 8866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen HASHMAP_INITIAL_CAPACITY, HASHMAP_LOAD_FACTOR, HASHMAP_CONCURRENCY_LEVEL); 8966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 9066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Map containing the BB audio session, effect mappings. 9166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 9266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static final ConcurrentHashMap<Integer, BassBoost> mBassBoostInstances = new ConcurrentHashMap<Integer, BassBoost>( 9366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen HASHMAP_INITIAL_CAPACITY, HASHMAP_LOAD_FACTOR, HASHMAP_CONCURRENCY_LEVEL); 9466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 9566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Map containing the EQ audio session, effect mappings. 9666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 9766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static final ConcurrentHashMap<Integer, Equalizer> mEQInstances = new ConcurrentHashMap<Integer, Equalizer>( 9866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen HASHMAP_INITIAL_CAPACITY, HASHMAP_LOAD_FACTOR, HASHMAP_CONCURRENCY_LEVEL); 9966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 10066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Map containing the PR audio session, effect mappings. 10166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 10266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static final ConcurrentHashMap<Integer, PresetReverb> mPresetReverbInstances = new ConcurrentHashMap<Integer, PresetReverb>( 10366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen HASHMAP_INITIAL_CAPACITY, HASHMAP_LOAD_FACTOR, HASHMAP_CONCURRENCY_LEVEL); 10466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 10566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 10666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Map containing the package name, audio session mappings. 10766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 10866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static final ConcurrentHashMap<String, Integer> mPackageSessions = new ConcurrentHashMap<String, Integer>( 10966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen HASHMAP_INITIAL_CAPACITY, HASHMAP_LOAD_FACTOR, HASHMAP_CONCURRENCY_LEVEL); 11066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 11166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Defaults 112024018a9804a4fcd3f8c660d32336e96e39bda8eMarco Nelissen final static boolean GLOBAL_ENABLED_DEFAULT = false; 11366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static boolean VIRTUALIZER_ENABLED_DEFAULT = true; 11466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static int VIRTUALIZER_STRENGTH_DEFAULT = 1000; 11566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static boolean BASS_BOOST_ENABLED_DEFAULT = true; 11666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static int BASS_BOOST_STRENGTH_DEFAULT = 667; 11766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static boolean PRESET_REVERB_ENABLED_DEFAULT = false; 11866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static int PRESET_REVERB_CURRENT_PRESET_DEFAULT = 0; // None 11966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 12066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // EQ defaults 12166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static boolean EQUALIZER_ENABLED_DEFAULT = true; 12266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static String EQUALIZER_PRESET_NAME_DEFAULT = "Preset"; 12366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static short EQUALIZER_NUMBER_BANDS_DEFAULT = 5; 12466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static short EQUALIZER_NUMBER_PRESETS_DEFAULT = 0; 12566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static short[] EQUALIZER_BAND_LEVEL_RANGE_DEFAULT = { -1500, 1500 }; 12666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static int[] EQUALIZER_CENTER_FREQ_DEFAULT = { 60000, 230000, 910000, 3600000, 12766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 14000000 }; 12866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static short[] EQUALIZER_PRESET_CIEXTREME_BAND_LEVEL = { 0, 800, 400, 100, 1000 }; 12966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static short[] EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT = { 0, 0, 0, 0, 0 }; 13066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 13166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // EQ effect properties which are invariable over all EQ effects sessions 13266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static short[] mEQBandLevelRange = EQUALIZER_BAND_LEVEL_RANGE_DEFAULT; 13366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static short mEQNumBands = EQUALIZER_NUMBER_BANDS_DEFAULT; 13466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static int[] mEQCenterFreq = EQUALIZER_CENTER_FREQ_DEFAULT; 13566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static short mEQNumPresets = EQUALIZER_NUMBER_PRESETS_DEFAULT; 13602641ebc34f839567fd030455da34ef441e91614Marco Nelissen private static short[][] mEQPresetOpenSLESBandLevel = 13702641ebc34f839567fd030455da34ef441e91614Marco Nelissen new short[EQUALIZER_NUMBER_PRESETS_DEFAULT][EQUALIZER_NUMBER_BANDS_DEFAULT]; 13866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static String[] mEQPresetNames; 13966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static boolean mIsEQInitialized = false; 14066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static Object mEQInitLock = new Object(); 14166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 14266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 14366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Default int argument used in methods to see that the arg is a dummy. Used for method 14466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * overloading. 14566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 14666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static int DUMMY_ARGUMENT = -1; 14766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 14866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 14966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Inits effects preferences for the given context and package name in the control panel. If 15066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * preferences for the given package name don't exist, they are created and initialized. 15166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 15266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 15366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 15466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 15566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 15666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 15766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void initEffectsPreferences(final Context context, final String packageName, 15866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession) { 15966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 16066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 16166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences.Editor editor = prefs.edit(); 16266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final ControlMode controlMode = getControlMode(audioSession); 16366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 16466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // init preferences 16566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 16666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // init global on/off switch 16766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isGlobalEnabled = prefs.getBoolean(Key.global_enabled.toString(), 16866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen GLOBAL_ENABLED_DEFAULT); 16966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.global_enabled.toString(), isGlobalEnabled); 17066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "isGlobalEnabled = " + isGlobalEnabled); 17166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 17266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 17366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isVIEnabled = prefs.getBoolean(Key.virt_enabled.toString(), 17466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen VIRTUALIZER_ENABLED_DEFAULT); 17520e6c9bc3240202b3470852a8793a52a3551004aMarco Nelissen final Virtualizer virt = new Virtualizer(0, audioSession); 17666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int vIStrength = prefs.getInt(Key.virt_strength.toString(), 17720e6c9bc3240202b3470852a8793a52a3551004aMarco Nelissen virt.getRoundedStrength()); 17820e6c9bc3240202b3470852a8793a52a3551004aMarco Nelissen virt.release(); 17966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.virt_enabled.toString(), isVIEnabled); 18066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.virt_strength.toString(), vIStrength); 181bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen { 182bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen final MediaPlayer mediaPlayer = new MediaPlayer(); 183bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen final int session = mediaPlayer.getAudioSessionId(); 184bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen Virtualizer virtualizerEffect = null; 185bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen try { 186bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen virtualizerEffect = new Virtualizer(PRIORITY, session); 187bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen editor.putBoolean(Key.virt_strength_supported.toString(), 188bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen virtualizerEffect.getStrengthSupported()); 189bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen } finally { 190bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen if (virtualizerEffect != null) { 191bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen Log.d(TAG, "Releasing dummy Virtualizer effect"); 192bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen virtualizerEffect.release(); 193bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen } 194bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen mediaPlayer.release(); 195bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen } 196bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen } 19719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen 19866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 19966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isBBEnabled = prefs.getBoolean(Key.bb_enabled.toString(), 20066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_ENABLED_DEFAULT); 20166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int bBStrength = prefs.getInt(Key.bb_strength.toString(), 20266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_STRENGTH_DEFAULT); 20366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.bb_enabled.toString(), isBBEnabled); 20466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.bb_strength.toString(), bBStrength); 20519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen 20666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 20766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen synchronized (mEQInitLock) { 20866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // If EQ is not initialized already create "dummy" audio session created by 20966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // MediaPlayer and create effect on it to retrieve the invariable EQ properties 21066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (!mIsEQInitialized) { 21166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final MediaPlayer mediaPlayer = new MediaPlayer(); 21266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int session = mediaPlayer.getAudioSessionId(); 21366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Equalizer equalizerEffect = null; 21466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 21519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen Log.d(TAG, "Creating dummy EQ effect on session " + session); 21666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect = new Equalizer(PRIORITY, session); 21766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 21866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQBandLevelRange = equalizerEffect.getBandLevelRange(); 21966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumBands = equalizerEffect.getNumberOfBands(); 22066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQCenterFreq = new int[mEQNumBands]; 22166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 22266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQCenterFreq[band] = equalizerEffect.getCenterFreq(band); 22366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 22466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumPresets = equalizerEffect.getNumberOfPresets(); 22566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames = new String[mEQNumPresets]; 22666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetOpenSLESBandLevel = new short[mEQNumPresets][mEQNumBands]; 22766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < mEQNumPresets; preset++) { 22866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames[preset] = equalizerEffect.getPresetName(preset); 22966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.usePreset(preset); 23066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 23166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetOpenSLESBandLevel[preset][band] = equalizerEffect 23266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen .getBandLevel(band); 23366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 23466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 23566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 23666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mIsEQInitialized = true; 23766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalStateException e) { 23866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 23966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalArgumentException e) { 24066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 24166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final UnsupportedOperationException e) { 24266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 24366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 24466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 24566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } finally { 24666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 24719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen Log.d(TAG, "Releasing dummy EQ effect"); 24866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.release(); 24966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 25066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mediaPlayer.release(); 25166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 25266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // When there was a failure set some good defaults 25366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (!mIsEQInitialized) { 25402641ebc34f839567fd030455da34ef441e91614Marco Nelissen Log.e(TAG, "Error retrieving default EQ values, setting all presets" 25502641ebc34f839567fd030455da34ef441e91614Marco Nelissen + " to flat response"); 25666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetOpenSLESBandLevel = new short[mEQNumPresets][mEQNumBands]; 25766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < mEQNumPresets; preset++) { 25866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Init preset names to a dummy name 25966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames[preset] = prefs.getString( 26066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_name.toString() + preset, 26166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_NAME_DEFAULT + preset); 26202641ebc34f839567fd030455da34ef441e91614Marco Nelissen mEQPresetOpenSLESBandLevel[preset] = Arrays.copyOf( 26302641ebc34f839567fd030455da34ef441e91614Marco Nelissen EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT, mEQNumBands); 26466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 26566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 26666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 26766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 26866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_level_range.toString() + 0, mEQBandLevelRange[0]); 26966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_level_range.toString() + 1, mEQBandLevelRange[1]); 27066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_num_bands.toString(), mEQNumBands); 27166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_num_presets.toString(), mEQNumPresets); 27266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Resetting the EQ arrays depending on the real # bands with defaults if 27366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // band < default size else 0 by copying default arrays over new ones 27466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetCIExtremeBandLevel = Arrays.copyOf( 27566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_CIEXTREME_BAND_LEVEL, mEQNumBands); 27666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetUserBandLevelDefault = Arrays.copyOf( 27766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT, mEQNumBands); 27866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // If no preset prefs set use CI EXTREME (= numPresets) 27966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short eQPreset = (short) prefs.getInt(Key.eq_current_preset.toString(), 28066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumPresets); 28166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_current_preset.toString(), eQPreset); 28266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] bandLevel = new short[mEQNumBands]; 28366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 28466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (controlMode == ControlMode.CONTROL_PREFERENCES) { 28566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (eQPreset < mEQNumPresets) { 28666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // OpenSL ES effect presets 28766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel[band] = mEQPresetOpenSLESBandLevel[eQPreset][band]; 28866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else if (eQPreset == mEQNumPresets) { 28966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // CI EXTREME 29066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel[band] = eQPresetCIExtremeBandLevel[band]; 29166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 29266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // User 29366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel[band] = (short) prefs.getInt( 29466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_user_band_level.toString() + band, 29566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 29666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 29766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_band_level.toString() + band, bandLevel[band]); 29866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 29966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_center_freq.toString() + band, mEQCenterFreq[band]); 30066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_ci_extreme_band_level.toString() + band, 30166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetCIExtremeBandLevel[band]); 30266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_user_band_level_default.toString() + band, 30366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 30466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 30566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < mEQNumPresets; preset++) { 30666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putString(Key.eq_preset_name.toString() + preset, mEQPresetNames[preset]); 30766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 30866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_opensl_es_band_level.toString() + preset + "_" 30966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + band, mEQPresetOpenSLESBandLevel[preset][band]); 31066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 31166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 31266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 31366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEQEnabled = prefs.getBoolean(Key.eq_enabled.toString(), 31466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_ENABLED_DEFAULT); 31566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.eq_enabled.toString(), isEQEnabled); 31666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 31766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Preset reverb 31866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEnabledPR = prefs.getBoolean(Key.pr_enabled.toString(), 31966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen PRESET_REVERB_ENABLED_DEFAULT); 32066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short presetPR = (short) prefs.getInt(Key.pr_current_preset.toString(), 32166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen PRESET_REVERB_CURRENT_PRESET_DEFAULT); 32266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.pr_enabled.toString(), isEnabledPR); 32366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.pr_current_preset.toString(), presetPR); 32466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 32566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.commit(); 32666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 32766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "initEffectsPreferences: processingEnabled: " + e); 32866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 32966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 33066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 33166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 33266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets the effect control mode based on the given audio session in the control panel. Control 33366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * mode defines if the control panel is controlling effects and/or preferences 33466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 33566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 33666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 33766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return effect control mode 33866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 33966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static ControlMode getControlMode(final int audioSession) { 34066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (audioSession == AudioEffect.ERROR_BAD_VALUE) { 34166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return ControlMode.CONTROL_PREFERENCES; 34266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 34366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return ControlMode.CONTROL_EFFECTS; 34466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 34566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 34666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 34766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Sets boolean parameter to value for given key 34866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 34966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 35066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 35166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 35266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 35366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 35466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param value 35566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 35666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void setParameterBoolean(final Context context, final String packageName, 35766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final boolean value) { 35866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 35966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 36066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 36166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final ControlMode controlMode = getControlMode(audioSession); 36266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen boolean enabled = value; 36366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 36466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Global on/off 36566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (key == Key.global_enabled) { 36666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen boolean processingEnabled = false; 36766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (value == true) { 36866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // enable all with respect to preferences 36966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (controlMode == ControlMode.CONTROL_EFFECTS) { 37066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); 37166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect != null) { 37266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(prefs.getBoolean( 37366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.virt_enabled.toString(), VIRTUALIZER_ENABLED_DEFAULT)); 37420e6c9bc3240202b3470852a8793a52a3551004aMarco Nelissen int defaultstrength = virtualizerEffect.getRoundedStrength(); 37519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int vIStrength = prefs.getInt(Key.virt_strength.toString(), 37620e6c9bc3240202b3470852a8793a52a3551004aMarco Nelissen defaultstrength); 37719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen setParameterInt(context, packageName, 37819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen audioSession, Key.virt_strength, vIStrength); 37966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 38066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); 38166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect != null) { 38266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(prefs.getBoolean(Key.bb_enabled.toString(), 38366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_ENABLED_DEFAULT)); 38419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int bBStrength = prefs.getInt(Key.bb_strength.toString(), 38519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen BASS_BOOST_STRENGTH_DEFAULT); 38619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen setParameterInt(context, packageName, 38719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen audioSession, Key.bb_strength, bBStrength); 38866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 38966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 39066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 39166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(prefs.getBoolean(Key.eq_enabled.toString(), 39266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_ENABLED_DEFAULT)); 39319aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int[] bandLevels = getParameterIntArray(context, 39419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen packageName, audioSession, Key.eq_band_level); 39519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int len = bandLevels.length; 39619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen for (short band = 0; band < len; band++) { 39719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int level = bandLevels[band]; 39819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen setParameterInt(context, packageName, 39919aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen audioSession, Key.eq_band_level, level, band); 40019aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 40166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 40266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect 40366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // creation to not use MIPS 40466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = 40566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // getPresetReverbEffect(audioSession); 40666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect != null) { 40766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(prefs.getBoolean( 40866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Key.pr_enabled.toString(), PRESET_REVERB_ENABLED_DEFAULT)); 40966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 41066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 41166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 41266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen processingEnabled = true; 41366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "processingEnabled=" + processingEnabled); 41466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 41566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 41666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // disable all 41766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (controlMode == ControlMode.CONTROL_EFFECTS) { 41819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffectNoCreate(audioSession); 41966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect != null) { 42019aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen mVirtualizerInstances.remove(audioSession, virtualizerEffect); 42166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(false); 42219aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen virtualizerEffect.release(); 42366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 42419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final BassBoost bassBoostEffect = getBassBoostEffectNoCreate(audioSession); 42566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect != null) { 42619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen mBassBoostInstances.remove(audioSession, bassBoostEffect); 42766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(false); 42819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen bassBoostEffect.release(); 42966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 43019aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final Equalizer equalizerEffect = getEqualizerEffectNoCreate(audioSession); 43166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 43219aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen mEQInstances.remove(audioSession, equalizerEffect); 43366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(false); 43419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen equalizerEffect.release(); 43566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 43666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect 43766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // creation to not use MIPS 43866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = 43966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // getPresetReverbEffect(audioSession); 44066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect != null) { 44166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(false); 44266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 44366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 44466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 44566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen processingEnabled = false; 44666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "processingEnabled=" + processingEnabled); 44766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 44866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen enabled = processingEnabled; 44966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else if (controlMode == ControlMode.CONTROL_EFFECTS) { 45066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isGlobalEnabled = prefs.getBoolean(Key.global_enabled.toString(), 45166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen GLOBAL_ENABLED_DEFAULT); 45266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isGlobalEnabled == true) { 45366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set effect parameters 45466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen switch (key) { 45566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 45666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case global_enabled: 45766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Global, already handled, to get out error free 45866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 45966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 46066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 46166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case virt_enabled: 46266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); 46366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect != null) { 46466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(value); 46566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen enabled = virtualizerEffect.getEnabled(); 46666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 46766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 46866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 46966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 47066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case bb_enabled: 47166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); 47266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect != null) { 47366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(value); 47466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen enabled = bassBoostEffect.getEnabled(); 47566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 47666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 47766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 47866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 47966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_enabled: 48066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 48166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 48266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(value); 48366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen enabled = equalizerEffect.getEnabled(); 48466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 48566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 48666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 48766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PresetReverb 48866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case pr_enabled: 48966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect 49066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // creation to not use MIPS 49166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = 49266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // getPresetReverbEffect(audioSession); 49366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect != null) { 49466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(value); 49566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // enabled = presetReverbEffect.getEnabled(); 49666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 49766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 49866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 49966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen default: 50066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Unknown/unsupported key " + key); 50166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 50266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 50366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 50466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 50566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 50666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 50766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set preferences 50866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences.Editor editor = prefs.edit(); 50966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(key.toString(), enabled); 51066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.commit(); 51166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 51266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 51366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "setParameterBoolean: " + key + "; " + value + "; " + e); 51466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 51566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 51666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 51766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 51866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets boolean parameter for given key 51966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 52066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 52166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 52266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 52366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 52466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 52566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 52666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 52766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static Boolean getParameterBoolean(final Context context, final String packageName, 52866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key) { 52966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 53066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 53166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen boolean value = false; 53266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 53366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 53466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = prefs.getBoolean(key.toString(), value); 53566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 53666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterBoolean: " + key + "; " + value + "; " + e); 53766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 53866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 53966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return value; 54066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 54166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 54266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 54366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 54466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Sets int parameter for given key and value arg0, arg1 54566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 54666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 54766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 54866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 54966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 55066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 55166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg0 55266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg1 55366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 55466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void setParameterInt(final Context context, final String packageName, 55566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg0, final int arg1) { 55666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen String strKey = key.toString(); 55766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen int value = arg0; 55866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 55966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 56066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 56166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 56266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences.Editor editor = prefs.edit(); 56366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final ControlMode controlMode = getControlMode(audioSession); 56466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 56566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set effect parameters 56666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (controlMode == ControlMode.CONTROL_EFFECTS) { 56766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 56866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen switch (key) { 56966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 57066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 57166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case virt_strength: { 57266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); 57366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect != null) { 57466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setStrength((short) value); 57566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = virtualizerEffect.getRoundedStrength(); 57666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 57766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 57866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 57966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 58066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case bb_strength: { 58166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); 58266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect != null) { 58366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setStrength((short) value); 58466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = bassBoostEffect.getRoundedStrength(); 58566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 58666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 58766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 58866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 58966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_band_level: { 59066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (arg1 == DUMMY_ARGUMENT) { 59166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen throw new IllegalArgumentException("Dummy arg passed."); 59266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 59366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short band = (short) arg1; 59466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen strKey = strKey + band; 59566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 59666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 59766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setBandLevel(band, (short) value); 59866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = equalizerEffect.getBandLevel(band); 59966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // save band level in User preset 60066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_user_band_level.toString() + band, value); 60166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 60266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 60366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 60466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_current_preset: { 60566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 60666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 60766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short preset = (short) value; 60866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numBands = prefs.getInt(Key.eq_num_bands.toString(), 60966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_NUMBER_BANDS_DEFAULT); 61066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numPresets = prefs.getInt(Key.eq_num_presets.toString(), 61166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_NUMBER_PRESETS_DEFAULT); 61266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 61366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (preset < numPresets) { 61466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // OpenSL ES EQ Effect presets 61566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.usePreset(preset); 61666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = equalizerEffect.getCurrentPreset(); 61766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 61866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetCIExtremeBandLevelDefault = Arrays.copyOf( 61966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_CIEXTREME_BAND_LEVEL, numBands); 62066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetUserBandLevelDefault = Arrays.copyOf( 62166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT, numBands); 62266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set the band levels manually for custom presets 62366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < numBands; band++) { 62466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen short bandLevel = 0; 62566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (preset == numPresets) { 62666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // CI EXTREME 62766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 62866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_ci_extreme_band_level.toString() + band, 62966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetCIExtremeBandLevelDefault[band]); 63066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 63166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // User 63266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 63366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_user_band_level.toString() + band, 63466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 63566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 63666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setBandLevel(band, bandLevel); 63766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 63866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 63966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 64066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // update band levels 64166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < numBands; band++) { 64266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short level = equalizerEffect.getBandLevel(band); 64366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_band_level.toString() + band, level); 64466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 64566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 64666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 64766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 64866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level: 64966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 65066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level_default: 65166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 65266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_ci_extreme_band_level: { 65366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (arg1 == DUMMY_ARGUMENT) { 65466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen throw new IllegalArgumentException("Dummy arg passed."); 65566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 65666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short band = (short) arg1; 65766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen strKey = strKey + band; 65866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 65966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 66066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case pr_current_preset: 66166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect 66266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // creation to not use MIPS 66366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = getPresetReverbEffect(audioSession); 66466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect != null) { 66566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setPreset((short) value); 66666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // value = presetReverbEffect.getPreset(); 66766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 66866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 66966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen default: 67066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "setParameterInt: Unknown/unsupported key " + key); 67166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 67266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 67366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 67466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen switch (key) { 67566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 67666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case virt_strength: 67766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Do nothing 67866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 67966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case virt_type: 68066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Do nothing 68166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 68266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 68366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 68466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case bb_strength: 68566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Do nothing 68666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 68766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 68866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 68966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_band_level: { 69066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (arg1 == DUMMY_ARGUMENT) { 69166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen throw new IllegalArgumentException("Dummy arg passed."); 69266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 69366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short band = (short) arg1; 69466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen strKey = strKey + band; 69566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 69666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_user_band_level.toString() + band, value); 69766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 69866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 69966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_current_preset: { 70066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short preset = (short) value; 70166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numBands = prefs.getInt(Key.eq_num_bands.toString(), 70266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_NUMBER_BANDS_DEFAULT); 70366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numPresets = prefs.getInt(Key.eq_num_presets.toString(), 70466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_NUMBER_PRESETS_DEFAULT); 70566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 70666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[][] eQPresetOpenSLESBandLevelDefault = Arrays.copyOf( 70702641ebc34f839567fd030455da34ef441e91614Marco Nelissen mEQPresetOpenSLESBandLevel, numPresets); 70866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetCIExtremeBandLevelDefault = Arrays.copyOf( 70966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_CIEXTREME_BAND_LEVEL, numBands); 71066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetUserBandLevelDefault = Arrays.copyOf( 71166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT, numBands); 71266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < numBands; band++) { 71366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen short bandLevel = 0; 71466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (preset < numPresets) { 71566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // OpenSL ES EQ Effect presets 71666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 71766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_opensl_es_band_level.toString() + preset + "_" 71866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + band, eQPresetOpenSLESBandLevelDefault[preset][band]); 71966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else if (preset == numPresets) { 72066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // CI EXTREME 72166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 72266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_ci_extreme_band_level.toString() + band, 72366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetCIExtremeBandLevelDefault[band]); 72466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 72566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // User 72666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 72766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_user_band_level.toString() + band, 72866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 72966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 73066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_band_level.toString() + band, bandLevel); 73166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 73266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 73366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 73466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level: 73566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 73666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level_default: 73766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 73866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_ci_extreme_band_level: { 73966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (arg1 == DUMMY_ARGUMENT) { 74066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen throw new IllegalArgumentException("Dummy arg passed."); 74166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 74266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short band = (short) arg1; 74366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen strKey = strKey + band; 74466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 74566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 74666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case pr_current_preset: 74766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Do nothing 74866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 74966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen default: 75066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "setParameterInt: Unknown/unsupported key " + key); 75166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 75266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 75366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 75466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 75566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set preferences 75666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(strKey, value); 757b6436a644aa2e78dac41e4971b60d0b8ad95884eMarco Nelissen editor.apply(); 75866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 75966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 76066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "setParameterInt: " + key + "; " + arg0 + "; " + arg1 + "; " + e); 76166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 76266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 76366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 76466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 76566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 76666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Sets int parameter for given key and value arg 76766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 76866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 76966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 77066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 77166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 77266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 77366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg 77466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 77566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void setParameterInt(final Context context, final String packageName, 77666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg) { 77766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen setParameterInt(context, packageName, audioSession, key, arg, DUMMY_ARGUMENT); 77866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 77966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 78066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 78166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets int parameter given key 78266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 78366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 78466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 78566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 78666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 78766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 78866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 78966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 79066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int getParameterInt(final Context context, final String packageName, 79166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final String key) { 79266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen int value = 0; 79366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 79466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 79566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 79666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 79766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = prefs.getInt(key, value); 79866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 79966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterInt: " + key + "; " + e); 80066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 80166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 80266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return value; 80366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 80466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 80566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 80666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets int parameter given key 80766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 80866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 80966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 81066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 81166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 81266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 81366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 81466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 81566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int getParameterInt(final Context context, final String packageName, 81666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key) { 81766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterInt(context, packageName, audioSession, key.toString()); 81866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 81966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 82066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 82166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets int parameter given key and arg 82266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 82366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 82466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 82566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 82666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 82766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 82866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 82966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg 83066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 83166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 83266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int getParameterInt(final Context context, final String packageName, 83366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg) { 83466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterInt(context, packageName, audioSession, key.toString() + arg); 83566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 83666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 83766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 83866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets int parameter given key, arg0 and arg1 83966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 84066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 84166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 84266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 84366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 84466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 84566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 84666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg0 84766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg1 84866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 84966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 85066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int getParameterInt(final Context context, final String packageName, 85166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg0, final int arg1) { 85266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterInt(context, packageName, audioSession, key.toString() + arg0 + "_" 85366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + arg1); 85466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 85566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 85666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 85766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets integer array parameter given key. Returns null if not found. 85866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 85966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 86066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 86166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 86266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 86366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 86466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value array 86566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 86666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int[] getParameterIntArray(final Context context, final String packageName, 86766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key) { 86866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 86966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 87066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 87166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen int[] intArray = null; 87266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 87366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Get effect parameters 87466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen switch (key) { 87566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_level_range: { 87666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen intArray = new int[2]; 87766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 87866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 87966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_center_freq: 88066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 88166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_band_level: 88266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 88366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level: 88466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 88566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level_default: 88666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 88766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_ci_extreme_band_level: { 88866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numBands = prefs.getInt(Key.eq_num_bands.toString(), 0); 88966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen intArray = new int[numBands]; 89066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 89166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 89266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen default: 89366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterIntArray: Unknown/unsupported key " + key); 89466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return null; 89566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 89666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 89766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (int i = 0; i < intArray.length; i++) { 89866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen intArray[i] = prefs.getInt(key.toString() + i, 0); 89966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 90066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 90166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 90266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterIntArray: " + key + "; " + e); 90366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 90466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 90566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return intArray; 90666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 90766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 90866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 90966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets string parameter given key. Returns empty string if not found. 91066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 91166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 91266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 91366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 91466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 91566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 91666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 91766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 91866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static String getParameterString(final Context context, final String packageName, 91966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final String key) { 92066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen String value = ""; 92166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 92266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 92366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 92466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 92566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Get effect parameters 92666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = prefs.getString(key, value); 92766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 92866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 92966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterString: " + key + "; " + e); 93066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 93166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 93266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return value; 93366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 93466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 93566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 93666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets string parameter given key. 93766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 93866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 93966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 94066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 94166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 94266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 94366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 94466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 94566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static String getParameterString(final Context context, final String packageName, 94666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key) { 94766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterString(context, packageName, audioSession, key.toString()); 94866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 94966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 95066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 95166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets string parameter given key and arg. 95266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 95366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 95466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 95566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 95666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 95766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param args 95866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 95966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 96066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static String getParameterString(final Context context, final String packageName, 96166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg) { 96266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterString(context, packageName, audioSession, key.toString() + arg); 96366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 96466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 96566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 96666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Opens/initializes the effects session for the given audio session with preferences linked to 96766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * the given package name and context. 96866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 96966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 97066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 97166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 97266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 97366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 97466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void openSession(final Context context, final String packageName, 97566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession) { 97666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "openSession(" + context + ", " + packageName + ", " + audioSession + ")"); 97766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String methodTag = "openSession: "; 97866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 97966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // init preferences 98066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 98166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 98266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences.Editor editor = prefs.edit(); 98366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 98466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isGlobalEnabled = prefs.getBoolean(Key.global_enabled.toString(), 98566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen GLOBAL_ENABLED_DEFAULT); 98666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.global_enabled.toString(), isGlobalEnabled); 98766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 98819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen if (!isGlobalEnabled) { 98919aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen return; 99019aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 99119aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen 99266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Manage audioSession information 99366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 99466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Retrieve AudioSession Id from map 99566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen boolean isExistingAudioSession = false; 99666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 99766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 99866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Integer currentAudioSession = mPackageSessions.putIfAbsent(packageName, 99966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen audioSession); 100066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (currentAudioSession != null) { 100166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Compare with passed argument 100266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (currentAudioSession == audioSession) { 100366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // FIXME: Normally, we should exit the function here 100466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BUT: we have to take care of the virtualizer because of 100566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // a bug in the Android Effects Framework 100666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // editor.commit(); 100766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // return; 100866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen isExistingAudioSession = true; 100966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 101066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen closeSession(context, packageName, currentAudioSession); 101166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 101266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 101366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final NullPointerException e) { 101466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, methodTag + e); 101566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.commit(); 101666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 101766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 101866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 101966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Because the audioSession is new, get effects & settings from shared preferences 102066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 102166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 102266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // create effect 102366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); 102466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen { 102566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String errorTag = methodTag + "Virtualizer error: "; 102666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 102766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 102866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // read parameters 102966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEnabled = prefs.getBoolean(Key.virt_enabled.toString(), 103066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen VIRTUALIZER_ENABLED_DEFAULT); 103120e6c9bc3240202b3470852a8793a52a3551004aMarco Nelissen int defaultstrength = isExistingAudioSession ? VIRTUALIZER_STRENGTH_DEFAULT : 103220e6c9bc3240202b3470852a8793a52a3551004aMarco Nelissen virtualizerEffect.getRoundedStrength(); 103320e6c9bc3240202b3470852a8793a52a3551004aMarco Nelissen final int strength = prefs.getInt(Key.virt_strength.toString(), defaultstrength); 103466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // init settings 103566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Virtualizer.Settings settings = new Virtualizer.Settings("Virtualizer;strength=" 103666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + strength); 103766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 103866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setProperties(settings); 103966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 104066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // set parameters 104166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isGlobalEnabled == true) { 104266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(isEnabled); 104366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 104466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(false); 104566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 104666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 104766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // get parameters 104866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen settings = virtualizerEffect.getProperties(); 104966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "Parameters: " + settings.toString() + ";enabled=" + isEnabled); 105066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 105166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // update preferences 105266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.virt_enabled.toString(), isEnabled); 105366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.virt_strength.toString(), settings.strength); 105466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 105566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, errorTag + e); 105666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 105766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 105866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 105966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // In case of an existing audio session 106066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Exit after the virtualizer has been re-enabled 106166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 106266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isExistingAudioSession) { 1063fed4c7bc8b62de6e686d6d3a067c1f10b0a3441ab editor.apply(); 106466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 106566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 106666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 106766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 106866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // create effect 106966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); 107066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen { 107166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String errorTag = methodTag + "BassBoost error: "; 107266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 107366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 107466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // read parameters 107566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEnabled = prefs.getBoolean(Key.bb_enabled.toString(), 107666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_ENABLED_DEFAULT); 107766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int strength = prefs.getInt(Key.bb_strength.toString(), 107866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_STRENGTH_DEFAULT); 107966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 108066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // init settings 108166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BassBoost.Settings settings = new BassBoost.Settings("BassBoost;strength=" 108266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + strength); 108366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 108466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setProperties(settings); 108566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 108666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // set parameters 108766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isGlobalEnabled == true) { 108866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(isEnabled); 108966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 109066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(false); 109166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 109266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 109366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // get parameters 109466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen settings = bassBoostEffect.getProperties(); 109566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "Parameters: " + settings.toString() + ";enabled=" + isEnabled); 109666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 109766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // update preferences 109866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.bb_enabled.toString(), isEnabled); 109966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.bb_strength.toString(), settings.strength); 110066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 110166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, errorTag + e); 110266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 110366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 110466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 110566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 110666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // create effect 110766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 110866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen { 110966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String errorTag = methodTag + "Equalizer error: "; 111066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 111166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 111266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short eQNumBands; 111366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] bandLevel; 111466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int[] eQCenterFreq; 111566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short eQNumPresets; 111666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String[] eQPresetNames; 111766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen short eQPreset; 111866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen synchronized (mEQInitLock) { 111966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // read parameters 112066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQBandLevelRange = equalizerEffect.getBandLevelRange(); 112166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumBands = equalizerEffect.getNumberOfBands(); 112266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQCenterFreq = new int[mEQNumBands]; 112366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumPresets = equalizerEffect.getNumberOfPresets(); 112466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames = new String[mEQNumPresets]; 112566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 112666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < mEQNumPresets; preset++) { 112766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames[preset] = equalizerEffect.getPresetName(preset); 112866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putString(Key.eq_preset_name.toString() + preset, 112966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames[preset]); 113066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 113166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 113266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_level_range.toString() + 0, mEQBandLevelRange[0]); 113366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_level_range.toString() + 1, mEQBandLevelRange[1]); 113466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_num_bands.toString(), mEQNumBands); 113566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_num_presets.toString(), mEQNumPresets); 113666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Resetting the EQ arrays depending on the real # bands with defaults if band < 113766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // default size else 0 by copying default arrays over new ones 113866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetCIExtremeBandLevel = Arrays.copyOf( 113966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_CIEXTREME_BAND_LEVEL, mEQNumBands); 114066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetUserBandLevelDefault = Arrays.copyOf( 114166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT, mEQNumBands); 114266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // If no preset prefs set use CI EXTREME (= numPresets) 114366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPreset = (short) prefs 114466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen .getInt(Key.eq_current_preset.toString(), mEQNumPresets); 114566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (eQPreset < mEQNumPresets) { 114666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // OpenSL ES effect presets 114766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.usePreset(eQPreset); 114866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPreset = equalizerEffect.getCurrentPreset(); 114966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 115066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 115166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen short level = 0; 115266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (eQPreset == mEQNumPresets) { 115366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // CI EXTREME 115466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen level = eQPresetCIExtremeBandLevel[band]; 115566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 115666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // User 115766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen level = (short) prefs.getInt( 115866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_user_band_level.toString() + band, 115966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 116066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 116166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setBandLevel(band, level); 116266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 116366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 116466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_current_preset.toString(), eQPreset); 116566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 116666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = new short[mEQNumBands]; 116766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 116866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQCenterFreq[band] = equalizerEffect.getCenterFreq(band); 116966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel[band] = equalizerEffect.getBandLevel(band); 117066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 117166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_band_level.toString() + band, bandLevel[band]); 117266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_center_freq.toString() + band, mEQCenterFreq[band]); 117366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_ci_extreme_band_level.toString() + band, 117466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetCIExtremeBandLevel[band]); 117566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_user_band_level_default.toString() + band, 117666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 117766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 117866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 117966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQNumBands = mEQNumBands; 118066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQCenterFreq = mEQCenterFreq; 118166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQNumPresets = mEQNumPresets; 118266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetNames = mEQPresetNames; 118366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 118466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 118566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEnabled = prefs.getBoolean(Key.eq_enabled.toString(), 118666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_ENABLED_DEFAULT); 118766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.eq_enabled.toString(), isEnabled); 118866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isGlobalEnabled == true) { 118966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(isEnabled); 119066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 119166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(false); 119266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 119366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 119466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // dump 119566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "Parameters: Equalizer"); 119666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "bands=" + eQNumBands); 119766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen String str = "levels="; 119866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < eQNumBands; band++) { 119966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = str + bandLevel[band] + "; "; 120066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 120166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, str); 120266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = "center="; 120366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < eQNumBands; band++) { 120466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = str + eQCenterFreq[band] + "; "; 120566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 120666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, str); 120766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = "presets="; 120866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < eQNumPresets; preset++) { 120966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = str + eQPresetNames[preset] + "; "; 121066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 121166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, str); 121266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "current=" + eQPreset); 121366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 121466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, errorTag + e); 121566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 121666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 121766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 121866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect creation to not 121966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // use MIPS left in the code for (future) reference. 122066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Preset reverb 122166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // create effect 122266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = getPresetReverbEffect(audioSession); 122366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // { 122466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final String errorTag = methodTag + "PresetReverb error: "; 122566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 122666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // try { 122766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // read parameters 122866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final boolean isEnabled = prefs.getBoolean(Key.pr_enabled.toString(), 122966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PRESET_REVERB_ENABLED_DEFAULT); 123066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final short preset = (short) prefs.getInt(Key.pr_current_preset.toString(), 123166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PRESET_REVERB_CURRENT_PRESET_DEFAULT); 123266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 123366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // init settings 123466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PresetReverb.Settings settings = new PresetReverb.Settings("PresetReverb;preset=" 123566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // + preset); 123666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 123766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // read/update preferences 123866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setProperties(settings); 123966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 124066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // set parameters 124166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (isGlobalEnabled == true) { 124266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(isEnabled); 124366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } else { 124466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(false); 124566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 124666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 124766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // get parameters 124866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // settings = presetReverbEffect.getProperties(); 124966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.v(TAG, "Parameters: " + settings.toString() + ";enabled=" + isEnabled); 125066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 125166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // update preferences 125266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // editor.putBoolean(Key.pr_enabled.toString(), isEnabled); 125366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // editor.putInt(Key.pr_current_preset.toString(), settings.preset); 125466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } catch (final RuntimeException e) { 125566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.e(TAG, errorTag + e); 125666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 125766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 125866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.commit(); 125966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 126066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 126166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 126266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Closes the audio session (release effects) for the given session 126366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 126466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 126566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 126666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 126766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 126866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 126966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void closeSession(final Context context, final String packageName, 127066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession) { 127166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "closeSession(" + context + ", " + packageName + ", " + audioSession + ")"); 127266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 127366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PresetReverb 127466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final PresetReverb presetReverb = mPresetReverbInstances.remove(audioSession); 127566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (presetReverb != null) { 127666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen presetReverb.release(); 127766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 127866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 127966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizer = mEQInstances.remove(audioSession); 128066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizer != null) { 128166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizer.release(); 128266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 128366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 128466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoost = mBassBoostInstances.remove(audioSession); 128566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoost != null) { 128666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoost.release(); 128766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 128866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 128966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizer = mVirtualizerInstances.remove(audioSession); 129066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizer != null) { 129166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizer.release(); 129266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 129366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 129466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mPackageSessions.remove(packageName); 129566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 129666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 129766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 129866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Enables or disables all effects (global enable/disable) for a given context, package name and 129966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * audio session. It sets/inits the control mode and preferences and then sets the global 130066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * enabled parameter. 130166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 130266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 130366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 130466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 130566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 130666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param enabled 130766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 130866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void setEnabledAll(final Context context, final String packageName, 130966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final boolean enabled) { 131066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen initEffectsPreferences(context, packageName, audioSession); 131166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen setParameterBoolean(context, packageName, audioSession, Key.global_enabled, enabled); 131266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 131366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 131466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 131566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets the virtualizer effect for the given audio session. If the effect on the session doesn't 131666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * exist yet, create it and add to collection. 131766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 131866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 131966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 132066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return virtualizerEffect 132166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 132219aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen private static Virtualizer getVirtualizerEffectNoCreate(final int audioSession) { 132319aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen return mVirtualizerInstances.get(audioSession); 132419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 132566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static Virtualizer getVirtualizerEffect(final int audioSession) { 132619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen Virtualizer virtualizerEffect = getVirtualizerEffectNoCreate(audioSession); 132766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect == null) { 132866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 132966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer newVirtualizerEffect = new Virtualizer(PRIORITY, audioSession); 133066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect = mVirtualizerInstances.putIfAbsent(audioSession, 133166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen newVirtualizerEffect); 133266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect == null) { 133366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // put succeeded, use new value 133466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect = newVirtualizerEffect; 133566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 133666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalArgumentException e) { 133766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Virtualizer: " + e); 133866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final UnsupportedOperationException e) { 133966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Virtualizer: " + e); 134066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 134166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Virtualizer: " + e); 134266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 134366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 134466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return virtualizerEffect; 134566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 134666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 134766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 134866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets the bass boost effect for the given audio session. If the effect on the session doesn't 134966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * exist yet, create it and add to collection. 135066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 135166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 135266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 135366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return bassBoostEffect 135466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 135519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen private static BassBoost getBassBoostEffectNoCreate(final int audioSession) { 135619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen return mBassBoostInstances.get(audioSession); 135719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 135866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static BassBoost getBassBoostEffect(final int audioSession) { 135919aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen 136019aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen BassBoost bassBoostEffect = getBassBoostEffectNoCreate(audioSession); 136166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect == null) { 136266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 136366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost newBassBoostEffect = new BassBoost(PRIORITY, audioSession); 136466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect = mBassBoostInstances.putIfAbsent(audioSession, newBassBoostEffect); 136566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect == null) { 136666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // put succeeded, use new value 136766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect = newBassBoostEffect; 136866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 136966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalArgumentException e) { 137066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "BassBoost: " + e); 137166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final UnsupportedOperationException e) { 137266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "BassBoost: " + e); 137366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 137466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "BassBoost: " + e); 137566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 137666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 137766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return bassBoostEffect; 137866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 137966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 138066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 138166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets the equalizer effect for the given audio session. If the effect on the session doesn't 138266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * exist yet, create it and add to collection. 138366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 138466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 138566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 138666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return equalizerEffect 138766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 138819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen private static Equalizer getEqualizerEffectNoCreate(final int audioSession) { 138919aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen return mEQInstances.get(audioSession); 139019aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 139166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static Equalizer getEqualizerEffect(final int audioSession) { 139219aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen Equalizer equalizerEffect = getEqualizerEffectNoCreate(audioSession); 139366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect == null) { 139466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 139566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer newEqualizerEffect = new Equalizer(PRIORITY, audioSession); 139666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect = mEQInstances.putIfAbsent(audioSession, newEqualizerEffect); 139766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect == null) { 139866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // put succeeded, use new value 139966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect = newEqualizerEffect; 140066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 140166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalArgumentException e) { 140266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 140366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final UnsupportedOperationException e) { 140466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 140566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 140666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 140766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 140866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 140966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return equalizerEffect; 141066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 141166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 141266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect creation to not 141366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // use MIPS 141466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // /** 141566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * Gets the preset reverb effect for the given audio session. If the effect on the session 141666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * doesn't exist yet, create it and add to collection. 141766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * 141866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * @param audioSession 141966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * System wide unique audio session identifier. 142066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * @return presetReverbEffect 142166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // */ 142266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // private static PresetReverb getPresetReverbEffect(final int audioSession) { 142366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PresetReverb presetReverbEffect = mPresetReverbInstances.get(audioSession); 142466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect == null) { 142566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // try { 142666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb newPresetReverbEffect = new PresetReverb(PRIORITY, audioSession); 142766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect = mPresetReverbInstances.putIfAbsent(audioSession, 142866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // newPresetReverbEffect); 142966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect == null) { 143066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // put succeeded, use new value 143166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect = newPresetReverbEffect; 143266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 143366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } catch (final IllegalArgumentException e) { 143466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.e(TAG, "PresetReverb: " + e); 143566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } catch (final UnsupportedOperationException e) { 143666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.e(TAG, "PresetReverb: " + e); 143766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } catch (final RuntimeException e) { 143866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.e(TAG, "PresetReverb: " + e); 143966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 144066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 144166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // return presetReverbEffect; 144266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 144366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen} 1444