new/external/rockchip-test/audio/test_loopback.sh
2025-05-10 21:58:58 +08:00

116 lines
3.1 KiB
Bash
Executable File

#!/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