Linux 音频支持

作者:Jeff Tranter

随着 Linux 和面向 Intel PC 的低成本音频硬件的普及,大多数计算机爱好者都能拥有具备音频功能的 Unix 系统。

可能由于 Unix 系统缺乏音频支持,许多新用户对音频和电子音乐特有的技术术语以及市面上众多的声卡感到困惑。本文旨在解释在 Linux 下音频可以实现的功能,阐明一些技术术语,并为读者指出更多信息的来源。

声卡的功能?

典型的声卡硬件提供以下一项或多项功能:

  • 播放和录制数字化的声音样本

  • 播放 CD-ROM 驱动器中音频光盘的音乐

  • 使用内部 FM 合成器生成声音

  • 控制外部 MIDI(乐器数字接口)设备

  • 其他功能,例如提供操纵杆接口、SCSI 磁盘接口、音量和音调控制以及输入混音功能

不同类型的声卡

对于数字化的声音,有两个基本参数决定声音质量:采样率和样本大小。

采样率是将模拟波形转换为数字“样本”的速度。单位是样本/秒,或更常用(但不准确)的赫兹 (Hertz)。样本大小表示每个样本存储的数据位数;位数越多,样本就越能准确地表示原始波形。声音也可以用单声道(mono)或双声道(stereo)录制。各种编码方案用于将样本表示为数值。

例如,低成本声卡可以生成单声道、8 位样本,采样率为 8000 样本/秒。这提供的音质与电话网络相当。16 位声卡以 44100 样本/秒的采样率生成立体声,其音质相当于 CD 音频质量(忽略噪声和失真等问题)。

一些声卡还提供硬件,用于使用 FM 合成生成声音。这项技术基于修改正弦波。这种方案的优点是硬件相对简单,并且不需要太多的计算能力。缺点是很难确定产生特定声音(例如,钢琴)所需的参数。

声卡通常还提供其他杂项功能,包括操纵杆端口、CD-ROM 接口、SCSI 接口、MIDI 端口、声音输入和输出功能以及音量和音调控制。

支持的声卡

Linux 内核目前支持以下声卡:

  • Roland MPU-401 MIDI 接口

  • AdLib

  • SoundBlaster 及其兼容卡(包括 ThunderBoard 和 Ati Stereo F/X)

  • SoundBlaster Pro

  • SoundBlaster 16

  • ProAudioSpectrum 16

  • Gravis UltraSound

Linux 内核还支持某些声卡(例如,ProAudioSpectrum 16)上提供的 SCSI 端口,以及 Soundblaster Pro 和 SoundBlaster 16 上提供的 CD-ROM 接口。

对于那些尚未拥有音频硬件的用户,还有其他几种选择。只需少量硬件,就可以使用并行打印机端口构建音频接口。对于零成本解决方案,甚至有一个用于 PC 内部扬声器的音频驱动程序。该驱动程序与声卡驱动程序兼容,但音质可能不尽如人意。

配置 Linux 以支持音频

设置 Linux 以支持声卡涉及以下步骤:

  1. 安装声卡

  2. 配置和构建带有音频驱动程序的内核

  3. 创建音频设备文件

  4. 测试安装

如果您尚未安装声卡,则首要要求是安装声卡。请按照制造商提供的说明进行操作。务必记下 IRQ、DMA 通道等的跳线设置;如果您不确定,请使用出厂默认设置。如果可能,尽量避免与其他设备(例如,以太网卡)冲突。您还需要扬声器,如果您想进行录音,还需要麦克风。数学协处理器对于某些音频应用(例如,更改文件格式、添加效果或语音合成)也很有用,但不是必需的。

下一步是配置 Linux 内核。如果您使用的是最新版本(0.99 补丁级别 14 或更高版本),则音频驱动程序包含在内核版本中。按照您通常的步骤构建内核。配置内核时,启用音频驱动程序,并在配置程序提示时回答有关声卡设置的问题。

配置内核后,您需要创建音频设备文件。最简单的方法是从文件 /usr/src/linux/drivers/sound/Readme.linux 的末尾剪切简短的 shell 脚本,并以 root 身份运行它。将创建以下文件:

  • /dev/audio - Sun 工作站兼容音频设备(读/写)

  • /dev/dsp - 数字采样设备(读/写)

  • /dev/mixer - 音频混音器

  • /dev/sequencer - MIDI、FM 和 GUS 合成器访问

  • /dev/midi - MIDI 设备(当前音频驱动程序中尚未实现)

  • /dev/sndstat - 读取时显示音频驱动程序状态

  • /dev/audio1 - 用于第二张声卡

  • /dev/dsp1 - 用于第二张声卡

如果您使用的是 PC 扬声器音频驱动程序,则它将使用以下设备:

  • /dev/pcaudio - 相当于 /dev/audio

  • /dev/pcsp - 相当于 /dev/dsp

  • /dev/pcmixer - 相当于 /dev/mixer

现在内核已配置,设备文件已创建,您可以验证音频硬件和软件。按照您通常的步骤安装和重启新内核。(当然,保留旧内核以防出现问题。)验证内核初始化期间是否识别到声卡。您应该在启动时看到如下消息:

snd2 <SoundBlaster Pro 3.2> at 0x220 irq 5 drq 1
snd1 <Yamaha OPL-3 FM> at 0x388 irq 0 drq 0

这应与您的声卡类型和跳线设置相匹配。驱动程序也可能在启动时显示一些错误消息和警告。在首次配置音频驱动程序后启动时,请注意这些信息。

如果在启动时未检测到声卡,则可能有几个原因。驱动程序的配置可能不正确,并且驱动程序无法在给定的 I/O 地址中检测到您的声卡。另一个常见的错误是没有将音频驱动程序包含在内核中,因为您使用旧内核而不是刚刚编译的内核启动。

读取音频驱动程序状态设备文件可提供有关音频卡驱动程序是否正确初始化的更多信息。示例输出应如下所示:

% cat /dev/sndstat
Sound Driver:2.4 (Sun Feb 13 14:49:20 EST 1994 root@fizzbin.mitel.com)
Config options: 1aa2
HW config:
Type 2: SoundBlaster at 0x220 irq 5 drq 1
Type 1: AdLib at 0x388 irq 0 drq 0
PCM devices:
0: SoundBlaster Pro 3.2
Synth devices:
0: Yamaha OPL-3
Midi devices:
0: SoundBlaster
Mixer(s) installed

如果 cat 命令显示“No such device”(没有这样的设备),则音频驱动程序在内核中未激活。如果打印输出不包含任何设备(PCM、Synth 或 Midi),则未检测到您的声卡。验证您在配置音频驱动程序时输入的信息是否正确。

现在您应该可以播放示例声音文件,并将其发送到音频设备,作为音频输出的基本检查,例如:

% cat endoftheworld >/dev/dsp
% cat crash.au >/dev/audio

一些示例声音文件可以从 snd-data-0.1.tar.Z 文件中获取,该文件在许多 Linux 存档站点上都可用。

如果您具有音频输入功能,则可以使用如下命令快速测试此功能:

# record 4 seconds of audio from microphone
% dd bs=8k count=4 </dev/audio >sample.au
# play back sound
% cat sample.au >/dev/audio

如果这些测试通过,您可以合理地确信音频硬件和软件正在工作。如果您遇到问题,请查阅本文末尾列出的参考文献之一。

更多关于音乐

在播放音乐方面,可以使用多种方法。

首先,不要计划将 60 分钟的音乐 CD 数字化为声音文件并将其存储在您的硬盘上。一些简单的计算显示了所涉及的数据大小:

     60 minutes
  x 60 secs/minute
  x 44100 samples/second
  x 2 channels
  x 2 bytes/sample
  = more than 635 million bytes!

尽管如此,低采样率的小声音样本还是合理的:

    10 seconds
  x 8000 samples/second
  x 1 channel
  x 1 byte/sample
  = 80 thousand bytes

更紧凑的音乐存储方法是 MOD 文件。这些文件起源于 Amiga 计算机,但 MOD 文件编辑器和播放器现在也可在其他系统(包括 Linux)上使用。MOD 文件本质上存储短样本(乐器)库和音序信息(音符)。这些文件的大小在 30K 到 300K 字节之间,可以代表几分钟的音乐(即,一首完整的歌曲)。

MIDI 代表乐器数字接口,顾名思义,它是一种标准的硬件和软件协议,允许电子乐器进行通信。MIDI 文件以按键事件的形式描述歌曲,可以使用声卡上的内部 FM 合成器或外部 MIDI 设备播放。

另一种不太常见的文件格式是 Adagio 文件。Adagio 是一种在卡内基梅隆大学开发的音乐描述语言。用于播放 Adagio 文件以及在 Adagio 和 MIDI 文件之间进行转换的程序是可用的。

游戏

我们不能忘记声音的另一个重要应用——游戏!一些支持声音的图形游戏可以在 Linux 下运行,包括 Bdash 和 Xboing。

音频工具和实用程序

为了利用 Linux 内核中的音频支持,需要应用程序。其中几个重要的应用程序是 Sox(一种用于在不同格式之间转换声音文件并添加效果的实用程序)和 tracker(一种 MOD 文件播放器)。一些在 X 下运行的图形程序也可用,包括 xmix(音频混音器)、xplay(音频播放器/录音机)和 xmp(MIDI 文件播放器)。

还有许多其他程序,包括一些有趣的应用程序,例如语音合成。

未来

现在是我要站出来大声疾呼的时候了。Linux 中的音频支持还很新,应用程序支持不如某些其他操作系统那样完善。我设想看到一套完整的音频工具,这将为所有常见的音频功能提供一致的图形用户界面。这将有助于使 Linux 走在多媒体操作系统的前沿。需要开发的一些工具是:

  • 音频播放器/录音工具

  • 文件转换实用程序

  • 音频混音器

  • MOD 文件播放器

  • MOD 文件编辑器

  • MIDI 文件播放器和音序器

  • FM 合成器音色编辑器

  • 文本到语音合成器(/dev/speak 设备的支持怎么样?)

  • 支持音频的 X 窗口管理器

这些工具中的许多已经以各种形式存在,只需要更多的开发才能变得更可靠和一致。有志愿者吗?

一个有趣的题外话是,Linux 音频驱动程序的作者 Hannu Savolainen 也在将它们移植到其他 Intel 操作系统。该软件包被命名为 VoxWare,应该可以更轻松地编写可在多个操作系统之间移植的音频应用程序。

更多信息来源

《Linux 音频 HOWTO》文档提供了有关本文讨论主题的更多信息,并提供了其他参考资料。在您本地的 Linux 存档站点上查找它。

如果您可以访问互联网,以下 FAQ(常见问题解答文档)会定期发布到 Usenet 新闻组 news.announce,并存档在 rtfm.mit.edu 站点的 /pub/usenet/news.answers 目录中:

PCsoundcards/generic-faq(通用 PC 声卡 FAQ)

PCsoundcards/soundcard-faq(comp.sys.ibm.pc.soundcard FAQ)

PCsoundcards/gravis-ultrasound/faq(Gravis Ultrasound FAQ)

audio-fmts/part1,part2(音频文件格式描述)

这些 FAQ 还列出了几个特定产品的邮件列表和存档站点。以下 Usenet 新闻组讨论音频和/或音乐相关问题:

alt.binaries.sounds.misc(数字化的声音和软件)

alt.binaries.sounds.d(讨论和后续组)

alt.binaries.multimedia(多媒体声音和软件)

alt.sb.programmer(SoundBlaster 编程主题)

comp.multimedia(多媒体主题)

comp.music(计算机音乐理论和研究)

如果您可以访问互联网邮件,则可以订阅 Linux Activists 邮件列表的 SOUND 频道。要了解如何加入邮件列表,请发送邮件至 linux-activists-request@joker.cs.hut.fi

内核音频驱动程序源代码附带的 Readme 文件包含有关声卡驱动程序的有用信息。这些文件通常可以在 /usr/src/linux/drivers/sound 目录中找到。

《Linux 软件地图》(LSM) 是查找 Linux 软件的宝贵参考资料。在 LSM 中搜索“sound”等关键词是识别与音频硬件相关的应用程序的好方法。LSM 可以在各种匿名 FTP 站点上找到,包括 sunsite.unc.edu 站点的 /pub/Linux/docs/LSM.gz 文件。

请注意,在撰写本文时,音频驱动程序的版本为 2.4,并且作为 Linux 内核版本 0.99 补丁级别 15 的一部分包含在内(当您阅读本文时,这可能已经是古老的历史了)。

Jeff Tranter (Jeff_Tranter@mitel.com) 是加拿大卡纳塔一家高科技电信公司的软件设计师。他是《Linux 音频 HOWTO》的作者。

加载 Disqus 评论