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
にすればいいみたい。