Chapter 16. 音效

Table of Contents
16.1. 基本的硬件需求
16.2. BIOS 设定
16.3. 设定音效装置
16.4. 设定核心中的音效装置
16.5. 进阶的指令

由 Manolo De Santis 所贡献

这一章是简短的介绍在 NetBSD 上音效装置的使用(谁想要一台 不会说话的计算机?)

16.1. 基本的硬件需求

The NetBSD kernel can recognize many chipsets and a quick look at dmesg is enough most of the times. 为了使你的系统能发出声音,你必须知道安装了什么样的声卡。 很遗憾地,我们常常无法得知卡的品牌和型号,因为许多卡使用了 其它公司制造的芯片。因此,了解在卡上所使用的芯片是很有用的。

键入以下指令:

# dmesg | more
    

检查声卡和芯片。如果你够幸运,你不需要做任何事,因为 NetBSD 自动地侦测和设定许多种的声卡。

某些声卡并不能工作,因为卡并没有被支持或是你必须执行 一些工作使得卡被 NetBSD 侦测得到。现在很多声卡都很便 宜,所以可以考虑另外购买一张,但在这么做之前,你可以试 试一些简单的步骤,看是否能使它们在 NetBSD 底下工作。

16.2. BIOS 设定

这一段对 i386 PCs 的使用者是很有用的;在其它的架构(如 Amiga)则没有这些特征。为了让 NetBSD 使用声卡,最重要 的事是决定卡所使用的总线类型。

常见的接口是 ISA 和 PCI。

ISA 卡大部分需要更仔细地设定因为和计算机的 BIOS 有关。

在较新的机器上(1997 以后生产的)有一个 BIOS 选项会导致在 设定 ISA 声卡上令人头痛的问题(不只是声卡):这个选项 通常名为 "PNP OS Installed" 和大部份被发现在 "PNP/PCI Configuration"(名称可能与你的 BIOS 不同)。在 NetBSD 底下,原则上最好关掉这个选项(例如,将 它设为 "NO")。

Note: 在许多系统底下,在这个选项被开启时,仍能正常运作。这与 系统有很大的关联性。

16.3. 设定音效装置

在 NetBSD 安装完成后,许多装置被建立在 dev 目录。我们有兴趣的是:

/dev/audio
/dev/sound
/dev/mixer
    

如果不存在,则建立:

# cd /dev
# ./MAKEDEV all
    

这个指令建立所有的装置,包括音效装置。

现在可以使用声卡了。

你可以做简单的测试,送一份声音文件给音效装置(声音文件 通常有 .au 的扩展名),但如果你没有 声音文件,你可以随意送一份文件档或可执行档(当然,你不会 任何听到有用的声音...)。 使用 /dev/audio/dev/sound

# cat filename > /dev/audio
    

# cat filename > /dev/sound
    

如果你能听到声音,那就表示卡以已经被 NetBSD 所支持并且被 承认,在开机时已经被设定好了,否则,你必须为安装在系统上的 音效装置设定核心(假定卡/芯片已经被支持)。

16.4. 设定核心中的音效装置

NetBSD 支持各式各样的声卡并且在 GENERIC 核心中已经做了 适当的设定。

许多 PC 并没有声卡但却有一颗整合性的音效芯片:这表示 芯片被安装在主机板上了。你必须在 GENERIC 核心设定档中 做适当的设定并且重新编译一个个人化的核心来使用它们。 在 GENERIC 核心设定档中,检查以下(或相似的)数行:

# Plug-and-Play BIOS and attached devices

#pnpbios*       at mainbus?

# mainboard audio chips
#ess*           at pnpbios? index ?     # ESS AudioDrive
#sb*            at pnpbios? index ?     # NeoMagic 256AV in sb mode
#wss*           at pnpbios? index ?     # NeoMagic 256AV in wss mode
#ym*            at pnpbios? index ?     # OPL3-SA3
    

解除 "pnpbios" 这行的批注,和在你主机板上 所安装音效装置的那一行。

Note: 当你建立个人化核心时,最好是复制一份 GENERIC 核心 设定档,如 Chapter 7 所述。

有时候手动地设定 IRQ 和 DMA 是必要的。

如果你仍然有问题,你可以试着建立所有的装置,因为某些声卡 只能模拟其它厂牌的卡。

许多芯片都被当作 SoundBlaster 和 OPL 兼容来使用,但它们 大多数都要利用 WSS 模拟。

OPL 是 Yamaha 制造的 MIDI 合成器;有许多种 OPL 的变体( 例如,OPL2, OPL3SA, OPL3SA2,等)。许多声卡依赖这个组件 或是兼容的。例如,Crystal 所制造的芯片(常见的是 CS423x) 都有这个芯片组,这就是为什么它们在 NetBSD 底下工作的原因。

WSS 不是一颗微芯片;它是 Windows Sound System 三个字的开头 缩写。Wss 是 NetBSD 核心驱动程序的名称,用来支持微软窗口的 音效系统。许多声卡被 Windows 支持,因为它们遵从这个标准 (WSS) 而且 NetBSD 也能做相同的处理。

我在 NetBSD 底下测试过许多声卡,有一定数目的卡必须 在核心中设定 opl*wss* 才能正常工作。

在 NetBSD 下使用 Creative SoundBlaster 应该没有问题:它们 几乎全被支持,包括 Sound Blaster Live 1024!

一旦能正常工作,你可以在核心设定档中取消不必要的装置。

16.5. 进阶的指令

NetBSD 有许多处理音效装置的指令。它们是:

16.5.1. audioctl

Audioctl 出现在 NetBSD 1.3,被用来手动地处理一些关于 音效 I/O 的变量,像是播放或是纪录的频率。有效的参数 可由以下的指令得知:

# audioctl -a | more
      

例如,要聆听 CD 品质的音乐,你可以使用以下的指令。

# audioctl -w play=44100,2,16,slinear_le
      

这个指令设定频率为 44100Hz,2 声道,16 位, slinear_le 编码。

你可以查看支持的编码:

# audioctl encodings
      

这个指令展示了被声卡所支持的所有编码。

16.5.2. mixerctl

这个指令被用来设定音效的混音功能,并且有和 audioctl 相似 的接口。

16.5.3. audioplay

使用这个指令,你可以播放声音文件。如果需要更完善的功能, 可以从 package 系统安装许多程序,让你播放许多不同格式的 声音文件(例如,MP3,等)。

16.5.4. audiorecord

这是用来录制音效的指令。