Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config1" # Test specific clips (e.g., "playback_config1 playback_config2" or "play_48KHz_8b_2ch"), default: playback_config1
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config1" # Test specific clips (Config01: 8KHz, 8-bit, 1ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config2" # Test specific clips (Config02: 16KHz, 8-bit, 6ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config3" # Test specific clips (Config03: 16KHz, 16-bit, 2ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config4" # Test specific clips (Config04: 22.05KHz, 8-bit, 1ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config5" # Test specific clips (Config05: 24KHz, 24-bit, 6ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config6" # Test specific clips (Config06: 24KHz, 32-bit, 1ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config7" # Test specific clips (Config07: 32KHz, 8-bit, 8ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config8" # Test specific clips (Config08: 32KHz, 16-bit, 2ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config9" # Test specific clips (Config09: 44.1KHz, 16-bit, 1ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SINK_CHOICE: "speakers" # Playback sink: speakers or null, default: speakers
CLIP_NAMES: "playback_config10" # Test specific clips (Config10: 48KHz, 8-bit, 2ch)
CLIP_FILTER: "" # Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch"), default: unset
Expand Down
35 changes: 27 additions & 8 deletions Runner/suites/Multimedia/Audio/AudioPlayback/Read_me.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

## Overview

This suite automates the validation of audio playback capabilities on Qualcomm Linux-based platforms running a Yocto-based Linux system. It supports both PipeWire and PulseAudio backends, with robust evidence-based PASS/FAIL logic, asset management, and diagnostic logging.
This suite automates the validation of audio playback capabilities on Qualcomm Linux-based platforms. It supports PipeWire, PulseAudio, and direct ALSA backends with robust evidence-based PASS/FAIL logic, asset management, and diagnostic logging.


## Features

- Supports **PipeWire** and **PulseAudio** backends
- Supports **PipeWire**, **PulseAudio**, and direct **ALSA** backends
- **10-clip test coverage**: Comprehensive validation across diverse audio formats (sample rates: 8KHz-48KHz, bit depths: 8b-32b, channels: 1ch-8ch)
- **Flexible clip selection**:
- Use generic config names (playback_config1-playback_config10) for easy selection
Expand Down Expand Up @@ -59,10 +59,29 @@ The test suite includes 10 diverse audio clip configurations covering various sa

Ensure the following components are present in the target Yocto build:

- PipeWire: `pw-play`, `wpctl`
- PulseAudio: `paplay`, `pactl`
- Common tools: `pgrep`, `timeout`, `grep`, `wget`, `tar`
- Daemon: `pipewire` or `pulseaudio` must be running
- PipeWire: `pw-play`, `wpctl`
- PulseAudio: `paplay`, `pactl`
- ALSA: `aplay`, `amixer`, `alsaucm` when UCM is available
- Common tools: `pgrep`, `timeout`, `grep`, `wget`, `tar`
- Daemon: `pipewire` or `pulseaudio` must be running

## Backend and Route Selection

When no backend is requested, the suite uses automatic selection. A physical PipeWire audio sink uses `pw-play`, and a physical PulseAudio sink uses `paplay`. Dummy, null, monitor, and loopback PipeWire sinks are not accepted as speaker routes.

If automatic selection finds no physical managed speaker sink, the suite probes direct ALSA playback. It selects an ALSA card and PCM from the available device inventory, applies only mixer controls exposed by that card, and runs `aplay -D <device>`. This supports the Shikra primary-MI2S, secondary-TDM, and codec-direct route capabilities without selecting a form factor or assuming card `0`.

An explicit backend request is never replaced:

- `--backend pipewire` or `AUDIO_BACKEND=pipewire` runs `pw-play` only and skips if PipeWire has no physical speaker sink.
- `--backend pulseaudio` or `AUDIO_BACKEND=pulseaudio` runs `paplay` only and skips if no matching sink is available.
- `--backend alsa` or `AUDIO_BACKEND=alsa` runs `aplay` with the discovered ALSA route.

## Audio Remoteproc Preflight

Before backend discovery, the suite enumerates runtime remoteprocs and checks the configured firmware and topology under `/lib/firmware` or `/usr/lib/firmware`. It recognizes audio DSP identities and the Shikra modem-hosted audio path. A remoteproc named `modem` is ignored on non-Shikra targets because it is not their audio preflight dependency.

If the matching remoteproc is `running`, the suite records its name and firmware evidence. If it is `offline`, the suite starts it only after confirming the corresponding firmware is provisioned. Generic audio DSP paths also require adjacent topology evidence. Shikra's modem-hosted path does not require an adjacent topology file because its public image packages `qdsp6sw` modem firmware and `lpaicp` audio firmware separately. The suite never stops a remoteproc. Platforms with no applicable audio remoteproc continue normally. Provisioning or start issues produce a clean skip with the reason.

## Overlay Build Support

Expand Down Expand Up @@ -210,7 +229,7 @@ cd Runner/suites/Multimedia/Audio/AudioPlayback

Environment Variables:
Variable Description Default
AUDIO_BACKEND Selects backend: pipewire or pulseaudio auto-detect
AUDIO_BACKEND Selects backend: pipewire, pulseaudio, or alsa auto-detect
SINK_CHOICE Playback sink: speakers or null speakers
CLIP_NAMES Test specific clips (e.g., "playback_config1 playback_config2") playback_config1
CLIP_FILTER Filter clips by pattern (e.g., "48KHz" or "16b" or "2ch") unset
Expand All @@ -235,7 +254,7 @@ LAVA_TESTCASE_ID Unique testcase ID written into the .res file for LAVA

CLI Options
Option Description
--backend Select backend: pipewire or pulseaudio
--backend Select backend: pipewire, pulseaudio, or alsa
--sink Playback sink: speakers or null
--clip-name <names> Test specific clips using playback_config1-playback_config10 or descriptive names (space-separated)
--clip-filter <patterns> Filter clips by sample rate, bit rate, or channels (space-separated patterns)
Expand Down
84 changes: 67 additions & 17 deletions Runner/suites/Multimedia/Audio/AudioPlayback/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ AUDIO_TAR_URL="${AUDIO_TAR_URL:-https://github.com/qualcomm-linux/qcom-linux-tes
export AUDIO_TAR_URL

# ------------- Defaults / CLI -------------
AUDIO_BACKEND=""
AUDIO_BACKEND="${AUDIO_BACKEND:-}"
SINK_CHOICE="${SINK_CHOICE:-speakers}" # speakers|null
FORMATS="" # Will be set to default only if using legacy mode
DURATIONS="" # Will be set to default only if using legacy mode
Expand Down Expand Up @@ -146,7 +146,7 @@ PASSWORD=""
usage() {
cat <<EOF_USAGE
Usage: $0 [options]
--backend {pipewire|pulseaudio}
--backend {pipewire|pulseaudio|alsa}
--sink {speakers|null}
--overlay
On Debian, ensure the Qualcomm AudioReach package set and prepare the
Expand Down Expand Up @@ -278,7 +278,7 @@ case "$audio_prepare_rc" in
0)
;;
2)
log_skip "$TESTNAME SKIP - AudioReach kernel package changed; reboot required"
log_skip "$TESTNAME SKIP - AudioReach kernel package changed, reboot required"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
Expand Down Expand Up @@ -416,6 +416,11 @@ while [ $# -gt 0 ]; do
esac
done

# Preserve an explicit backend request. Automatic fallback is only appropriate
# when backend selection was left in auto mode.
AUDIO_BACKEND_REQUESTED="$AUDIO_BACKEND"
export AUDIO_BACKEND_REQUESTED

# Prepare only the Debian user capabilities required by the selected mode.
# Explicit base ALSA playback needs group membership but no systemd user
# manager. Overlay and managed backends require the user session.
Expand Down Expand Up @@ -478,7 +483,7 @@ if [ "$AUDIO_OVERLAY_REQUESTED" -eq 1 ]; then
0)
;;
2)
log_skip "$TESTNAME SKIP - AudioReach kernel package changed; reboot required"
log_skip "$TESTNAME SKIP - AudioReach kernel package changed, reboot required"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
Expand All @@ -493,12 +498,30 @@ elif [ "$SYSTEMD_AVAILABLE" -eq 1 ] &&
# Preserve the existing native/Yocto validation path. Debian base mode uses
# command-level user probes during backend discovery instead.
if ! setup_overlay_audio_environment; then
log_warn "Existing overlay audio environment validation failed; continuing with backend recovery flow"
log_warn "Existing overlay audio environment validation failed, continuing with backend recovery flow"
fi
else
log_info "systemd not available; skipping legacy overlay environment check"
log_info "systemd not available, skipping legacy overlay environment check"
fi

# Start an image-provisioned audio remoteproc before backend and device
# discovery. Platforms without an applicable remoteproc continue unchanged.
audio_prepare_audio_remoteproc
audio_remoteproc_rc=$?

case "$audio_remoteproc_rc" in
0)
;;
2)
log_info "Audio remoteproc preflight not applicable: ${AUDIO_REMOTE_PROC_REASON:-no matching remoteproc}"
;;
*)
log_skip "$TESTNAME SKIP - audio remoteproc preflight failed: ${AUDIO_REMOTE_PROC_REASON:-unknown remoteproc error}"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
esac

if [ "$SYSTEMD_AVAILABLE" -eq 0 ]; then
MINIMAL_RAMDISK_MODE=1
export MINIMAL_RAMDISK_MODE
Expand Down Expand Up @@ -680,15 +703,15 @@ fi
export AUDIO_SYSTEMD_MANAGED

if [ -z "$AUDIO_BACKEND" ]; then
if audio_run_helper_as_test_user audio_playback_alsa_probe; then
if audio_playback_probe_alsa_with_recovery; then
AUDIO_BACKEND="alsa"
AUDIO_SYSTEMD_MANAGED=0
export AUDIO_SYSTEMD_MANAGED
log_info "Using backend: alsa (direct minimal-build fallback)"
elif audio_playback_bootstrap_backend_if_needed; then
AUDIO_BACKEND="$(audio_run_helper_as_test_user --require-session detect_audio_backend 2>/dev/null || echo "")"
if [ -z "$AUDIO_BACKEND" ]; then
if audio_run_helper_as_test_user audio_playback_alsa_probe; then
if audio_playback_probe_alsa_with_recovery; then
AUDIO_BACKEND="alsa"
AUDIO_SYSTEMD_MANAGED=0
export AUDIO_SYSTEMD_MANAGED
Expand All @@ -710,7 +733,7 @@ log_info "Using backend: $AUDIO_BACKEND"

backend_ok=0
if [ "$AUDIO_BACKEND" = "alsa" ]; then
if audio_run_helper_as_test_user audio_playback_alsa_probe; then
if audio_playback_probe_alsa_with_recovery; then
backend_ok=1
fi
else
Expand Down Expand Up @@ -738,7 +761,8 @@ if [ "$backend_ok" -ne 1 ]; then
fi
fi

if [ "$backend_ok" -ne 1 ] && [ "$AUDIO_BACKEND" != "alsa" ]; then
if [ "$backend_ok" -ne 1 ] && [ -z "$AUDIO_BACKEND_REQUESTED" ] &&
[ "$AUDIO_BACKEND" != "alsa" ]; then
if [ "$AUDIO_PLAYBACK_DEBIAN_ROOT_MODE" -eq 1 ]; then
log_warn "$TESTNAME: backend not available ($AUDIO_BACKEND) - attempting user-service recovery"
else
Expand All @@ -762,7 +786,7 @@ if [ "$backend_ok" -ne 1 ] && [ "$AUDIO_BACKEND" != "alsa" ]; then
fi

if [ "$backend_ok" -ne 1 ] && [ "$AUDIO_BACKEND" != "alsa" ]; then
if audio_run_helper_as_test_user audio_playback_alsa_probe; then
if audio_playback_probe_alsa_with_recovery; then
log_warn "$TESTNAME: falling back to ALSA direct playback path"
AUDIO_BACKEND="alsa"
AUDIO_SYSTEMD_MANAGED=0
Expand All @@ -781,7 +805,8 @@ fi
case "$AUDIO_BACKEND" in
pipewire)
if ! check_dependencies pw-play; then
if audio_run_helper_as_test_user audio_playback_alsa_probe && check_dependencies aplay; then
if [ -z "$AUDIO_BACKEND_REQUESTED" ] &&
audio_playback_probe_alsa_with_recovery && check_dependencies aplay; then
log_warn "$TESTNAME: PipeWire playback utility missing - falling back to ALSA"
AUDIO_BACKEND="alsa"
AUDIO_SYSTEMD_MANAGED=0
Expand All @@ -795,7 +820,8 @@ case "$AUDIO_BACKEND" in
;;
pulseaudio)
if ! check_dependencies paplay; then
if audio_run_helper_as_test_user audio_playback_alsa_probe && check_dependencies aplay; then
if [ -z "$AUDIO_BACKEND_REQUESTED" ] &&
audio_playback_probe_alsa_with_recovery && check_dependencies aplay; then
log_warn "$TESTNAME: PulseAudio playback utility missing - falling back to ALSA"
AUDIO_BACKEND="alsa"
AUDIO_SYSTEMD_MANAGED=0
Expand Down Expand Up @@ -832,7 +858,8 @@ if [ "$AUDIO_BACKEND" = "pipewire" ]; then
fi

if ! audio_run_helper_as_test_user --require-session audio_pw_ctl_ok 2>/dev/null; then
if audio_run_helper_as_test_user audio_playback_alsa_probe && check_dependencies aplay; then
if [ -z "$AUDIO_BACKEND_REQUESTED" ] &&
audio_playback_probe_alsa_with_recovery && check_dependencies aplay; then
log_warn "$TESTNAME: falling back to ALSA direct playback path"
AUDIO_BACKEND="alsa"
AUDIO_SYSTEMD_MANAGED=0
Expand All @@ -855,7 +882,8 @@ elif [ "$AUDIO_BACKEND" = "pulseaudio" ]; then
fi

if ! audio_run_helper_as_test_user --require-session audio_pa_ctl_ok 2>/dev/null; then
if audio_run_helper_as_test_user audio_playback_alsa_probe && check_dependencies aplay; then
if [ -z "$AUDIO_BACKEND_REQUESTED" ] &&
audio_playback_probe_alsa_with_recovery && check_dependencies aplay; then
log_warn "$TESTNAME: falling back to ALSA direct playback path"
AUDIO_BACKEND="alsa"
AUDIO_SYSTEMD_MANAGED=0
Expand Down Expand Up @@ -888,15 +916,37 @@ case "$AUDIO_BACKEND:$SINK_CHOICE" in
SINK_ID="null"
;;
alsa:*)
audio_playback_alsa_prepare >/dev/null 2>&1 || true
if [ -n "${AUDIO_ALSA_PLAYBACK_DEVICE:-}" ]; then
SINK_ID="$AUDIO_ALSA_PLAYBACK_DEVICE"
else
SINK_ID="$(audio_playback_pick_alsa_sink)"
fi

audio_playback_alsa_prepare \
"$(audio_alsa_device_card "$SINK_ID")" >/dev/null 2>&1 || true
;;
esac

if [ -z "$SINK_ID" ] && [ -z "$AUDIO_BACKEND_REQUESTED" ] &&
[ "$SINK_CHOICE" = "speakers" ] &&
{ [ "$AUDIO_BACKEND" = "pipewire" ] || [ "$AUDIO_BACKEND" = "pulseaudio" ]; }
then
log_warn "$TESTNAME: no physical $AUDIO_BACKEND speaker sink found, probing direct ALSA playback"

if audio_playback_probe_alsa_with_recovery; then
AUDIO_BACKEND="alsa"
AUDIO_SYSTEMD_MANAGED=0
export AUDIO_SYSTEMD_MANAGED

SINK_ID="$AUDIO_ALSA_PLAYBACK_DEVICE"
log_warn "$TESTNAME: falling back to direct ALSA playback device: $SINK_ID"
else
log_skip "$TESTNAME SKIP - no physical $AUDIO_BACKEND speaker sink and ALSA playback probe failed"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
fi

if [ -z "$SINK_ID" ]; then
log_skip "$TESTNAME SKIP - requested sink '$SINK_CHOICE' not found for $AUDIO_BACKEND"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
Expand Down Expand Up @@ -995,7 +1045,7 @@ if [ "$USE_CLIP_DISCOVERY" = "true" ]; then
case_name="$(generate_clip_testcase_name "$clip_file" 2>/dev/null || true)"
if [ -z "$case_name" ]; then
case_name="$(printf '%s' "$clip_file" | sed 's/\.[Ww][Aa][Vv]$//' | tr ' /' '__')"
log_warn "Clip name not in expected format; using generic testcase name: $case_name"
log_warn "Clip name not in expected format, using generic testcase name: $case_name"
fi

# Resolve full path
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SOURCE_CHOICE: "mic" # Recording source: mic or null, default: mic
CONFIG_NAMES: "record_config1" # Test specific configs (e.g., "record_config1 record_config2"), default: record_config1
CONFIG_FILTER: "" # Filter configs by pattern (e.g., "48KHz" or "2ch"), default: unset
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
- functional

params:
AUDIO_BACKEND: "" # Selects backend: pipewire or pulseaudio, default: auto-detect
AUDIO_BACKEND: "" # Selects backend: pipewire, pulseaudio, or alsa, default: auto-detect
SOURCE_CHOICE: "mic" # Recording source: mic or null, default: mic
CONFIG_NAMES: "record_config1" # Test specific configs (Config01: 8KHz, 1ch)
CONFIG_FILTER: "" # Filter configs by pattern (e.g., "48KHz" or "2ch"), default: unset
Expand Down
Loading
Loading