From 398d4e7246cb8dc91eea2324567350a89bd517c2 Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Mon, 13 May 2024 14:21:44 +0100 Subject: [PATCH] feat: add support for qemu usb-audio devices --- quickemu | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/quickemu b/quickemu index 456e60c..2b62f93 100755 --- a/quickemu +++ b/quickemu @@ -832,13 +832,13 @@ function vm_boot() { VIDEO="${VGA} ${VIDEO} ${FULLSCREEN}" # Build the sound hardware configuration - if [ "${sound_card}" == "intel-hda" ]; then - SOUND="-device intel-hda -device hda-duplex,audiodev=audio0" - elif [ "${sound_card}" == "ac97" ] || [ "${sound_card}" == "es1370" ] || [ "${sound_card}" == "sb16" ]; then - SOUND="-device ${sound_card},audiodev=audio0" - elif [ "${sound_card}" == "none" ]; then - SOUND="" - fi + case ${sound_card} in + ich9-intel-hda|intel-hda) SOUND="-device ${sound_card} -device ${sound_duplex},audiodev=audio0";; + usb-audio) SOUND="-device ${sound_card},audiodev=audio0";; + ac97|es1370|sb16) SOUND="-device ${sound_card},audiodev=audio0";; + none) SOUND="";; + esac + echo " - Sound: ${sound_card} (${sound_duplex})" # Set the hostname of the VM @@ -980,8 +980,6 @@ function vm_boot() { ${CPU} ${SMP} -m ${RAM_VM} ${BALLOON} ${VIDEO} -display ${DISPLAY_RENDER} - -audiodev ${AUDIO_DEV} - ${SOUND} -rtc base=localtime,clock=host,driftfix=slew) # Only enable SPICE is using SPICE display @@ -1079,6 +1077,11 @@ function vm_boot() { echo "WARNING! Unknown mouse value: '${mouse}; Fallback to ps2'" fi + # setup audio + # @INFO: must be set after usb-controller; in case usb-audio is used + # shellcheck disable=SC2206 + args+=(-audiodev ${AUDIO_DEV} ${SOUND}) + # $bridge backwards compatibility for Quickemu <= 4.0 if [ -n "${bridge}" ]; then network="${bridge}" @@ -1420,7 +1423,7 @@ function usage() { echo " --keyboard_layout : Set keyboard layout: 'en-us' (default)" echo " --mouse : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio'" echo " --usb-controller : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none'" - echo " --sound-card : Set sound card. @Options: 'intel-hda' (default), 'ac97', 'es1370', 'sb16', 'none'" + echo " --sound-card : Set sound card. @Options: 'intel-hda' (default), 'ac97', 'es1370', 'sb16', 'usb-audio', 'none'" echo " --sound-duplex : Set sound card duplex. @Options: 'hda-micro' (default: speaker/mic), 'hda-duplex' (line-in/line-out), 'hda-output' (output-only)" echo " --extra_args : Pass additional arguments to qemu" echo " --version : Print version" @@ -1435,10 +1438,16 @@ function display_param_check() { } function sound_card_param_check() { - if [ "${sound_card}" != "intel-hda" ] && [ "${sound_card}" != "ac97" ] && [ "${sound_card}" != "es1370" ] && [ "${sound_card}" != "sb16" ] && [ "${sound_card}" != "none" ]; then + if [ "${sound_card}" != "ac97" ] && [ "${sound_card}" != "es1370" ] && [ "${sound_card}" != "ich9-intel-hda" ] && [ "${sound_card}" != "intel-hda" ] && [ "${sound_card}" != "sb16" ] && [ "${sound_card}" != "usb-audio" ] && [ "${sound_card}" != "none" ]; then echo "ERROR! Requested sound card '${sound_card}' is not recognised." exit 1 fi + + # USB audio requires xhci controller + if [ "${sound_card}" == "usb-audio" ]; then + usb_controller="xhci"; + fi + #name "hda-duplex", bus HDA, desc "HDA Audio Codec, duplex (line-out, line-in)" #name "hda-micro", bus HDA, desc "HDA Audio Codec, duplex (speaker, microphone)" #name "hda-output", bus HDA, desc "HDA Audio Codec, output-only (line-out)"