1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.mediaframeworktest.functional.audio; 18 19 import com.android.mediaframeworktest.MediaFrameworkTest; 20 import com.android.mediaframeworktest.MediaNames; 21 import com.android.mediaframeworktest.functional.EnergyProbe; 22 import android.content.Context; 23 import android.content.res.AssetFileDescriptor; 24 import android.media.audiofx.AudioEffect; 25 import android.media.AudioManager; 26 import android.media.audiofx.Equalizer; 27 import android.media.audiofx.Visualizer; 28 import android.media.MediaPlayer; 29 30 import android.os.Looper; 31 import android.test.suitebuilder.annotation.LargeTest; 32 import android.test.suitebuilder.annotation.MediumTest; 33 import android.test.suitebuilder.annotation.Suppress; 34 import android.test.ActivityInstrumentationTestCase2; 35 import android.util.Log; 36 37 import java.nio.ByteOrder; 38 import java.nio.ByteBuffer; 39 import java.util.UUID; 40 41 /** 42 * Junit / Instrumentation test case for the media AudioTrack api 43 44 */ 45 public class MediaEqualizerTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 46 private String TAG = "MediaEqualizerTest"; 47 private final static int MIN_NUMBER_OF_BANDS = 4; 48 private final static int MIN_BAND_LEVEL = -1500; 49 private final static int MAX_BAND_LEVEL = 1500; 50 private final static int TEST_FREQUENCY_MILLIHERTZ = 1000000; 51 private final static int MIN_NUMBER_OF_PRESETS = 4; 52 53 private Equalizer mEqualizer = null; 54 private int mSession = -1; 55 56 public MediaEqualizerTest() { 57 super("com.android.mediaframeworktest", MediaFrameworkTest.class); 58 } 59 60 @Override 61 protected void setUp() throws Exception { 62 super.setUp(); 63 } 64 65 @Override 66 protected void tearDown() throws Exception { 67 super.tearDown(); 68 releaseEqualizer(); 69 } 70 71 private static void assumeTrue(String message, boolean cond) { 72 assertTrue("(assume)"+message, cond); 73 } 74 75 private void log(String testName, String message) { 76 Log.v(TAG, "["+testName+"] "+message); 77 } 78 79 private void loge(String testName, String message) { 80 Log.e(TAG, "["+testName+"] "+message); 81 } 82 83 //----------------------------------------------------------------- 84 // EQUALIZER TESTS: 85 //---------------------------------- 86 87 88 //----------------------------------------------------------------- 89 // 0 - constructor 90 //---------------------------------- 91 92 //Test case 0.0: test constructor and release 93 @LargeTest 94 public void test0_0ConstructorAndRelease() throws Exception { 95 boolean result = false; 96 String msg = "test1_0ConstructorAndRelease()"; 97 Equalizer eq = null; 98 try { 99 eq = new Equalizer(0, 0); 100 assertNotNull(msg + ": could not create Equalizer", eq); 101 try { 102 assertTrue(msg +": invalid effect ID", (eq.getId() != 0)); 103 } catch (IllegalStateException e) { 104 msg = msg.concat(": Equalizer not initialized"); 105 } 106 result = true; 107 } catch (IllegalArgumentException e) { 108 msg = msg.concat(": Equalizer not found"); 109 } catch (UnsupportedOperationException e) { 110 msg = msg.concat(": Effect library not loaded"); 111 } finally { 112 if (eq != null) { 113 eq.release(); 114 } 115 } 116 assertTrue(msg, result); 117 } 118 119 120 //----------------------------------------------------------------- 121 // 1 - get/set parameters 122 //---------------------------------- 123 124 //Test case 1.0: test setBandLevel() and getBandLevel() 125 @LargeTest 126 public void test1_0BandLevel() throws Exception { 127 boolean result = false; 128 String msg = "test1_0BandLevel()"; 129 getEqualizer(0); 130 try { 131 short numBands = mEqualizer.getNumberOfBands(); 132 assertTrue(msg + ": not enough bands", numBands >= MIN_NUMBER_OF_BANDS); 133 134 short[] levelRange = mEqualizer.getBandLevelRange(); 135 assertTrue(msg + ": min level too high", levelRange[0] <= MIN_BAND_LEVEL); 136 assertTrue(msg + ": max level too low", levelRange[1] >= MAX_BAND_LEVEL); 137 138 mEqualizer.setBandLevel((short)0, levelRange[1]); 139 short level = mEqualizer.getBandLevel((short)0); 140 // 10% margin on actual level compared to requested level 141 assertTrue(msg + ": setBandLevel failed", 142 ((float)level > (float)levelRange[1] * 0.9f) && 143 ((float)level < (float)levelRange[1] * 1.1f)); 144 result = true; 145 } catch (IllegalArgumentException e) { 146 msg = msg.concat(": Bad parameter value"); 147 loge(msg, "Bad parameter value"); 148 } catch (UnsupportedOperationException e) { 149 msg = msg.concat(": get parameter() rejected"); 150 loge(msg, "get parameter() rejected"); 151 } catch (IllegalStateException e) { 152 msg = msg.concat("get parameter() called in wrong state"); 153 loge(msg, "get parameter() called in wrong state"); 154 } finally { 155 releaseEqualizer(); 156 } 157 assertTrue(msg, result); 158 } 159 160 //Test case 1.1: test band frequency 161 @LargeTest 162 public void test1_1BandFrequency() throws Exception { 163 boolean result = false; 164 String msg = "test1_1BandFrequency()"; 165 getEqualizer(0); 166 try { 167 short band = mEqualizer.getBand(TEST_FREQUENCY_MILLIHERTZ); 168 assertTrue(msg + ": getBand failed", band >= 0); 169 int[] freqRange = mEqualizer.getBandFreqRange(band); 170 assertTrue(msg + ": getBandFreqRange failed", 171 (freqRange[0] <= TEST_FREQUENCY_MILLIHERTZ) && 172 (freqRange[1] >= TEST_FREQUENCY_MILLIHERTZ)); 173 int freq = mEqualizer.getCenterFreq(band); 174 assertTrue(msg + ": getCenterFreq failed", 175 (freqRange[0] <= freq) && (freqRange[1] >= freq)); 176 result = true; 177 } catch (IllegalArgumentException e) { 178 msg = msg.concat(": Bad parameter value"); 179 loge(msg, "Bad parameter value"); 180 } catch (UnsupportedOperationException e) { 181 msg = msg.concat(": get parameter() rejected"); 182 loge(msg, "get parameter() rejected"); 183 } catch (IllegalStateException e) { 184 msg = msg.concat("get parameter() called in wrong state"); 185 loge(msg, "get parameter() called in wrong state"); 186 } finally { 187 releaseEqualizer(); 188 } 189 assertTrue(msg, result); 190 } 191 192 //Test case 1.2: test presets 193 @LargeTest 194 public void test1_2Presets() throws Exception { 195 boolean result = false; 196 String msg = "test1_2Presets()"; 197 getEqualizer(0); 198 try { 199 short numPresets = mEqualizer.getNumberOfPresets(); 200 assertTrue(msg + ": getNumberOfPresets failed", numPresets >= MIN_NUMBER_OF_PRESETS); 201 mEqualizer.usePreset((short)(numPresets - 1)); 202 short preset = mEqualizer.getCurrentPreset(); 203 assertEquals(msg + ": usePreset failed", preset, (short)(numPresets - 1)); 204 String name = mEqualizer.getPresetName(preset); 205 assertNotNull(msg + ": getPresetName failed", name); 206 result = true; 207 } catch (IllegalArgumentException e) { 208 msg = msg.concat(": Bad parameter value"); 209 loge(msg, "Bad parameter value"); 210 } catch (UnsupportedOperationException e) { 211 msg = msg.concat(": get parameter() rejected"); 212 loge(msg, "get parameter() rejected"); 213 } catch (IllegalStateException e) { 214 msg = msg.concat("get parameter() called in wrong state"); 215 loge(msg, "get parameter() called in wrong state"); 216 } finally { 217 releaseEqualizer(); 218 } 219 assertTrue(msg, result); 220 } 221 222 //Test case 1.3: test properties 223 @LargeTest 224 public void test1_3Properties() throws Exception { 225 boolean result = false; 226 String msg = "test1_3Properties()"; 227 getEqualizer(0); 228 try { 229 Equalizer.Settings settings = mEqualizer.getProperties(); 230 String str = settings.toString(); 231 settings = new Equalizer.Settings(str); 232 mEqualizer.setProperties(settings); 233 result = true; 234 } catch (IllegalArgumentException e) { 235 msg = msg.concat(": Bad parameter value"); 236 loge(msg, "Bad parameter value"); 237 } catch (UnsupportedOperationException e) { 238 msg = msg.concat(": get parameter() rejected"); 239 loge(msg, "get parameter() rejected"); 240 } catch (IllegalStateException e) { 241 msg = msg.concat("get parameter() called in wrong state"); 242 loge(msg, "get parameter() called in wrong state"); 243 } finally { 244 releaseEqualizer(); 245 } 246 assertTrue(msg, result); 247 } 248 249 //----------------------------------------------------------------- 250 // private methods 251 //---------------------------------- 252 253 private void getEqualizer(int session) { 254 if (mEqualizer == null || session != mSession) { 255 if (session != mSession && mEqualizer != null) { 256 mEqualizer.release(); 257 mEqualizer = null; 258 } 259 try { 260 mEqualizer = new Equalizer(0, session); 261 mSession = session; 262 } catch (IllegalArgumentException e) { 263 Log.e(TAG, "getEqualizer() Equalizer not found exception: "+e); 264 } catch (UnsupportedOperationException e) { 265 Log.e(TAG, "getEqualizer() Effect library not loaded exception: "+e); 266 } 267 } 268 assertNotNull("could not create mEqualizer", mEqualizer); 269 } 270 271 private void releaseEqualizer() { 272 if (mEqualizer != null) { 273 mEqualizer.release(); 274 mEqualizer = null; 275 } 276 } 277 278 } 279