7.2 °²×°Éù¿¨

¹±Ï×Õß Moses Moore. Enhanced by Marc Fonvieille.

7.2.1 ÅäÖÃϵͳ

¡¡¡¡ÔÚ¿ªÊ¼Ö®Ç°£¬ÄúÓ¦¸ÃÇå³þÉù¿¨ÀàÐÍ¡¢ËùÓõÄоƬÒÔ¼°ËüÊÇ PCI »¹ÊÇ ISA ¿¨¡£ FreeBSD Ö§³ÖÖÖÀà·±¶àµÄ PCI ºÍ ISA ¿¨¡£¼ì²é Ó²¼þ¼æÈÝ˵Ã÷ ÖÐÖ§³ÖµÄÒôƵÉ豸ÁÐ±í¿´¿´ÊÇ·ñÖ§³ÖÄúµÄÉù¿¨£¬ Ó²¼þ¼æÈÝ˵Ã÷Ò²»á˵Ã÷Ö§³ÖÄúÉù¿¨µÄÊÇÄĸöÇý¶¯³ÌÐò¡£

¡¡¡¡ÒªÊ¹ÓÃÉù¿¨£¬ ¾ÍÓ¦×°ÔØÕýÈ·µÄÇý¶¯³ÌÐò¡£Íê³ÉµÄ·½Ê½ÓÐÁ½ÖÖ£º ×î¼òµ¥µÄÊÇʹÓÃÃüÁî kldload(8) À´×°ÔØÒ»¸öÄÚºËÄ£¿é£¬ÔÚÃüÁîÐÐÊäÈë

# kldload snd_emu10k1

¡¡¡¡»òÕßÔÚÎļþ /boot/loader.conf Àï¼ÓÈëÒ»ÐУ¬ÄÚÈÝÈçÏÂ

snd_emu10k1_load="YES"

¡¡¡¡ÉϱßʵÀýÓÃÓÚ Creative SoundBlaster® Live! Éù¿¨¡£ ÆäËü¿É×°ÔØµÄÄ£¿éÁÐÔÚÎļþ /boot/defaults/loader.conf Àï±ß¡£ Èç¹û²»ÖªµÀÓ¦¸ÃʹÓÃÄĸöÇý¶¯£¬ Äú¿ÉÒÔ³¢ÊÔ¼ÓÔØ snd_driver module:

# kldload snd_driver

¡¡¡¡ÕâÊǸö meta Çý¶¯£¬Ò»´Î¼ÓÔØÁË×î³£¼ûµÄÉ豸Çý¶¯¡£ Õâ»áÌá¸ßËÑË÷ÕýÈ·Çý¶¯µÄËÙ¶È¡£Ò²¿ÉÒÔͨ¹ý /boot/loader.conf ¹¤¾ßÀ´¼ÓÔØËùÓеÄÉù¿¨Çý¶¯¡£

¡¡¡¡Èç¹ûÏ£ÍûÔÚ¼ÓÔØÁË snd_driver meta Çý¶¯Ö®ºóÁ˽⵽µ×Ñ¡ÔñÁËÄÄÖÖÉù¿¨£¬ ¿ÉÒÔͨ¹ýʹÓà cat /dev/sndstat À´²éѯ /dev/sndstat Îļþ¡£

¡¡¡¡ÁíÍ⣬ÄúÒ²¿ÉÒÔ°ÑÖ§³ÖÄúÉù¿¨µÄ´úÂ뾲̬µØ±àÒëµ½ÄÚºËÀïÈ¥¡£ ÏÂÒ»½Ú¾Í²ÉÓÃÕâÖÖ·½Ê½Ö§³ÖÓ²¼þ¸ø³öÌáʾ¡£ ¹ØÓÚÖØÐ±àÒëÄںˣ¬Çë²Î¿¼ µÚ 8 Õ¡£

7.2.1.1 ¶¨ÖÆÄÚºËʹÆäÖ§³ÖÉù¿¨

¡¡¡¡Òª×öµÄµÚÒ»¼þÊÂÇé¾ÍÊÇÌí¼ÓͨÓÃÒôƵ¿ò¼ÜÇý¶¯ sound(4) µ½ÄÚºËÖУ¬ ÄúÐèÒªÌí¼ÓÏÂÃæÕâÐе½ÄÚºËÅäÖÃÎļþÖУº

device sound

¡¡¡¡½ÓÏÂÀ´¾ÍÊǼÓÈë¶ÔÎÒÃÇËùÓÃÉù¿¨µÄÖ§³ÖÁË¡£ Ê×ÏÈÐèҪȷ¶¨ÎÒÃǵÄÉù¿¨ÐèҪʹÓÃÄÄÒ»¸öÇý¶¯¡£ Äú¿ÉÒԲο¼ Ó²¼þ¼æÈÝÁбí ËùÁгöµÄÒôƵÉ豸£¬ ÒÔÈ·¶¨ÄúÉù¿¨µÄÇý¶¯¡£ ÀýÈ磬 Creative SoundBlaster Live! Éù¿¨ÓÉ snd_emu10k1(4) Çý¶¯À´Ö§³Ö¡£ ÒªÌí¼ÓËü£¬ ÐèÒªÔÚÄں˱àÒëÅäÖÃÎļþÖмÓÈëÏÂÃæÒ»ÐУº

device snd_emu10k1

¡¡¡¡Ò»¶¨ÒªÔĶÁÇý¶¯µÄÁª»úÊÖ²áÁ˽âÈçºÎʹÓÃËüÃÇ¡£ ¹ØÓÚÄÚºËÅäÖÃÎļþÖÐÉù¿¨Çý¶¯µÄ¾ßÌåд·¨£¬ Ò²¿ÉÒÔÔÚ /usr/src/sys/conf/NOTES ÎļþÖÐÕÒµ½¡£

¡¡¡¡·Ç¼´²å¼´ÓÃµÄ ISA ¿¨¿ÉÄÜÐèÒªÄúΪÄÚºËÌṩһЩ¹ØÓÚÉù¿¨ÅäÖõÄÐÅÏ¢ (IRQ¡¢ I/O ¶Ë¿Ú£¬ µÈµÈ)£¬ ÕâÒ»µãÓëÆäËû²»Ö§³Ö¼´²å¼´ÓÃµÄ ISA ¿¨ÀàËÆ¡£ ÕâÏ×÷¿ÉÒÔͨ¹ý /boot/device.hints ÎļþÀ´Íê³É¡£ ϵͳÆô¶¯Ê±£¬ loader(8) ½«¶ÁÈ¡Õâ¸öÎļþ£¬ ²¢½«ÆäÖеÄÅäÖô«¸øÄںˡ£ ÀýÈ磬 ¾ÉʽµÄ Creative SoundBlaster 16 ISA ·Ç¼´²å¼´Óÿ¨ÐèҪʹÓà snd_sbc(4) Çý¶¯²¢ÅäºÏ snd_sb16(4)¡£ Äú¿ÉÒÔÔÚÄں˱àÒëÅäÖÃÎļþÖÐÔö¼ÓÈçÏÂÅäÖãº

device snd_sbc
device snd_sb16

¡¡¡¡»¹ÓÐÏÂÃæÕâЩµ½ /boot/device.hintsÖУº

hint.sbc.0.at="isa"
hint.sbc.0.port="0x220"
hint.sbc.0.irq="5"
hint.sbc.0.drq="1"
hint.sbc.0.flags="0x15"

¡¡¡¡ÕâÑù£¬Éù¿¨Ê¹Óà 0x220 I/O ¶Ë¿ÚºÍ IRQ 5¡£

¡¡¡¡ÔÚ /boot/device.hints ÎļþÖÐËùʹÓõÄÓï·¨£¬ ÔÚ sound(4) Áª»úÊÖ²áÖÐÒÔ¼°ËùÓõľßÌåÉù¿¨Çý¶¯µÄÁª»úÊÖ²áÖУ¬ »á½øÐнøÒ»²½µÄ½²½â¡£

¡¡¡¡ÉÏÃæËùչʾµÄÊÇĬÈϵÄÅäÖᣠÓÐʱºò£¬ Äú¿ÉÄÜÐèÒª¸ü¸Ä IRQ »òÆäËûÅäÖ㬠ÒÔÊÊÓ¦Éù¿¨µÄʵ¼ÊÇé¿ö¡£ ²é¿´ snd_sbc(4) Áª»úÊÖ²áÁ˽â¸ü¶àÐÅÏ¢¡£

7.2.2 ²âÊÔÉù¿¨

¡¡¡¡ÓÃÐ޸ĹýµÄÄÚºËÖØÆð£¬»òÕß¼ÓÔØÁËÐèÒªµÄÄ£¿éÖ®ºó£¬ Éù¿¨½«»á³öÏÖÔÚÄúµÄϵͳÏûÏ¢»º´æÖÐ (dmesg(8))£¬¾ÍÏñÕâÑù£º

pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0
pcm0: [GIANT-LOCKED]
pcm0: <Cirrus Logic CS4205 AC97 Codec>

¡¡¡¡Éù¿¨µÄ״̬¿ÉÒÔͨ¹ý /dev/sndstat ÎļþÀ´²éѯ£º

# cat /dev/sndstat
FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz 16384
kld snd_ich (1p/2r/0v channels duplex default)

¡¡¡¡ÄúϵͳµÄÊä³ö¿ÉÄÜÓë´Ë²»Í¬¡£Èç¹ûûÓп´µ½ pcm É豸£¬»Ø¹Ë²¢¼ì²éÒ»ÏÂÇ°Ãæ×öµÄ¡£ ÖØÐ¼ì²éÄúµÄÄÚºËÅäÖÃÎļþ²¢±£Ö¤Ñ¡ÔñÁËÕýÈ·µÄÉ豸¡£ ³£¼ûÎÊÌâÁÐÔÚ µÚ 7.2.2.1 ½Ú Ò»½Ú¡£

¡¡¡¡Èç¹ûÒ»ÇÐÕý³££¬ÄúÏÖÔÚÓ¦¸ÃÓµÓÐÒ»¸ö¶à¹¦ÄÜÉù¿¨ÁË¡£ Èç¹ûÄúµÄ CD-ROM »òÕß DVD-ROM Çý¶¯Æ÷µÄÒôƵÊä³öÏßÒѾ­ÓëÉù¿¨Á¬ÔÚÒ»Æð£¬ Äú¿ÉÒÔ°Ñ CD ·ÅÈëÇý¶¯Æ÷²¢Óà cdcontrol(1) À´²¥·Å£º

% cdcontrol -f /dev/acd0 play 1

¡¡¡¡Ðí¶àÓ¦ÓóÌÐò£¬±ÈÈç audio/workman ¿ÉÒÔÌṩһ¸öÓѺõĽçÃæ¡£ Äú¿ÉÄÜÏëÒª°²×°Ò»¸öÓ¦ÓóÌÐò±ÈÈç audio/mpg123 À´Ìý MP3 ÒôƵÎļþ¡£

¡¡¡¡ÁíÒ»ÖÖ¿ìËÙ²âÊÔÉù¿¨µÄ·½·¨£¬ Êǽ«Êý¾Ý·¢Ë͵½ /dev/dsp£¬ ÏñÕâÑù×ö£º

% cat filename > /dev/dsp

¡¡¡¡ÕâÀï filename ¿ÉÒÔÊÇÈÎÒâÎļþ¡£ ÕâÐÐÃüÁî»á²úÉúһЩÔëÒô£¬Ö¤Ã÷Éù¿¨¹ûÕæÔÚ¹¤×÷¡£

¡¡¡¡Éù¿¨»ìÒô¼¶±ð¿ÉÒÔͨ¹ý mixer(8) ÃüÁî¸ü¸Ä¡£ ¸ü¶àϸ½Ú¿ÉÒÔÔÚ mixer(8) Áª»úÊÖ²áÖÐÕÒµ½¡£

7.2.2.1 ³£¼ûÎÊÌâ

´íÎóÐÅÏ¢ ½â¾ö·½·¨
¡°sb_dspwr(XX) timed out¡±

I/O¶Ë¿ÚûÓÐÉèÖÃÕýÈ·¡£

¡°bad irq XX¡±

IRQÉèÖò»ÕýÈ·¡£È·ÐÅÉ趨µÄIRQºÍÉù¿¨µÄIRQÊÇÒ»ÑùµÄ¡£

¡°xxx: gus pcm not attached, out of memory¡±

ûÓÐ×ã¹»µÄÄÚ´æ¿Õ¼ä¹©ÉèÖÃʹÓá£

¡°xxx: can't open /dev/dsp!¡±

ʹÓÃÃüÁî fstat | grep dsp ½øÐмì²éÊÇ·ñÓÐÆäËüµÄ³ÌÐò´ò¿ªÁËÉ豸¡£ ÖµµÃ×¢ÒâµÄÊÇ esound ºÍ KDE ÌṩµÄÉù¿¨Ö§³Ö¾­³£ÊÇÔì³ÉÂé·³µÄ»ö¸ù¡£

7.2.3 ÀûÓöà¸öÉùÔ´

¹±Ï×ÕßMunish Chopra.

¡¡¡¡Í¨³£¶øÑÔ£¬ »áÏ£Íû¶à¸öÒôÔ´Äܹ»Í¬Ê±²¥·Å£¬ ÀýÈ磬 esound »òÕß artsd ¾Í¿ÉÄܲ»Ö§³ÖÓëÆäËü³ÌÐò¹²ÏíÒôƵÉ豸¡£

¡¡¡¡FreeBSD ¿ÉÒÔͨ¹ý ÐéÄâÉùµÀ(Virtual Sound Channels) À´´ïµ½ÕâÑùµÄЧ¹û£¬ Ëü¿ÉÒÔÓà sysctl(8) À´ÆôÓᣠÐéÄâµÄÉùµÀ¿ÉÒÔÄܹýÔÚÄÚºËÀï»ìºÏÉùÒôÀ´»ìºÏÉù¿¨Àï²¥·ÅµÄÉùµÀ¡£

¡¡¡¡Ê¹ÓÃÈýÌõsysctlÃüÁîÀ´ÉèÖÃÐéÄâÉùµÀµÄÊýÄ¿¡£ Èç¹ûÄúÊÇ root Óû§£¬ Ö´ÐÐÏÂÃæµÄ²Ù×÷£º

# sysctl dev.pcm.0.play.vchans=4
# sysctl dev.pcm.0.rec.vchans=4
# sysctl hw.snd.maxautovchans=4

¡¡¡¡ÉÏÃæµÄʵÀýÉ趨ÁË4¸öÐéÄâÉùµÀ£¬ÕâÒ²ÊÇʵ¼ÊÉÏËùʹÓõÄÊýÄ¿¡£ dev.pcm.0.play.vchans=4 ºÍ dev.pcm.0.rec.vchans=4 ÊÇ pcm0 ÓÃÀ´²¥·ÅÓë¼ÒôµÄÐéÄâÉùµÀÊý£¬ Ò»µ±Á´½ÓÉÏÒ»¸öÉ豸Ëü¾Í¿ÉÅäÖÃÁË¡£ hw.snd.maxautovchans ÊÇ·ÖÅ䏸еÄÒôƵÉ豸µÄÐéÄâÉùµÀÊý£¬ ´ËʱÕâ¸öÉ豸ҪÓà kldload(8) À´Á´½Ó¡£ ÒòΪ pcm Ä£¿é¿ÉÒÔ¶ÀÁ¢×°ÔØÐí¶àÓ²¼þÇý¶¯³ÌÐò£¬ Òò´Ë hw.snd.maxautovchans Ò²¾Í¿ÉÒÔ´æ´¢·ÖÅ䏸ÒÔºóÁ´½Óµ½µÄÉ豸µÄÐéÄâÉùµÀÊý¡£ ¿É²ÎÔÄ pcm(4) ÊÖ²áÒ³Òå»ñÈ¡¸ü¶àϸ½Ú¡£

×¢Òâ: Äú²»ÄÜÔÚʹÓÃij¸öÉ豸µÄʱºò¸Ä±äÆäÐéÄâͨµÀÊý¡£ Ê×ÏÈÐèÒª¹Ø±ÕËùÓÐʹÓøÃÉ豸µÄ³ÌÐò£¬ ÈçÒôÀÖ²¥·ÅÆ÷»òÉùÒô·þÎñ¡£

¡¡¡¡µ±Ó¦ÓóÌÐòÇëÇó /dev/dsp0 ʱ£¬ ϵͳ»á×Ô¶¯ÎªÆä·ÖÅäÕýÈ·µÄ pcm É豸¡£

7.2.4 ÈçºÎÉèÖûìÒôÆ÷ͨµÀÖµ

ÕâÒ»½ÚµÄ×÷ÕßÊÇ Josef El-Rayes.

¡¡¡¡²»Í¬µÄ»ìÒôͨµÀµÄĬÈÏÒôÁ¿ÊÇÓ²±àÂë½ø pcm(4) Çý¶¯³ÌÐòµÄ¡£ ͬʱ£¬ Ò²ÓкܶàÓ¦Óûò·þÎñ³ÌÐòÌṩÁËÔÊÐíÓû§Ö±½ÓÉèÖò¢¼ÇסÕâЩֵµÄ¹¦ÄÜ¡£ ²»¹ýÕâ²¢²»ÊÇÒ»¸öºÜºÃµÄ½â¾ö·½°¸£¬ Äú¿ÉÄÜÏ£ÍûÔÚÇý¶¯Ò»¼¶ÓÐÒ»¸ö¿ÉÒÔÉèÖõÄĬÈÏÖµ¡£ Õâ¿ÉÒÔͨ¹ýÔÚ /boot/device.hints ¶¨ÒåÊʵ±µÄÖµÀ´ÊµÏÖ¡£ ÀýÈ磺

hint.pcm.0.vol="50"

¡¡¡¡Õ⽫ÔÚ pcm(4) Ä£¿é¼ÓÔØÊ±£¬ ½«Í¨µÀÒôÁ¿ÉèÖÃΪĬÈ쵀 50¡£

±¾ÎĵµºÍÆäËüÎĵµ¿É´ÓÕâÀïÏÂÔØ£ºftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Èç¹û¶ÔÓÚFreeBSDÓÐÎÊÌ⣬ÇëÏÈÔĶÁÎĵµ£¬Èç²»Äܽâ¾öÔÙÁªÏµ<questions@FreeBSD.org>.
¹ØÓÚ±¾ÎĵµµÄÎÊÌâÇë·¢ÐÅÁªÏµ <doc@FreeBSD.org>.