MediaVirtualizerTest.java revision 1a5149e5d7f2dddc8b324f7695e69fd89af73c52
1441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent/* 2441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Copyright (C) 2010 The Android Open Source Project 3441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * 4441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 5441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * you may not use this file except in compliance with the License. 6441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * You may obtain a copy of the License at 7441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * 8441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 9441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * 10441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Unless required by applicable law or agreed to in writing, software 11441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 12441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * See the License for the specific language governing permissions and 14441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * limitations under the License. 15441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent */ 16441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 17441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentpackage com.android.mediaframeworktest.functional; 18441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 19441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport com.android.mediaframeworktest.MediaFrameworkTest; 20441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport com.android.mediaframeworktest.MediaNames; 21441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.content.Context; 22441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.content.res.AssetFileDescriptor; 231a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.AudioEffect; 24441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.AudioManager; 251a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.Virtualizer; 261a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.Visualizer; 27441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.MediaPlayer; 28441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 29441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.os.Looper; 30441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.LargeTest; 31441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.MediumTest; 32441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.Suppress; 33441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.ActivityInstrumentationTestCase2; 34441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.util.Log; 35441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 36441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.nio.ByteOrder; 37441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.nio.ByteBuffer; 38441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.util.UUID; 39441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 40441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent/** 41441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Junit / Instrumentation test case for the media AudioTrack api 42441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 43441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent */ 44441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentpublic class MediaVirtualizerTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 45441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private String TAG = "MediaVirtualizerTest"; 46391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent private final static int MIN_ENERGY_RATIO_2 = 3; 47441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private final static short TEST_STRENGTH = 500; 48ec1e9c7a441d6a8ba6206386a1fb43652f6bbd36Eric Laurent private final static int TEST_VOLUME = 4; 49441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 50441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private Virtualizer mVirtualizer = null; 51441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private int mSession = -1; 52441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 53441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent public MediaVirtualizerTest() { 54441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent super("com.android.mediaframeworktest", MediaFrameworkTest.class); 55441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 56441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 57441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @Override 58441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent protected void setUp() throws Exception { 59441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent super.setUp(); 60441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 61441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 62441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @Override 63441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent protected void tearDown() throws Exception { 64441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent super.tearDown(); 65441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent releaseVirtualizer(); 66441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 67441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 68441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private static void assumeTrue(String message, boolean cond) { 69441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue("(assume)"+message, cond); 70441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 71441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 72441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private void log(String testName, String message) { 73441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Log.v(TAG, "["+testName+"] "+message); 74441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 75441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 76441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private void loge(String testName, String message) { 77441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Log.e(TAG, "["+testName+"] "+message); 78441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 79441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 80441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //----------------------------------------------------------------- 81441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // VIRTUALIZER TESTS: 82441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //---------------------------------- 83441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 84441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 85441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //----------------------------------------------------------------- 86441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // 0 - constructor 87441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //---------------------------------- 88441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 89441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //Test case 0.0: test constructor and release 90441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @LargeTest 91441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent public void test0_0ConstructorAndRelease() throws Exception { 92441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent boolean result = false; 93441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent String msg = "test1_0ConstructorAndRelease()"; 94441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Virtualizer virtualizer = null; 95441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 96441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent virtualizer = new Virtualizer(0, 0); 97441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertNotNull(msg + ": could not create Virtualizer", virtualizer); 98441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 99441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg +": invalid effect ID", (virtualizer.getId() != 0)); 100441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalStateException e) { 101441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Virtualizer not initialized"); 102441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 103441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent result = true; 104441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalArgumentException e) { 105441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Virtualizer not found"); 106441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (UnsupportedOperationException e) { 107441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Effect library not loaded"); 108441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } finally { 109441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (virtualizer != null) { 110441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent virtualizer.release(); 111441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 112441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 113441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg, result); 114441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 115441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 116441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 117441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //----------------------------------------------------------------- 118441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // 1 - get/set parameters 119441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //---------------------------------- 120441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 121441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //Test case 1.0: test strength 122441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @LargeTest 123441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent public void test1_0Strength() throws Exception { 124441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent boolean result = false; 125441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent String msg = "test1_0Strength()"; 126441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent getVirtualizer(0); 127441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 128441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (mVirtualizer.getStrengthSupported()) { 129441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.setStrength((short)TEST_STRENGTH); 130441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent short strength = mVirtualizer.getRoundedStrength(); 131441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // allow 10% difference between set strength and rounded strength 132441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg +": got incorrect strength", 133441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent ((float)strength > (float)TEST_STRENGTH * 0.9f) && 134441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent ((float)strength < (float)TEST_STRENGTH * 1.1f)); 135441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } else { 136441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent short strength = mVirtualizer.getRoundedStrength(); 137441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg +": got incorrect strength", strength >= 0 && strength <= 1000); 138441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 139441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent result = true; 140441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalArgumentException e) { 141441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Bad parameter value"); 142441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "Bad parameter value"); 143441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (UnsupportedOperationException e) { 144441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": get parameter() rejected"); 145441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() rejected"); 146441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalStateException e) { 147441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat("get parameter() called in wrong state"); 148441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() called in wrong state"); 149441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } finally { 150441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent releaseVirtualizer(); 151441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 152441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg, result); 153441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 154441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 155441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //Test case 1.1: test properties 156441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @LargeTest 157441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent public void test1_1Properties() throws Exception { 158441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent boolean result = false; 159441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent String msg = "test1_1Properties()"; 160441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent getVirtualizer(0); 161441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 162441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Virtualizer.Settings settings = mVirtualizer.getProperties(); 163441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent String str = settings.toString(); 164441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent settings = new Virtualizer.Settings(str); 165441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.setProperties(settings); 166441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent result = true; 167441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalArgumentException e) { 168441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Bad parameter value"); 169441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "Bad parameter value"); 170441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (UnsupportedOperationException e) { 171441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": get parameter() rejected"); 172441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() rejected"); 173441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalStateException e) { 174441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat("get parameter() called in wrong state"); 175441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() called in wrong state"); 176441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } finally { 177441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent releaseVirtualizer(); 178441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 179441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg, result); 180441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 181441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 182441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //----------------------------------------------------------------- 183441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // 2 - Effect action 184441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //---------------------------------- 185441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 186441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //Test case 2.0: test actual virtualizer influence on sound 187441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @LargeTest 188441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent public void test2_0SoundModification() throws Exception { 189441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent boolean result = false; 190441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent String msg = "test2_0SoundModification()"; 191441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent EnergyProbe probe = null; 192441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent AudioEffect vc = null; 193441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent MediaPlayer mp = null; 194441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent AudioManager am = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE); 195441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent int volume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 196441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent am.setStreamVolume(AudioManager.STREAM_MUSIC, 197ec1e9c7a441d6a8ba6206386a1fb43652f6bbd36Eric Laurent TEST_VOLUME, 198441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 0); 199441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 200441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 201441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent probe = new EnergyProbe(0); 202441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // creating a volume controller on output mix ensures that ro.audio.silent mutes 203441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // audio after the effects and not before 204441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent vc = new AudioEffect( 205441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent AudioEffect.EFFECT_TYPE_NULL, 206441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"), 207441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 0, 208441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 0); 209441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent vc.setEnabled(true); 210441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 211441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mp = new MediaPlayer(); 212441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mp.setDataSource(MediaNames.SINE_200_1000); 213441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 214441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent getVirtualizer(mp.getAudioSessionId()); 215441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mp.prepare(); 216441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mp.start(); 217441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Thread.sleep(200); 218441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // measure reference energy around 1kHz 219441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent int refEnergy200 = probe.capture(200); 220441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent int refEnergy1000 = probe.capture(1000); 221441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.setStrength((short)1000); 222441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.setEnabled(true); 223441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Thread.sleep(500); 224441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // measure energy around 1kHz with band level at min 225441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent int energy200 = probe.capture(200); 226441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent int energy1000 = probe.capture(1000); 227441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // verify that the energy ration between low and high frequencies is at least 228391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // MIN_ENERGY_RATIO_2 times higher with virtualizer on. 229441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // NOTE: this is what is observed with current virtualizer implementation and the test 230441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // audio file but is not the primary effect of the virtualizer. A better way would 231441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // be to have a stereo PCM capture and check that a strongly paned input is centered 232441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // when output. However, we cannot capture stereo with the visualizer. 233441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg + ": virtiualizer has no effect", 234441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent ((float)energy200/(float)energy1000) > 235441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent (MIN_ENERGY_RATIO_2 * ((float)refEnergy200/(float)refEnergy1000))); 236441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent result = true; 237441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalArgumentException e) { 238441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Bad parameter value"); 239441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "Bad parameter value"); 240441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (UnsupportedOperationException e) { 241441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": get parameter() rejected"); 242441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() rejected"); 243441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalStateException e) { 244441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat("get parameter() called in wrong state"); 245441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() called in wrong state"); 246441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (InterruptedException e) { 247441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "sleep() interrupted"); 248441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 249441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent finally { 250441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent releaseVirtualizer(); 251441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (mp != null) { 252441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mp.release(); 253441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 254441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (vc != null) { 255441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent vc.release(); 256441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 257441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (probe != null) { 258441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent probe.release(); 259441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 260441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent am.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0); 261441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 262441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg, result); 263441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 264441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //----------------------------------------------------------------- 265441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // private methods 266441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //---------------------------------- 267441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 268441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private void getVirtualizer(int session) { 269441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (mVirtualizer == null || session != mSession) { 270441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (session != mSession && mVirtualizer != null) { 271441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.release(); 272441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer = null; 273441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 274441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 275441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer = new Virtualizer(0, session); 276441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mSession = session; 277441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalArgumentException e) { 278441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Log.e(TAG, "getVirtualizer() Virtualizer not found exception: "+e); 279441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (UnsupportedOperationException e) { 280441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Log.e(TAG, "getVirtualizer() Effect library not loaded exception: "+e); 281441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 282441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 283441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertNotNull("could not create mVirtualizer", mVirtualizer); 284441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 285441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 286441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private void releaseVirtualizer() { 287441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (mVirtualizer != null) { 288441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.release(); 289441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer = null; 290441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 291441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 292441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 293441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent} 294441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 295