QEMU下虚拟机内的声卡模拟方法总结

您所在的位置:网站首页 虚拟声卡电脑版怎么使用 QEMU下虚拟机内的声卡模拟方法总结

QEMU下虚拟机内的声卡模拟方法总结

2024-07-04 03:44| 来源: 网络整理| 查看: 265

转载请注明:http://blog.csdn.net/hubbybob1/article/details/77199567 在做VAG或者USB穿透的过程中如果声卡和网卡在同一个分组内,那么就不适合穿透声卡了,那么就需要模拟声卡来试用了,一步一步来介绍吧

一,虚拟机内部声音导出到本地宿主机内

主要是针对qemu虚拟机下的音频如何使用,首先要查看help命令:

qemu-system-x86_64 -audio-help

这个命令能告诉我们audio的一些基本的信息和使用方法,以及Qemu支持的驱动

Audio options: QEMU_AUDIO_DAC_FIXED_SETTINGS: boolean, default = 1 Use fixed settings for host DAC QEMU_AUDIO_DAC_FIXED_FREQ: integer, default = 44100 Frequency for fixed host DAC QEMU_AUDIO_DAC_FIXED_FMT: format, default = S16, (one of: U8 S8 U16 S16 U32 S32) Format for fixed host DAC QEMU_AUDIO_DAC_FIXED_CHANNELS: integer, default = 2 Number of channels for fixed DAC (1 - mono, 2 - stereo) QEMU_AUDIO_DAC_VOICES: integer, default = 1 Number of voices for DAC QEMU_AUDIO_DAC_TRY_POLL: boolean, default = 1 Attempt using poll mode for DAC QEMU_AUDIO_ADC_FIXED_SETTINGS: boolean, default = 1 Use fixed settings for host ADC QEMU_AUDIO_ADC_FIXED_FREQ: integer, default = 44100 Frequency for fixed host ADC QEMU_AUDIO_ADC_FIXED_FMT: format, default = S16, (one of: U8 S8 U16 S16 U32 S32) Format for fixed host ADC QEMU_AUDIO_ADC_FIXED_CHANNELS: integer, default = 2 Number of channels for fixed ADC (1 - mono, 2 - stereo) QEMU_AUDIO_ADC_VOICES: integer, default = 1 Number of voices for ADC QEMU_AUDIO_ADC_TRY_POLL: boolean, default = 1 Attempt using poll mode for ADC QEMU_AUDIO_TIMER_PERIOD: integer, default = 100 Timer period in HZ (0 - use lowest possible) Available drivers: Name: spice Description: spice audio driver One playback voice One capture voice Options: Name: oss Description: OSS http://www.opensound.com Theoretically supports many playback voices Theoretically supports many capture voices Options: QEMU_OSS_FRAGSIZE: integer, default = 4096 Fragment size in bytes QEMU_OSS_NFRAGS: integer, default = 4 Number of fragments QEMU_OSS_MMAP: boolean, default = 0 Try using memory mapped access QEMU_OSS_DAC_DEV: string, default = /dev/dsp Path to DAC device QEMU_OSS_ADC_DEV: string, default = /dev/dsp Path to ADC device QEMU_OSS_EXCLUSIVE: boolean, default = 0 Open device in exclusive mode (vmix won't work) Name: alsa Description: ALSA http://www.alsa-project.org Theoretically supports many playback voices Theoretically supports many capture voices Options: QEMU_ALSA_DAC_SIZE_IN_USEC: boolean, default = 0 DAC period/buffer size in microseconds (otherwise in frames) QEMU_ALSA_DAC_PERIOD_SIZE: integer, default = 1024 DAC period size (0 to go with system default) QEMU_ALSA_DAC_BUFFER_SIZE: integer, default = 4096 DAC buffer size (0 to go with system default) QEMU_ALSA_ADC_SIZE_IN_USEC: boolean, default = 0 ADC period/buffer size in microseconds (otherwise in frames) QEMU_ALSA_ADC_PERIOD_SIZE: integer, default = 0 ADC period size (0 to go with system default) QEMU_ALSA_ADC_BUFFER_SIZE: integer, default = 0 ADC buffer size (0 to go with system default) QEMU_ALSA_THRESHOLD: integer, default = 0 (undocumented) QEMU_ALSA_DAC_DEV: string, default = default DAC device name (for instance dmix) QEMU_ALSA_ADC_DEV: string, default = default ADC device name Name: sdl Description: SDL http://www.libsdl.org One playback voice Does not support capture Options: QEMU_SDL_SAMPLES: integer, default = 1024 Size of SDL buffer in samples Name: none Description: Timer based audio emulation Theoretically supports many playback voices Theoretically supports many capture voices No options Name: wav Description: WAV renderer http://wikipedia.org/wiki/WAV One playback voice Does not support capture Options: QEMU_WAV_FREQUENCY: integer, default = 44100 Frequency QEMU_WAV_FORMAT: format, default = S16, (one of: U8 S8 U16 S16 U32 S32) Format QEMU_WAV_DAC_FIXED_CHANNELS: integer, default = 2 Number of channels (1 - mono, 2 - stereo) QEMU_WAV_PATH: string, default = qemu.wav Path to wave file Options are settable through environment variables. Example: export QEMU_AUDIO_DRV=wav export QEMU_WAV_PATH=$HOME/tune.wav (for csh replace export with setenv in the above) qemu ...

可以看到audio的很多操作,也可以设置Audio的参数,通过export来设置,我们可以看到,支持的驱动有spice,oss,alsa,sdl, none, wav,每种驱动都给出了相应的操作方法,并且还给出了Example: 如果你是本地启动虚拟机二没有通过远程spice连接的话那么可以如下:

#在启动qemu虚拟机命令前执行,修改下面的环境变量 export QEMU_AUDIO_DRV=wav #audio的驱动方式为wav export QEMU_WAV_PATH=$HOME/tune.wav #把所有虚拟机下的声音存储到tune.wav内,$HOME改写为你的绝对路径如:/home/tune.wav

这样你的所有在虚拟机下的声音统统都导入到了你的宿主机的文件内了,这个方法缺点是是无法在虚拟机内真正的发出声音或者录音,只有通过本地打开的wav文件才能收听。

二.通过soundhw来模拟声卡

这个方法也很简单,首先就是查看支持的驱动

qemu-system-x86_64 -soundhw ? #查看支持的驱动

查看结果如下: 这里写图片描述 可以看到支持的驱动有ac97,hda等,我们使用ac97或者hda,或者all,all是最好的就是使能所有的驱动,使用的方式如下:

在你的启动qemu-system-x86_64的命令参数内加上下面任意一个就可以了 -soundhw ac97 #或者 -soundhw hda #或者 -soundhw all 三.使用device添加模拟设备

如果你做了一些穿透的工作如,VGA或者usb的穿透,那么上面的方法二就无法使用了,因为会报如下错误,说PCI已经被使用了,无法使用,因此上面的方法是没办法使用的,如下图所示:

这里写图片描述

因此我们只能使用-device这个参数来模拟了 要想使用这种方法来模拟,必须对qemu这个库进行重新配置编译,编译的选项如下

./configure --target-list=x86_64-softmmu --enable-kvm \ --enable-gtk --with-gtkabi=3.0 --enable-virtfs \ --enable-tcg-interpreter --enable-xfsctl \ --enable-libiscsi --enable-glusterfs --enable-snappy \ --enable-lzo --enable-rdma --enable-linux-aio \ --enable-vhost-net --enable-spice --enable-smartcard \ --enable-libusb --enable-usb-redir --enable-guest-agent \ --enable-libssh2 \ --enable-sdl --audio-drv-list='oss alsa sdl'

看到最后一行,就是我们需要的,添加上audio驱动列表audio-drv-list,配置结果可以查看到下图: 这里写图片描述 使能了sdl和audio 驱动列表。 接下来我们就可以通过-device来查询支持的设备了,查询命令如下:

qemu-system-x86_64 -device ? #查询支持添加的设备

我们在打印出的很多内容中找到Hub devices,USB devices ,Storage devices ,Network devices , Input devices , Display devices , Sound devices , Misc devices , CPU devices , Uncategorized devices ,而我们只需要查看Sound devices如下: 这里写图片描述 因此我们只需要在qemu启动虚拟机的命令内添加参数如下:

-device AC97 #这个驱动效果是做好的 -device intel-hda #这个效果很不好 -device usb-audio #这个下过没测试过

那么我们在运行qemu启动虚拟机命令是会报出一个错误

#在使用的过程中默认使用oss但是启动脚本是会报错:无法初始化OSS audio: Could not init `oss' audio driver

这个错误无关紧要,不会影响模拟的效果,但是看着就不爽,下面就是解决方法:

# 修改驱动为alsa就可以了 export QEMU_AUDIO_DRV=alsa

到此声卡的模拟也就总结完毕了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3