KVMで音を鳴らすことに成功

今まで放置していたんだけど原因をおって対処してみた。

KVMのデフォルトではサウンドバイスを認識させていない。
というかほとんどのデバイスは認識させていない。
まずはKVMのオプションでサウンドバイスのヘルプをみる。

m$ kvm -soundhw help
Unknown sound card name `help'
Valid sound card names (comma separated):
pcspk       PC speaker
sb16        Creative Sound Blaster 16
es1370      ENSONIQ AudioPCI ES1370


 -soundhw all will enable all of the above


で各オプションを試してみると、以下のようなエラーがでる。

audio: Failed to create voice `es1370.dac1'
oss: Could not initialize DAC
oss: Failed to open `/dev/dsp'
oss: Reason: Device or resource busy
oss: Could not initialize DAC
oss: Failed to open `/dev/dsp'
oss: Reason: Device or resource busy
audio: Failed to create voice `es1370.dac1'

でこの状態で/dev/dspをlsofしてみるとkvmが使っている。
エラーとlsofの結果から想像すると、多分OSSがoepn("/dev/dsp")してエラーになっているっぽい。
ちなみにOSSはOpen Sound Systemの略でオープンソースの略ではない。
ただ、現在はOSSは問題点が色々あってALSAに移行している。


で、OSSではなくALSAに変更するにはどうするか?が問題。
KVMのヘルプでは全然分からないし。
そこで検索すると、OSSを使っているのはKVMではなくてQEMUらしい。


早速ヘルプを見てみる。

$ qemu -audio-help


ヘルプによると環境変数で対応できるらしい。
ネットの情報と合わせて以下の方法で仮想環境側にサウンドバイスを認識させることに成功。

QEMU_AUDIO_DRV=alsa QEMU_ALSA_DAC_DEV=dmix QEMU_ALSA_ADC_DEV=null kvm  -m 512 -hda $HOME/kvm/winxp_pro.img -boot c  -usb -net nic -net tap,brdge=br0 -soundhw es1370 -localtime &


ただ、ニコニコでテストしていたら時々音が止まる?ような動作になる。
使っている感覚では割り込みが発生して仮想側が一瞬動作が止まっているような印象。
これは仕方ないのかな。


追記:

QEMU_ALSA_ADC_DEV=hw:0,0

にすればいいみたい。