Skip to content

Commit 66de887

Browse files
committed
fix: tests: SRC tests catch aplay warnings and refactor
Catch aplay incorrect sample rate warnings and refactor tests Signed-off-by: Emilia Kurdybelska <emiliax.kurdybelska@intel.com>
1 parent 4bc7c24 commit 66de887

File tree

6 files changed

+136
-60
lines changed

6 files changed

+136
-60
lines changed

case-lib/lib.sh

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,47 +1534,76 @@ restore_topology() {
15341534
check_topology
15351535
}
15361536

1537+
# Check aplay output for warnings
1538+
# Arguments: 1-aplay output
1539+
check_for_aplay_warnings()
1540+
{
1541+
dlogi "$1"
1542+
if echo "$1" | grep -q "Warning:"; then
1543+
dlogw "Caught aplay warning! Look for previous logs."
1544+
return 1
1545+
fi
1546+
return 0
1547+
}
1548+
15371549
# Play sound and record it
15381550
# Arguments: 1-arecord options 2-aplay options
15391551
play_and_record()
15401552
{
1553+
errors=0
15411554
dlogi "Play [aplay $SOF_ALSA_OPTS $SOF_APLAY_OPTS $2] and capture sound [arecord $1]"
15421555
# shellcheck disable=SC2086
1543-
arecord $SOF_ALSA_OPTS $SOF_ARECORD_OPTS $1 & PID=$!
1556+
arecord $SOF_ALSA_OPTS $SOF_ARECORD_OPTS $1 & PID=$!
15441557
# shellcheck disable=SC2086
1545-
aplay $SOF_ALSA_OPTS $SOF_APLAY_OPTS $2
1546-
wait $PID
1558+
aplay_output=$(aplay $SOF_ALSA_OPTS $SOF_APLAY_OPTS $2 2>&1) || errors=$((errors+1))
1559+
wait $PID || errors=$((errors+1))
15471560
sleep 1
1561+
check_for_aplay_warnings "$aplay_output" || errors=$((errors+1))
1562+
1563+
if [ "$errors" = 0 ]; then
1564+
return 0
1565+
fi
1566+
return 1
15481567
}
15491568

1550-
# Analyze files to look for glitches.
1569+
# Analyze file to look for glitches.
15511570
# Returns exit code 0 if there are no glitches, 1 if there are.
1552-
# Arguments: the list of filenames
1571+
# Arguments: filename
15531572
check_soundfile_for_glitches()
15541573
{
1555-
glitched_files=0
1574+
if [ -f "$result_filename" ]; then
1575+
dlogi "Analyzing $result_filename file..."
1576+
if python3 "$SCRIPT_HOME"/tools/analyze-wav.py "$result_filename"; then
1577+
dlogi "$result_filename file is correct"
1578+
else
1579+
dlogw "GLITCHED FILE: $result_filename"
1580+
return 1
1581+
fi
1582+
else
1583+
dlogw "MISSING FILE: $result_filename"
1584+
return 1
1585+
fi
1586+
}
1587+
1588+
# Check list of soundfiles for glitches
1589+
# Returns exit code 0 if there are no glitches, 1 if there are.
1590+
# Arguments: list of filenames
1591+
check_soundfiles_for_glitches()
1592+
{
1593+
failures=0
15561594
# shellcheck disable=SC2154
15571595
for result_filename in "${all_result_files[@]}"
15581596
do
1559-
if [ -f "$result_filename" ]; then
1560-
dlogi "Analyzing $result_filename file..."
1561-
if python3 "$SCRIPT_HOME"/tools/analyze-wav.py "$result_filename"; then
1562-
dlogi "$result_filename file is correct"
1563-
else
1564-
dlogw "Found issues in $result_filename file"
1565-
glitched_files=$((glitched_files+1))
1566-
fi
1567-
else
1568-
dlogw "$result_filename file not found, check for previous errors"
1569-
glitched_files=$((glitched_files+1))
1597+
if ! check_soundfile_for_glitches "$result_filename"; then
1598+
failures=$((failures+1))
15701599
fi
15711600
done
15721601

1573-
if [ $glitched_files -eq 0 ]; then
1574-
dlogi "Analysis finished, no issues found"
1602+
if [ "$failures" = 0 ]; then
1603+
dlogi "All files correct"
15751604
return 0
15761605
else
1577-
dlogi "$glitched_files files corrupted"
1606+
dlogw "Found $failures corrupted files"
15781607
return 1
15791608
fi
15801609
}

test-case/check-8bit-play-rec.sh

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ source "$(dirname "${BASH_SOURCE[0]}")"/../case-lib/lib.sh
3131
OPT_NAME['t']='tplg' OPT_DESC['t']='tplg file, default value is env TPLG: $''TPLG'
3232
OPT_HAS_ARG['t']=1 OPT_VAL['t']="$TPLG"
3333

34-
OPT_NAME['p']='playback_device' OPT_DESC['p']='ALSA pcm playback device. Example: hw:0,1'
35-
OPT_HAS_ARG['p']=1 OPT_VAL['p']=''
34+
OPT_NAME['p']='playback_device' OPT_DESC['p']='ALSA pcm playback device. Default: hw:0,0'
35+
OPT_HAS_ARG['p']=1 OPT_VAL['p']='hw:0,0'
3636

37-
OPT_NAME['c']='capture_device' OPT_DESC['c']='ALSA pcm capture device. Example: hw:0,1'
38-
OPT_HAS_ARG['c']=1 OPT_VAL['c']=''
37+
OPT_NAME['c']='capture_device' OPT_DESC['c']='ALSA pcm capture device. Default: hw:0,0'
38+
OPT_HAS_ARG['c']=1 OPT_VAL['c']='hw:0,0'
3939

4040
OPT_NAME['s']='sof-logger' OPT_DESC['s']="Open sof-logger trace the data will store at $LOG_ROOT"
4141
OPT_HAS_ARG['s']=0 OPT_VAL['s']=1
@@ -87,7 +87,6 @@ run_tests()
8787
{
8888
generate_chirps
8989

90-
set +e
9190
play_and_record "-D$capture_dev $rec_opt $u8_play_filename" "-D$playback_dev $play_opt -t wav $chirp_u8_filename"
9291
play_and_record "-D$capture_dev $rec_opt $alaw_play_filename" "-D$playback_dev $play_opt -t raw -f A_LAW $chirp_alaw_filename"
9392
play_and_record "-D$capture_dev $rec_opt $mulaw_play_filename" "-D$playback_dev $play_opt -t raw -f MU_LAW $chirp_mulaw_filename"
@@ -98,9 +97,8 @@ run_tests()
9897

9998
sox --encoding a-law -r 48000 -c 2 tmp1.raw "$alaw_rec_filename"
10099
sox --encoding u-law -r 48000 -c 2 tmp2.raw "$mulaw_rec_filename"
101-
set -e
102100

103-
if check_soundfile_for_glitches "${all_result_files[@]}"; then
101+
if check_soundfiles_for_glitches "${all_result_files[@]}"; then
104102
dlogi "All files correct"
105103
else
106104
die "Detected corrupted files!"

test-case/check-float-play-rec.sh

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ source "$(dirname "${BASH_SOURCE[0]}")"/../case-lib/lib.sh
3131
OPT_NAME['t']='tplg' OPT_DESC['t']='tplg file, default value is env TPLG: $''TPLG'
3232
OPT_HAS_ARG['t']=1 OPT_VAL['t']="$TPLG"
3333

34-
OPT_NAME['p']='playback_device' OPT_DESC['p']='ALSA pcm playback device. Example: hw:0,1'
35-
OPT_HAS_ARG['p']=1 OPT_VAL['p']=''
34+
OPT_NAME['p']='playback_device' OPT_DESC['p']='ALSA pcm playback device. Default: hw:0,0'
35+
OPT_HAS_ARG['p']=1 OPT_VAL['p']='hw:0,0'
3636

37-
OPT_NAME['c']='capture_device' OPT_DESC['c']='ALSA pcm capture device. Example: hw:0,1'
38-
OPT_HAS_ARG['c']=1 OPT_VAL['c']=''
37+
OPT_NAME['c']='capture_device' OPT_DESC['c']='ALSA pcm capture device. Default: hw:0,0'
38+
OPT_HAS_ARG['c']=1 OPT_VAL['c']='hw:0,0'
3939

4040
OPT_NAME['s']='sof-logger' OPT_DESC['s']="Open sof-logger trace the data will store at $LOG_ROOT"
4141
OPT_HAS_ARG['s']=0 OPT_VAL['s']=1
@@ -70,12 +70,10 @@ run_tests()
7070
{
7171
generate_chirps
7272

73-
set +e
7473
play_and_record "-D$capture_dev $rec_opt -f S32_LE $rec_play_filename" "-D$playback_dev $chirp_float_filename"
7574
play_and_record "-D$capture_dev $rec_opt -f FLOAT_LE $rec_filename" "-D$playback_dev $chirp_s32_filename"
76-
set -e
7775

78-
if check_soundfile_for_glitches "${all_result_files[@]}"; then
76+
if check_soundfiles_for_glitches "${all_result_files[@]}"; then
7977
dlogi "All files correct"
8078
else
8179
die "Detected corrupted files!"

test-case/check-selector-play.sh

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,28 @@ prepare_test_soundfiles()
8181

8282
run_tests()
8383
{
84+
failures=0
8485
set +e
8586
for ch_nr in "${channels_to_test[@]}"
8687
do
88+
test_pass=true
8789
test_filename="$HOME/Music/${ch_nr}_channels_test.wav"
8890
result_filename="$LOG_ROOT/rec_${ch_nr}ch.wav"
91+
dlogi "--------------- PLAY $ch_nr CHANNELS, RECORD ON 2 channels ---------------"
8992

9093
play_and_record "-D$capture_dev $rec_opt -d 25 $result_filename" "-Dplug$playback_dev $test_filename"
91-
92-
if ! analyze_mixed_sound "$result_filename" "$ch_nr"; then
94+
if [ $? -eq 1 ]; then
95+
test_pass=false
96+
dlogi "TEST $ch_nr channels FAIL: aplay/arecord failed, look for previous errors"
97+
else
98+
if ! analyze_mixed_sound "$result_filename" "$ch_nr"; then
99+
test_pass=false
100+
dlogi "TEST $ch_nr channels FAIL: Recording has incorrect nr of channels"
101+
fi
102+
fi
103+
if [ "$test_pass" = true ]; then
104+
dlogi "TEST $ch_nr channels PASS: No issues found."
105+
else
93106
failures=$((failures+1))
94107
fi
95108
done

test-case/check-src-play.sh

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ source "$(dirname "${BASH_SOURCE[0]}")"/../case-lib/lib.sh
3131
OPT_NAME['t']='tplg' OPT_DESC['t']='tplg file, default value is env TPLG: $''TPLG'
3232
OPT_HAS_ARG['t']=1 OPT_VAL['t']="$TPLG"
3333

34-
OPT_NAME['p']='playback_device' OPT_DESC['p']='ALSA pcm playback device. Example: hw:0,1'
35-
OPT_HAS_ARG['p']=1 OPT_VAL['p']=''
34+
OPT_NAME['p']='playback_device' OPT_DESC['p']='ALSA pcm playback device. Default: hw:0,2'
35+
OPT_HAS_ARG['p']=1 OPT_VAL['p']='hw:0,2'
3636

37-
OPT_NAME['c']='capture_device' OPT_DESC['c']='ALSA pcm capture device. Example: hw:0,1'
38-
OPT_HAS_ARG['c']=1 OPT_VAL['c']=''
37+
OPT_NAME['c']='capture_device' OPT_DESC['c']='ALSA pcm capture device. Default: hw:0,2'
38+
OPT_HAS_ARG['c']=1 OPT_VAL['c']='hw:0,2'
3939

4040
OPT_NAME['s']='sof-logger' OPT_DESC['s']="Open sof-logger trace the data will store at $LOG_ROOT"
4141
OPT_HAS_ARG['s']=0 OPT_VAL['s']=1
@@ -55,29 +55,50 @@ init_globals()
5555
all_result_files=()
5656
}
5757

58+
prepare_test_soundfile()
59+
{
60+
dlogi "Generating test audio: sample rate: $sample_rate Hz, chirp rate: $chirp_rate Hz..."
61+
mkdir -p "$HOME/Music"
62+
test_sound_filename="$HOME/Music/${sample_rate}_Hz.wav"
63+
ffmpeg -loglevel error -y -f lavfi -i "aevalsrc='sin($chirp_rate*t*2*PI*t)':s=$sample_rate:d=5" -ac 2 "$test_sound_filename"
64+
}
65+
5866
run_tests()
5967
{
68+
failures=0
6069
set +e
6170
for i in "${!sample_rates[@]}"
6271
do
72+
test_pass=true
6373
sample_rate=${sample_rates[$i]}
6474
chirp_rate=${chirp_rates[$i]}
75+
dlogi "--------------- TEST $((i+1)): PLAY SAMPLE RATE $sample_rate Hz, RECORD IN 48000 Hz ---------------"
6576

66-
test_sound_filename=$LOG_ROOT/play.wav
6777
result_filename=$LOG_ROOT/rec_play_$sample_rate.wav
68-
all_result_files+=("$result_filename")
69-
70-
dlogi "Play $sample_rate Hz chirp 0 - $chirp_rate Hz, capture as 48 kHz"
71-
ffmpeg -y -f lavfi -i "aevalsrc='sin($chirp_rate*t*2*PI*t)':s=$sample_rate:d=5" -ac 2 "$test_sound_filename" #TODO: maybe separate dir for artifacts ??
72-
78+
prepare_test_soundfile
7379
play_and_record "-D$capture_dev $rec_opt $result_filename" "-D$playback_dev $test_sound_filename"
80+
if [ $? -eq 1 ]; then
81+
test_pass=false
82+
dlogi "TEST $((i+1)) FAIL: aplay/arecord failed, look for previous errors"
83+
else
84+
check_soundfile_for_glitches "$result_filename"
85+
if [ $? -eq 1 ]; then
86+
test_pass=false
87+
dlogi "TEST $((i+1)) FAIL: Found glitch in the recording"
88+
fi
89+
fi
90+
if [ "$test_pass" = true ]; then
91+
dlogi "TEST $((i+1)) PASS: No issues found."
92+
else
93+
failures=$((failures+1))
94+
fi
7495
done
7596
set -e
76-
77-
if check_soundfile_for_glitches "${all_result_files[@]}"; then
78-
dlogi "All files correct"
97+
98+
if [ "$failures" = 0 ]; then
99+
dlogi "PASS: All testcases passed"
79100
else
80-
die "Detected corrupted files!"
101+
die "FAIL: $failures testcases failed"
81102
fi
82103
}
83104

test-case/check-src-rec.sh

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ source "$(dirname "${BASH_SOURCE[0]}")"/../case-lib/lib.sh
3030
OPT_NAME['t']='tplg' OPT_DESC['t']='tplg file, default value is env TPLG: $''TPLG'
3131
OPT_HAS_ARG['t']=1 OPT_VAL['t']="$TPLG"
3232

33-
OPT_NAME['p']='playback_device' OPT_DESC['p']='ALSA pcm playback device. Example: hw:0,1'
34-
OPT_HAS_ARG['p']=1 OPT_VAL['p']=''
33+
OPT_NAME['p']='playback_device' OPT_DESC['p']='ALSA pcm playback device. Default: hw:0,2'
34+
OPT_HAS_ARG['p']=1 OPT_VAL['p']='hw:0,2'
3535

36-
OPT_NAME['c']='capture_device' OPT_DESC['c']='ALSA pcm capture device. Example: hw:0,1'
37-
OPT_HAS_ARG['c']=1 OPT_VAL['c']=''
36+
OPT_NAME['c']='capture_device' OPT_DESC['c']='ALSA pcm capture device. Default: hw:0,2'
37+
OPT_HAS_ARG['c']=1 OPT_VAL['c']='hw:0,2'
3838

3939
OPT_NAME['s']='sof-logger' OPT_DESC['s']="Open sof-logger trace the data will store at $LOG_ROOT"
4040
OPT_HAS_ARG['s']=0 OPT_VAL['s']=1
@@ -51,30 +51,47 @@ init_globals()
5151

5252
rec_opt="-f S16_LE -c 2 -d 7"
5353

54-
test_sound_filename=$LOG_ROOT/play.wav
54+
test_sound_filename=$HOME/Music/play.wav
5555
all_result_files=()
5656
}
5757

5858
run_tests()
5959
{
6060
dlogi "Generate 48 kHz chirp 0 - 20 kHz"
61-
ffmpeg -y -f lavfi -i "aevalsrc='sin(2000*t*2*PI*t)':s=48000:d=5" -ac 2 "$test_sound_filename"
61+
ffmpeg -loglevel error -y -f lavfi -i "aevalsrc='sin(2000*t*2*PI*t)':s=48000:d=5" -ac 2 "$test_sound_filename"
6262

63+
failures=0
6364
set +e
6465
for i in "${!sample_rates[@]}"
6566
do
67+
test_pass=true
6668
sample_rate=${sample_rates[$i]}
69+
dlogi "--------------- TEST $((i+1)): PLAY SAMPLE RATE 48000 Hz, RECORD IN $sample_rate Hz ---------------"
6770

6871
result_filename=$LOG_ROOT/rec_$sample_rate.wav
69-
all_result_files+=("$result_filename")
7072
play_and_record "-D$capture_dev $rec_opt -r $sample_rate $result_filename" "-D$playback_dev $test_sound_filename"
73+
if [ $? -eq 1 ]; then
74+
test_pass=false
75+
dlogi "TEST $((i+1)) FAIL: aplay/arecord failed, look for previous errors"
76+
else
77+
check_soundfile_for_glitches "$result_filename"
78+
if [ $? -eq 1 ]; then
79+
test_pass=false
80+
dlogi "TEST $((i+1)) FAIL: Found glitch in the recording"
81+
fi
82+
fi
83+
if [ "$test_pass" = true ]; then
84+
dlogi "TEST $((i+1)) PASS: No issues found."
85+
else
86+
failures=$((failures+1))
87+
fi
7188
done
7289
set -e
7390

74-
if check_soundfile_for_glitches "${all_result_files[@]}"; then
75-
dlogi "All files correct"
91+
if [ "$failures" = 0 ]; then
92+
dlogi "PASS: All testcases passed"
7693
else
77-
die "Detected corrupted files!"
94+
die "FAIL: $failures testcases failed"
7895
fi
7996
}
8097

0 commit comments

Comments
 (0)