xref: /OK3568_Linux_fs/debian/overlay-debug/rockchip-test/audio/test_loopback.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun
3*4882a593Smuzhiyundevice_1=$1
4*4882a593Smuzhiyundevice_2=$2
5*4882a593Smuzhiyun
6*4882a593Smuzhiyunprepare_mic_capture()
7*4882a593Smuzhiyun{
8*4882a593Smuzhiyun	amixer set "Capture Digital" 192
9*4882a593Smuzhiyun	amixer set "Capture Mute" 0
10*4882a593Smuzhiyun	amixer set "Right PGA Mux" "DifferentialR"
11*4882a593Smuzhiyun	amixer set "Left PGA Mux" "DifferentialL"
12*4882a593Smuzhiyun	amixer set "Differential Mux" "Line 2"
13*4882a593Smuzhiyun}
14*4882a593Smuzhiyun
15*4882a593Smuzhiyunprepare_adc_gains()
16*4882a593Smuzhiyun{
17*4882a593Smuzhiyun	adc_mic_gain=$1
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun	echo "Prepare ADC MIC GAINs with $adc_mic_gain dB"
20*4882a593Smuzhiyun	# PGA gain
21*4882a593Smuzhiyun	amixer set "Left Channel" $adc_mic_gain
22*4882a593Smuzhiyun	amixer set "Right Channel" $adc_mic_gain
23*4882a593Smuzhiyun}
24*4882a593Smuzhiyun
25*4882a593Smuzhiyuntest_loopback()
26*4882a593Smuzhiyun{
27*4882a593Smuzhiyun	# PATH_CAPTURE=/mnt/sdcard/cap_files
28*4882a593Smuzhiyun	# PATH_CAPTURE=/media/usb0/cap_files
29*4882a593Smuzhiyun	PATH_CAPTURE=/tmp/cap_files
30*4882a593Smuzhiyun	play_device="default"
31*4882a593Smuzhiyun	capt_device="default"
32*4882a593Smuzhiyun	fs=16000
33*4882a593Smuzhiyun	capt_bits="S16_LE"
34*4882a593Smuzhiyun	capt_ch=2
35*4882a593Smuzhiyun	capt_seconds=60			# capture once per 1min
36*4882a593Smuzhiyun	capt_minutes=60			# capture minutes
37*4882a593Smuzhiyun	switch_gain_count=8
38*4882a593Smuzhiyun	play_seconds=2
39*4882a593Smuzhiyun	play_start_doze=0.3
40*4882a593Smuzhiyun	play_stop_doze=1
41*4882a593Smuzhiyun	play_bits=16
42*4882a593Smuzhiyun	play_ch=2
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun	if [ -n "$1" ]; then
45*4882a593Smuzhiyun		play_device=$1
46*4882a593Smuzhiyun	fi
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun	if [ -n "$2" ]; then
49*4882a593Smuzhiyun		capt_device=$2
50*4882a593Smuzhiyun	fi
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun	# play_gain_tbl="-30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30"
53*4882a593Smuzhiyun	play_gain_tbl="-30"
54*4882a593Smuzhiyun	set -- $play_gain_tbl
55*4882a593Smuzhiyun	play_gain_num=$#
56*4882a593Smuzhiyun	test_hours=5
57*4882a593Smuzhiyun	let "capt_count=$capt_minutes*$test_hours"		# capture 120 hours
58*4882a593Smuzhiyun	let "play_count=$capt_seconds/($play_seconds+$play_stop_doze)"
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun	mkdir -p $PATH_CAPTURE
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun	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"
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	echo "******** Test loopback start ********"
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun	prepare_mic_capture
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun	for capt_cnt in `seq 1 $capt_count`; do
69*4882a593Smuzhiyun		capt_gain=0
70*4882a593Smuzhiyun		# playback -> capture -> playback
71*4882a593Smuzhiyun		sox -b $play_bits -r $fs -c $play_ch -n -t alsa $play_device synth $play_seconds sine 1000 gain -30 &  # do playback
72*4882a593Smuzhiyun		# start doze
73*4882a593Smuzhiyun		sleep $play_start_doze
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun		let "temp=($capt_cnt-1)/($capt_count/$switch_gain_count)"
76*4882a593Smuzhiyun		let "capt_gain=$temp%(switch_gain_count+1)*3" # step 3dB
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun		DUMP_FILE=$(printf 'loopback_fs%d_format_%s_ch%d_mic%ddb_%04d.wav' $fs $capt_bits $capt_ch $capt_gain $capt_cnt)
79*4882a593Smuzhiyun		echo "temp: $temp, capt_gain: $capt_gain DUMP_FILE: $DUMP_FILE"
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun		prepare_adc_gains $capt_gain
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun		# echo "capt_cnt: $capt_cnt"
84*4882a593Smuzhiyun		# echo "play_count: $play_count, play_seconds: $play_seconds"
85*4882a593Smuzhiyun		echo "arecord -D $capt_device -r $fs -f $capt_bits -c $capt_ch -d $capt_seconds $PATH_CAPTURE/$DUMP_FILE"
86*4882a593Smuzhiyun		arecord -D $capt_device -r $fs -f $capt_bits -c $capt_ch -d $capt_seconds $PATH_CAPTURE/$DUMP_FILE &  # do capture
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun		# wait the first playback stop
89*4882a593Smuzhiyun		sleep $play_seconds
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun		set -- $play_gain_tbl
92*4882a593Smuzhiyun		for play_cnt in `seq 1 $play_count`; do
93*4882a593Smuzhiyun			play_gain=$1
94*4882a593Smuzhiyun			shift
95*4882a593Smuzhiyun			let play_gain_index+=1
96*4882a593Smuzhiyun
97*4882a593Smuzhiyun			# echo "play_gain_index: $play_gain_index, play_gain_num: $play_gain_num"
98*4882a593Smuzhiyun			echo "sox -b $play_bits -r $fs -c $play_ch -n -t alsa $play_device synth $play_seconds sine 1000 gain $play_gain"
99*4882a593Smuzhiyun			if [ $play_gain_index -ge $play_gain_num ]; then
100*4882a593Smuzhiyun				set -- $play_gain_tbl
101*4882a593Smuzhiyun				play_gain_index=0
102*4882a593Smuzhiyun			fi
103*4882a593Smuzhiyun			# echo "play_cnt: $play_cnt"
104*4882a593Smuzhiyun			sox -b $play_bits -r $fs -c $play_ch -n -t alsa $play_device synth $play_seconds sine 1000 gain $play_gain # do playback
105*4882a593Smuzhiyun			# stop doze
106*4882a593Smuzhiyun			sleep $play_stop_doze
107*4882a593Smuzhiyun		done;
108*4882a593Smuzhiyun	done;
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun	echo "******** Test loopback end ********"
111*4882a593Smuzhiyun}
112*4882a593Smuzhiyun
113*4882a593Smuzhiyunecho "******** Test loopback v0.1.0 ********"
114*4882a593Smuzhiyun
115*4882a593Smuzhiyuntest_loopback $device_1 $device_2
116