qemu声卡模拟原理-基本使用方法
qemu版本:5.2.50qemu声卡的模拟分为模拟声卡和声卡后端设备两个部分,模拟声卡主要为虚拟机提供一个模拟的硬件设备,后端负责处理模拟声卡的声音数据,可以是直接播放声音、存储为文件或者传送到远程进行播放。创建后端设备要模拟声卡首先要考虑音频的后端是被是什么,后端设备大致有:oss、spice、sdl、wav、alsa、pa这几种。pa后端pa其实就是linux上的音频服务pulseaudio
连载目录
1.qemu声卡模拟原理-基本使用方法
2.qemu声卡模拟原理-声卡初始化(pa+ac97)
3.qemu声卡模拟原理-声音播放(pa+ac97)
qemu版本:5.2.50
qemu声卡的模拟分为模拟声卡和声卡后端设备两个部分。模拟声卡主要为虚拟机提供一个模拟的硬件设备,他负责声卡的硬件配置操作还有音频数据的转换。而后端负责处理模拟声卡的声音数据,可以是直接播放声音、存储为文件或者传送到远程进行播放。
编译选项
在编译配置中选中要编译的后端,这里添加了oss和pa两个后端设备
./configure --target-list=x86_64-softmmu --enable-kvm \
--audio-drv-list='oss pa'
创建后端设备
要模拟声卡首先要考虑采用那种音频后端设备,常用的后端设备大致有:oss
、spice
、sdl
、wav
、alsa
、pa
这几种。
pa后端
pa其实就是linux上的音频服务pulseaudio,在linux本地播放声音选择pa作为后端是一种较好的方式。oss、alsa都不建议选择,他们会独占声卡导致其他程序无法播放声音,并且qemu的音量不受系统控制。
qemu的后端设备使用参数audiodev
来创建
-audiodev pa,id=pa1,server=unix:${XDG_RUNTIME_DIR}/pulse/native,out.stream-name=audio-out,in.stream-name=audio-in
这里特别要注意的是qemu如果用sudo启动会导致环境的改变使得XDG_RUNTIME_DIR不相同,在qemu中还会使用XDG_RUNTIME_DIR环境变量来初始化pa,解决办法可以使用sudo -u ${USER} qemu-system-x86_64 ${args}。建议能不用sudo就不用sudo。
指定频率的写法:
-audiodev pa,id=pa1,out.frequency=48000,out.stream-name=audio-out
spice后端
-audiodev spice,id=sp1
-audiodev alsa,id=snd0,out.buffer-length=10000,out.period-length=2500
spice后端不用创建也是可以的,使用了spice会默认启用spice的音频后端
alsa后端
-audiodev alsa,id=au1,out.dev=default
oss后端
-audiodev oss,id=oss1,out.dev=default
创建模拟声卡设备
后端创建好之后还需要创建一个模拟声卡,模拟声卡使用-device参数创建,以前可以使用-soundhw参数创建,目前已经废弃。模拟声卡通过audiodev=${audiodev_id}的方式与audiodev绑定,常见的模拟声卡型号有:AC97
、CS4231a
、HDA
、SB16
、PCSPK
、ADLIB
、ES1370
、GUS
。根据自己内核拥有的声卡驱动选择合适的声卡设备。
-device AC97,id=sound0,bus=pci.0,audiodev=pa1
-device AC97,id=sound0,bus=pci.0,addr=0x1,audiodev=pa1
-device intel-hda -device hda-output,audiodev=pa1
更多推荐
所有评论(0)