@@ -188,6 +188,37 @@ public void test1_1CaptureSize() throws Exception {
188188 assertTrue (msg , result );
189189 }
190190
191+ //Test case 1.2: check scaling mode
192+ @ LargeTest
193+ public void test1_2ScalingMode () throws Exception {
194+ boolean result = false ;
195+ String msg = "test1_2ScalingMode()" ;
196+ getVisualizer (0 );
197+ try {
198+ int res = mVisualizer .setScalingMode (Visualizer .SCALING_MODE_AS_PLAYED );
199+ assertEquals (msg + ": setting SCALING_MODE_AS_PLAYED failed" ,
200+ res , Visualizer .SUCCESS );
201+ int mode = mVisualizer .getScalingMode ();
202+ assertEquals (msg + ": setting SCALING_MODE_AS_PLAYED didn't stick" ,
203+ mode , Visualizer .SCALING_MODE_AS_PLAYED );
204+
205+ res = mVisualizer .setScalingMode (Visualizer .SCALING_MODE_NORMALIZED );
206+ assertEquals (msg + ": setting SCALING_MODE_NORMALIZED failed" ,
207+ res , Visualizer .SUCCESS );
208+ mode = mVisualizer .getScalingMode ();
209+ assertEquals (msg + ": setting SCALING_MODE_NORMALIZED didn't stick" ,
210+ mode , Visualizer .SCALING_MODE_NORMALIZED );
211+
212+ result = true ;
213+ } catch (IllegalStateException e ) {
214+ msg = msg .concat ("IllegalStateException" );
215+ loge (msg , "set/get parameter() called in wrong state: " + e );
216+ } finally {
217+ releaseVisualizer ();
218+ }
219+ assertTrue (msg , result );
220+ }
221+
191222 //-----------------------------------------------------------------
192223 // 2 - check capture
193224 //----------------------------------
@@ -403,6 +434,91 @@ public void test2_1ListenerCapture() throws Exception {
403434 assertTrue (msg , result );
404435 }
405436
437+ //Test case 2.2: test capture in polling mode with volume scaling
438+ @ LargeTest
439+ public void test2_2PollingCaptureVolumeScaling () throws Exception {
440+ // test that when playing a sound, the energy measured with Visualizer in
441+ // SCALING_MODE_AS_PLAYED mode decreases when lowering the volume
442+ boolean result = false ;
443+ String msg = "test2_2PollingCaptureVolumeScaling()" ;
444+ AudioEffect vc = null ;
445+ MediaPlayer mp = null ;
446+ AudioManager am = (AudioManager ) getActivity ().getSystemService (Context .AUDIO_SERVICE );
447+ int ringerMode = am .getRingerMode ();
448+ am .setRingerMode (AudioManager .RINGER_MODE_NORMAL );
449+ final int volMax = am .getStreamMaxVolume (AudioManager .STREAM_MUSIC );
450+ am .setStreamVolume (AudioManager .STREAM_MUSIC , volMax , 0 );
451+
452+ try {
453+ // test setup not related to tested functionality:
454+ // creating a volume controller on output mix ensures that ro.audio.silent mutes
455+ // audio after the effects and not before
456+ vc = new AudioEffect (
457+ AudioEffect .EFFECT_TYPE_NULL ,
458+ VOLUME_EFFECT_UUID ,
459+ 0 ,
460+ 0 );
461+ vc .setEnabled (true );
462+
463+ mp = new MediaPlayer ();
464+ mp .setDataSource (MediaNames .SINE_200_1000 );
465+ mp .setAudioStreamType (AudioManager .STREAM_MUSIC );
466+ getVisualizer (mp .getAudioSessionId ());
467+
468+ // verify we successfully set the Visualizer in SCALING_MODE_AS_PLAYED mode
469+ mVisualizer .setScalingMode (Visualizer .SCALING_MODE_AS_PLAYED );
470+ assertTrue (msg + " get volume scaling doesn't return SCALING_MODE_AS_PLAYED" ,
471+ mVisualizer .getScalingMode () == Visualizer .SCALING_MODE_AS_PLAYED );
472+ mVisualizer .setEnabled (true );
473+ mp .prepare ();
474+ mp .start ();
475+ Thread .sleep (500 );
476+
477+ // check capture on sound with music volume at max
478+ byte [] data = new byte [mVisualizer .getCaptureSize ()];
479+ mVisualizer .getWaveForm (data );
480+ int energyAtVolMax = computeEnergy (data , true );
481+ assertTrue (msg +": getWaveForm reads insufficient level" ,
482+ energyAtVolMax > 0 );
483+ log (msg , " engergy at max volume = " +energyAtVolMax );
484+
485+ // check capture on sound with music volume lowered from max
486+ am .setStreamVolume (AudioManager .STREAM_MUSIC , (volMax * 2 ) / 3 , 0 );
487+ Thread .sleep (500 );
488+ mVisualizer .getWaveForm (data );
489+ int energyAtLowerVol = computeEnergy (data , true );
490+ assertTrue (msg +": getWaveForm at lower volume reads insufficient level" ,
491+ energyAtLowerVol > 0 );
492+ log (msg , "energy at lower volume = " +energyAtLowerVol );
493+ assertTrue (msg +": getWaveForm didn't report lower energy when volume decreases" ,
494+ energyAtVolMax > energyAtLowerVol );
495+
496+ result = true ;
497+ } catch (IllegalArgumentException e ) {
498+ msg = msg .concat (": IllegalArgumentException" );
499+ loge (msg , " hit exception " + e );
500+ } catch (UnsupportedOperationException e ) {
501+ msg = msg .concat (": UnsupportedOperationException" );
502+ loge (msg , " hit exception " + e );
503+ } catch (IllegalStateException e ) {
504+ msg = msg .concat ("IllegalStateException" );
505+ loge (msg , " hit exception " + e );
506+ } catch (InterruptedException e ) {
507+ loge (msg , " sleep() interrupted" );
508+ }
509+ finally {
510+ releaseVisualizer ();
511+ if (mp != null ) {
512+ mp .release ();
513+ }
514+ if (vc != null ) {
515+ vc .release ();
516+ }
517+ am .setRingerMode (ringerMode );
518+ }
519+ assertTrue (msg , result );
520+ }
521+
406522 //-----------------------------------------------------------------
407523 // private methods
408524 //----------------------------------
0 commit comments