ControlPanelEffect.java revision bc778ede573dc74646d42dfe96997f74b23ac61d
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 private final static short[][] EQUALIZER_PRESET_OPENSL_ES_BAND_LEVEL_DEFAULT = new short[EQUALIZER_NUMBER_PRESETS_DEFAULT][EQUALIZER_NUMBER_BANDS_DEFAULT]; 13166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 13266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // EQ effect properties which are invariable over all EQ effects sessions 13366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static short[] mEQBandLevelRange = EQUALIZER_BAND_LEVEL_RANGE_DEFAULT; 13466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static short mEQNumBands = EQUALIZER_NUMBER_BANDS_DEFAULT; 13566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static int[] mEQCenterFreq = EQUALIZER_CENTER_FREQ_DEFAULT; 13666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static short mEQNumPresets = EQUALIZER_NUMBER_PRESETS_DEFAULT; 13766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static short[][] mEQPresetOpenSLESBandLevel = EQUALIZER_PRESET_OPENSL_ES_BAND_LEVEL_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); 17566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int vIStrength = prefs.getInt(Key.virt_strength.toString(), 17666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen VIRTUALIZER_STRENGTH_DEFAULT); 17766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.virt_enabled.toString(), isVIEnabled); 17866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.virt_strength.toString(), vIStrength); 179bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen { 180bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen final MediaPlayer mediaPlayer = new MediaPlayer(); 181bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen final int session = mediaPlayer.getAudioSessionId(); 182bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen Virtualizer virtualizerEffect = null; 183bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen try { 184bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen virtualizerEffect = new Virtualizer(PRIORITY, session); 185bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen editor.putBoolean(Key.virt_strength_supported.toString(), 186bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen virtualizerEffect.getStrengthSupported()); 187bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen } finally { 188bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen if (virtualizerEffect != null) { 189bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen Log.d(TAG, "Releasing dummy Virtualizer effect"); 190bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen virtualizerEffect.release(); 191bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen } 192bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen mediaPlayer.release(); 193bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen } 194bc778ede573dc74646d42dfe96997f74b23ac61dMarco Nelissen } 19519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen 19666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 19766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isBBEnabled = prefs.getBoolean(Key.bb_enabled.toString(), 19866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_ENABLED_DEFAULT); 19966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int bBStrength = prefs.getInt(Key.bb_strength.toString(), 20066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_STRENGTH_DEFAULT); 20166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.bb_enabled.toString(), isBBEnabled); 20266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.bb_strength.toString(), bBStrength); 20319aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen 20466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 20566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen synchronized (mEQInitLock) { 20666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // If EQ is not initialized already create "dummy" audio session created by 20766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // MediaPlayer and create effect on it to retrieve the invariable EQ properties 20866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (!mIsEQInitialized) { 20966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final MediaPlayer mediaPlayer = new MediaPlayer(); 21066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int session = mediaPlayer.getAudioSessionId(); 21166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Equalizer equalizerEffect = null; 21266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 21319aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen Log.d(TAG, "Creating dummy EQ effect on session " + session); 21466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect = new Equalizer(PRIORITY, session); 21566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 21666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQBandLevelRange = equalizerEffect.getBandLevelRange(); 21766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumBands = equalizerEffect.getNumberOfBands(); 21866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQCenterFreq = new int[mEQNumBands]; 21966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 22066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQCenterFreq[band] = equalizerEffect.getCenterFreq(band); 22166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 22266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumPresets = equalizerEffect.getNumberOfPresets(); 22366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames = new String[mEQNumPresets]; 22466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetOpenSLESBandLevel = new short[mEQNumPresets][mEQNumBands]; 22566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < mEQNumPresets; preset++) { 22666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames[preset] = equalizerEffect.getPresetName(preset); 22766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.usePreset(preset); 22866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 22966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetOpenSLESBandLevel[preset][band] = equalizerEffect 23066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen .getBandLevel(band); 23166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 23266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 23366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 23466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mIsEQInitialized = true; 23566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalStateException e) { 23666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 23766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalArgumentException e) { 23866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 23966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final UnsupportedOperationException e) { 24066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 24166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 24266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 24366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } finally { 24466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 24519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen Log.d(TAG, "Releasing dummy EQ effect"); 24666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.release(); 24766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 24866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mediaPlayer.release(); 24966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 25066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // When there was a failure set some good defaults 25166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (!mIsEQInitialized) { 25266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetOpenSLESBandLevel = new short[mEQNumPresets][mEQNumBands]; 25366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < mEQNumPresets; preset++) { 25466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Init preset names to a dummy name 25566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames[preset] = prefs.getString( 25666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_name.toString() + preset, 25766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_NAME_DEFAULT + preset); 25866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (preset < EQUALIZER_PRESET_OPENSL_ES_BAND_LEVEL_DEFAULT.length) { 25966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetOpenSLESBandLevel[preset] = Arrays.copyOf( 26066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_OPENSL_ES_BAND_LEVEL_DEFAULT[preset], 26166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumBands); 26266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 26366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 26466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 26566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 26666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 26766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_level_range.toString() + 0, mEQBandLevelRange[0]); 26866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_level_range.toString() + 1, mEQBandLevelRange[1]); 26966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_num_bands.toString(), mEQNumBands); 27066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_num_presets.toString(), mEQNumPresets); 27166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Resetting the EQ arrays depending on the real # bands with defaults if 27266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // band < default size else 0 by copying default arrays over new ones 27366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetCIExtremeBandLevel = Arrays.copyOf( 27466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_CIEXTREME_BAND_LEVEL, mEQNumBands); 27566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetUserBandLevelDefault = Arrays.copyOf( 27666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT, mEQNumBands); 27766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // If no preset prefs set use CI EXTREME (= numPresets) 27866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short eQPreset = (short) prefs.getInt(Key.eq_current_preset.toString(), 27966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumPresets); 28066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_current_preset.toString(), eQPreset); 28166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] bandLevel = new short[mEQNumBands]; 28266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 28366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (controlMode == ControlMode.CONTROL_PREFERENCES) { 28466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (eQPreset < mEQNumPresets) { 28566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // OpenSL ES effect presets 28666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel[band] = mEQPresetOpenSLESBandLevel[eQPreset][band]; 28766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else if (eQPreset == mEQNumPresets) { 28866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // CI EXTREME 28966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel[band] = eQPresetCIExtremeBandLevel[band]; 29066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 29166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // User 29266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel[band] = (short) prefs.getInt( 29366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_user_band_level.toString() + band, 29466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 29566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 29666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_band_level.toString() + band, bandLevel[band]); 29766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 29866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_center_freq.toString() + band, mEQCenterFreq[band]); 29966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_ci_extreme_band_level.toString() + band, 30066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetCIExtremeBandLevel[band]); 30166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_user_band_level_default.toString() + band, 30266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 30366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 30466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < mEQNumPresets; preset++) { 30566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putString(Key.eq_preset_name.toString() + preset, mEQPresetNames[preset]); 30666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 30766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_opensl_es_band_level.toString() + preset + "_" 30866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + band, mEQPresetOpenSLESBandLevel[preset][band]); 30966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 31066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 31166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 31266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEQEnabled = prefs.getBoolean(Key.eq_enabled.toString(), 31366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_ENABLED_DEFAULT); 31466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.eq_enabled.toString(), isEQEnabled); 31566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 31666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Preset reverb 31766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEnabledPR = prefs.getBoolean(Key.pr_enabled.toString(), 31866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen PRESET_REVERB_ENABLED_DEFAULT); 31966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short presetPR = (short) prefs.getInt(Key.pr_current_preset.toString(), 32066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen PRESET_REVERB_CURRENT_PRESET_DEFAULT); 32166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.pr_enabled.toString(), isEnabledPR); 32266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.pr_current_preset.toString(), presetPR); 32366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 32466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.commit(); 32566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 32666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "initEffectsPreferences: processingEnabled: " + e); 32766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 32866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 32966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 33066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 33166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets the effect control mode based on the given audio session in the control panel. Control 33266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * mode defines if the control panel is controlling effects and/or preferences 33366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 33466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 33566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 33666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return effect control mode 33766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 33866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static ControlMode getControlMode(final int audioSession) { 33966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (audioSession == AudioEffect.ERROR_BAD_VALUE) { 34066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return ControlMode.CONTROL_PREFERENCES; 34166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 34266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return ControlMode.CONTROL_EFFECTS; 34366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 34466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 34566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 34666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Sets boolean parameter to value for given key 34766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 34866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 34966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 35066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 35166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 35266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 35366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param value 35466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 35566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void setParameterBoolean(final Context context, final String packageName, 35666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final boolean value) { 35766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 35866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 35966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 36066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final ControlMode controlMode = getControlMode(audioSession); 36166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen boolean enabled = value; 36266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 36366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Global on/off 36466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (key == Key.global_enabled) { 36566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen boolean processingEnabled = false; 36666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (value == true) { 36766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // enable all with respect to preferences 36866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (controlMode == ControlMode.CONTROL_EFFECTS) { 36966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); 37066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect != null) { 37166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(prefs.getBoolean( 37266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.virt_enabled.toString(), VIRTUALIZER_ENABLED_DEFAULT)); 37319aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int vIStrength = prefs.getInt(Key.virt_strength.toString(), 37419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen VIRTUALIZER_STRENGTH_DEFAULT); 37519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen setParameterInt(context, packageName, 37619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen audioSession, Key.virt_strength, vIStrength); 37766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 37866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); 37966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect != null) { 38066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(prefs.getBoolean(Key.bb_enabled.toString(), 38166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_ENABLED_DEFAULT)); 38219aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int bBStrength = prefs.getInt(Key.bb_strength.toString(), 38319aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen BASS_BOOST_STRENGTH_DEFAULT); 38419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen setParameterInt(context, packageName, 38519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen audioSession, Key.bb_strength, bBStrength); 38666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 38766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 38866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 38966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(prefs.getBoolean(Key.eq_enabled.toString(), 39066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_ENABLED_DEFAULT)); 39119aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int[] bandLevels = getParameterIntArray(context, 39219aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen packageName, audioSession, Key.eq_band_level); 39319aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int len = bandLevels.length; 39419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen for (short band = 0; band < len; band++) { 39519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final int level = bandLevels[band]; 39619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen setParameterInt(context, packageName, 39719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen audioSession, Key.eq_band_level, level, band); 39819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 39966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 40066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect 40166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // creation to not use MIPS 40266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = 40366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // getPresetReverbEffect(audioSession); 40466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect != null) { 40566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(prefs.getBoolean( 40666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Key.pr_enabled.toString(), PRESET_REVERB_ENABLED_DEFAULT)); 40766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 40866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 40966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 41066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen processingEnabled = true; 41166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "processingEnabled=" + processingEnabled); 41266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 41366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 41466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // disable all 41566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (controlMode == ControlMode.CONTROL_EFFECTS) { 41619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffectNoCreate(audioSession); 41766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect != null) { 41819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen mVirtualizerInstances.remove(audioSession, virtualizerEffect); 41966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(false); 42019aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen virtualizerEffect.release(); 42166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 42219aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final BassBoost bassBoostEffect = getBassBoostEffectNoCreate(audioSession); 42366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect != null) { 42419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen mBassBoostInstances.remove(audioSession, bassBoostEffect); 42566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(false); 42619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen bassBoostEffect.release(); 42766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 42819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen final Equalizer equalizerEffect = getEqualizerEffectNoCreate(audioSession); 42966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 43019aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen mEQInstances.remove(audioSession, equalizerEffect); 43166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(false); 43219aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen equalizerEffect.release(); 43366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 43466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect 43566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // creation to not use MIPS 43666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = 43766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // getPresetReverbEffect(audioSession); 43866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect != null) { 43966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(false); 44066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 44166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 44266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 44366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen processingEnabled = false; 44466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "processingEnabled=" + processingEnabled); 44566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 44666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen enabled = processingEnabled; 44766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else if (controlMode == ControlMode.CONTROL_EFFECTS) { 44866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isGlobalEnabled = prefs.getBoolean(Key.global_enabled.toString(), 44966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen GLOBAL_ENABLED_DEFAULT); 45066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isGlobalEnabled == true) { 45166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set effect parameters 45266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen switch (key) { 45366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 45466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case global_enabled: 45566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Global, already handled, to get out error free 45666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 45766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 45866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 45966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case virt_enabled: 46066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); 46166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect != null) { 46266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(value); 46366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen enabled = virtualizerEffect.getEnabled(); 46466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 46566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 46666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 46766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 46866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case bb_enabled: 46966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); 47066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect != null) { 47166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(value); 47266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen enabled = bassBoostEffect.getEnabled(); 47366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 47466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 47566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 47666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 47766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_enabled: 47866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 47966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 48066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(value); 48166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen enabled = equalizerEffect.getEnabled(); 48266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 48366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 48466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 48566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PresetReverb 48666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case pr_enabled: 48766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect 48866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // creation to not use MIPS 48966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = 49066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // getPresetReverbEffect(audioSession); 49166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect != null) { 49266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(value); 49366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // enabled = presetReverbEffect.getEnabled(); 49466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 49566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 49666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 49766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen default: 49866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Unknown/unsupported key " + key); 49966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 50066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 50166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 50266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 50366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 50466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 50566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set preferences 50666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences.Editor editor = prefs.edit(); 50766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(key.toString(), enabled); 50866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.commit(); 50966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 51066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 51166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "setParameterBoolean: " + key + "; " + value + "; " + e); 51266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 51366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 51466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 51566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 51666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets boolean parameter for given key 51766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 51866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 51966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 52066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 52166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 52266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 52366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 52466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 52566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static Boolean getParameterBoolean(final Context context, final String packageName, 52666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key) { 52766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 52866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 52966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen boolean value = false; 53066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 53166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 53266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = prefs.getBoolean(key.toString(), value); 53366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 53466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterBoolean: " + key + "; " + value + "; " + e); 53566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 53666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 53766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return value; 53866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 53966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 54066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 54166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 54266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Sets int parameter for given key and value arg0, arg1 54366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 54466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 54566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 54666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 54766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 54866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 54966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg0 55066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg1 55166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 55266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void setParameterInt(final Context context, final String packageName, 55366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg0, final int arg1) { 55466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen String strKey = key.toString(); 55566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen int value = arg0; 55666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 55766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 55866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 55966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 56066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences.Editor editor = prefs.edit(); 56166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final ControlMode controlMode = getControlMode(audioSession); 56266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 56366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set effect parameters 56466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (controlMode == ControlMode.CONTROL_EFFECTS) { 56566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 56666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen switch (key) { 56766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 56866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 56966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case virt_strength: { 57066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); 57166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect != null) { 57266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setStrength((short) value); 57366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = virtualizerEffect.getRoundedStrength(); 57466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 57566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 57666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 57766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 57866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case bb_strength: { 57966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); 58066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect != null) { 58166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setStrength((short) value); 58266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = bassBoostEffect.getRoundedStrength(); 58366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 58466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 58566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 58666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 58766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_band_level: { 58866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (arg1 == DUMMY_ARGUMENT) { 58966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen throw new IllegalArgumentException("Dummy arg passed."); 59066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 59166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short band = (short) arg1; 59266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen strKey = strKey + band; 59366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 59466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 59566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setBandLevel(band, (short) value); 59666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = equalizerEffect.getBandLevel(band); 59766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // save band level in User preset 59866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_user_band_level.toString() + band, value); 59966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 60066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 60166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 60266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_current_preset: { 60366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 60466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect != null) { 60566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short preset = (short) value; 60666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numBands = prefs.getInt(Key.eq_num_bands.toString(), 60766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_NUMBER_BANDS_DEFAULT); 60866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numPresets = prefs.getInt(Key.eq_num_presets.toString(), 60966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_NUMBER_PRESETS_DEFAULT); 61066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 61166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (preset < numPresets) { 61266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // OpenSL ES EQ Effect presets 61366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.usePreset(preset); 61466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = equalizerEffect.getCurrentPreset(); 61566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 61666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetCIExtremeBandLevelDefault = Arrays.copyOf( 61766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_CIEXTREME_BAND_LEVEL, numBands); 61866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetUserBandLevelDefault = Arrays.copyOf( 61966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT, numBands); 62066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set the band levels manually for custom presets 62166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < numBands; band++) { 62266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen short bandLevel = 0; 62366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (preset == numPresets) { 62466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // CI EXTREME 62566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 62666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_ci_extreme_band_level.toString() + band, 62766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetCIExtremeBandLevelDefault[band]); 62866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 62966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // User 63066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 63166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_user_band_level.toString() + band, 63266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 63366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 63466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setBandLevel(band, bandLevel); 63566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 63666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 63766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 63866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // update band levels 63966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < numBands; band++) { 64066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short level = equalizerEffect.getBandLevel(band); 64166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_band_level.toString() + band, level); 64266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 64366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 64466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 64566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 64666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level: 64766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 64866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level_default: 64966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 65066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_ci_extreme_band_level: { 65166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (arg1 == DUMMY_ARGUMENT) { 65266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen throw new IllegalArgumentException("Dummy arg passed."); 65366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 65466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short band = (short) arg1; 65566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen strKey = strKey + band; 65666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 65766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 65866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case pr_current_preset: 65966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect 66066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // creation to not use MIPS 66166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = getPresetReverbEffect(audioSession); 66266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect != null) { 66366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setPreset((short) value); 66466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // value = presetReverbEffect.getPreset(); 66566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 66666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 66766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen default: 66866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "setParameterInt: Unknown/unsupported key " + key); 66966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 67066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 67166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 67266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen switch (key) { 67366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 67466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case virt_strength: 67566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Do nothing 67666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 67766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case virt_type: 67866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Do nothing 67966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 68066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 68166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 68266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case bb_strength: 68366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Do nothing 68466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 68566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 68666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 68766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_band_level: { 68866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (arg1 == DUMMY_ARGUMENT) { 68966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen throw new IllegalArgumentException("Dummy arg passed."); 69066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 69166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short band = (short) arg1; 69266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen strKey = strKey + band; 69366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 69466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_user_band_level.toString() + band, value); 69566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 69666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 69766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_current_preset: { 69866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short preset = (short) value; 69966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numBands = prefs.getInt(Key.eq_num_bands.toString(), 70066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_NUMBER_BANDS_DEFAULT); 70166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numPresets = prefs.getInt(Key.eq_num_presets.toString(), 70266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_NUMBER_PRESETS_DEFAULT); 70366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 70466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[][] eQPresetOpenSLESBandLevelDefault = Arrays.copyOf( 70566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_OPENSL_ES_BAND_LEVEL_DEFAULT, numBands); 70666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetCIExtremeBandLevelDefault = Arrays.copyOf( 70766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_CIEXTREME_BAND_LEVEL, numBands); 70866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetUserBandLevelDefault = Arrays.copyOf( 70966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT, numBands); 71066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < numBands; band++) { 71166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen short bandLevel = 0; 71266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (preset < numPresets) { 71366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // OpenSL ES EQ Effect presets 71466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 71566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_opensl_es_band_level.toString() + preset + "_" 71666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + band, eQPresetOpenSLESBandLevelDefault[preset][band]); 71766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else if (preset == numPresets) { 71866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // CI EXTREME 71966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 72066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_ci_extreme_band_level.toString() + band, 72166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetCIExtremeBandLevelDefault[band]); 72266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 72366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // User 72466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = (short) prefs.getInt( 72566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_user_band_level.toString() + band, 72666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 72766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 72866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_band_level.toString() + band, bandLevel); 72966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 73066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 73166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 73266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level: 73366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 73466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level_default: 73566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 73666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_ci_extreme_band_level: { 73766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (arg1 == DUMMY_ARGUMENT) { 73866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen throw new IllegalArgumentException("Dummy arg passed."); 73966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 74066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short band = (short) arg1; 74166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen strKey = strKey + band; 74266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 74366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 74466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case pr_current_preset: 74566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Do nothing 74666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 74766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen default: 74866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "setParameterInt: Unknown/unsupported key " + key); 74966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 75066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 75166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 75266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 75366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Set preferences 75466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(strKey, value); 755b6436a644aa2e78dac41e4971b60d0b8ad95884eMarco Nelissen editor.apply(); 75666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 75766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 75866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "setParameterInt: " + key + "; " + arg0 + "; " + arg1 + "; " + e); 75966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 76066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 76166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 76266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 76366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 76466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Sets int parameter for given key and value arg 76566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 76666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 76766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 76866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 76966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 77066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 77166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg 77266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 77366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void setParameterInt(final Context context, final String packageName, 77466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg) { 77566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen setParameterInt(context, packageName, audioSession, key, arg, DUMMY_ARGUMENT); 77666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 77766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 77866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 77966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets int parameter given key 78066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 78166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 78266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 78366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 78466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 78566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 78666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 78766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 78866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int getParameterInt(final Context context, final String packageName, 78966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final String key) { 79066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen int value = 0; 79166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 79266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 79366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 79466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 79566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = prefs.getInt(key, value); 79666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 79766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterInt: " + key + "; " + e); 79866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 79966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 80066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return value; 80166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 80266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 80366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 80466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets int parameter given key 80566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 80666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 80766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 80866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 80966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 81066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 81166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 81266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 81366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int getParameterInt(final Context context, final String packageName, 81466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key) { 81566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterInt(context, packageName, audioSession, key.toString()); 81666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 81766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 81866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 81966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets int parameter given key and arg 82066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 82166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 82266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 82366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 82466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 82566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 82666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 82766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg 82866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 82966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 83066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int getParameterInt(final Context context, final String packageName, 83166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg) { 83266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterInt(context, packageName, audioSession, key.toString() + arg); 83366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 83466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 83566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 83666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets int parameter given key, arg0 and arg1 83766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 83866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 83966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 84066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 84166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 84266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 84366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 84466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg0 84566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param arg1 84666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 84766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 84866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int getParameterInt(final Context context, final String packageName, 84966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg0, final int arg1) { 85066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterInt(context, packageName, audioSession, key.toString() + arg0 + "_" 85166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + arg1); 85266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 85366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 85466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 85566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets integer array parameter given key. Returns null if not found. 85666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 85766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 85866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 85966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 86066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 86166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 86266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value array 86366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 86466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static int[] getParameterIntArray(final Context context, final String packageName, 86566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key) { 86666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 86766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 86866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 86966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen int[] intArray = null; 87066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 87166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Get effect parameters 87266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen switch (key) { 87366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_level_range: { 87466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen intArray = new int[2]; 87566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 87666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 87766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_center_freq: 87866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 87966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_band_level: 88066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 88166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level: 88266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 88366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_user_band_level_default: 88466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Fall through 88566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen case eq_preset_ci_extreme_band_level: { 88666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int numBands = prefs.getInt(Key.eq_num_bands.toString(), 0); 88766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen intArray = new int[numBands]; 88866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen break; 88966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 89066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen default: 89166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterIntArray: Unknown/unsupported key " + key); 89266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return null; 89366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 89466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 89566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (int i = 0; i < intArray.length; i++) { 89666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen intArray[i] = prefs.getInt(key.toString() + i, 0); 89766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 89866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 89966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 90066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterIntArray: " + key + "; " + e); 90166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 90266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 90366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return intArray; 90466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 90566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 90666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 90766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets string parameter given key. Returns empty string if not found. 90866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 90966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 91066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 91166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 91266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 91366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 91466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 91566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 91666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static String getParameterString(final Context context, final String packageName, 91766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final String key) { 91866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen String value = ""; 91966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 92066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 92166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 92266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 92366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Get effect parameters 92466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen value = prefs.getString(key, value); 92566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 92666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 92766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "getParameterString: " + key + "; " + e); 92866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 92966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 93066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return value; 93166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 93266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 93366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 93466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets string parameter given key. 93566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 93666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 93766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 93866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 93966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 94066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param key 94166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 94266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 94366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static String getParameterString(final Context context, final String packageName, 94466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key) { 94566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterString(context, packageName, audioSession, key.toString()); 94666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 94766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 94866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 94966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets string parameter given key and arg. 95066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 95166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 95266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 95366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 95466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 95566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param args 95666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return parameter value 95766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 95866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static String getParameterString(final Context context, final String packageName, 95966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final Key key, final int arg) { 96066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return getParameterString(context, packageName, audioSession, key.toString() + arg); 96166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 96266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 96366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 96466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Opens/initializes the effects session for the given audio session with preferences linked to 96566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * the given package name and context. 96666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 96766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 96866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 96966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 97066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 97166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 97266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void openSession(final Context context, final String packageName, 97366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession) { 97466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "openSession(" + context + ", " + packageName + ", " + audioSession + ")"); 97566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String methodTag = "openSession: "; 97666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 97766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // init preferences 97866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences prefs = context.getSharedPreferences(packageName, 97966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE); 98066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final SharedPreferences.Editor editor = prefs.edit(); 98166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 98266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isGlobalEnabled = prefs.getBoolean(Key.global_enabled.toString(), 98366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen GLOBAL_ENABLED_DEFAULT); 98466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.global_enabled.toString(), isGlobalEnabled); 98566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 98619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen if (!isGlobalEnabled) { 98719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen return; 98819aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 98919aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen 99066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Manage audioSession information 99166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 99266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Retrieve AudioSession Id from map 99366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen boolean isExistingAudioSession = false; 99466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 99566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 99666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Integer currentAudioSession = mPackageSessions.putIfAbsent(packageName, 99766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen audioSession); 99866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (currentAudioSession != null) { 99966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Compare with passed argument 100066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (currentAudioSession == audioSession) { 100166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // FIXME: Normally, we should exit the function here 100266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BUT: we have to take care of the virtualizer because of 100366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // a bug in the Android Effects Framework 100466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // editor.commit(); 100566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // return; 100666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen isExistingAudioSession = true; 100766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 100866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen closeSession(context, packageName, currentAudioSession); 100966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 101066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 101166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final NullPointerException e) { 101266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, methodTag + e); 101366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.commit(); 101466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 101566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 101666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 101766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Because the audioSession is new, get effects & settings from shared preferences 101866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 101966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 102066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // create effect 102166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); 102266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen { 102366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String errorTag = methodTag + "Virtualizer error: "; 102466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 102566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 102666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // read parameters 102766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEnabled = prefs.getBoolean(Key.virt_enabled.toString(), 102866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen VIRTUALIZER_ENABLED_DEFAULT); 102966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int strength = prefs.getInt(Key.virt_strength.toString(), 103066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen VIRTUALIZER_STRENGTH_DEFAULT); 103166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // init settings 103266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Virtualizer.Settings settings = new Virtualizer.Settings("Virtualizer;strength=" 103366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + strength); 103466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 103566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setProperties(settings); 103666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 103766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // set parameters 103866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isGlobalEnabled == true) { 103966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(isEnabled); 104066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 104166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect.setEnabled(false); 104266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 104366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 104466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // get parameters 104566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen settings = virtualizerEffect.getProperties(); 104666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "Parameters: " + settings.toString() + ";enabled=" + isEnabled); 104766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 104866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // update preferences 104966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.virt_enabled.toString(), isEnabled); 105066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.virt_strength.toString(), settings.strength); 105166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 105266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, errorTag + e); 105366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 105466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 105566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 105666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // In case of an existing audio session 105766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Exit after the virtualizer has been re-enabled 105866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 105966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isExistingAudioSession) { 1060fed4c7bc8b62de6e686d6d3a067c1f10b0a3441ab editor.apply(); 106166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 106266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 106366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 106466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 106566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // create effect 106666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); 106766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen { 106866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String errorTag = methodTag + "BassBoost error: "; 106966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 107066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 107166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // read parameters 107266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEnabled = prefs.getBoolean(Key.bb_enabled.toString(), 107366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_ENABLED_DEFAULT); 107466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int strength = prefs.getInt(Key.bb_strength.toString(), 107566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BASS_BOOST_STRENGTH_DEFAULT); 107666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 107766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // init settings 107866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen BassBoost.Settings settings = new BassBoost.Settings("BassBoost;strength=" 107966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen + strength); 108066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 108166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setProperties(settings); 108266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 108366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // set parameters 108466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isGlobalEnabled == true) { 108566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(isEnabled); 108666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 108766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect.setEnabled(false); 108866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 108966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 109066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // get parameters 109166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen settings = bassBoostEffect.getProperties(); 109266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "Parameters: " + settings.toString() + ";enabled=" + isEnabled); 109366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 109466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // update preferences 109566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.bb_enabled.toString(), isEnabled); 109666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.bb_strength.toString(), settings.strength); 109766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 109866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, errorTag + e); 109966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 110066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 110166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 110266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 110366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // create effect 110466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizerEffect = getEqualizerEffect(audioSession); 110566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen { 110666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String errorTag = methodTag + "Equalizer error: "; 110766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 110866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 110966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short eQNumBands; 111066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] bandLevel; 111166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int[] eQCenterFreq; 111266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short eQNumPresets; 111366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String[] eQPresetNames; 111466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen short eQPreset; 111566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen synchronized (mEQInitLock) { 111666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // read parameters 111766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQBandLevelRange = equalizerEffect.getBandLevelRange(); 111866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumBands = equalizerEffect.getNumberOfBands(); 111966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQCenterFreq = new int[mEQNumBands]; 112066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQNumPresets = equalizerEffect.getNumberOfPresets(); 112166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames = new String[mEQNumPresets]; 112266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 112366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < mEQNumPresets; preset++) { 112466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames[preset] = equalizerEffect.getPresetName(preset); 112566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putString(Key.eq_preset_name.toString() + preset, 112666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQPresetNames[preset]); 112766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 112866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 112966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_level_range.toString() + 0, mEQBandLevelRange[0]); 113066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_level_range.toString() + 1, mEQBandLevelRange[1]); 113166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_num_bands.toString(), mEQNumBands); 113266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_num_presets.toString(), mEQNumPresets); 113366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Resetting the EQ arrays depending on the real # bands with defaults if band < 113466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // default size else 0 by copying default arrays over new ones 113566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetCIExtremeBandLevel = Arrays.copyOf( 113666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_CIEXTREME_BAND_LEVEL, mEQNumBands); 113766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final short[] eQPresetUserBandLevelDefault = Arrays.copyOf( 113866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_PRESET_USER_BAND_LEVEL_DEFAULT, mEQNumBands); 113966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // If no preset prefs set use CI EXTREME (= numPresets) 114066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPreset = (short) prefs 114166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen .getInt(Key.eq_current_preset.toString(), mEQNumPresets); 114266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (eQPreset < mEQNumPresets) { 114366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // OpenSL ES effect presets 114466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.usePreset(eQPreset); 114566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPreset = equalizerEffect.getCurrentPreset(); 114666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 114766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 114866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen short level = 0; 114966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (eQPreset == mEQNumPresets) { 115066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // CI EXTREME 115166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen level = eQPresetCIExtremeBandLevel[band]; 115266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 115366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // User 115466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen level = (short) prefs.getInt( 115566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Key.eq_preset_user_band_level.toString() + band, 115666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 115766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 115866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setBandLevel(band, level); 115966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 116066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 116166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_current_preset.toString(), eQPreset); 116266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 116366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel = new short[mEQNumBands]; 116466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < mEQNumBands; band++) { 116566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mEQCenterFreq[band] = equalizerEffect.getCenterFreq(band); 116666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bandLevel[band] = equalizerEffect.getBandLevel(band); 116766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 116866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_band_level.toString() + band, bandLevel[band]); 116966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_center_freq.toString() + band, mEQCenterFreq[band]); 117066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_ci_extreme_band_level.toString() + band, 117166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetCIExtremeBandLevel[band]); 117266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putInt(Key.eq_preset_user_band_level_default.toString() + band, 117366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetUserBandLevelDefault[band]); 117466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 117566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 117666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQNumBands = mEQNumBands; 117766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQCenterFreq = mEQCenterFreq; 117866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQNumPresets = mEQNumPresets; 117966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen eQPresetNames = mEQPresetNames; 118066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 118166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 118266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isEnabled = prefs.getBoolean(Key.eq_enabled.toString(), 118366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen EQUALIZER_ENABLED_DEFAULT); 118466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.putBoolean(Key.eq_enabled.toString(), isEnabled); 118566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (isGlobalEnabled == true) { 118666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(isEnabled); 118766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } else { 118866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect.setEnabled(false); 118966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 119066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 119166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // dump 119266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "Parameters: Equalizer"); 119366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "bands=" + eQNumBands); 119466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen String str = "levels="; 119566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < eQNumBands; band++) { 119666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = str + bandLevel[band] + "; "; 119766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 119866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, str); 119966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = "center="; 120066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short band = 0; band < eQNumBands; band++) { 120166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = str + eQCenterFreq[band] + "; "; 120266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 120366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, str); 120466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = "presets="; 120566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen for (short preset = 0; preset < eQNumPresets; preset++) { 120666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen str = str + eQPresetNames[preset] + "; "; 120766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 120866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, str); 120966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "current=" + eQPreset); 121066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 121166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, errorTag + e); 121266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 121366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 121466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 121566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect creation to not 121666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // use MIPS left in the code for (future) reference. 121766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Preset reverb 121866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // create effect 121966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb presetReverbEffect = getPresetReverbEffect(audioSession); 122066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // { 122166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final String errorTag = methodTag + "PresetReverb error: "; 122266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 122366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // try { 122466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // read parameters 122566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final boolean isEnabled = prefs.getBoolean(Key.pr_enabled.toString(), 122666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PRESET_REVERB_ENABLED_DEFAULT); 122766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final short preset = (short) prefs.getInt(Key.pr_current_preset.toString(), 122866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PRESET_REVERB_CURRENT_PRESET_DEFAULT); 122966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 123066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // init settings 123166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PresetReverb.Settings settings = new PresetReverb.Settings("PresetReverb;preset=" 123266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // + preset); 123366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 123466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // read/update preferences 123566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setProperties(settings); 123666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 123766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // set parameters 123866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (isGlobalEnabled == true) { 123966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(isEnabled); 124066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } else { 124166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect.setEnabled(false); 124266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 124366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 124466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // get parameters 124566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // settings = presetReverbEffect.getProperties(); 124666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.v(TAG, "Parameters: " + settings.toString() + ";enabled=" + isEnabled); 124766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // 124866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // update preferences 124966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // editor.putBoolean(Key.pr_enabled.toString(), isEnabled); 125066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // editor.putInt(Key.pr_current_preset.toString(), settings.preset); 125166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } catch (final RuntimeException e) { 125266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.e(TAG, errorTag + e); 125366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 125466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 125566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen editor.commit(); 125666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 125766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 125866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 125966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Closes the audio session (release effects) for the given session 126066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 126166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 126266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 126366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 126466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 126566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 126666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void closeSession(final Context context, final String packageName, 126766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession) { 126866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "closeSession(" + context + ", " + packageName + ", " + audioSession + ")"); 126966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 127066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PresetReverb 127166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final PresetReverb presetReverb = mPresetReverbInstances.remove(audioSession); 127266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (presetReverb != null) { 127366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen presetReverb.release(); 127466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 127566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Equalizer 127666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer equalizer = mEQInstances.remove(audioSession); 127766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizer != null) { 127866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizer.release(); 127966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 128066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // BassBoost 128166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost bassBoost = mBassBoostInstances.remove(audioSession); 128266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoost != null) { 128366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoost.release(); 128466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 128566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Virtualizer 128666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer virtualizer = mVirtualizerInstances.remove(audioSession); 128766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizer != null) { 128866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizer.release(); 128966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 129066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 129166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen mPackageSessions.remove(packageName); 129266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 129366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 129466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 129566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Enables or disables all effects (global enable/disable) for a given context, package name and 129666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * audio session. It sets/inits the control mode and preferences and then sets the global 129766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * enabled parameter. 129866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 129966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param context 130066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param packageName 130166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 130266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 130366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param enabled 130466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 130566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public static void setEnabledAll(final Context context, final String packageName, 130666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession, final boolean enabled) { 130766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen initEffectsPreferences(context, packageName, audioSession); 130866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen setParameterBoolean(context, packageName, audioSession, Key.global_enabled, enabled); 130966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 131066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 131166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 131266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets the virtualizer effect for the given audio session. If the effect on the session doesn't 131366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * exist yet, create it and add to collection. 131466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 131566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 131666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 131766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return virtualizerEffect 131866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 131919aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen private static Virtualizer getVirtualizerEffectNoCreate(final int audioSession) { 132019aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen return mVirtualizerInstances.get(audioSession); 132119aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 132266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static Virtualizer getVirtualizerEffect(final int audioSession) { 132319aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen Virtualizer virtualizerEffect = getVirtualizerEffectNoCreate(audioSession); 132466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect == null) { 132566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 132666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Virtualizer newVirtualizerEffect = new Virtualizer(PRIORITY, audioSession); 132766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect = mVirtualizerInstances.putIfAbsent(audioSession, 132866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen newVirtualizerEffect); 132966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (virtualizerEffect == null) { 133066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // put succeeded, use new value 133166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen virtualizerEffect = newVirtualizerEffect; 133266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 133366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalArgumentException e) { 133466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Virtualizer: " + e); 133566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final UnsupportedOperationException e) { 133666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Virtualizer: " + e); 133766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 133866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Virtualizer: " + e); 133966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 134066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 134166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return virtualizerEffect; 134266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 134366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 134466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 134566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets the bass boost effect for the given audio session. If the effect on the session doesn't 134666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * exist yet, create it and add to collection. 134766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 134866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 134966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 135066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return bassBoostEffect 135166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 135219aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen private static BassBoost getBassBoostEffectNoCreate(final int audioSession) { 135319aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen return mBassBoostInstances.get(audioSession); 135419aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 135566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static BassBoost getBassBoostEffect(final int audioSession) { 135619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen 135719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen BassBoost bassBoostEffect = getBassBoostEffectNoCreate(audioSession); 135866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect == null) { 135966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 136066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final BassBoost newBassBoostEffect = new BassBoost(PRIORITY, audioSession); 136166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect = mBassBoostInstances.putIfAbsent(audioSession, newBassBoostEffect); 136266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (bassBoostEffect == null) { 136366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // put succeeded, use new value 136466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen bassBoostEffect = newBassBoostEffect; 136566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 136666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalArgumentException e) { 136766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "BassBoost: " + e); 136866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final UnsupportedOperationException e) { 136966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "BassBoost: " + e); 137066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 137166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "BassBoost: " + e); 137266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 137366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 137466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return bassBoostEffect; 137566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 137666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 137766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen /** 137866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Gets the equalizer effect for the given audio session. If the effect on the session doesn't 137966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * exist yet, create it and add to collection. 138066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 138166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @param audioSession 138266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * System wide unique audio session identifier. 138366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * @return equalizerEffect 138466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 138519aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen private static Equalizer getEqualizerEffectNoCreate(final int audioSession) { 138619aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen return mEQInstances.get(audioSession); 138719aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen } 138866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private static Equalizer getEqualizerEffect(final int audioSession) { 138919aa9179b689d3dc52419d1b33959f0beb389a5aMarco Nelissen Equalizer equalizerEffect = getEqualizerEffectNoCreate(audioSession); 139066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect == null) { 139166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen try { 139266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Equalizer newEqualizerEffect = new Equalizer(PRIORITY, audioSession); 139366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect = mEQInstances.putIfAbsent(audioSession, newEqualizerEffect); 139466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (equalizerEffect == null) { 139566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // put succeeded, use new value 139666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen equalizerEffect = newEqualizerEffect; 139766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 139866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final IllegalArgumentException e) { 139966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 140066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final UnsupportedOperationException e) { 140166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 140266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } catch (final RuntimeException e) { 140366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.e(TAG, "Equalizer: " + e); 140466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 140566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 140666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return equalizerEffect; 140766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 140866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 140966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // XXX: Preset Reverb not used for the moment, so commented out the effect creation to not 141066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // use MIPS 141166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // /** 141266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * Gets the preset reverb effect for the given audio session. If the effect on the session 141366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * doesn't exist yet, create it and add to collection. 141466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * 141566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * @param audioSession 141666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * System wide unique audio session identifier. 141766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // * @return presetReverbEffect 141866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // */ 141966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // private static PresetReverb getPresetReverbEffect(final int audioSession) { 142066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // PresetReverb presetReverbEffect = mPresetReverbInstances.get(audioSession); 142166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect == null) { 142266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // try { 142366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // final PresetReverb newPresetReverbEffect = new PresetReverb(PRIORITY, audioSession); 142466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect = mPresetReverbInstances.putIfAbsent(audioSession, 142566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // newPresetReverbEffect); 142666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // if (presetReverbEffect == null) { 142766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // // put succeeded, use new value 142866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // presetReverbEffect = newPresetReverbEffect; 142966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 143066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } catch (final IllegalArgumentException e) { 143166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.e(TAG, "PresetReverb: " + e); 143266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } catch (final UnsupportedOperationException e) { 143366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.e(TAG, "PresetReverb: " + e); 143466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } catch (final RuntimeException e) { 143566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // Log.e(TAG, "PresetReverb: " + e); 143666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 143766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 143866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // return presetReverbEffect; 143966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // } 144066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen} 1441