9.2. 设置声卡
=============
在默认情况下,FreeBSD 会自动检测系统使用的声卡。FreeBSD 支持各种各样的声卡。可以在\ `硬件兼容列表 `__\ 中查看受支持的音频设备列表。
**注意**
只有在 FreeBSD 没有正确检测到声卡模块的情况下才有必要加载之。
如果不知道系统有什么声卡,也不知道该使用哪个模块,可以通过执行以下命令加载 ``snd_driver`` 元驱动:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
# kldload snd_driver
要在启动时自动加载这个驱动程序,请将下面一行添加到 **/boot/loader.conf** 中:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
snd_driver_load="YES"
9.2.1. 测试声卡
---------------
运行下列命令来侦测显卡:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
% dmesg | grep pcm
输出结果看起来应该像这样:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
pcm0: at nid 26,22 and 24 on hdaa0
pcm1: at nid 29 on hdaa0
也可以用这个命令检查声卡的状态:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
# cat /dev/sndstat
输出结果看起来应该像这样:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
Installed devices:
pcm0: (play/rec) default
pcm1: (rec)
如果没有 ``pcm`` 设备被列出,请仔细检查是否有正确的设备驱动程序被载入或编译到内核里。如果一切顺利,现在在 FreeBSD 中声卡应该可以工作了。
`beep(1) `__ 可通过产生一些噪音来确认声卡是否正常工作:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
% beep
9.2.2. 混音器
-------------
FreeBSD 系统中内置了不同的工具来设置和展示声卡混音器的属性。
**表 15. 支持的混音器软件包**
==================================================================================== ======= ========================================================================================== ============
名称 许可证 软件包 工具包
==================================================================================== ======= ========================================================================================== ============
`mixer(8) `__ BSD-2 系统自带 命令行界面
dsbmixer BSD-2 `audio/dsbmixer `__ Qt
KDE Plasma 声音组件 GPL 2.0 `audio/plasma5-plasma-pa `__ Qt
mixertui BSD-2 `audio/mixertui `__ 文本用户界面
==================================================================================== ======= ========================================================================================== ============
9.2.3. 显卡声音
---------------
显卡通常有自己的集成声音设备,可能不清楚哪个设备被用作了默认设备。为了确认,运行 dmesg,寻找 pcm 这些条目,以确定系统是如何列举输出的。执行下面的命令:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
% dmesg | grep pcm
输出结果看起来像这样:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
pcm0: at cad 0 nid 1 on hdac0
pcm1: at cad 1 nid 1 on hdac0
pcm2: at cad 2 nid 1 on hdac0
pcm3: at cad 3 nid 1 on hdac0
hdac1: HDA Codec #2: Realtek ALC889
pcm4: at cad 2 nid 1 on hdac1
pcm5: at cad 2 nid 1 on hdac1
pcm6: at cad 2 nid 1 on hdac1
pcm7: at cad 2 nid 1 on hdac1
在这个例子中,NVIDIA® 显卡(集成的声卡)的排序先于 Realtek® 声卡,声卡被标识为 ``pcm4``\ 。执行下列命令让 Realtek® 声卡成为默认播放设备:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
# sysctl hw.snd.default_unit=4
在 **/etc/sysctl.conf** 中加入以下一行,使这个改变永久化:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
hw.snd.default_unit=4
9.2.4. 自动切换到耳机
---------------------
有些系统可能会在音频输出之间的切换上遇到困难,但幸运的是 FreeBSD 允许在 **device.hints** 中配置自动切换。
通过执行以下命令,查看系统是如何列举音频输出的:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
% dmesg | grep pcm
输出结果看起来像这样:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
pcm0: at nid 23 and 26 on hdaa0
pcm1: at nid 22 on hdaa0
在 **/boot/device.hints** 中添加下列行:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
hint.hdac.0.cad0.nid22.config="as=1 seq=15 device=Headphones"
hint.hdac.0.cad0.nid26.config="as=2 seq=0 device=speakers"
..
**注意**
请记住,这些值是针对上面的例子。它们依据具体的系统而定。
9.2.5. 声卡的故障排除
---------------------
一些常见的错误信息和它们的解决方案:
**表 16. 常见错误信息**
============================= =====================================================================================================================
错误 解决方案
============================= =====================================================================================================================
``xxx: can’t open /dev/dsp!`` 输入 ``fstat | grep dsp`` 来检查是否有其他的应用程序在打开设备。值得注意的是 esound 和 KDE 的声音支持常常会出现问题。
============================= =====================================================================================================================
要让 ``hw.snd.default_unit`` 中的变更生效,使用 `audio/pulseaudio `__ 的程序可能需要重启守护程序\ `audio/pulseaudio `__\ 。另一种方式是实时更改 `audio/pulseaudio `__ 设置——用 `pacmd(1) `__ 定位到守护程序 `audio/pulseaudio `__\ ,打开命令行:
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
# pacmd
Welcome to PulseAudio 14.2! Use "help" for usage information.
>>>
下面的命令将默认的 sink 改为前面例子中的声卡编号 4 :
.. raw:: latex
\diilbookstyleinputcell
.. code:: shell-session
set-default-sink 4
..
**警告**
不要使用 ``exit`` 命令来退出命令行界面。那会杀死 `audio/pulseaudio `__ 守护进程。应该用 ``Ctrl``\ +\ ``D`` 代替之。