Home | History | Annotate | Download | only in tests
      1 #!/bin/bash
      2 #
      3 # This script uses test-mixer to generate WAV files
      4 # for evaluation of the AudioMixer component.
      5 #
      6 # Sine and chirp signals are used for input because they
      7 # show up as clear lines, either horizontal or diagonal,
      8 # on a spectrogram. This means easy verification of multiple
      9 # track mixing.
     10 #
     11 # After execution, look for created subdirectories like
     12 # mixer_i_i
     13 # mixer_i_f
     14 # mixer_f_f
     15 #
     16 # Recommend using a program such as audacity to evaluate
     17 # the output WAV files, e.g.
     18 #
     19 # cd testdir
     20 # audacity *.wav
     21 #
     22 # Using Audacity:
     23 #
     24 # Under "Waveform" view mode you can zoom into the
     25 # start of the WAV file to verify proper ramping.
     26 #
     27 # Select "Spectrogram" to see verify the lines
     28 # (sine = horizontal, chirp = diagonal) which should
     29 # be clear (except for around the start as the volume
     30 # ramping causes spectral distortion).
     31 
     32 if [ -z "$ANDROID_BUILD_TOP" ]; then
     33     echo "Android build environment not set"
     34     exit -1
     35 fi
     36 
     37 # ensure we have mm
     38 . $ANDROID_BUILD_TOP/build/envsetup.sh
     39 
     40 pushd $ANDROID_BUILD_TOP/frameworks/av/media/libaudioprocessing
     41 
     42 # build
     43 pwd
     44 mm
     45 
     46 # send to device
     47 echo "waiting for device"
     48 adb root && adb wait-for-device remount
     49 adb push $OUT/system/lib/libaudioprocessing.so /system/lib
     50 adb push $OUT/system/lib64/libaudioprocessing.so /system/lib64
     51 adb push $OUT/system/bin/test-mixer /system/bin
     52 
     53 # createwav creates a series of WAV files testing various
     54 # mixer settings
     55 # $1 = flags
     56 # $2 = directory
     57 function createwav() {
     58 # create directory if it doesn't exist
     59     if [ ! -d $2 ]; then
     60         mkdir $2
     61     fi
     62 
     63 # Test:
     64 # process__genericResampling with mixed integer and float track input
     65 # track__Resample / track__genericResample
     66     adb shell test-mixer $1 -s 48000 \
     67         -o /sdcard/tm48000grif.wav \
     68         sine:2,4000,7520 chirp:2,9200 sine:1,3000,18000 \
     69         sine:f,6,6000,19000  chirp:i,4,30000
     70     adb pull /sdcard/tm48000grif.wav $2
     71 
     72 # Test:
     73 # process__genericResampling
     74 # track__Resample / track__genericResample
     75     adb shell test-mixer $1 -s 48000 \
     76         -o /sdcard/tm48000gr.wav \
     77         sine:2,4000,7520 chirp:2,9200 sine:1,3000,18000 \
     78         sine:6,6000,19000
     79     adb pull /sdcard/tm48000gr.wav $2
     80 
     81 # Test:
     82 # process__genericResample
     83 # track__Resample / track__genericResample
     84 # track__NoResample / track__16BitsStereo / track__16BitsMono
     85 # Aux buffer
     86     adb shell test-mixer $1 -c 5 -s 9307 \
     87         -a /sdcard/aux9307gra.wav -o /sdcard/tm9307gra.wav \
     88         sine:4,1000,3000 sine:1,2000,9307 chirp:3,9307
     89     adb pull /sdcard/tm9307gra.wav $2
     90     adb pull /sdcard/aux9307gra.wav $2
     91 
     92 # Test:
     93 # process__genericNoResampling
     94 # track__NoResample / track__16BitsStereo / track__16BitsMono
     95     adb shell test-mixer $1 -s 32000 \
     96         -o /sdcard/tm32000gnr.wav \
     97         sine:2,1000,32000 chirp:2,32000  sine:1,3000,32000
     98     adb pull /sdcard/tm32000gnr.wav $2
     99 
    100 # Test:
    101 # process__genericNoResampling
    102 # track__NoResample / track__16BitsStereo / track__16BitsMono
    103 # Aux buffer
    104     adb shell test-mixer $1 -s 32000 \
    105         -a /sdcard/aux32000gnra.wav -o /sdcard/tm32000gnra.wav \
    106         sine:2,1000,32000 chirp:2,32000  sine:1,3000,32000
    107     adb pull /sdcard/tm32000gnra.wav $2
    108     adb pull /sdcard/aux32000gnra.wav $2
    109 
    110 # Test:
    111 # process__NoResampleOneTrack / process__OneTrack16BitsStereoNoResampling
    112 # Downmixer
    113     adb shell test-mixer $1 -s 32000 \
    114         -o /sdcard/tm32000nrot.wav \
    115         sine:6,1000,32000
    116     adb pull /sdcard/tm32000nrot.wav $2
    117 
    118 # Test:
    119 # process__NoResampleOneTrack / OneTrack16BitsStereoNoResampling
    120 # Aux buffer
    121     adb shell test-mixer $1 -s 44100 \
    122         -a /sdcard/aux44100nrota.wav -o /sdcard/tm44100nrota.wav \
    123         sine:2,2000,44100
    124     adb pull /sdcard/tm44100nrota.wav $2
    125     adb pull /sdcard/aux44100nrota.wav $2
    126 }
    127 
    128 #
    129 # Call createwav to generate WAV files in various combinations
    130 #
    131 # i_i = integer input track, integer mixer output
    132 # f_f = float input track,   float mixer output
    133 # i_f = integer input track, float_mixer output
    134 #
    135 # If the mixer output is float, then the output WAV file is pcm float.
    136 #
    137 # TODO: create a "snr" like "diff" to automatically
    138 # compare files in these directories together.
    139 #
    140 
    141 createwav "" "tests/mixer_i_i"
    142 createwav "-f -m" "tests/mixer_f_f"
    143 createwav "-m" "tests/mixer_i_f"
    144 
    145 popd
    146