|
适用范围:
1、使用ALSA声卡驱动(新近驱动)
2、声卡不支持硬件混音(这种情况,ALSA新进驱动,默认支持 dmix 软件混音)
3、启用OSS兼容模式(加载snd_pcm_oss、snd_mixer_oss内核模块,或编译到内核)
4、安装有alsa-oss软件包(需要使用其中的 aoss)
OSS程序默认以独占方式使用声卡,这可能与系统里其它软件包冲突。
一个例子如下:
某日,正播放背景音乐(mplayer -ao alsa xxx.flac),同时运行程序 kvm(kvm -m 384 -localtime -soundhw all -net nic,model=e1000 -net user -redir tcp:2222::22 -hda hd.img),发现 kvm 无法使用声卡。
关闭背景音乐后,重新运行 kvm,kvm 可以使用声卡,但别的程序均无法使用声卡。
此时,用 fuser 查看与声卡有关的设备(fuser /dev/snd/* /dev/dsp*),发现 kvm 进程正占用 /dev/dsp。
至此,确认问题是由于 kvm 只能以独占方式使用声卡引起。
kvm 这么新近的软件难道只能以 OSS 方式使用声卡?
查,从源码查,发现 kvm 是支持 ALSA 的。
原来问题出在配置编译 kvm 时,没有使能 ALSA (--enable-alsa)。
重新配置、编译、安装 kvm 很简单,不过还是下次升级时再做修改好些,最好在不重编译的情况下解决问题。
google,得到
http://alsa.opensrc.org/index.php/Dmix
其中 1.4 1.5 1.6 正好可以解决问题。
简单的说,建立配置文件 ~/.asoundrc- cat > ~/.asoundrc << eof
- pcm.dsp0 {
- type plug
- slave.pcm "dmix"
- }
- # mixer0 can stay unchanged, because
- # it isn't used anyway, I guess ;)
- ctl.mixer0 {
- type hw
- card 0
- }
- eof
复制代码
然后以 aoss 包装 kvm 执行- aoss kvm -m 384 -localtime -soundhw all -net nic,model=e1000 -net user -redir tcp:2222::22 -hda hd.img
复制代码
此时,可继续播放背景音乐,问题解决。
OSS程序均可如上解决混音问题。 |
|