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