ALSA 用户指南

ALSA 用户指南

自 2.6 Linux 稳定内核系列公开发布以来,高级 Linux 声音架构 (ALSA) 已成为默认的内核声音系统。这一变化为 Linux 音频和 MIDI 功能带来了重大改进,包括对专业音频硬件、3D 环绕声、高级 MIDI 功能以及软件混音或音频流多路复用的支持。当与针对低延迟进行了修补的内核结合使用时,ALSA 提供的声音和 MIDI 资源与竞争平台相比毫不逊色,甚至在某些方面优于它们。这是一个大胆的说法,让我们来看看 ALSA,看看是什么让它如此成功。

我们的故事开始了

ALSA 项目的起因是一位名叫 Jaroslav Kysela 的年轻程序员,他对内核声音系统无法完全支持他的 Gravis Ultrasound 音频/MIDI 卡感到沮丧。Gravis 卡使用存储在卡内存中的文件格式为 PAT(补丁)的采样声音来创建声音。只要用户运行的是 Microsoft Windows 或 Apple Mac OS,就可以编辑和存储 PAT 声音库。遗憾的是,Linux 并没有提供如此全面的资源,导致 Jaroslav 的声卡无法完全运行。

当时,Linux 内核声音系统是 OSS/Free 系统,这是一个可靠且实用的音频/MIDI 子系统,自 Linux 早期以来就一直存在于内核源代码中,这主要归功于 Hannu Savolainen 的开创性工作。可惜的是,OSS/Free 未能跟上快速发展的桌面音频制作领域的步伐,许多声卡要么不受支持,要么仅部分受支持,Gravis 板就是这种情况。公平地说,OSS/Free 维护者很少;整个 Linux 音频领域的组织较少;当时的制造商(现在有些制造商仍然如此)对其驱动程序规范过于保密。

OSS/Free 中可能包含对 Gravis 卡的更多支持,但当 Jaroslav Kysela 研究 OSS/Free 应用程序编程接口 (API) 时,他意识到需要一种新的 API,能够更广泛地支持现代声卡和数字音频接口的发展。专业和消费者层面的期望值不断上升,要求支持诸如专业录音的高采样率和位深度、5.1 和其他 3-D/环绕声音频输出阵列、多通道数字音频 I/O 和多个 MIDI I/O 端口等功能。OSS/Free 中需要进行根本性变革的进步实在太多了,因此 Jaroslav 做了任何真正的硬核 Linux 程序员都会做的事情:他为 Linux 设计了一个新的音频/MIDI API,称之为高级 Linux 声音架构。

设计和实现一个涵盖当代音频要求的 API 并非易事,ALSA 需要很多年的时间、许多程序员和许多版本才能达到其目前作为内核声音系统的地位。在早期阶段,普通用户必须手动安装该系统,通常作为 OSS/Free 系统的替代品,以获得对卡的支持或卡的扩展功能。此过程包括卸载 OSS/Free 并重新编译内核以支持 ALSA,这在当时绝对是一项不简单的任务。尽管如此,ALSA 的忠实用户队伍不断壮大,开发蓬勃发展,最终 ALSA 被纳入 Linux 2.5 内核开发轨道。最后,随着 2.6 内核系列的公开发布,ALSA 成为默认的内核声音系统。

什么是 ALSA?

ALSA 主页向我们提供了以下信息:

高级 Linux 声音架构为 Linux 操作系统提供音频和 MIDI 功能。ALSA 具有以下重要功能:

  1. 有效支持所有类型的音频接口,从消费级声卡到专业多通道音频接口。
  2. 完全模块化的声音驱动程序。
  3. SMP 和线程安全设计。
  4. 用户空间库(alsa-lib)简化应用程序编程并提供更高级别的功能。
  5. 支持较旧的 OSS API,为大多数 OSS 程序提供二进制兼容性。

ALSA 在 GPL(GNU 通用公共许可证)和 LGPL(GNU 宽通用公共许可证)下发布。

让我们看一下每一个功能,并用普通用户更容易理解的语言重新阐述它们。

高效支持意味着您可以使用 ALSA 工具(例如声卡配置实用程序和混音器程序)轻松管理所支持声卡的基本和高级功能。这些工具是完整 ALSA 安装的组成部分。

模块化声音驱动程序意味着 ALSA 声卡驱动程序易于安装和更新。它们还提供了用户更详细地控制卡可用选项的方法。在本文后面,我们将展示如何使用驱动程序模块来访问和控制 ALSA 支持的声卡的功能。

ALSA 支持多处理器 (SMP) 机器。线程安全是一个编程术语,表示软件提供的服务可以在不同的线程中同时运行而不会互相干扰。在现代音频/MIDI 应用程序中,线程安全是一件非常好的事情。

ALSA 的用户空间库为程序员及其程序提供了访问 ALSA 服务的便捷方式,这对普通用户来说可能意义不大。但是,ALSA 库提供了应用程序可以访问这些功能的接口,有助于在用户级别形成更均匀的环境。您的程序可以更和谐地相互运行,并增强应用程序之间的连接和通信可能性。

ALSA 是在 Linux 声音支持的第一阶段发展起来的,当时大多数应用程序都在使用 OSS/Free API,因此 OSS/Free 兼容层对于普通用户来说是当务之急。大量 Linux 声音应用程序仍然需要 OSS/Free 兼容性,因此 ALSA 为较旧的 API 提供了无缝支持。但是,程序员应该注意,较旧的 API 现在已正式弃用。

安装和配置

有关安装的完整详细信息可在 ALSA 主页上找到(请参阅在线资源),因此我在此仅提及一些细节和说明。如果您使用的是基于 2.6 内核的发行版或定制 Linux 系统,则已安装 ALSA。基于早期内核的发行版和系统需要手动安装 ALSA。

安装 ALSA 并不特别困难,音频中心 Linux 发行版/软件包提供的软件包至少部分扫清了障碍,例如 Debian 的 AGNULA/Demudi、Red Hat 和 Fedora 的 PlanetCCRMA 以及 SlackWare 的 AudioSlack。Mandrake 用户可以安装 Thac 的软件包之一(请参阅参考资料)。无论您的基础系统是什么,在安装 ALSA 软件包之前都必须卸载 OSS/Free 模块。通常,此任务只需要将旧模块移动到临时目录中,以防您想要或需要将它们放回原处,并确保内核的 soundcore.o 对象文件仍位于其原始位置,通常是 /lib/modules/ your-kernel-number-here /kernel/drivers/sound/。删除 OSS/Free 后,您需要通过您选择的软件包管理器安装 ALSA 软件包。

多年来,ALSA 配置已得到很大改进,但它仍然是一个棘手的过程,特别是当您的系统有多个声音设备或设备通过 USB 或 PCMCIA 总线连接到您的计算机时。显然,我无法详细介绍每种可能的配置,但幸运的是,ALSA 网站包含大量受支持设备的配置页面,通常包括其他用户的提示和技巧。

基本配置

可以使用 alsaconf 实用程序进行基本配置(图 1)。alsaconf 在识别单个设备方面表现良好,但在包含多个设备的系统中可能表现不佳。别担心;容纳多个音频和 MIDI 设备仍然相当简单,我们稍后再回到该任务。现在,让我们继续,就好像您的机器只有一个音频设备一样。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1. alsaconf 配置工具适用于在安装了一块声卡的系统上查找声音硬件。

在 alsaconf 设置了对声音设备的基本支持后,您需要激活其播放和录制通道。默认情况下,ALSA 启动时设备的所有通道均处于静音状态。这可能会让某些用户感到烦恼,但它确实降低了首次启动新系统时无意中炸毁扬声器的可能性。您可以使用 ALSA 的 alsamixer 实用程序设置声音设备的通道功能,这是一个字符图形混频器,带有检测到的设备的每个通道的滑块和开关(图 2)。使用箭头键选择通道,使用 <> 键取消静音/静音通道,使用空格键选择通道作为录音源(用 ALSA 的话来说就是捕获)。设置混频器首选项后,运行 alsactl 实用程序保存并调用设置(alsactl store|restore)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2. 默认情况下,ALSA 启动时声音是静音的,因此您需要使用 alsamixer 设置音频通道值。

正如您已经看到的,ALSA 精心提供了许多有用的工具来帮助配置系统。如果您想了解有关使用这些工具的更多详细信息,只需使用 -h 选项运行该实用程序或使用 man 命令查看更详细的描述。以下示例显示我已经提到的实用程序的手册页:

  • 阿尔萨康夫
  • 男人alsamixer
  • 男人 alsactl

高级配置

现在我们已经了解了一些基本的安装和配置细节,让我们看看如何设置更复杂的系统。对于以下示例,我使用了我的笔记本电脑系统的配置细节,即 Pentium II 366MHz HP Omnobook 4150,带有 NeoMagic 制造的组合音频/视频芯片组。

在 Linux 下设置笔记本电脑音频支持可能是一项复杂的任务,而且我的硬件恰好有点问题。幸运的是,ALSA 提供了我所需的工具来解决我寻找正确芯片和驱动程序标识的困难。

alsaconf 实用程序会尝试识别系统的音频和 MIDI 功能,然后将基本配置文件写入 /etc/modules.conf。然而,在笔记本电脑声音支持的奇怪世界中,事情可能并不总是像表面上看起来的那样。例如,alsaconf 正确地将我的笔记本电脑音频芯片识别为 NeoMagic NM256。但是,配置失败,报告我应该使用基本的 SoundBlaster16 驱动程序 (sb16) 或 Crystal Sound 驱动程序之一 (cs423x)。

根据 ALSA 专家 Takashi Iwai 的建议,我尝试使用 alsaconf 设置 CS4232 芯片组功能的驱动程序,从 alsaconf 的非 PnP ISA 芯片组列表中选择 cs4232 模块。当我选择探测所有可能的 DMA 和 IRQ 设置时,我的机器锁定了,键盘冻结,并强制关机和冷启动。公平地说,我必须提到 alsaconf 警告过我可能发生这种情况。幸运的是,当我拒绝更积极的搜索时,alsaconf 顺利完成了任务,并将以下部分添加到我的 /etc/modules.conf 文件中:

	# --- BEGIN: 由 ALSACONF 生成,请勿编辑。---
	# --- ALSACONF 版本 1.0.4 ---
别名 char-major-116 snd
别名 snd-card-0 snd-cs4232
别名 char-major-14 soundcore
别名 声音槽 0 snd 卡 0
别名 sound-service-0-0 snd-mixer-oss
别名 sound-service-0-1 snd-seq-oss
别名 sound-service-0-3 snd-pcm-oss
别名 sound-service-0-8 snd-seq-oss
别名声音服务-0-12 snd-pcm-oss
别名 snd-card-1 snd-virmidi
别名 声音槽 1 snd-card-1
	# --- 结束:由 ALSACONF 生成,请勿编辑。---

Alsaconf 只是为 ALSA 可以为我的计算机提供的一般服务和卡特定服务设置了一系列别名。对于正常使用,此部分应保持为 alsaconf 生成它的状态。顺便说一句,virmidi 模块的条目之所以存在,是因为我运行的是 Red Hat 9,其中包含 PlanetCCRMA 的 ALSA 软件包,这是一套用于设置低延迟、高性能 Linux 音频/MIDI 工作站的组件。PlanetCCRMA 默认安装虚拟 MIDI 模块。

接下来,我在 /etc/modules.conf 中编辑了驱动程序选项。在此部分中,我可以自定义声音芯片的各种功能,设置 I/O 端口和 IRQ 地址,启用或禁用板载合成器功能以及定义 DMA 通道。

我运行了alsaconf -P来查看旧版非 PnP 模块的列表:

# alsaconf -P
opl3sa2 cs4236 cs4232 cs4231 es18xx es1688 sb16 sb8

接下来,我探测了 CS4232 驱动程序的默认选项设置:

# alsaconf -p cs4232
端口=0x534 cport=0x538 isapnp=0 dma1=1 dma2=0 irq=5

我本可以接受这些值并拥有一个可以正常工作的音频系统,但再次感谢 Takashi Iwai,我发现我还可以启用板载合成器芯片 Yamaha OPL3,这是一种廉价的 4 操作 FM 合成器,因其在廉价声卡中的普遍性和声音的普遍性而臭名昭著。Takashi 还建议输入和禁用物理 MIDI 端口的选项,只是为了表明它作为芯片组功能存在。因此,/etc/modules.conf 中我当前的选项部分现在包括 CS4232 的更完整配置:

选项 snd-cs4232 端口=0x534 cport=0x538 mpu_port=-1
↪fm_port=0x388 irq=5 dma1=1 dma2=0 isapnp=0

有了这种配置,我现在有了可以正常工作的音频 I/O 和一个低劣的板载 FM 合成器。但是,合成器需要一组声音补丁才能发出声音,当然 ALSA 提供了所需的实用程序 (sbiload) 来将补丁数据加载到合成器中 — ALSA 甚至提供了补丁。我使用加载器如下:

sbiload -p 65:0 --opl3 \
/home/dlphilp/soundfiles/sbi-patches/std.o3 \
/home/dlphilp/soundfiles/sbi-patches/drums.o3

这些选项包括所需的目标端口(使用aconnect -o确定)以及用于支持 OPL2 或 OPL3 的开关;OPL2 只是一个 2 操作 FM 合成器。示例的补丁包含在 ALSA 工具中(请参阅locate *.o3locate *.db了解位置)。互联网上提供了一些其他 OPL3 补丁集,还有补丁编辑器。

此时,我打开 alsamixer 来设置 CS4232 的通道状态。上图 2 显示了结果。我现在可以播放 OGG 和其他音乐文件 (PCM)、收听音乐 CD (Aux1) 以及观看和收听 DVD 和其他视频格式 (Aux)。我可以通过麦克风输入或线路输入插孔录制模拟音频,甚至可以收听由声音芯片合成器 (Aux1) 播放的 MIDI 音乐文件。默认情况下,我一次只能执行其中一项活动,但 ALSA 提供了一个简洁的软件混音插件,我将在后面介绍。

顺便说一下,在 Red Hat 或 Fedora 上,可以使用以下命令启动和停止整个 ALSA 系统:

/etc/init.d/alsasound 启动
/etc/init.d/alsasound 停止
/etc/init.d/alsasound 重启

如果您已安装 Debian 软件包,则文件为 /etc/init.d/alsa。此功能使测试新配置变得容易。可以使用location alsasound确定 alsasound 控件的确切位置。

ALSA 虚拟 MIDI 模块

细心的读者可能会想知道,在没有 MIDI 硬件的情况下,我如何路由 MIDI 数据。得益于 ALSA 的 virmidi 模块,我的系统有四个虚拟设备,可用作任何其他 ALSA 音序器客户端的原始 MIDI I/O 端口。所谓的 ALSA 音序器 API 的音序器不是 MusE 或 Rosegarden 之类的音序应用程序。此音序器管理自由互连的 MIDI 数据流的合并和计时,包括与单个端口的多个连接。符合 ALSA 音序器 API 允许每个客户端自由互连到一个或多个其他客户端,并且它已成为现代 Linux 音频软件的预期功能。

ALSA aconnect 实用程序告诉我哪些端口可用于通过 ALSA 序列器进行连接:

连接-i
客户端 0:'系统' [type=kernel]
    0 ‘计时器’
    1'宣布'
客户端 72:'虚拟原始 MIDI 1-0' [type=kernel]
    0'VirMIDI 1-0'
客户端 73:'虚拟原始 MIDI 1-1' [type=kernel]
    0'VirMIDI 1-1'
客户端 74:'虚拟原始 MIDI 1-2' [type=kernel]
    0'VirMIDI 1-2'
客户端 75:'虚拟原始 MIDI 1-3' [type=kernel]
    0'VirMIDI 1-3'

此报告表明我有四个虚拟 MIDI 端口。无论我为这些端口分配什么软件,都可以连接到任何其他 ALSA 音序器客户端:

连接-o
客户端 65:'OPL3 FM 合成器' [type=kernel]
    0'OPL3 FM 端口'
客户端 72:'虚拟原始 MIDI 1-0' [type=kernel]
    0'VirMIDI 1-0'
客户端 73:'虚拟原始 MIDI 1-1' [type=kernel]
    0'VirMIDI 1-1'
客户端 74:'虚拟原始 MIDI 1-2' [type=kernel]
    0'VirMIDI 1-2'
客户端 75:'虚拟原始 MIDI 1-3' [type=kernel]
    0'VirMIDI 1-3'

此报告显示我可用的接收端口。因此,以下命令将第一个 virmidi 端口连接到我的板载 FM 合成器:

连接 72:0 65:0

kconnect、alsa-patch-bay 和 QJackCtl 程序为设备识别和连接提供了图形界面。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3. 基本的 Linux 笔记本电脑 MIDI 系统

图 3 展示了一个小型但功能强大的 MIDI 测序系统。主程序是 Rob Buse 的 seq24,这是一个轻量级循环测序器,采用 20 世纪 80 年代和 90 年代硬件测序器的风格设计。seq24 在内部管理其连接,图中隐藏了虚拟键盘和 seq24 之间的连接以及各个序列的输出目标。一些序列已被路由到 OPL3 合成器;其他序列已被发送到作为 Soundfont 服务器运行的 TiMidity 实例。

USB MIDI 接口

与许多其他笔记本电脑用户一样,我将 USB 设备连接到我的机器上,在本例中是 MIDIman 2x2 MidiSport。MidiSport 提供两个独立的 I/O 端口,是的,ALSA 支持多端口 MIDI 硬件。但是,当我使用这台机器时,我并不总是随身携带 MidiSport,因此我更喜欢在设置 CS4232 和 virmidi 卡后加载 USB 模块。为了阻止 USB MIDI 模块的自动加载,我在 /etc/hotplug/blacklist 中添加了以下几行:

# 所以我可以保留我喜欢的声卡顺序:
snd-usb-音频

# uhci ... usb-uhci 处理相同的 pci 类:
usb-uhci

接下来,我编写了以下脚本来配置和激活 MidiSport 2x2:

回显“正在加载 MidiSport 固件……”
modprobe snd-usb-audio
sfxload-I \
  /usr/share/usb/ezusbmidi/ezusbmidi2x2.ihx \
  -D /proc/总线/usb/001/003
回显“完成!”

固件和加载器包含在 ALSA 安装中。您可能需要查询 /proc/bus/usb 文件系统以获取可用的 USB 标识符,并且可能需要尝试每个标识符以找到哪一个适用于您的硬件。使用 cat 命令列出您的标识符编号:

$ cat /proc/bus/usb/001/
001 003

如果您选择了错误的标识符,系统就会报告错误,所以至少就我而言,反复试验的过程不会持续很长时间。

PCMCIA 音频卡

好像我还没有在我的小系统中塞满 ALSA 驱动程序一样,我还想使用 Core Sound PDAudioCF 卡,这是专为手持式计算机(例如 Zaurus)制造的高品质数字音频输入卡,但使用 CF 转 PCMCIA 适配器也非常方便。同样,我想在设置 PDAudioCF 之前配置好其他设备,因此我只需等到其他所有设备都按预期工作后再插入卡即可。系统会自动检测新硬件并加载适当的模块 (snd-pdaudiocf),这个过程对最终用户完全透明。

使用此卡很容易。以下示例说明如何使用 ALSA 的 arecord 实用程序将 30 秒的立体声数字音频流从我的台式机系统的 SBLive 的 S/PDIF 数字输出录制到 PDAudioCF 卡:

arecord -f dat -D hw:3,0 -d 30 foo.wav

-f dat选项将录音格式设置为包含 48kHz 的采样率,这是 SBLive 支持的唯一输出采样率。我用-f cd替换了DAT 选项,并再次从 Delta 66 的 S/PDIF 输出进行录音,这次使用的是标准红皮书 CD 音频值,即采样率为 44.1kHz 的 16 位立体声音频。在这两种情况下,录音和播放都完美无缺,音质优美,这要归功于 PDAudioCD 卡。有关 ALSA 播放和录音实用程序的更多详细信息,请参阅man aplayman arecord

Linux 笔记本电脑的声音支持是一个奇怪的世界,我花了大量时间让它正常工作。但是,我的机器现在有一个支持立体声模拟 PCM I/O 的音响系统、一个 CD 音频通道、一个可访问 MIDI 的板载合成器、四个虚拟 MIDI I/O 端口、一个外部 2x2 MIDI 接口和一个高质量数字音频输入端口。对于 PII 366 来说,这套功能还算不错,当然,真正要感谢的是 ALSA。

顺便说一句,如果我忘记了卡的顺序编号,我总是可以查询 proc 文件系统来获取它们的编号和状态:

$ cat /proc/asound/cards
0 [CS4231]: CS4231 - CS4231
        	     CS4231 位于 0x534,irq 5,dma 1&0
1 [VirMIDI]: VirMIDI - VirMIDI
        	     虚拟 MIDI 卡 1
2 [M2x2]:USB 音频 - Midisport 2x2
                     Midiman Midisport 2x2 位于 usb-00:07.2-1,全速
3 [PDAudioCF]: PDAudio-CF - 核心声音 PDAudio-CF
	             核心声音 PDAudio-CF 位于 0x100,irq 11

因此,具体的硬件定义将是 hw:0、hw:1、hw:2 和 hw:3。hw:1 和 hw:2 是仅 MIDI 设备,不能用于音频目的。是的,proc 报告了 CS4231,而我已配置了 CS4232,但 Takashi Iwai 向我保证,这种行为对于芯片组来说是正常的。我知道,这很奇怪。

基本和高级桌面配置

我的桌面系统配置起来容易多了。但它仍然是一个相当复杂的系统,支持一个声卡(SoundBlaster Live Value,带外部 MIDI 适配器)、虚拟 MIDI 模块和 M-Audio Delta 66 多通道音频接口。

与笔记本电脑上的 OPL3 合成器一样,我必须将声音数据加载到 SBLive 的 EMU10k1 硬件合成器中,并使用 ALSA sfxload 实用程序将声音字体加载到合成器中。此命令使用声卡附带的通用 MIDI 声音字体配置我的 SBLive 合成器:

sfxload 8mbgmsfx

最近,开发人员 Lee Revell 显著改进了 Creative Labs SBLive 和 Audigy 声卡的 ALSA 驱动程序,释放了比以前驱动程序更大的潜力。Lee 遵循了 kX 项目的领导,这是一个基于 Windows 的开源项目,旨在开放 SBLive/Audigy 卡的所有功能,包括真正的多通道 I/O、访问 DSP 寄存器和支持 x.1 环绕声。Lee 的工作极大地扩展了廉价硬件的录制和播放可能性,为 Linux 作为桌面音乐和声音工作站带来了更多价值。

我的台式机虚拟 MIDI 驱动程序的安装和操作与我的笔记本电脑完全相同。有关详细信息,请参阅上面的相应部分。

可以使用 alsamixer 来设置 SBLive 的频道,但设置 Delta 66 需要使用专门的 envy24control 混音器(图 4)。此混音器可以访问和控制带有 ice1712 芯片组的卡(包括 M-Audio Delta 卡)的高级功能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4. envy24control 混频器

ALSA 可轻松处理具有多张卡的系统。ALSA 实用程序通常包含用于选择特定卡的选项,例如我的 SBLive 和 Delta 卡的以下示例:

alsactl restore 0
alsactl restore 2
alsamixer-c 0 复制代码
alsamixer-c 2

在我的系统中,卡 1 是虚拟 MIDI 卡,它不采用任何通道设置,因此没有关联的混频器。

ALSA 插件和 .asoundrc 文件

ALSA 插件是通过名为 .asoundrc 的文件提供的实用服务,通常放在您的主目录中。插件服务包括重新采样、通道路由、样本格式转换和软件音量控制。有关这些和其他 ALSA 插件的详细信息,请参阅 ALSA Wiki 上关于 .asoundrc 的说明。

正如我之前提到的,我的笔记本电脑的默认声音功能一次只能用于一个应用程序。幸运的是,ALSA 提供了一个很酷的插件,称为 dmix,它的唯一功能是提供一种称为软件混音的音频流多路复用。不幸的是,ALSA 不会自动检测对 dmix 插件的需求,因此用户必须准备必要的组件。

这是我的笔记本电脑的 .asoundrc:

pcm.!默认 {
        插头类型
        从属.pcm“dmixer”
}

pcm.dmixer {
        类型 dmix
        ipc_key 1024
        奴隶 {
            pcm“硬件:0,0”
            period_time 0
            period_size 1024
            缓冲区大小 4096
            费率 32000
}
        绑定 {
            0 0
            1 1
        }
}

pcm.dsp {
        插头类型
        从属.pcm“dmixer”
}

ctl.dmixer {
        类型 hw
        卡 0
}

此文件定义了一个名为 dmixer 的新 PCM 设备,其插件类型为 dmix,它从属于声音芯片的 PCM 功能。该插件还允许我根据硬件的功能调整采样率,从而减轻 CPU 需求。

使用 dmix 插件,我可以同时运行音频播放器和视频播放器。如果您想知道我为什么要这样做,请考虑一下我经常学习 DivX 光盘上的太极视频。视频通常很精彩,但背景音乐并不总是我喜欢的,所以能够听一些更合我口味的音乐真是太好了。以下命令启动 Andy Lo A Fo 的简洁 alsaplayer 声音文件播放器和 MPlayer 视频播放器:

mplayer -ao alsa9:dmixer -aop 列表=音量:音量=0 \
  删除帧
alsaplayer -o alsa -d 插头:dmixer cool-foo.mp3

由于 MPlayer 的软件音量控制,视频播放器的音频输出被否定,而 alsaplayer 播放我喜欢的音乐。非常酷的东西,感谢 dmix 插件。

我对我的桌面系统没有特殊需求,但我已经配置了 .asoundrc 文件以适应 SBLive 和 Delta 66 的基本要求:

pcm.emu10k1 {
        类型 hw
        卡 0
}

ctl.emu10k1 {
        类型 hw
        卡 0
}

pcm.Delta66 {
        类型 hw
        卡 2
}

ctl.Delta66 {
        类型 hw
        卡 2
}

pcm.DeltaPlug {
        插头类型
        卡 2
}

ctl.DeltaPlug {
        插头类型
        卡 2
}

pcm.DeltaPlugHW {
	类型 plughw
	卡 2
}

ctl.DeltaPlugHW {
        类型 plughw
        卡 2
}

当我查询 /proc/asound 时,卡编号反映了排序列表:

$ cat /proc/asound/cards
0 [现场]:EMU10K1 - Sound Blaster Live!
                     Sound Blaster Live! (rev.8) 位于 0xd000,irq 3
1 [VirMIDI]: VirMIDI - VirMIDI
	             虚拟 MIDI 卡 1
2 [M66]: ICE1712 - M Audio Delta 66
	             M Audio Delta 66 位于 0xd800,irq 5

ALSA 不提供默认的 .asoundrc 文件,也不是绝对必要的。但是,许多有趣的 ALSA 功能只能通过 .asoundrc 访问,建议读者研究 ALSA 网站上的示例文件。

有关高级示例,请参阅 Timo Sivula 的 El Cheapo HOWTO,这是一个相当了不起的硬件/软件破解,允许使用两个或更多消费级声卡(Timo 使用的是 Creative Labs PCI128)进行精确到样本的多通道录音。在正常情况下,这种方法注定会失败,因为卡的时钟晶体之间固有的不稳定性,但 Timo 的硬件修改和 .asoundrc 的功能使其成为可能。El Cheapo HOWTO 并不适合胆小的人,但它确实成功地提供了一种在 Linux 桌面上进行高质量多通道录音的廉价途径。

关于JACK的简短说明

图 4 展示了 JACK 环境中的 envy24control 混音器。JACK 是一个音频连接管理器,按照专业规格设计,用于 JACK 服务器与其客户端之间的低延迟通信。JACK 需要本机系统音频驱动程序,对于 Linux 来说,它可以是虚拟驱动程序、OSS 驱动程序、PortAudio 或最典型的 ALSA。我将在以后的文章中详细介绍 JACK 系统。

ALSA 应用软件库

毫不夸张地说,所有当代主流 Linux 音频软件都需要 ALSA 的特殊服务。MIDI 程序享受 ALSA 音序器的连接性,数字音频系统利用 ALSA 的专业音频硬件驱动程序,并为常见的桌面音频/视频活动提供全面支持。图 5 和图 6 显示了我在桌面上经常看到的一些屏幕,这要归功于 ALSA。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5. 使用 Ardour 进行录音

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6.Rosegarden 中的音频/MIDI 排序

未来工作

从普通用户的角度来看,ALSA 最明显的弱点是缺乏构成系统强大功能的各种工具和实用程序的 GUI 前端:配置面板,其中包含用于配置和重新排序已安装卡的选项、加载虚拟 MIDI 驱动程序、选择 .asoundrc 的插件并生成新文件、操作 alsactl 等。ALSA 确实功能丰富,但其许多优秀功能仅供我们这些愿意编写脚本和资源文件的人使用。

幸运的是,有丰富的 ALSA 文档和信息可供各个级别的用户使用。我已经提到了 ALSA 实用程序的手册页。ALSA 网站包含许多有关系统基本和高级使用的资源。此外,alsa-user 和 alsa-devel 邮件列表是智慧和帮助的源泉,出色的 ALSA Wiki 也是如此。

该项目始终需要程序员,但也需要图形设计师、技术作家和 beta 测试员,因此即使您不会编码,您的技能对项目来说仍然很有价值。我们也乐意接受硬件和现金捐赠;请参阅 ALSA 网站以获取适当的联系信息。

普通用户可以期待看到更多卡得到支持,用户可以使用更多功能。希望卡配置将变得更加容易:充分利用 ALSA 可能是一件简单的事情,也可能是一件困难的事情。确实,困难并非不可能,而且回报肯定值得付出努力。不过,希望我们还将看到一些更易于访问的用户级配置工具。

tl 等。ALSA 确实功能丰富,但其许多优秀功能仅供我们这些愿意编写脚本和资源文件的人使用。

幸运的是,有丰富的 ALSA 文档和信息可供各个级别的用户使用。我已经提到了 ALSA 实用程序的手册页。ALSA 网站包含许多有关系统基本和高级使用的资源。此外,alsa-user 和 alsa-devel 邮件列表是智慧和帮助的源泉,出色的 ALSA Wiki 也是如此。

该项目始终需要程序员,但也需要图形设计师、技术作家和 beta 测试员,因此即使您不会编码,您的技能对项目来说仍然很有价值。我们也乐意接受硬件和现金捐赠;请参阅 ALSA 网站以获取适当的联系信息。

普通用户可以期待看到更多卡得到支持,用户可以使用更多功能。希望卡配置将变得更加容易:充分利用 ALSA 可能是一件简单的事情,也可能是一件困难的事情。确实,困难并非不可能,而且回报肯定值得付出努力。不过,希望我们还将看到一些更易于访问的用户级配置工具。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值