Skip to content

Commit fe56f01

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 17253b3 commit fe56f01

File tree

5 files changed

+87
-40
lines changed

5 files changed

+87
-40
lines changed

case-lib/lib.sh

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,6 +1534,18 @@ restore_topology() {
15341534
check_topology
15351535
}
15361536

1537+
# Check aplay output for warnings about incorrect sample rate
1538+
# Arguments: 1-aplay output
1539+
check_for_aplay_warnings()
1540+
{
1541+
dlogi "$1"
1542+
if echo "$1" | grep -q "Warning: rate is not accurate"; then
1543+
dlogw "Caught 'rate not accurate error!'"
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()
@@ -1542,39 +1554,50 @@ play_and_record()
15421554
# shellcheck disable=SC2086
15431555
arecord $SOF_ALSA_OPTS $SOF_ARECORD_OPTS $1 & PID=$!
15441556
# shellcheck disable=SC2086
1545-
aplay $SOF_ALSA_OPTS $SOF_APLAY_OPTS $2
1557+
aplay_output=$(aplay $SOF_ALSA_OPTS $SOF_APLAY_OPTS $2 2>&1 | tee /dev/tty)
15461558
wait $PID
15471559
sleep 1
1560+
1561+
check_for_aplay_warnings "$aplay_output"
1562+
return $?
15481563
}
15491564

1550-
# Analyze files to look for glitches.
1565+
# Analyze file to look for glitches.
15511566
# Returns exit code 0 if there are no glitches, 1 if there are.
1552-
# Arguments: the list of filenames
1567+
# Arguments: filename
15531568
check_soundfile_for_glitches()
15541569
{
1555-
glitched_files=0
1556-
# shellcheck disable=SC2154
1570+
if [ -f "$result_filename" ]; then
1571+
dlogi "Analyzing $result_filename file..."
1572+
if python3 "$SCRIPT_HOME"/tools/analyze-wav.py "$result_filename"; then
1573+
dlogi "$result_filename file is correct"
1574+
else
1575+
dlogw "GLITCHED FILE: $result_filename"
1576+
fi
1577+
else
1578+
dlogw "MISSING FILE: $result_filename"
1579+
return 1
1580+
fi
1581+
}
1582+
1583+
# Check list of soundfiles for glitches
1584+
# Returns exit code 0 if there are no glitches, 1 if there are.
1585+
# Arguments: list of filenames
1586+
check_soundfiles_for_glitches()
1587+
{
1588+
failures=0
15571589
for result_filename in "${all_result_files[@]}"
15581590
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))
1591+
if ! check_soundfile_for_glitches "$result_filename"; then
1592+
failures=$((failures+1))
15701593
fi
15711594
done
15721595

1573-
if [ $glitched_files -eq 0 ]; then
1574-
dlogi "Analysis finished, no issues found"
1596+
if [ "$failures" = 0 ]; then
1597+
dlogi "All files correct"
15751598
return 0
15761599
else
1577-
dlogi "$glitched_files files corrupted"
1600+
dlogw "Found $failures corrupted files"
15781601
return 1
15791602
fi
15801603
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ run_tests()
100100
sox --encoding u-law -r 48000 -c 2 tmp2.raw "$mulaw_rec_filename"
101101
set -e
102102

103-
if check_soundfile_for_glitches "${all_result_files[@]}"; then
103+
if check_soundfiles_for_glitches "${all_result_files[@]}"; then
104104
dlogi "All files correct"
105105
else
106106
die "Detected corrupted files!"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ run_tests()
7575
play_and_record "-D$capture_dev $rec_opt -f FLOAT_LE $rec_filename" "-D$playback_dev $chirp_s32_filename"
7676
set -e
7777

78-
if check_soundfile_for_glitches "${all_result_files[@]}"; then
78+
if check_soundfiles_for_glitches "${all_result_files[@]}"; then
7979
dlogi "All files correct"
8080
else
8181
die "Detected corrupted files!"

test-case/check-src-play.sh

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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
{
60-
set +e
68+
errors=0
69+
whole_test_pass=true
70+
6171
for i in "${!sample_rates[@]}"
6272
do
73+
test_pass=true
6374
sample_rate=${sample_rates[$i]}
6475
chirp_rate=${chirp_rates[$i]}
76+
dlogi "--------------- TEST $((i+1)): SAMPLE RATE $sample_rate Hz, CHIRP RATE $chirp_rate Hz ---------------"
6577

66-
test_sound_filename=$LOG_ROOT/play.wav
6778
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-
79+
# all_result_files+=("$result_filename")
80+
prepare_test_soundfile
7381
play_and_record "-D$capture_dev $rec_opt $result_filename" "-D$playback_dev $test_sound_filename"
82+
83+
if [ $? -eq 1 ]; then
84+
test_pass=false
85+
dlogi "FAIL: Aplay failed, look for previous errors"
86+
fi
87+
88+
check_soundfile_for_glitches "$result_filename"
89+
if [ $? -eq 1 ]; then
90+
test_pass=false
91+
dlogi "FAIL: Found glitch in the recording"
92+
fi
93+
94+
if [ "$test_pass" = true ]; then
95+
die "PASS: No issues found."
96+
fi
97+
dlogi " " # For cleaner logs
7498
done
75-
set -e
76-
77-
if check_soundfile_for_glitches "${all_result_files[@]}"; then
78-
dlogi "All files correct"
79-
else
80-
die "Detected corrupted files!"
99+
100+
if [ "$whole_test_pass" = false ]; then
101+
die "FAIL: Not all testcases passed. Look for previous errors."
81102
fi
82103
}
83104

test-case/check-src-rec.sh

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,24 @@ run_tests()
6060
dlogi "Generate 48 kHz chirp 0 - 20 kHz"
6161
ffmpeg -y -f lavfi -i "aevalsrc='sin(2000*t*2*PI*t)':s=48000:d=5" -ac 2 "$test_sound_filename"
6262

63-
set +e
63+
failures=0
6464
for i in "${!sample_rates[@]}"
6565
do
6666
sample_rate=${sample_rates[$i]}
67+
dlogi "--------------- TEST $((i+1)): SAMPLE RATE $sample_rate Hz ---------------"
6768

6869
result_filename=$LOG_ROOT/rec_$sample_rate.wav
69-
all_result_files+=("$result_filename")
7070
play_and_record "-D$capture_dev $rec_opt -r $sample_rate $result_filename" "-D$playback_dev $test_sound_filename"
71+
72+
if ! check_soundfile_for_glitches "$result_filename"; then
73+
failures=$((failures+1))
74+
fi
7175
done
72-
set -e
7376

74-
if check_soundfile_for_glitches "${all_result_files[@]}"; then
75-
dlogi "All files correct"
77+
if [ "$failures" = 0 ]; then
78+
dlogi "PASS: All files correct"
7679
else
77-
die "Detected corrupted files!"
80+
die "FAIL: Found $failures corrupted files"
7881
fi
7982
}
8083

0 commit comments

Comments
 (0)