在开始之前,你应该清楚声卡类型、所用的芯片以及它是PCI还是ISA卡。FreeBSD支持大量的PCI卡和ISA卡。如果你在下面的列表中没有找到你的声卡类型,那么你可以去pcm(4)看看。虽然下面的列表不全,不过也包括大部份最常见的声卡类型。
Crystal 4237, 4236, 4232, 4231
Yamaha OPL-SAx
OPTi931
Ensoniq AudioPCI 1370/1371
ESS Solo-1/1E
NeoMagic 256AV/ZX
SoundBlaster® Pro, 16, 32, AWE64, AWE128, Live
Creative ViBRA16
Advanced Asound 100, 110, and Logic ALS120
ES 1868, 1869, 1879, 1888
Gravis UltraSound
Aureal Vortex 1 or 2
要使用声卡,你就应装载正确的驱动程序。完成的方式有两种:最简单的是使用命令kldload(8)来装载一个内核模块,在命令行输入
# kldload snd_emu10k1.ko
或者在文件/boot/loader.conf里加入一行,内容如下
snd_emu10k1_load="YES"
上边实例用于Creative SoundBlaster Live!声卡。其它可装载的模块列在文件/boot/defaults/loader.conf里边。
另外,你也可以把支持你声卡的代码静态地编译到内核里去。下面的部份就采用这种方式支持硬件给出提示。关于重新编译内核,请参考Chapter 9。
如果你有上面的某一种声卡的话,就请增加:
device pcm
到内核配置文件里去。如果你的是即插即用的ISA卡,就请再加入:
device sbc
对于非即插即用的ISA卡,加入:
device pcm device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15
到内核配置文件里去。上面给出的设置都是默认的。你可能要改变IRQ或其它的设置来符合你的声卡。参看sbc(4)页面获取更多信息。
Note: Sound Blaster Live声卡在FreeBSD 4.0以下没有补丁是不被支持的,而关于补丁本章并不涉及。因此如果你要用这种声卡的话,建议你升级系统到最新的稳定版(STABLE)。
如果是即插即用的ISA卡,请增加:
device pcm device gusc
到内核配置文件里去。如果是即插即用的ISA卡,就请增加:
device pcm device gus0 at isa? port 0x220 irq 5 drq 1 flags 0x13
到内核配置文件里去。你可能要改变IRQ或其它的设置来符合你的声卡。参看gusc(4) 页面获取更多信息。
如果是即插即用的ISA卡或PCI卡,请增加:
device pcm
到内核配置文件里去。如果是非即插即用的ISA卡并且又没有桥路驱动器(bridge driver)的话,就请增加:
device pcm0 at isa? irq 10 drq 1 flags 0x0
到内核配置文件里去。你可能要改变IRQ或其它的设置来符合你的声卡。
一些集成声卡的计算机可能需要在内核配置文件中做如下设置:
options PNPBIOS
Note: 如果你正在运行FreeBSD 5.0 或更新版本,那么就不需要PNPBIOS选项了。这个选项已经被移除,而其功能现在是一直是有效的。
重启后,登入系统,检查文件/var/run/dmesg.boot中的设备,如下所示:
# grep pcm /var/run/dmesg.boot pcm0: <SB16 DSP 4.11> on sbc0
输出结果可能与你的系统有所不同。如果没有pcm设备显示正常,则说明先前什么地方出了错。如果真的出了错,就请再回到内核配置文件中检查一下,确信是否选对了设备。一般性的问题列在Section 16.2.2.1中。
Note: 如果你用的是FreeBSD 5.0或更新,你可以放心略过剩下部份不看。这些版本都使用了devfs(5)来自动创建设备结点。
如果先前的命令返回pcm0,你必须以用户root运行下边的命令:
# cd /dev # sh MAKEDEV snd0
如果先前的命令返回pcm1,执行上边同样的命令,记得把snd0换成snd1。
Note: 上边的命令不会创建/dev/snd设备!
MAKEDEV能创建一组设备结点,其中包括:
设备 | 描述 |
---|---|
/dev/audio | 与Sparc®兼容的音频设备 |
/dev/dsp | 数字声音设备 |
/dev/dspW | 和/dev/dsp一样,只是采样率是16位(bit) |
/dev/midi | 存取Raw和midi设备 |
/dev/mixer | 控制端口混音设备 |
/dev/music | 2阶音序接口 |
/dev/sequencer | 音序设备 |
/dev/pss | 可编程设备接口 |
如果一切顺利,你的声卡应该能发声了。如果你的CD-ROM或者DVD-ROM光驱连接到了声卡,你现在就可以放一张CD到光驱里使用cdcontrol(1)命令来播放了:
% cdcontrol -f /dev/acd0c play 1
程序各不相同,如audio/workman提供了很好的界面。或许你会想安装一个像audio/mpg123一样的程序来听MP3。
错误信息 | 解决方法 |
---|---|
``unsupported subdevice XX'' |
一个或多个设备结点没有正确地建立。重复上面的步骤。 |
``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提供的声卡支持造成麻烦。 |
同时有多个声源的声音在播放,这是完全可能的,例如当esound或者artsd不支持与其它程序共享音频设备时。
FreeBSD可以通过虚拟声道(Virtual Sound Channels)来达到,具体设置用工具sysctl(8)。虚拟的声道可以能过在内核里混合声音来混合声卡里播放的声道。
使用两条sysctl命令来设置虚拟声道的数目。如果你是root用户,照此做:
# sysctl hw.snd.pcm0.vchans=4 # sysctl hw.snd.maxautovchans=4
上面的实例设定了4个虚拟声道,这也是实际上所使用的数目。hw.snd.pcm0.vchans 是pcm0的虚拟声道数,一当链接上一个设备它就可配置了。 hw.snd.maxautovchans是分配给新的音频设备的虚拟声道数,此时这个设备要用kldload(8)来链接。因为pcm模块可以独立装载许多硬件驱动程序,因此hw.snd.maxautovchans也就可以存储分配给以后链接到的设备的虚拟声道数。
如果不使用devfs(5),你就不得不把你的应用程序指向/dev/dsp0.x,这里x为0到3,因为在上面的例子里hw.snd.pcm.0.vchans被设为了4。在使用devfs(5)的系统里,上边那些会自动分配给用户。