1391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent/* 2391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * Copyright (C) 2010 The Android Open Source Project 3391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * 4391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 5391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * you may not use this file except in compliance with the License. 6391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * You may obtain a copy of the License at 7391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * 8391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 9391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * 10391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * Unless required by applicable law or agreed to in writing, software 11391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 12391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * See the License for the specific language governing permissions and 14391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * limitations under the License. 15391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent */ 16391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 17db6028508c8eb31a0de1dcdfc410ddfe6df7c5adXia Wangpackage com.android.mediaframeworktest.functional.audio; 18391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 19391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport com.android.mediaframeworktest.MediaFrameworkTest; 20391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport com.android.mediaframeworktest.MediaNames; 21db6028508c8eb31a0de1dcdfc410ddfe6df7c5adXia Wangimport com.android.mediaframeworktest.functional.EnergyProbe; 22391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.content.Context; 23391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.content.res.AssetFileDescriptor; 241a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.AudioEffect; 25391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.media.AudioManager; 261a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.PresetReverb; 271a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.Visualizer; 28391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.media.MediaPlayer; 29391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 30391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.os.Looper; 31391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.test.suitebuilder.annotation.LargeTest; 32391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.test.suitebuilder.annotation.MediumTest; 33391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.test.suitebuilder.annotation.Suppress; 34391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.test.ActivityInstrumentationTestCase2; 35391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport android.util.Log; 36391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 37391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport java.nio.ByteOrder; 38391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport java.nio.ByteBuffer; 39391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentimport java.util.UUID; 40391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 41391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent/** 42391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent * Junit / Instrumentation test case for the media AudioTrack api 43391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 44391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent */ 45391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentpublic class MediaPresetReverbTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 46391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent private String TAG = "MediaPresetReverbTest"; 475e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent // Implementor UUID for volume controller effect defined in 485e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp 495e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent private final static UUID VOLUME_EFFECT_UUID = 505e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"); 515e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent // Implementor UUID for preset reverb effect defined in 525e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp 535e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent private final static UUID PRESET_REVERB_EFFECT_UUID = 545e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent UUID.fromString("172cdf00-a3bc-11df-a72f-0002a5d5c51b"); 55391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 56391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent private PresetReverb mReverb = null; 57391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent private int mSession = -1; 58391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 59391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent public MediaPresetReverbTest() { 60391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent super("com.android.mediaframeworktest", MediaFrameworkTest.class); 61391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 62391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 63391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent @Override 64391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent protected void setUp() throws Exception { 65391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent super.setUp(); 66391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 67391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 68391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent @Override 69391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent protected void tearDown() throws Exception { 70391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent super.tearDown(); 71391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent releaseReverb(); 72391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 73391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 74391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent private static void assumeTrue(String message, boolean cond) { 75391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertTrue("(assume)"+message, cond); 76391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 77391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 78391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent private void log(String testName, String message) { 79391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Log.v(TAG, "["+testName+"] "+message); 80391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 81391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 82391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent private void loge(String testName, String message) { 83391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Log.e(TAG, "["+testName+"] "+message); 84391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 85391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 86391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //----------------------------------------------------------------- 87391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // PRESET REVEB TESTS: 88391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //---------------------------------- 89391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 90391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 91391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //----------------------------------------------------------------- 92391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // 0 - constructor 93391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //---------------------------------- 94391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 95391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //Test case 0.0: test constructor and release 96391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent @LargeTest 97391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent public void test0_0ConstructorAndRelease() throws Exception { 98391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent boolean result = false; 99391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent String msg = "test1_0ConstructorAndRelease()"; 100391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent PresetReverb reverb = null; 101391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent try { 102391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent reverb = new PresetReverb(0, 0); 103391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertNotNull(msg + ": could not create PresetReverb", reverb); 104391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent try { 105391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertTrue(msg +": invalid effect ID", (reverb.getId() != 0)); 106391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalStateException e) { 107391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": PresetReverb not initialized"); 108391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 109391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent result = true; 110391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalArgumentException e) { 111391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": PresetReverb not found"); 112391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (UnsupportedOperationException e) { 113391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": Effect library not loaded"); 114391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } finally { 115391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (reverb != null) { 116391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent reverb.release(); 117391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 118391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 119391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertTrue(msg, result); 120391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 121391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 122391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //----------------------------------------------------------------- 123391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // 1 - get/set parameters 124391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //---------------------------------- 125391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 126391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //Test case 1.0: test preset 127391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent @LargeTest 128391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent public void test1_0Preset() throws Exception { 129391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent boolean result = false; 130391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent String msg = "test1_0Preset()"; 131391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent getReverb(0); 132391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent try { 133391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mReverb.setPreset((short)PresetReverb.PRESET_LARGEROOM); 134391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent short preset = mReverb.getPreset(); 135391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertEquals(msg +": got incorrect preset", 136391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent (short)PresetReverb.PRESET_LARGEROOM, 137391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent preset); 138391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent result = true; 139391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalArgumentException e) { 140391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": Bad parameter value"); 141391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "Bad parameter value"); 142391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (UnsupportedOperationException e) { 143391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": get parameter() rejected"); 144391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "get parameter() rejected"); 145391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalStateException e) { 146391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat("get parameter() called in wrong state"); 147391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "get parameter() called in wrong state"); 148391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } finally { 149391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent releaseReverb(); 150391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 151391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertTrue(msg, result); 152391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 153391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 154391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //Test case 1.1: test properties 155391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent @LargeTest 156391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent public void test1_1Properties() throws Exception { 157391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent boolean result = false; 158391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent String msg = "test1_1Properties()"; 159391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent getReverb(0); 160391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent try { 161391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent PresetReverb.Settings settings = mReverb.getProperties(); 162391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent short newPreset = (short)PresetReverb.PRESET_LARGEROOM; 163391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (settings.preset == (short)PresetReverb.PRESET_LARGEROOM) { 164391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent newPreset = (short)PresetReverb.PRESET_SMALLROOM; 165391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 166391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent String str = settings.toString(); 167391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent settings = new PresetReverb.Settings(str); 168391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent settings.preset = newPreset; 169391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mReverb.setProperties(settings); 170391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent settings = mReverb.getProperties(); 171391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertEquals(msg +": setProperties failed", newPreset, settings.preset); 172391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent result = true; 173391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalArgumentException e) { 174391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": Bad parameter value"); 175391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "Bad parameter value"); 176391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (UnsupportedOperationException e) { 177391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": get parameter() rejected"); 178391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "get parameter() rejected"); 179391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalStateException e) { 180391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat("get parameter() called in wrong state"); 181391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "get parameter() called in wrong state"); 182391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } finally { 183391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent releaseReverb(); 184391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 185391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertTrue(msg, result); 186391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 187391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 188391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //----------------------------------------------------------------- 189391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // 2 - Effect action 190391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //---------------------------------- 191391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 192391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //Test case 2.0: test actual auxiliary reverb influence on sound 193391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent @LargeTest 194391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent public void test2_0AuxiliarySoundModification() throws Exception { 195391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent boolean result = false; 196391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent String msg = "test2_0AuxiliarySoundModification()"; 197391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent EnergyProbe probe = null; 198391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent AudioEffect vc = null; 199391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent MediaPlayer mp = null; 200391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent AudioManager am = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE); 201c81e0ad9bd438575389623f523a28e2e6ca69236Eric Laurent int ringerMode = am.getRingerMode(); 202c81e0ad9bd438575389623f523a28e2e6ca69236Eric Laurent am.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 203391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent int volume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 204391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent am.setStreamVolume(AudioManager.STREAM_MUSIC, 205391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 206391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 0); 207391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent getReverb(0); 208391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent try { 209391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent probe = new EnergyProbe(0); 210391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // creating a volume controller on output mix ensures that ro.audio.silent mutes 211391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // audio after the effects and not before 212391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent vc = new AudioEffect( 2135e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent AudioEffect.EFFECT_TYPE_NULL, 2145e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent VOLUME_EFFECT_UUID, 2155e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent 0, 2165e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent 0); 217391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent vc.setEnabled(true); 218391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 219391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp = new MediaPlayer(); 220391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.setDataSource(MediaNames.SINE_200_1000); 221391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 222391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.attachAuxEffect(mReverb.getId()); 223391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.setAuxEffectSendLevel(1.0f); 224391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mReverb.setPreset((short)PresetReverb.PRESET_PLATE); 225391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mReverb.setEnabled(true); 226391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.prepare(); 227391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.start(); 228391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Thread.sleep(1000); 229391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.stop(); 230391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Thread.sleep(200); 231391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // measure energy around 1kHz after media player was stopped for 200 ms 232391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent int energy1000 = probe.capture(1000); 233391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertTrue(msg + ": reverb has no effect", energy1000 > 0); 234391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent result = true; 235391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalArgumentException e) { 236391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": Bad parameter value"); 237391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "Bad parameter value"); 238391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (UnsupportedOperationException e) { 239391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": get parameter() rejected"); 240391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "get parameter() rejected"); 241391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalStateException e) { 242391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat("get parameter() called in wrong state"); 243391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "get parameter() called in wrong state"); 244391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (InterruptedException e) { 245391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "sleep() interrupted"); 246391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 247391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent finally { 248391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent releaseReverb(); 249391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (mp != null) { 250391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.release(); 251391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 252391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (vc != null) { 253391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent vc.release(); 254391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 255391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (probe != null) { 256391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent probe.release(); 257391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 258391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent am.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0); 259c81e0ad9bd438575389623f523a28e2e6ca69236Eric Laurent am.setRingerMode(ringerMode); 260391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 261391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertTrue(msg, result); 262391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 263391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 264391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //Test case 2.1: test actual insert reverb influence on sound 265391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent @LargeTest 266391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent public void test2_1InsertSoundModification() throws Exception { 267391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent boolean result = false; 268391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent String msg = "test2_1InsertSoundModification()"; 269391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent EnergyProbe probe = null; 270391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent AudioEffect vc = null; 271391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent MediaPlayer mp = null; 27271fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent AudioEffect rvb = null; 273391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent AudioManager am = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE); 274c81e0ad9bd438575389623f523a28e2e6ca69236Eric Laurent int ringerMode = am.getRingerMode(); 275c81e0ad9bd438575389623f523a28e2e6ca69236Eric Laurent am.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 276391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent int volume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 277391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent am.setStreamVolume(AudioManager.STREAM_MUSIC, 278391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 279391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 0); 280391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent try { 281391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // creating a volume controller on output mix ensures that ro.audio.silent mutes 282391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // audio after the effects and not before 283391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent vc = new AudioEffect( 2845e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent AudioEffect.EFFECT_TYPE_NULL, 2855e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent VOLUME_EFFECT_UUID, 2865e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent 0, 2875e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent 0); 288391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent vc.setEnabled(true); 289391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 290391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp = new MediaPlayer(); 291391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.setDataSource(MediaNames.SINE_200_1000); 292391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 29371fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent 29471fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent // create reverb with UUID instead of PresetReverb constructor otherwise an auxiliary 29571fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent // reverb will be chosen by the effect framework as we are on session 0 29671fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent rvb = new AudioEffect( 29771fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent AudioEffect.EFFECT_TYPE_NULL, 2985e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent PRESET_REVERB_EFFECT_UUID, 29971fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent 0, 30071fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent 0); 30171fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent 30271fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent rvb.setParameter(PresetReverb.PARAM_PRESET, PresetReverb.PRESET_PLATE); 30371fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent rvb.setEnabled(true); 30471fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent 30571fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent // create probe after reverb so that it is chained behind the reverb in the 30671fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent // effect chain 30771fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent probe = new EnergyProbe(0); 30871fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent 309391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.prepare(); 310391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.start(); 311391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Thread.sleep(1000); 312391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.stop(); 313391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Thread.sleep(200); 314391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // measure energy around 1kHz after media player was stopped for 200 ms 315391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent int energy1000 = probe.capture(1000); 316391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertTrue(msg + ": reverb has no effect", energy1000 > 0); 317391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent result = true; 318391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalArgumentException e) { 319391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": Bad parameter value"); 320391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "Bad parameter value"); 321391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (UnsupportedOperationException e) { 322391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat(": get parameter() rejected"); 323391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "get parameter() rejected"); 324391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalStateException e) { 325391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent msg = msg.concat("get parameter() called in wrong state"); 326391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "get parameter() called in wrong state"); 327391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (InterruptedException e) { 328391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent loge(msg, "sleep() interrupted"); 329391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 330391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent finally { 331391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (mp != null) { 332391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mp.release(); 333391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 334391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (vc != null) { 335391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent vc.release(); 336391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 33771fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent if (rvb != null) { 33871fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent rvb.release(); 33971fe631c78756da48662f8ee220fa7b09f5413fbEric Laurent } 340391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (probe != null) { 341391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent probe.release(); 342391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 343391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent am.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0); 344c81e0ad9bd438575389623f523a28e2e6ca69236Eric Laurent am.setRingerMode(ringerMode); 345391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 346391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertTrue(msg, result); 347391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 348391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 349391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //----------------------------------------------------------------- 350391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent // private methods 351391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent //---------------------------------- 352391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 353391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent private void getReverb(int session) { 354391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (mReverb == null || session != mSession) { 355391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (session != mSession && mReverb != null) { 356391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mReverb.release(); 357391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mReverb = null; 358391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 359391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent try { 360391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mReverb = new PresetReverb(0, session); 361391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mSession = session; 362391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (IllegalArgumentException e) { 363391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Log.e(TAG, "getReverb() PresetReverb not found exception: "+e); 364391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } catch (UnsupportedOperationException e) { 365391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Log.e(TAG, "getReverb() Effect library not loaded exception: "+e); 366391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 367391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 368391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent assertNotNull("could not create mReverb", mReverb); 369391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 370391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 371391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent private void releaseReverb() { 372391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent if (mReverb != null) { 373391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mReverb.release(); 374391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent mReverb = null; 375391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 376391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 377391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 378391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent} 379