LINUX.ORG.RU

Хрипящий звук в qemu

 ,


3

1

На хосте Fedora 34 Workstation, в виртуалке тоже. Не могу побороть хрипящий звук. Пробовал разные варианты, результат один.

Вот последняя попытка:

        -audiodev pa,id=audiodev-0,server="$XDG_RUNTIME_DIR/pulse/native" \
        -device ich9-intel-hda \
        -device hda-output,audiodev=audiodev-0 \
★★★★★

Поставь в libvirt через какой-нибудь GNOME Boxes, убедись, что не хрипит, срисуй решение оттуда.

t184256 ★★★★★
()

Без крайней необходимости никогда не пользуйтнсь qemu-kvm без посредства libvirt. Даже в RHEL8 уже мажорную версию qemu-kvm поменять успели. Иначе придется следить за всеми многочисленными изменениями, каждый раз изучая release notes. Ну, или хотя бы на блог Герда Хоффмана подписаться придется.

i586 ★★★★★
()
Последнее исправление: i586 (всего исправлений: 1)

У тебя хрепит pipewire, удаляй его.

bhfq ★★★★★
()

Хрипы появляются, поскольку по умолчанию выключен таймер и выставлена нерабочая (слишком маленькая) задержка. Решение: включить таймер и увеличить задержку. Цифры подгонять под конкретную систему, пример ниже тоже слишком агрессивный для некоторых звуковых карт (например, для всех USB-карт).

-audiodev pa,id=audiodev-0,timer-period=1000,in.buffer-length=3000,out.buffer-length=3000

и/или in.latency=3000,out.latency=3000

-device ich9-intel-hda -device hda-micro,audiodev=audiodev-0,mixer=false,use-timer=true

AEP ★★★★★
()
Ответ на: комментарий от Legioner

В итоге остановился на

        -audiodev pa,id=audiodev-0,timer-period=2000 \
        -device ich9-intel-hda \
        -device hda-output,audiodev=audiodev-0,mixer=false,use-timer=true \

Буферы вроде не дают никакого эффекта, менять не стал. Остальные настройки критичны, без любой начинает хрипеть.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Несколько лет назад с подобной фигней разбирался, вот кусок из моего скрипта для qemu:

#==============================================================================
# AUDIO
#==============================================================================
#
# AUDIO
#     Creates a sound device. Comment this option if you do not need it.
# 
# QEMU_AUDIO_DRV
#     Connects GUEST sound to HOST, possible values are: alsa, pa, none.
#     There are some additional options provided by exported variables,
#     you can use them for advance audio configuration.
#
#     QEMU_AUDIO_DRV='alsa'
#         Connects GUEST sound to HOST alsa.
#
#     QEMU_AUDIO_DRV='pa'
#         Connects GUEST sound to HOST pulseaudio.
#
#     QEMU_AUDIO_DRV='none'
#         Disable connection GUST sound to HOST.
#         You can still record GUEST sound using QEMU monitor.
#
#------------------------------------------------------------------------------
# COMMENTS
#     If you have trouble with audio quality, try to increase the value of
#     *_PERIOD_SIZE and *_BUFFER_SIZE variables.
#
#     For additional information see 'qemu-system-x86_64 -audio-help'.
#
#     I recommend to use "ac97" (Intel 82801AA AC97 Audio) audio device,
#     occasionally there are some problems with hda (Intel HD Audio).
#------------------------------------------------------------------------------
#AUDIO=' -soundhw ac97'  # QEMU options
export QEMU_AUDIO_DRV='alsa'

# Advance audio configuration: common options
#export QEMU_AUDIO_DAC_FIXED_SETTINGS='1'  # (boolean) Use fixed settings for host DAC
#export QEMU_AUDIO_DAC_FIXED_FREQ='44100'  # (integer) Frequency for fixed host DAC
#export QEMU_AUDIO_DAC_FIXED_FMT='S16'     # (format)  One ofU8 S8 U16 S16 U32 S32 - Format for fixed host DAC
#export QEMU_AUDIO_DAC_FIXED_CHANNELS='2'  # (integer) Number of channels for fixed DAC (1 - mono, 2 - stereo)
#export QEMU_AUDIO_DAC_VOICES='1'          # (integer) Number of voices for DAC
#export QEMU_AUDIO_DAC_TRY_POLL='1'        # (boolean) Attempt using poll mode for DAC
#export QEMU_AUDIO_ADC_FIXED_SETTINGS='1'  # (boolean) Use fixed settings for host ADC
#export QEMU_AUDIO_ADC_FIXED_FREQ='44100'  # (integer) Frequency for fixed host ADC
#export QEMU_AUDIO_ADC_FIXED_FMT='S16'     # (format)  One of U8 S8 U16 S16 U32 S32 - Format for fixed host ADC
#export QEMU_AUDIO_ADC_FIXED_CHANNELS='2'  # (integer) Number of channels for fixed ADC (1 - mono, 2 - stereo)
#export QEMU_AUDIO_ADC_VOICES='1'          # (integer) Number of voices for ADC
#export QEMU_AUDIO_ADC_TRY_POLL='1'        # (boolean) Attempt using poll mode for ADC
#export QEMU_AUDIO_TIMER_PERIOD='100'      # (integer) Timer period in HZ (0 - use lowest possible)                                                        
                                                                                                                                                           
# Advance audio configuration: alsa options                                                                                                                
#export QEMU_ALSA_DAC_SIZE_IN_USEC='0'    # (boolean) DAC period/buffer size in microseconds (otherwise in frames)
#export QEMU_ALSA_DAC_PERIOD_SIZE='1024'  # (integer) DAC period size (0 to go with system default)
#export QEMU_ALSA_DAC_BUFFER_SIZE='4096'  # (integer) DAC buffer size (0 to go with system default)
#export QEMU_ALSA_ADC_SIZE_IN_USEC='0'    # (boolean) ADC period/buffer size in microseconds (otherwise in frames)
#export QEMU_ALSA_ADC_PERIOD_SIZE='0'     # (integer) ADC period size (0 to go with system default)
#export QEMU_ALSA_ADC_BUFFER_SIZE='0'     # (integer) ADC buffer size (0 to go with system default)
#export QEMU_ALSA_THRESHOLD='0'           # (integer) Undocumented
#export QEMU_ALSA_DAC_DEV='default'       # (string)  DAC device name (for instance dmix)
#export QEMU_ALSA_ADC_DEV='default'       # (string)  ADC device name

# Advance audio configuration: pulseaudio options
#export QEMU_PA_SAMPLES='4096'  # (integer) buffer size in samples
#export QEMU_PA_SERVER=''       # (string) server address
#export QEMU_PA_SINK=''         # (string) sink device name
#export QEMU_PA_SOURCE=''       # (string) source device name
soomrack ★★★★★
()
Ответ на: комментарий от soomrack

Спасибо, я так понял, что сейчас передача параметров через переменные окружения устарела и используются параметры командной строки. Ещё бы они были нормально документированы…

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Так это ж скрипт, я потом все собираю в командную строку:

#==============================================================================
# QEMU START
#==============================================================================
#
# QEMU
#     Array variable, the first element is the QEMU invocation, next elements
#     are QEMU options. Check the first element and correct it if it is wrong
#     for your system.
#
#------------------------------------------------------------------------------
# COMMENTS
#     If you want only to generate QEMU starting command with options, then
#     comment line 
#         eval "${QEMU[@]}"
#     and uncomment line
#         echo "${QEMU[@]}"
#------------------------------------------------------------------------------
QEMU=( 
    '/usr/bin/qemu-system-x86_64'
    "${NAME:=}"
    '-no-user-config'
    '-nodefaults'
    "${PID:=}"
    "${MACHINE:=}"
    "${CPU:=}"                                                                                                                                             
    "${MEMORY:=}"                                                                                                                                          
    "${VIDEO:=}"                                                                                                                                           
    "${AUDIO:=}"                                                                                                                                           
    "${SERIAL:=}"                                                                                                                                          
    "${VNC:=}"                                                                                                                                             
    "${KERNEL:=}"                                                                                                                                          
    "${NIC:=}"                                                                                                                                             
    "${USER_NIC:=}"                                                                                                                                        
    "${NONE_NIC:=}"                                                                                                                                        
    "${KEYBOARD:=}"                                                                                                                                        
    "${MOUSE:=}"                                                                                                                                           
    "${RTC:=}"                                                                                                                                             
    "${RNG:=}"                                                                                                                                             
    "${WATCHDOG:=}"                                                                                                                                        
    "${BOOT_MENU:=}"                                                                                                                                       
    "${DISK:=}"                                                                                                                                            
    "${CDROM:=}"                                                                                                                                           
    "${PCI_PASSTHROUGH:=}"                                                                                                                                 
    "${DAEMONIZE:=}"                                                                                                                                       
    "${LOG:=}"                                                                                                                                             
)                                                                                                                                                          
                                                                                                                                                           
logger -- "${QEMU[@]}"  # Print QEMU start command to system log                                                                                           
                                                                                                                                                           
echo "${QEMU[@]}"  # Print QEMU start command                                                                                                              
#eval "${QEMU[@]}"  # RUN QEMU 
soomrack ★★★★★
()
Ответ на: комментарий от soomrack

Ну тогда не понятно, каким образом у тебя получается из этого переменная AUDIO. Думаю, ты всё же ошибаешься. Раньше в qemu параметры для звуковых устройств передавались через переменные окружения с теми именами, которые указаны в твоём первом скрипте. В последних версиях они это переделали. В любом случае спасибо, пока вроде всё работает, если что, буду иметь в виду.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

О, да, ты прав. Поменялось это все. Ну я звуком в виртуалке давно не пользовался, а для игр я тогда сделал проброс видяхи и usb, соотв. звук получал независимо от хостсистемы по HDMI или через внешнюю usb звуковуху.

soomrack ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.