2007年12月23日日曜日

FreeBSD上でEnemy Territoryの音を出す

暇つぶしにEnemy Territoryで遊ぼうとしたら音が出なくて困った (FreeBSD 6-stable上).
ログを見ると
------- sound initialization -------
/dev/dsp: Invalid argument
Could not mmap /dev/dsp
------------------------------------

となっていたので, truss で調べてみたら,
------- sound initialization -------
write(2,"\n------- sound initialization -"...,38) = 38 (0x26)
setresuid(0xffffffff,0x3e9,0xffffffff) = 0 (0x0)
linux_open("/dev/dsp",0x2,01) = 35 (0x23)
linux_getuid() = 1001 (0x3e9)
setresuid(0xffffffff,0x3e9,0xffffffff) = 0 (0x0)
linux_ioctl(0x23,0x8004500f,0xbfbfe8a4) = 0 (0x0)
linux_ioctl(0x23,0xc0045003,0xbfbfe8a8) = 0 (0x0)
linux_ioctl(0x23,0xc0045002,0x926d3b4) = 0 (0x0)
linux_ioctl(0x23,0xc0045005,0xbfbfe8b0) = 0 (0x0)
linux_ioctl(0x23,0x8010500c,0xbfbfe894) = 0 (0x0)
linux_mmap(0xbfbfe870) ERR#22 'Invalid argument'
/dev/dsp: Invalid argument
write(2,"/dev/dsp: Invalid argument\n",27) = 27 (0x1b)
Could not mmap /dev/dsp
write(2,"Could not mmap /dev/dsp\n",24) = 24 (0x18)
close(35) = 0 (0x0)
------------------------------------

と出た. どうも, linux_mmap がうまくいかないようだった. そんなこんなで色々調べていく内に, sysctl を見てみると,
% sysctl hw.snd.compat_linux_mmap
hw.snd.compat_linux_mmap: 0

といういかにもなパラメータがあったのでこれを1に設定.
% sudo sysctl hw.snd.compat_linux_mmap=1
hw.snd.compat_linux_mmap: 0 -> 1

これで無事に音が出るようになった.

これを調べること自体が暇つぶしになってしまったので, そろそろ仕事に戻らないと(苦笑).

0 件のコメント: