[libvirt-users] Audio in Windows 10 VM is distorted. Using ALSA.
Žilvinas Žaltiena
zaltys at inbox.ru
Wed Dec 21 09:31:31 UTC 2016
Hi,
I found the main reason for sound distortions on my system is guest timer
configuration.
The working one is:
<clock offset="localtime">
<timer name="hypervclock" present="yes"/>
<timer name="hpet" present="no"/>
<timer name="rtc" present="yes" track="guest" tickpolicy="delay"/>
</clock>
...
<qemu:commandline>a
<qemu:arg value='-machine'/>
<qemu:arg value='kernel_irqchip=on'/>
<qemu:arg value='-cpu'/>
<qemu:arg
value='host,migratable=no,+invtsc,hv_time,+kvm_pv_eoi,hv_relaxed,hv_spinlocks=0x1fff,hv_vendor_id=nv_fuck_you!,kvm=off'/>
</qemu:commandline>
The important part here is "host,migratable=no,+invtsc". It gives guest the
invariant TSC (CPU must support it). This is a bit of a hack. Everything,
except migratable=no, can be configured through proper XML elements,
however +invtsc requires migratable=no, and I don't know a way to pass it
other than using qemu:arg. Note it completely overrides qemus -cpu
parameter created from other tags. Don't paste my qemu:arg of it. Run your
VM without it, check libvirt log, and copy from it what is passed to qemu
as -cpu parameter, then add migratable=no,+invtsc.
2016-12-20 4:41 GMT+02:00 Manuel Ullmann <ullman.alias at posteo.de>:
> Hi,
>
> I can’t seem to find a solution for my last VM issue.
> I have distorted sound, when I play the Windows 10 device test
> sound. Only the Windows sound is affected. Mpd of the host is playing just
> fine
> meanwhile. I am using ich9 as emulated card, which is detected and
> installed correctly. The VM is using vfio-igd passthrough, so vnc or
> spice are not used.
> I tried to match the Windows driver configuration, which only supports
> 16 bit output. I have a 24 bit USB headphone amplifier, which does not
> support it (S32_LE only). Trying direct playback on the PCH card jack
> did not help though.
>
> The headphone amplifier is connected via optical Toslink, so there is
> standard snd_hda_intel output used (snd_usb_audio is not involved).
> Passing the USB part through I get much clearer output, but still have
> popping sounds. Googling around, they seem to be quite common on Windows
> 10, although I had it working fine on two bare-metal machines.
>
> I have tried fixed settings matching the ones of the dmixed device
> too. Don’t know, what is polled with enabled poll option. I also tried
> sdl and pulseaudio, which did not help. For the latter not so surprising
> since it is an Alsa pipe. The former was worse.
>
> The goal of this setup is having the same playlist state on both
> systems and using the better audio framework for music playback (Windows
> uses
> too much software layers). Of course the popping sounds on audio device
> passthrough also would be annoying, but that might be a different issue.
>
> Best regards,
> Manuel
>
> used alsa device:
> pcm.dmixed {
> type asym
> playback.pcm {
> # See plugin:dmix at http://www.alsa-project.org/
> alsa-doc/alsa-lib/pcm_plugins.html
> type dmix
>
> # Don't block other users, e.g. the Timidity midi-player
> daemon
> # http://www.alsa-project.org/
> alsa-doc/alsa-lib/pcm_plugins.html
> ipc_key_add_uid false
>
> ipc_key 1025
> ipc_perm 0660
> ipc_gid audio
>
> # Don't put the rate here! Otherwise it resets the rate &
> channels set below, as shown by: cat /proc/asound/card0/pcm0p/sub0/
> hw_params
> slave {
> # 2 for stereo, 6 for surround51, 8 for surround71
> channels 2
> pcm {
> format S16_LE
> #format S32_LE
>
> #rate 44100
> rate 48000
>
> # http://www.alsa-project.org/
> alsa-doc/alsa-lib/pcm_plugins.html
> # Maybe helps
> nonblock true
> type hw
> card "PCH"
> device 0
> subdevice 0
> }
>
> # mplayer2 chooses 1024
> # period_size 512 with buffer_size 16384 stops
> crackling in xmame
> # 320 breaks flash - https://bbs.archlinux.org/
> viewtopic.php?id=129458
> #period_size 512
> period_size 1024
>
> # 4096 might make sound crackle
> # mplayer2 chooses 8192. Half-Life 2 chooses 16384.
> # If too large, use CONFIG_SND_HDA_PREALLOC_SIZE=
> 2048
> buffer_size 8192
> }
> }
> capture.pcm "schneeball"
> }
>
> libvirt xml snippets:
>
> <sound model='ich9'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x09'
> function='0x0'/>
> </sound>
> ...
> <qemu:env name='QEMU_AUDIO_DRV' value='alsa'/>
> <qemu:env name='QEMU_DAC_FIXED_SETTINGS' value='0'/>
> <qemu:env name='QEMU_DAC_TRY_POLL' value='0'/>
> <qemu:env name='QEMU_DAC_TIMER_PERIOD' value='0'/>
> <qemu:env name='QEMU_DAC_BUFFER_SIZE' value='0'/>
> <qemu:env name='QEMU_DAC_PERIOD_SIZE' value='0'/>
> <qemu:env name='QEMU_DAC_DEV' value='dmixed'/>
>
> _______________________________________________
> libvirt-users mailing list
> libvirt-users at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvirt-users/attachments/20161221/b528d490/attachment.htm>
More information about the libvirt-users
mailing list