Home | History | Annotate | Download | only in audio
      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