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