#!/bin/bash
|
|
device_1=$1
|
device_2=$2
|
|
prepare_mic_capture()
|
{
|
amixer set "Capture Digital" 192
|
amixer set "Capture Mute" 0
|
amixer set "Right PGA Mux" "DifferentialR"
|
amixer set "Left PGA Mux" "DifferentialL"
|
amixer set "Differential Mux" "Line 2"
|
}
|
|
prepare_adc_gains()
|
{
|
adc_mic_gain=$1
|
|
echo "Prepare ADC MIC GAINs with $adc_mic_gain dB"
|
# PGA gain
|
amixer set "Left Channel" $adc_mic_gain
|
amixer set "Right Channel" $adc_mic_gain
|
}
|
|
test_loopback()
|
{
|
# PATH_CAPTURE=/mnt/sdcard/cap_files
|
# PATH_CAPTURE=/media/usb0/cap_files
|
PATH_CAPTURE=/tmp/cap_files
|
play_device="default"
|
capt_device="default"
|
fs=16000
|
capt_bits="S16_LE"
|
capt_ch=2
|
capt_seconds=60 # capture once per 1min
|
capt_minutes=60 # capture minutes
|
switch_gain_count=8
|
play_seconds=2
|
play_start_doze=0.3
|
play_stop_doze=1
|
play_bits=16
|
play_ch=2
|
|
if [ -n "$1" ]; then
|
play_device=$1
|
fi
|
|
if [ -n "$2" ]; then
|
capt_device=$2
|
fi
|
|
# play_gain_tbl="-30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30"
|
play_gain_tbl="-30"
|
set -- $play_gain_tbl
|
play_gain_num=$#
|
test_hours=5
|
let "capt_count=$capt_minutes*$test_hours" # capture 120 hours
|
let "play_count=$capt_seconds/($play_seconds+$play_stop_doze)"
|
|
mkdir -p $PATH_CAPTURE
|
|
echo "play_device: $play_device, capt_device: $capt_device, capt_count: $capt_count, play_count: $play_count, test $test_hours hours on PATH_CAPTURE: $PATH_CAPTURE"
|
|
echo "******** Test loopback start ********"
|
|
prepare_mic_capture
|
|
for capt_cnt in `seq 1 $capt_count`; do
|
capt_gain=0
|
# playback -> capture -> playback
|
sox -b $play_bits -r $fs -c $play_ch -n -t alsa $play_device synth $play_seconds sine 1000 gain -30 & # do playback
|
# start doze
|
sleep $play_start_doze
|
|
let "temp=($capt_cnt-1)/($capt_count/$switch_gain_count)"
|
let "capt_gain=$temp%(switch_gain_count+1)*3" # step 3dB
|
|
DUMP_FILE=$(printf 'loopback_fs%d_format_%s_ch%d_mic%ddb_%04d.wav' $fs $capt_bits $capt_ch $capt_gain $capt_cnt)
|
echo "temp: $temp, capt_gain: $capt_gain DUMP_FILE: $DUMP_FILE"
|
|
prepare_adc_gains $capt_gain
|
|
# echo "capt_cnt: $capt_cnt"
|
# echo "play_count: $play_count, play_seconds: $play_seconds"
|
echo "arecord -D $capt_device -r $fs -f $capt_bits -c $capt_ch -d $capt_seconds $PATH_CAPTURE/$DUMP_FILE"
|
arecord -D $capt_device -r $fs -f $capt_bits -c $capt_ch -d $capt_seconds $PATH_CAPTURE/$DUMP_FILE & # do capture
|
|
# wait the first playback stop
|
sleep $play_seconds
|
|
set -- $play_gain_tbl
|
for play_cnt in `seq 1 $play_count`; do
|
play_gain=$1
|
shift
|
let play_gain_index+=1
|
|
# echo "play_gain_index: $play_gain_index, play_gain_num: $play_gain_num"
|
echo "sox -b $play_bits -r $fs -c $play_ch -n -t alsa $play_device synth $play_seconds sine 1000 gain $play_gain"
|
if [ $play_gain_index -ge $play_gain_num ]; then
|
set -- $play_gain_tbl
|
play_gain_index=0
|
fi
|
# echo "play_cnt: $play_cnt"
|
sox -b $play_bits -r $fs -c $play_ch -n -t alsa $play_device synth $play_seconds sine 1000 gain $play_gain # do playback
|
# stop doze
|
sleep $play_stop_doze
|
done;
|
done;
|
|
echo "******** Test loopback end ********"
|
}
|
|
echo "******** Test loopback v0.1.0 ********"
|
|
test_loopback $device_1 $device_2
|