/* * Copyright (C) 2014 Haruki Hasegawa * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.h6ah4i.android.media.openslmediaplayer.classtest; import com.h6ah4i.android.media.IBasicMediaPlayer; import com.h6ah4i.android.media.IMediaPlayerFactory; import com.h6ah4i.android.media.audiofx.IAudioEffect; import com.h6ah4i.android.media.audiofx.IEnvironmentalReverb; import com.h6ah4i.android.media.openslmediaplayer.base.BasicMediaPlayerTestCaseBase; import com.h6ah4i.android.media.openslmediaplayer.testing.ParameterizedTestArgs; import com.h6ah4i.android.media.openslmediaplayer.testing.ParameterizedTestSuiteBuilder; import com.h6ah4i.android.media.utils.EnvironmentalReverbPresets; import junit.framework.TestSuite; import java.util.ArrayList; import java.util.List; public class EnvironmentalReverbTestCase extends BasicMediaPlayerTestCaseBase { private static final class TestParams extends BasicTestParams { private final boolean mEnabled; public TestParams( Class<? extends IMediaPlayerFactory> factoryClass, boolean enabled) { super(factoryClass); mEnabled = enabled; } public boolean getPreconditionEnabled() { return mEnabled; } @Override public String toString() { return super.toString() + ", " + mEnabled; } } public static TestSuite buildTestSuite( Class<? extends IMediaPlayerFactory> factoryClazz) { TestSuite suite = new TestSuite(); String[] testsWithoutPreconditionEnabled = new String[] { "testSetAndGetEnabled", "testHasControl", "testMultiInstanceBehavior", "testAfterReleased", }; // use TestParam.getPreconditionEnabled() { ParameterizedTestSuiteBuilder.Filter filter = ParameterizedTestSuiteBuilder.notMatches( testsWithoutPreconditionEnabled); List<TestParams> params = new ArrayList<TestParams>(); params.add(new TestParams(factoryClazz, false)); params.add(new TestParams(factoryClazz, true)); suite.addTest(ParameterizedTestSuiteBuilder.buildDetail( EnvironmentalReverbTestCase.class, params, filter, false)); } // don't use TestParam.getPreconditionEnabled() { ParameterizedTestSuiteBuilder.Filter filter = ParameterizedTestSuiteBuilder.matches( testsWithoutPreconditionEnabled); List<TestParams> params = new ArrayList<TestParams>(); params.add(new TestParams(factoryClazz, false)); suite.addTest(ParameterizedTestSuiteBuilder.buildDetail( EnvironmentalReverbTestCase.class, params, filter, false)); } return suite; } public EnvironmentalReverbTestCase(ParameterizedTestArgs args) { super(args); } // // Exposed test cases // public void testSetAndGetEnabled() { IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); assertFalse(reverb.getEnabled()); assertEquals(IAudioEffect.SUCCESS, reverb.setEnabled(true)); assertTrue(reverb.getEnabled()); assertEquals(IAudioEffect.SUCCESS, reverb.setEnabled(false)); assertFalse(reverb.getEnabled()); } finally { releaseQuietly(reverb); } } public void testSetAndGetRoomLevel() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { ROOM_LEVEL_MIN, ROOM_LEVEL_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { reverb.setRoomLevel(value); assertEquals(value, reverb.getRoomLevel()); assertEquals(value, reverb.getProperties().roomLevel); } } finally { releaseQuietly(reverb); } } public void testSetInvalidRoomLevel() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { (short) (ROOM_LEVEL_MIN - 1), (short) (ROOM_LEVEL_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { try { reverb.setRoomLevel(value); fail("expected = " + value + ", actual = " + reverb.getRoomLevel()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetRoomHFLevel() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { ROOM_HF_LEVEL_MIN, ROOM_HF_LEVEL_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { reverb.setRoomHFLevel(value); assertEquals(value, reverb.getRoomHFLevel()); assertEquals(value, reverb.getProperties().roomHFLevel); } } finally { releaseQuietly(reverb); } } public void testSetInvalidRoomHFLevel() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { (short) (ROOM_HF_LEVEL_MIN - 1), (short) (ROOM_HF_LEVEL_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { try { reverb.setRoomHFLevel(value); fail("expected = " + value + ", actual = " + reverb.getRoomHFLevel()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetDecayTime() { TestParams params = (TestParams) getTestParams(); int[] VALUES = new int[] { DECAY_TIME_MIN, DECAY_TIME_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (int value : VALUES) { reverb.setDecayTime(value); assertEquals(value, reverb.getDecayTime()); assertEquals(value, reverb.getProperties().decayTime); } } finally { releaseQuietly(reverb); } } public void testSetInvalidDecayTime() { TestParams params = (TestParams) getTestParams(); int[] VALUES = new int[] { (DECAY_TIME_MIN - 1), (DECAY_TIME_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (int value : VALUES) { try { reverb.setDecayTime(value); fail("expected = " + value + ", actual = " + reverb.getDecayTime()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetDecayHFRatio() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { DECAY_HF_RATIO_MIN, DECAY_HF_RATIO_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { reverb.setDecayHFRatio(value); assertEquals(value, reverb.getDecayHFRatio()); assertEquals(value, reverb.getProperties().decayHFRatio); } } finally { releaseQuietly(reverb); } } public void testSetInvalidDecayHFRatio() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { (short) (DECAY_HF_RATIO_MIN - 1), (short) (DECAY_HF_RATIO_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { try { reverb.setDecayHFRatio(value); fail("expected = " + value + ", actual = " + reverb.getDecayHFRatio()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetReflectionsLevel() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { REFLECTIONS_LEVEL_MIN, REFLECTIONS_LEVEL_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { reverb.setReflectionsLevel(value); assertEquals(value, reverb.getReflectionsLevel()); assertEquals(value, reverb.getProperties().reflectionsLevel); } } finally { releaseQuietly(reverb); } } public void testSetInvalidReflectionsLevel() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { (short) (REFLECTIONS_LEVEL_MIN - 1), (short) (REFLECTIONS_LEVEL_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { try { reverb.setReflectionsLevel(value); fail("expected = " + value + ", actual = " + reverb.getReflectionsLevel()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetReflectionsDelay() { TestParams params = (TestParams) getTestParams(); int[] VALUES = new int[] { REFLECTIONS_DELAY_MIN, REFLECTIONS_DELAY_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (int value : VALUES) { reverb.setReflectionsDelay(value); assertEquals(value, reverb.getReflectionsDelay()); assertEquals(value, reverb.getProperties().reflectionsDelay); } } finally { releaseQuietly(reverb); } } public void testSetInvalidReflectionsDelay() { TestParams params = (TestParams) getTestParams(); int[] VALUES = new int[] { (REFLECTIONS_DELAY_MIN - 1), (REFLECTIONS_DELAY_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (int value : VALUES) { try { reverb.setReflectionsDelay(value); fail("expected = " + value + ", actual = " + reverb.getReflectionsDelay()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetReverbLevel() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { REVERB_LEVEL_MIN, REVERB_LEVEL_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { reverb.setReverbLevel(value); assertEquals(value, reverb.getReverbLevel()); assertEquals(value, reverb.getProperties().reverbLevel); } } finally { releaseQuietly(reverb); } } public void testSetInvalidReverbLevel() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { (short) (REVERB_LEVEL_MIN - 1), (short) (REVERB_LEVEL_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { try { reverb.setReverbLevel(value); fail("expected = " + value + ", actual = " + reverb.getReverbLevel()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetReverbDelay() { TestParams params = (TestParams) getTestParams(); int[] VALUES = new int[] { REVERB_DELAY_MIN, REVERB_DELAY_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (int value : VALUES) { reverb.setReverbDelay(value); assertEquals(value, reverb.getReverbDelay()); assertEquals(value, reverb.getProperties().reverbDelay); } } finally { releaseQuietly(reverb); } } public void testSetInvalidReverbDelay() { TestParams params = (TestParams) getTestParams(); int[] VALUES = new int[] { (REVERB_DELAY_MIN - 1), (REVERB_DELAY_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (int value : VALUES) { try { reverb.setReverbDelay(value); fail("expected = " + value + ", actual = " + reverb.getReverbDelay()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetDiffusion() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { DIFFUSION_MIN, DIFFUSION_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { reverb.setDiffusion(value); assertEquals(value, reverb.getDiffusion()); // XXX HTC Evo 3D assertEquals(value, reverb.getProperties().diffusion); } } finally { releaseQuietly(reverb); } } public void testSetInvalidDiffusion() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { (short) (DIFFUSION_MIN - 1), (short) (DIFFUSION_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { try { reverb.setDiffusion(value); fail("expected = " + value + ", actual = " + reverb.getDiffusion()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetDensity() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { DENSITY_MIN, DENSITY_MAX }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { reverb.setDensity(value); assertEquals(value, reverb.getDensity()); assertEquals(value, reverb.getProperties().density); } } finally { releaseQuietly(reverb); } } public void testSetInvalidDensity() { TestParams params = (TestParams) getTestParams(); short[] VALUES = new short[] { (short) (DENSITY_MIN - 1), (short) (DENSITY_MAX + 1) }; IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (short value : VALUES) { try { reverb.setDensity(value); fail("expected = " + value + ", actual = " + reverb.getDensity()); } catch (IllegalArgumentException e) { // expected } } } finally { releaseQuietly(reverb); } } public void testSetAndGetPropertiesCompat() { TestParams params = (TestParams) getTestParams(); IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); for (int i = 0; i < PRESETS.length; i++) { IEnvironmentalReverb.Settings expected = PRESETS[i]; reverb.setProperties(expected); IEnvironmentalReverb.Settings actual = reverb.getProperties(); assertEqualsExceptForNotImplementedParams(expected, actual); } } finally { releaseQuietly(reverb); } } public void testGetId() { TestParams params = (TestParams) getTestParams(); IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); reverb.setEnabled(params.getPreconditionEnabled()); assertNotEquals(0, reverb.getId()); } finally { releaseQuietly(reverb); } } public void testHasControl() { IEnvironmentalReverb reverb1 = null, reverb2 = null, reverb3 = null; try { // create instance 1 // NOTE: [1]: has control, [2] not created, [3] not created reverb1 = getFactory().createEnvironmentalReverb(); assertTrue(reverb1.hasControl()); // create instance 2 // NOTE: [1]: lost control, [2] has control, [3] not created reverb2 = getFactory().createEnvironmentalReverb(); assertFalse(reverb1.hasControl()); assertTrue(reverb2.hasControl()); // create instance 3 // NOTE: [1]: lost control, [2] lost control, [3] not created reverb3 = getFactory().createEnvironmentalReverb(); assertFalse(reverb1.hasControl()); assertFalse(reverb2.hasControl()); assertTrue(reverb3.hasControl()); // release instance 3 // NOTE: [1]: lost control, [2] has control, [3] released reverb3.release(); reverb3 = null; assertFalse(reverb1.hasControl()); assertTrue(reverb2.hasControl()); // release instance 2 // NOTE: [1]: lost control, [2] released, [3] released reverb2.release(); reverb2 = null; assertTrue(reverb1.hasControl()); } finally { releaseQuietly(reverb1); releaseQuietly(reverb2); releaseQuietly(reverb3); } } public void testMultiInstanceBehavior() { IEnvironmentalReverb reverb1 = null, reverb2 = null; try { reverb1 = getFactory().createEnvironmentalReverb(); reverb2 = getFactory().createEnvironmentalReverb(); // check pre. conditions assertFalse(reverb1.hasControl()); assertTrue(reverb2.hasControl()); assertFalse(reverb1.getEnabled()); assertFalse(reverb2.getEnabled()); assertEquals(reverb1.getProperties(), reverb2.getProperties()); IEnvironmentalReverb.Settings expectedPreset = EnvironmentalReverbPresets.CAVE; // change states assertEquals(IAudioEffect.SUCCESS, reverb2.setEnabled(true)); reverb2.setProperties(expectedPreset); // check post conditions assertFalse(reverb1.hasControl()); assertTrue(reverb2.hasControl()); assertTrue(reverb1.getEnabled()); assertTrue(reverb2.getEnabled()); assertEquals(expectedPreset.roomLevel, reverb1.getRoomLevel()); assertEquals(expectedPreset.roomLevel, reverb2.getRoomLevel()); assertEquals(expectedPreset.roomHFLevel, reverb1.getRoomHFLevel()); assertEquals(expectedPreset.roomHFLevel, reverb2.getRoomHFLevel()); assertEquals(expectedPreset.decayTime, reverb1.getDecayTime()); assertEquals(expectedPreset.decayTime, reverb2.getDecayTime()); assertEquals(expectedPreset.decayHFRatio, reverb1.getDecayHFRatio()); assertEquals(expectedPreset.decayHFRatio, reverb2.getDecayHFRatio()); // NOTE: This parameter is not implemented yet (Android 4.4) // assertEquals(expectedPreset.reflectionsLevel, // reverb1.getReflectionsLevel()); // assertEquals(expectedPreset.reflectionsLevel, // reverb2.getReflectionsLevel()); assertEquals(0, reverb1.getReflectionsLevel()); assertEquals(0, reverb2.getReflectionsLevel()); // NOTE: This parameter is not implemented yet (Android 4.4) // assertEquals(expectedPreset.reflectionsDelay, // reverb1.getReflectionsDelay()); // assertEquals(expectedPreset.reflectionsDelay, // reverb2.getReflectionsDelay()); assertEquals(0, reverb1.getReflectionsDelay()); assertEquals(0, reverb2.getReflectionsDelay()); assertEquals(expectedPreset.reverbLevel, reverb1.getReverbLevel()); assertEquals(expectedPreset.reverbLevel, reverb2.getReverbLevel()); // NOTE: This parameter is not implemented yet (Android 4.4) // assertEquals(expectedPreset.reverbDelay, // reverb1.getReverbDelay()); // assertEquals(expectedPreset.reverbDelay, // reverb2.getReverbDelay()); assertEquals(0, reverb1.getReverbDelay()); assertEquals(0, reverb2.getReverbDelay()); // XXX HTC Evo 3D assertEquals(expectedPreset.diffusion, reverb1.getDiffusion()); assertEquals(expectedPreset.diffusion, reverb2.getDiffusion()); assertEquals(expectedPreset.density, reverb1.getDensity()); assertEquals(expectedPreset.density, reverb2.getDensity()); assertEqualsExceptForNotImplementedParams(expectedPreset, reverb1.getProperties()); assertEqualsExceptForNotImplementedParams(expectedPreset, reverb2.getProperties()); // release effect 2 reverb2.release(); reverb2 = null; // check effect gains control // XXX This assertion may be fail when using StandardMediaPlayer assertTrue(reverb1.hasControl()); assertEquals(IAudioEffect.SUCCESS, reverb1.setEnabled(false)); } finally { releaseQuietly(reverb1); releaseQuietly(reverb2); } } public void testAfterReleased() { try { createReleasedEnvironmentalReverb().hasControl(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getEnabled(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setEnabled(false); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getId(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getRoomLevel(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setRoomLevel(ROOM_LEVEL_MIN); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getRoomHFLevel(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setRoomHFLevel(ROOM_HF_LEVEL_MIN); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getDecayTime(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setDecayTime(DECAY_TIME_MIN); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getDecayHFRatio(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setDecayHFRatio(DECAY_HF_RATIO_MIN); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getReflectionsLevel(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setReflectionsLevel(REFLECTIONS_LEVEL_MIN); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getReflectionsDelay(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setReflectionsDelay(REFLECTIONS_DELAY_MIN); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getReverbDelay(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setReverbDelay(REVERB_DELAY_MIN); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getDiffusion(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setDiffusion(DIFFUSION_MIN); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getDensity(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setDensity(DENSITY_MIN); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().getProperties(); fail(); } catch (IllegalStateException e) { // expected } try { createReleasedEnvironmentalReverb().setProperties(PRESETS[0]); fail(); } catch (IllegalStateException e) { // expected } } public void testReleaseAfterAttachedPlayerReleased() throws Exception { IBasicMediaPlayer player = null; IEnvironmentalReverb reverb = null; try { player = createWrappedPlayerInstance(); reverb = getFactory().createEnvironmentalReverb(); transitStateToPrepared(player, null); // attach the effect int effectId = reverb.getId(); assertNotEquals(0, effectId); player.attachAuxEffect(effectId); // release player player.release(); // release reverb reverb.release(); } finally { releaseQuietly(player); releaseQuietly(reverb); } } public void testReleaseBeforeAttachedPlayerReleased() throws Exception { IBasicMediaPlayer player = null; IEnvironmentalReverb reverb = null; try { player = createWrappedPlayerInstance(); reverb = getFactory().createEnvironmentalReverb(); transitStateToPrepared(player, null); // attach the effect int effectId = reverb.getId(); assertNotEquals(0, effectId); player.attachAuxEffect(effectId); // release reverb reverb.release(); // release player player.release(); } finally { releaseQuietly(player); releaseQuietly(reverb); } } public void testReleaseAfterFactoryReleased() throws Exception { IEnvironmentalReverb reverb = null; try { reverb = getFactory().createEnvironmentalReverb(); IEnvironmentalReverb.Settings origSettings = reverb.getProperties(); getFactory().release(); // NOTE: The reverb object is still usable assertTrue(reverb.hasControl()); assertFalse(reverb.getEnabled()); assertNotEquals(0, reverb.getId()); reverb.getRoomLevel(); reverb.setRoomLevel(ROOM_LEVEL_MIN); reverb.getRoomHFLevel(); reverb.setRoomHFLevel(ROOM_HF_LEVEL_MIN); reverb.getDecayHFRatio(); reverb.setDecayHFRatio(DECAY_HF_RATIO_MIN); reverb.getDecayTime(); reverb.setDecayTime(DECAY_TIME_MIN); reverb.getReflectionsLevel(); reverb.setReflectionsLevel(REFLECTIONS_LEVEL_MIN); reverb.getReflectionsDelay(); reverb.setReflectionsDelay(REFLECTIONS_DELAY_MIN); reverb.getDiffusion(); reverb.setDiffusion(DIFFUSION_MIN); reverb.getDensity(); reverb.setDensity(DENSITY_MIN); reverb.getProperties(); reverb.setProperties(origSettings); reverb.release(); reverb = null; } finally { releaseQuietly(reverb); } } // // Utilities // static void assertEquals( IEnvironmentalReverb.Settings expected, IEnvironmentalReverb.Settings actual) { assertEquals(expected.toString(), actual.toString()); } static void assertEqualsExceptForNotImplementedParams( IEnvironmentalReverb.Settings expected, IEnvironmentalReverb.Settings actual) { assertEquals(expected.roomLevel, actual.roomLevel); assertEquals(expected.roomHFLevel, actual.roomHFLevel); assertEquals(expected.decayTime, actual.decayTime); assertEquals(expected.decayHFRatio, actual.decayHFRatio); assertEquals(0, actual.reflectionsLevel); assertEquals(0, actual.reflectionsDelay); // assertEquals(expected.reflectionsLevel, actual.reflectionsLevel); // assertEquals(expected.reflectionsDelay, actual.reflectionsDelay); assertEquals(expected.reverbLevel, actual.reverbLevel); // assertEquals(expected.reverbDelay, actual.reverbDelay); assertEquals(expected.diffusion, actual.diffusion); assertEquals(expected.density, actual.density); } IEnvironmentalReverb createReleasedEnvironmentalReverb() { IEnvironmentalReverb reverb = getFactory().createEnvironmentalReverb(); reverb.release(); return reverb; } static void verifySettings(IEnvironmentalReverb.Settings settings) { assertRange(settings.roomLevel, ROOM_LEVEL_MIN, ROOM_LEVEL_MAX); assertRange(settings.roomHFLevel, ROOM_HF_LEVEL_MIN, ROOM_HF_LEVEL_MAX); assertRange(settings.decayTime, DECAY_TIME_MIN, DECAY_TIME_MAX); assertRange(settings.decayHFRatio, DECAY_HF_RATIO_MIN, DECAY_HF_RATIO_MAX); assertRange(settings.reflectionsLevel, REFLECTIONS_LEVEL_MIN, REFLECTIONS_LEVEL_MAX); assertRange(settings.reverbDelay, REFLECTIONS_DELAY_MIN, REFLECTIONS_DELAY_MAX); assertRange(settings.reverbLevel, REVERB_LEVEL_MIN, REVERB_LEVEL_MAX); assertRange(settings.reflectionsDelay, REVERB_DELAY_MIN, REVERB_DELAY_MAX); assertRange(settings.diffusion, DIFFUSION_MIN, DIFFUSION_MAX); assertRange(settings.density, DENSITY_MIN, DENSITY_MAX); } private static final short ROOM_LEVEL_MIN = (short) -9000; private static final short ROOM_LEVEL_MAX = (short) 0; private static final short ROOM_HF_LEVEL_MIN = (short) -9000; private static final short ROOM_HF_LEVEL_MAX = (short) 0; private static final int DECAY_TIME_MIN = 100; /* Spec.: 20000, Actually(LVREV_MAX_T60): 7000 */ private static final int DECAY_TIME_MAX = 7000; private static final short DECAY_HF_RATIO_MIN = (short) 100; private static final short DECAY_HF_RATIO_MAX = (short) 2000; /* Spec.: -9000, Actually: 0 (not implemented yet) */ private static final short REFLECTIONS_LEVEL_MIN = (short) 0; /* Spec.: 1000, Actually: 0 (not implemented yet) */ private static final short REFLECTIONS_LEVEL_MAX = (short) 0; /* Spec.: 0, Actually: 0 (not implemented yet) */ private static final int REFLECTIONS_DELAY_MIN = 0; /* Spec.: 300, Actually: 0 (not implemented yet) */ private static final int REFLECTIONS_DELAY_MAX = 0; private static final short REVERB_LEVEL_MIN = (short) -9000; private static final short REVERB_LEVEL_MAX = (short) 2000; /* Spec.: 0, Actually: 0 (not implemented yet) */ private static final int REVERB_DELAY_MIN = 0; /* Spec.: 100, Actually: 0 (not implemented yet) */ private static final int REVERB_DELAY_MAX = 0; private static final short DIFFUSION_MIN = (short) 0; private static final short DIFFUSION_MAX = (short) 1000; private static final short DENSITY_MIN = (short) 0; private static final short DENSITY_MAX = (short) 1000; private static final IEnvironmentalReverb.Settings[] PRESETS = new IEnvironmentalReverb.Settings[] { EnvironmentalReverbPresets.DEFAULT, EnvironmentalReverbPresets.GENERIC, EnvironmentalReverbPresets.PADDEDCELL, EnvironmentalReverbPresets.ROOM, EnvironmentalReverbPresets.BATHROOM, EnvironmentalReverbPresets.LIVINGROOM, EnvironmentalReverbPresets.STONEROOM, EnvironmentalReverbPresets.AUDITORIUM, EnvironmentalReverbPresets.CONCERTHALL, EnvironmentalReverbPresets.CAVE, EnvironmentalReverbPresets.ARENA, EnvironmentalReverbPresets.HANGAR, EnvironmentalReverbPresets.CARPETEDHALLWAY, EnvironmentalReverbPresets.HALLWAY, EnvironmentalReverbPresets.STONECORRIDOR, EnvironmentalReverbPresets.ALLEY, EnvironmentalReverbPresets.FOREST, EnvironmentalReverbPresets.CITY, EnvironmentalReverbPresets.MOUNTAINS, EnvironmentalReverbPresets.QUARRY, EnvironmentalReverbPresets.PLAIN, EnvironmentalReverbPresets.PARKINGLOT, EnvironmentalReverbPresets.SEWERPIPE, EnvironmentalReverbPresets.UNDERWATER, EnvironmentalReverbPresets.SMALLROOM, EnvironmentalReverbPresets.MEDIUMROOM, EnvironmentalReverbPresets.LARGEROOM, EnvironmentalReverbPresets.MEDIUMHALL, EnvironmentalReverbPresets.LARGEHALL, EnvironmentalReverbPresets.PLATE, }; }