@@ -752,17 +752,80 @@ func_lib_check_pa()
752752# However, 1. arrays would complicate the user interface 2. ALSA does not
753753# seem to need arguments with whitespace or globbing characters.
754754
755+ # SOF_ALSA_TOOL:
756+ # This option is used for selecting tool for testing,
757+ # So far, supported tools are 'alsa' and 'tinyalsa'
758+ # To select appropriate tool, set SOF_ALSA_TOOL to one of above
759+ # before using 'aplay_opts' or 'arecord_opts' function.
760+ # (e.g., SOF_ALSA_TOOL=alsa)
761+
762+
763+ # Function to extract the card number and device number from $dev option (e.g., hw:0,10)
764+ parse_audio_device () {
765+ # Extract the card number (e.g., "0" from hw:0,10)
766+ card_nr=$( printf ' %s' " $1 " | cut -d ' :' -f2 | cut -d ' ,' -f1)
767+
768+ # Extract the device number (e.g., "10" from hw:0,10)
769+ dev_nr=$( printf ' %s' " $1 " | cut -d ' ,' -f2)
770+ }
771+
772+ # Function to extract the numeric format value from the $fmt_elem option
773+ extract_format_number () {
774+ # (e.g., extracting '16' from 'S16_LE')
775+ format=$( printf ' %s' " $1 " | grep ' [0-9]\+' -o)
776+ }
777+
778+ # Initialize the parameters using for audio testing.
779+ # shellcheck disable=SC2034
780+ initialize_audio_params ()
781+ {
782+ local idx=" $1 "
783+
784+ channel=$( func_pipeline_parse_value " $idx " channel)
785+ rate=$( func_pipeline_parse_value " $idx " rate)
786+ fmts=$( func_pipeline_parse_value " $idx " fmt)
787+ dev=$( func_pipeline_parse_value " $idx " dev)
788+ pcm=$( func_pipeline_parse_value " $idx " pcm)
789+ type=$( func_pipeline_parse_value " $idx " type)
790+ snd=$( func_pipeline_parse_value " $idx " snd)
791+
792+ : " ${SOF_ALSA_TOOL:= " alsa" } "
793+ if [[ " $SOF_ALSA_TOOL " = " tinyalsa" ]]; then
794+ parse_audio_device " $dev "
795+ fi
796+ }
797+
755798aplay_opts ()
756799{
757- dlogc " aplay $SOF_ALSA_OPTS $SOF_APLAY_OPTS $* "
758- # shellcheck disable=SC2086
759- aplay $SOF_ALSA_OPTS $SOF_APLAY_OPTS " $@ "
800+ if [[ " $SOF_ALSA_TOOL " = " tinyalsa" ]]; then
801+ dlogc " tinyplay $* "
802+ # shellcheck disable=SC2154
803+ sox -n -r " $rate " -c " $channel " noise.wav synth " $duration " white
804+ tinyplay -D " $card_nr " -d " $dev_nr " -i wav noise.wav
805+ elif [[ " $SOF_ALSA_TOOL " = " alsa" ]]; then
806+ dlogc " aplay $SOF_ALSA_OPTS $SOF_APLAY_OPTS $* "
807+ # shellcheck disable=SC2086
808+ aplay $SOF_ALSA_OPTS $SOF_APLAY_OPTS " $@ "
809+ else
810+ printf ' %s' " Unknown alsa tool: $SOF_ALSA_TOOL "
811+ fi
760812}
813+
761814arecord_opts ()
762815{
763- dlogc " arecord $SOF_ALSA_OPTS $SOF_ARECORD_OPTS $* "
764- # shellcheck disable=SC2086
765- arecord $SOF_ALSA_OPTS $SOF_ARECORD_OPTS " $@ "
816+
817+ if [[ " $SOF_ALSA_TOOL " = " tinyalsa" ]]; then
818+ dlogc " tinycap $* "
819+ # shellcheck disable=SC2154
820+ extract_format_number " $fmt_elem "
821+ tinycap " $file " -D " $card_nr " -d " $dev_nr " -c " $channel " -t " $duration " -r " $rate " -b " $format "
822+ elif [[ " $SOF_ALSA_TOOL " = " alsa" ]]; then
823+ dlogc " arecord $SOF_ALSA_OPTS $SOF_ARECORD_OPTS $* "
824+ # shellcheck disable=SC2086
825+ arecord $SOF_ALSA_OPTS $SOF_ARECORD_OPTS " $@ "
826+ else
827+ printf ' %s' " Unknown alsa tool: $SOF_ALSA_TOOL "
828+ fi
766829}
767830
768831die ()
0 commit comments