6. 常见问题解答

本节解答了一些在 Usenet 新闻组和邮件列表中常被问到的问题。

更多问题的解答也可以在 OSS 声卡驱动程序的网页上找到。

6.1. 各种声音设备文件是什么?

这些是最标准的设备文件名,一些 Linux 发行版可能会使用略有不同的名称。

/dev/audio

通常是指向/dev/audio0

/dev/audio0

Sun 工作站兼容音频设备(仅部分实现,不支持 Sun ioctl 接口,仅支持 u-law 编码)

/dev/audio1

第二个音频设备(如果声卡支持或安装了多个声卡)

/dev/dsp

通常是指向/dev/dsp0

/dev/dsp0

第一个数字采样设备

/dev/dsp1

第二个数字采样设备

/dev/mixer

通常是指向/dev/mixer0

/dev/mixer0

第一个声音混音器

/dev/mixer1

第二个声音混音器

/dev/music

高级音序器接口

/dev/sequencer

低级 MIDI、FM 和 GUS 访问

/dev/sequencer2

通常是指向/dev/music

/dev/midi00

第一个原始 MIDI 端口

/dev/midi01

第二个原始 MIDI 端口

/dev/midi02

第三个原始 MIDI 端口

/dev/midi03

第四个原始 MIDI 端口

/dev/sndstat

读取时显示声卡驱动程序状态(也可作为 /proc/sound 使用,在 2.4 内核中已移除)

PC 扬声器驱动程序提供以下设备

/dev/pcaudio

等同于 /dev/audio

/dev/pcsp

等同于 /dev/dsp

/dev/pcmixer

等同于 /dev/mixer

6.2. 如何播放声音样本?

Sun 工作站 (.au) 声音文件可以通过发送到/dev/audio设备进行播放。原始样本可以发送到/dev/dsp。但这通常会给出较差的结果,最好使用诸如play之类的程序,因为它会识别大多数文件类型并将声卡设置为正确的采样率等。

如果您正在运行诸如 KDEGNOME 之类的图形桌面,那么它应该已经包含一个图形声音文件播放器程序。

像 wavplay 或 vplay(在 snd-util 包中)这样的程序将为 WAV 文件提供最佳效果。但是它们不识别 Microsoft ADPCM 压缩的 WAV 文件。此外,旧版本的 play(来自 Lsox 包)在处理 16 位 WAV 文件时效果不佳。

snd-util 包中包含的 splay 命令可用于播放大多数声音文件,前提是在命令行中手动输入正确的参数。

6.3. 如何录制样本?

读取/dev/audio/dev/dsp将返回可以重定向到文件的采样数据。诸如vrec之类的程序可以更轻松地控制采样率、持续时间等。您可能还需要一个混音器程序来选择适当的输入设备。

6.4. 我可以拥有多个声卡吗?

使用当前的声卡驱动程序,可以在系统上同时拥有多个 SoundBlaster、SoundBlaster/Pro、SoundBlaster16、MPU-401 或 MSS 卡。安装两个 SoundBlaster 是可能的,但需要通过编辑local.h手动定义宏 SB2_BASE、SB2_IRQ、SB2_DMA 和(在某些情况下)SB2_DMA2。也可以同时拥有 SoundBlaster 和 PAS16。

对于使用 make config 配置声音的 2.0 及更高版本内核,而不是local.h,您需要编辑文件/usr/include/linux/autoconf.h。在包含以下行的部分之后
#define SBC_BASE 0x220
#define SBC_IRQ (5)
#define SBC_DMA (1)
#define SB_DMA2 (5)
#define SB_MPU_BASE 0x0
#define SB_MPU_IRQ (-1)

添加以下行(使用适合您系统的值)
#define SB2_BASE 0x330
#define SB2_IRQ (7)
#define SB2_DMA (2)
#define SB2_DMA2 (2)

以下驱动程序不允许存在多个实例

6.5. 错误:声音设备的文件或目录不存在

您需要创建声卡驱动程序设备文件。请参阅有关创建设备文件的部分。如果您确实有设备文件,请确保它们具有正确的主设备号和次设备号(一些较旧的 Linux CD-ROM 发行版可能在安装过程中未创建正确的设备文件)。

6.6. 错误:声音设备不存在

您没有使用包含声卡驱动程序的内核启动,或者 I/O 地址配置与您的硬件不匹配。请检查您是否正在运行新编译的内核,并验证配置声卡驱动程序时输入的设置是否与您的硬件设置匹配。

6.7. 错误:声音设备的设备上没有剩余空间

如果您尝试将数据录制到/dev/audio/dev/dsp而没有创建必要的设备文件,则可能会发生这种情况。声音设备现在是一个常规文件,并且已填满您的磁盘分区。您需要运行本文档的创建设备文件部分中描述的脚本。

如果打开设备时系统上没有足够的可用 RAM,也可能会在 Linux 2.0 及更高版本中发生这种情况。音频驱动程序每个 DMA 通道至少需要两页(8k)连续物理 RAM。这有时发生在 RAM 少于 16M 或已运行很长时间的机器中。您可以使用内核选项“dma_buf=1”在加载驱动程序时预先分配 DMA 缓冲区。

6.8. 错误:声音设备的设备忙

一次只能有一个进程打开给定的声音设备。很可能其他一些进程正在使用该设备。确定这一点的一种方法是使用fuser命令
% fuser -v /dev/dsp
/dev/dsp:             USER       PID ACCESS COMMAND
                      tranter    265 f....  tracker

在上面的示例中,fuser命令显示进程 265 已打开该设备。等待该进程完成或终止它将允许再次访问声音设备。您应该以 root 身份运行fuser命令,以便报告其他用户的用法。

在某些系统上,您可能需要以 root 身份运行fuser命令才能查看其他用户的进程。

在 KDE 桌面下,artsd 声音服务器通常会控制声音设备。应用程序应通过声音服务器发出播放声音的请求,或者应暂停声音服务器。GNOME 下的 esd 声音服务器也存在类似的情况。

6.9. 我仍然收到设备忙错误!

根据 Brian Gough 的说法,对于使用 DMA 通道 1 的 SoundBlaster 声卡,可能与 QIC-02 磁带驱动程序存在冲突,后者也使用 DMA 1,从而导致“设备忙”错误。如果您正在使用 FTAPE,则可能已启用此驱动程序。根据 FTAPE-HOWTO,QIC-02 驱动程序对于 FTAPE 的使用不是必需的;仅需要 QIC-117 驱动程序。重新配置内核以使用 QIC-117 但不使用 QIC-02 允许 FTAPE 和声卡驱动程序共存。

6.10. 数字声音文件的部分回放

症状通常是声音样本播放大约一秒钟然后完全停止,或者报告有关“缺少 IRQ”或“DMA 超时”的错误消息。最有可能的是您具有不正确的 IRQ 或 DMA 通道设置。验证内核配置是否与声卡跳线设置匹配,并且它们是否与其他卡冲突。

另一个症状是声音样本循环播放。这通常是由 IRQ 冲突引起的。

6.11. 播放 MOD 文件时出现暂停

播放 MOD 文件需要相当大的 CPU 功率。您可能运行了太多进程,或者您的计算机可能太慢而无法实时播放。您的选择是

如果您有 Gravis UltraSound 声卡,则应使用专为 GUS 编写的 mod 文件播放器之一(例如gmod).

)。

6.12. 编译声音应用程序时出现编译错误1.0c 及更早版本的声卡驱动程序使用了不同且不兼容的ioctl()方案。获取更新的源代码或进行必要的更改以使其适应新的声卡驱动程序。请参阅声卡驱动程序的Readme

文件以了解详细信息。还要确保您在使用最新版本的soundcard.hultrasound.h

编译应用程序时。请参阅本文档开头处的安装说明。

6.13. 运行以前可以正常工作的声音二进制文件时出现 SEGV

这可能与上一个问题中描述的问题相同。

6.14. 声卡驱动程序中存在哪些已知的错误或限制?

请参阅声卡驱动程序内核源代码中包含的文件。

6.15. 声卡驱动程序的 ioctls() 等在哪里记录?

目前,除了源代码之外,最好的文档可在 4Front Technologies 网站 http://www.opensound.com 上找到。另一个信息来源是Linux 多媒体指南,在参考部分中进行了描述。

6.16. 无暂停地播放或录制需要哪些 CPU 资源?

磁盘 I/O 速率、CPU 时钟速度、缓存大小等。

一般来说,任何 386 或更好的机器都应该能够轻松地在 8 位声卡上播放样本或 FM 合成音乐。

然而,播放 MOD 文件需要相当大的 CPU 资源。一些实验性测量表明,以 44kHz 播放需要超过 486/50 速度的 40%,而 386/25 几乎无法以高于 22 kHz 的速度播放(这些是带有 8 位声卡(例如 SoundBlaster)的情况)。诸如 Gravis UltraSound 声卡之类的卡在硬件中执行更多功能,并且将需要更少的 CPU 资源。

这些陈述假设计算机没有执行任何其他 CPU 密集型任务。如果您有数学协处理器(或带有板载 FPU 的 CPU),则使用诸如sox

之类的实用程序转换声音文件或添加效果也会快得多。但是,内核驱动程序本身不进行任何浮点计算。

6.17. PAS16 和 Adaptec 1542 SCSI 主机适配器的问题(以下解释由)

seeker@indirect.com

提供)Linux 仅识别地址为 330(默认)或 334 的 1542,而 PAS 仅允许 MPU-401 仿真在 330。即使您在软件下禁用 MPU-401,如果 1542 位于其首选默认地址,某些东西仍然会与其冲突。将 1542 移动到 334 会让每个人都满意。

此外,1542 和 PAS-16 都进行 16 位 DMA,因此如果您以 16 位 44 KHz 立体声采样并将文件保存到挂载在 1542 上的 SCSI 驱动器,您将遇到麻烦。DMA 会重叠,并且没有足够的时间进行 RAM 刷新,因此您会收到可怕的“奇偶校验错误 - 系统已停止”消息,但不知道是什么原因造成的。更糟糕的是,一些带有 QIC-117 磁带驱动器的第二方供应商建议设置总线开启/关闭时间,使 1542 的开启时间甚至比正常时间更长。从 Adaptec 的 BBS 或互联网上的多个位置获取 SCSISEL.EXE 程序,并减少 BUS ON 时间或增加 BUS OFF 时间,直到问题消失,然后将其再移动一个或多个档位。SCSISEL 会更改 EEPROM 设置,因此它比 CONFIG.SYS 中的 DOS 驱动程序行的补丁更持久,并且如果您直接启动到 Linux(与 DOS 补丁不同),它将起作用。下一个问题解决了。

购买不同品牌的声卡。

Young Microsystems 将升级他们进口的板卡,价格约为 30 美元(美国);如果您能弄清楚谁制造或进口了主板(祝您好运),其他供应商也可能类似。就我而言,问题出在 ProAudio 的总线接口芯片中;没有人会购买 120 美元的声卡并将其插入 6MHz AT 中。它们中的大多数最终都会出现在 25-40MHz 386/486 机器中,如果芯片设计正确,应该能够处理至少 12MHz 的总线速率。肥皂箱演讲结束(左侧下台)。

第一个问题取决于您的主板上使用的芯片组、总线速度和其他 BIOS 设置以及月相。第二个问题取决于您的刷新选项设置(隐藏或同步)、1542 DMA 速率和(可能)总线 I/O 速率。第三个问题可以通过致电 Media Vision 并询问哪种 Symphony 芯片与他们的慢速设计不兼容来确定。但请注意 - 我与之交谈过的 4 个技术人员中有 3 个是脑损伤的。我非常不愿意相信他们说的任何关于其他人硬件的信息,因为他们甚至不太了解自己的硬件。

6.18. 是否可以同时读取和写入样本?

某些声卡的驱动程序支持全双工模式。请查看 4Front Technologies 提供的文档,以获取有关如何使用它的信息。

6.19. 我的 SB16 设置为 IRQ 2,但配置不允许此值。

在 '286 及更高版本的机器上,IRQ 2 中断被级联到第二个中断控制器。它等同于 IRQ 9。

6.20. 如果我运行 Linux,然后启动 DOS,我会收到错误和/或声音应用程序无法正常工作。这在软重启到 DOS 后发生。有时错误消息会误导性地指向错误的CONFIG.SYS

文件。

当前大多数声卡都具有软件可编程 IRQ 和 DMA 设置。如果您在 Linux 和 MS-DOS/Windows 之间使用不同的设置,这可能会导致问题。一些声卡在没有完全重置(即循环电源或使用硬件复位按钮)的情况下不接受新参数。

解决此问题的快速方法是使用复位按钮或电源循环执行完全重启,而不是软重启(例如 Ctrl-Alt-Del)。

正确的解决方案是确保您在 MS-DOS 和 Linux 中使用相同的 IRQ 和 DMA 设置(或者不使用 DOS :-)。

6.21. 在 Linux 下运行 DOOM 的问题

Linux 版 ID Software 游戏 DOOM 的用户可能对以下注意事项感兴趣。为了获得正确的声音输出,您需要 2.90 或更高版本的声卡驱动程序;它支持实时.

DOOM 模式

声音样本是 16 位的。如果您有 8 位声卡,您仍然可以使用 ftp://www.ibiblio.org/pub/Linux/games/doom 中提供的几个程序之一来使声音工作。如果 DOOM 在您的系统上性能不佳,禁用声音(通过重命名文件sndserver

)可能会提高性能。默认情况下,DOOM 不支持音乐(如 DOS 版本中那样)。程序musserver

将为 Linux 下的 DOOM 添加音乐支持。它可以在 ftp://pandora.st.hmc.edu/pub/linux/musserver.tgz 中找到。

6.22. 如何减少声卡拾取的噪音?

使用高质量的屏蔽电缆并在不同的插槽中尝试声卡可能有助于减少噪音。如果声卡具有音量控制,您可以尝试不同的设置(最大可能是最好的)。使用混音器程序,您可以确保将不需要的输入(例如麦克风)设置为零增益。

Philipp Braunbeck 报告说,在他的 ESS-1868 声卡上有一个跳线可以关闭内置放大器,这有助于减少启用时的噪音。在一个 386 系统上,我发现内核命令行选项no-hlt降低了噪音水平。这告诉内核在运行空闲进程循环时不要使用 halt 指令。您可以在启动时手动尝试此操作,或使用命令append="no-hlt"

在您的 LILO 配置文件中进行设置。

某些声卡只是在设计时没有良好的屏蔽和接地,并且容易受到噪音拾取的影响。

6.23. 我可以播放声音,但不能录制。

如果可以,请尝试在 MS-DOS 下测试声卡录制,以确定是否存在硬件问题

有时,录制使用的 DMA 通道与播放使用的 DMA 通道不同。在这种情况下,最可能的原因是录制 DMA 设置不正确。

6.24. 我的“兼容”声卡只有在首先在 MS-DOS 下初始化后才能工作。

在大多数情况下,“SoundBlaster 兼容”卡在使用非 SoundBlaster 驱动程序配置时在 Linux 下会更好地工作。大多数声卡声称兼容(例如“16 位 SB Pro 兼容”或“SB 兼容 16 位”),但通常这种 SoundBlaster 模式只是为 DOS 游戏兼容性提供的 hack。大多数卡都具有 16 位原生模式,最近的 Linux 版本(2.0.1 及更高版本)很可能支持该模式。

只有在某些(通常相当旧的)卡上,才需要尝试使它们在 SoundBlaster 模式下工作。唯一较新的卡是此规则的例外是基于 Mwave 的卡。

6.25. 我的 16 位 SoundBlaster “兼容”声卡在 Linux 下只能在 8 位模式下工作。

描述为 SoundBlaster 兼容的 16 位声卡实际上仅与 8 位 SoundBlaster Pro 兼容。它们通常具有 16 位模式,该模式与 SoundBlaster 16 不兼容,并且与 Linux 声卡驱动程序不兼容。

您或许可以通过使用 MAD16 或 MSS/WSS 驱动程序使该卡在 16 位模式下工作。

6.26. 我在哪里可以找到 Linux 的声音应用程序?

ftp://nic.funet.fi/pub/Linux/ALPHA/sound/

另请参阅本文档的参考部分。

6.27. 声卡驱动程序可以编译为可加载模块吗?

对于最新的内核,声卡驱动程序作为多个内核可加载模块受支持。请参阅/usr/src/linux/Documentation/sound中的文件,尤其是文件soundcard.hIntroduction.

README.modules

6.28. 我可以使用声卡替换系统控制台蜂鸣声吗?尝试oplbeep

程序,可在 ftp://www.ibiblio.org/pub/Linux/apps/sound/oplbeep-2.3.tar.gz 中找到另一个变体是beep

程序,可在 ftp://www.ibiblio.org/pub/Linux/kernel/patches/misc/modreq_beep.tgz 中找到modutils包中有一个示例程序和内核补丁,支持在内核请求时调用任意外部程序来生成声音。

KDE 的 2.0 及更高版本允许在 KDE 应用程序(如 konsole)中为控制台蜂鸣声播放声音文件。

或者,对于某些声卡,您可以将 PC 扬声器输出连接到声卡,以便所有声音都来自声卡扬声器。

6.29. 什么是 VoxWare?

4Front Technologies 出售的商业版声卡驱动程序以前被称为其他名称,例如 VoxWareUSS(Unix 声音系统),甚至 TASD(临时匿名声卡驱动程序)。它现在以 OSS(开放声音系统)的名义销售。Linux 内核中包含的版本有时被称为 OSS/Free

有关更多信息,请参阅 4Front Technologies 网页 http://www.opensound.com/。我在 1997 年 6 月的 Linux Journal 杂志上撰写了一篇关于 OSS/Linux 的评论。

6.30. Sox/Play/Vplay 报告“无效块大小 1024”

1.3.67 版本的声音驱动程序中的更改破坏了一些声音播放器程序,这些程序(错误地)检查来自 SNDCTL_DSP_GETBLKSIZE ioctl 的结果是否大于 4096。最新的声音驱动程序版本已修复,以避免分配短于 4096 字节的片段,这解决了旧实用程序的问题。

6.31. 每当我加载声卡驱动程序模块时,混音器设置都会重置

您可以将声卡驱动程序构建为可加载模块,并使用kerneld自动加载和卸载它。这可能会出现一个问题 - 每当模块重新加载时,混音器设置都会恢复为其默认值。对于某些声卡,这可能太大声(例如 SoundBlaster16)或太安静。Markus Gutschke (gutschk@uni-muenster.de) 找到了这个解决方案。在您的/etc/conf.modules文件中使用如下行
options sound dma_buffsize=65536
post-install sound /usr/bin/setmixer igain 0 ogain 0 vol 75

这会导致您的混音器程序(在本例中为setmixer)在声卡驱动程序加载后立即运行。dma_buffsize参数只是一个虚拟值,因为 option 命令需要一个命令行选项。根据需要更改该行以匹配您的混音器程序和增益设置。

如果您已将声卡驱动程序编译到内核中,并且想要在启动时设置混音器增益,则可以将对混音器程序的调用放入系统启动文件(如/etc/rc.d/rc.local.

)中。

6.32. 只有 root 用户可以录制声音默认情况下,Readme.linux 中的脚本创建声音设备文件时,仅允许用户root

读取设备。这是为了堵塞潜在的安全漏洞。在网络环境中,外部用户可能会远程登录到带有声卡和麦克风的 Linux PC 并进行窃听。如果您不担心这一点,则可以更改脚本中使用的权限。

使用默认设置,用户仍然可以播放声音文件。这不是安全风险,但可能会造成滋扰。

6.33. IBM ThinkPad 上的声卡硬件是否受支持?有关如何在 IBM ThinkPad 笔记本电脑上使用 mwave 声卡的信息,可以在文件/usr/src/linux/Documentation/sound/mwave

中找到,该文件是内核源代码发行版的一部分(请注意,并非所有 IBM ThinkPad 都使用 MWAVE 声卡芯片)。

6.34. 应用程序失败,因为我的声卡没有混音器/dev/mixer一些旧的 8 位 SoundBlaster 声卡没有混音器电路。一些声音应用程序坚持能够打开混音器设备,并且在使用这些声卡时会失败。Jens Werner (werner@bert.emv.ing.tu-bs.de) 报告说,一种解决方法是将链接到/dev/null

,一切都应该正常工作。

6.35. SB16 CT4170 的问题

来自 Scott Manley (spm@star.arm.ac.uk)

似乎有一种新型的 Soundblaster - 它作为 SB16 出售给我们 - 卡上的型号为 CT4170。这些家伙只有一个 DMA 通道,因此当您尝试设置它们时,内核将难以访问 16 位 DMA。解决方案是将第二个 DMA 设置为 1,以便该卡按广告宣传的那样工作。

6.36. 如何将 MIDI 键盘连接到声卡

来自 Kim G. S. OEyhus (kim@pvv.ntnu.no)

我在互联网和声音文档中到处查找,寻找如何做像将主键盘的 MIDI 输出连接到声卡上的 MIDI 输入这样简单的事情。我什么也没找到。问题在于它们都使用相同的设备 /dev/midi,至少在使用 OSS 声音系统时是这样。所以我找到了一种方法来做到这一点,我想分享一下。这可以创建一个非常简单的合成器,具有完整的 MIDI 支持

将 MIDI 主键盘直接连接到带有 MIDI 的声卡

MIDI 主键盘是没有任何合成器的键盘,只有一个 MIDI 输出插头。这可以使用合适的电缆连接到大多数带有 15 针 D-SUB 端口的声卡。

这样的键盘可以用于控制该卡的 MIDI 合成器设备,从而创建一个简单的键盘控制合成器。
#include <fcntl.h>

main()
{
  int fil, a;
  char b[256];

  fil=open("/dev/midi", O_RDWR);
  for(;;)
    {
      a=read(fil, b, 256);
      write(fil, b, a);
    }
}

编译以下程序,例如使用“gcc -o prog prog.c”并运行它

6.37. IRQ 15 和 Ensoniq PCI 128 的问题

来自 Matthew Inger (mattinger@mindless.com)

有关使 Ensoniq PCI 128 卡工作的信息。

它表现出的问题是它默认尝试使用中断 15(即插即用是造成这种情况的原因)。此中断由辅助 ide 控制器使用,并且不能由其他设备共享。您需要以某种方式强制 es1370 使用另一个中断(应该像在 Windows 下那样使用中断 11)。

信不信由你,我自己想出了这个办法。

我必须做的是

a) 在 BIOS 中,您必须告诉计算机您没有即插即用操作系统。我相信这在我的 BIOS 的高级选项下。

b) 在 BIOS 的 PCI 设置中,告诉计算机为旧式 ISA 设备保留中断 15。在我的 BIOS 中,在高级选项下,有一个 PCI 设置部分。在其中,有一个资源排除区域,这就是执行此操作的位置。

当您重新启动进入 Linux 时,您将能够使用声音。(我不记得它是否像以前那样出现在启动消息中)。为了安全起见,我再次运行 sndconfig,以便它播放测试消息,听起来不太好,但它在那里。但是,当我播放 CD 时,听起来很完美。

不用担心 Windows,我尝试了我的两张卡:ISA 调制解调器和声卡输出,它们工作正常,没有任何问题。

您的 BIOS 很可能与我的不同,但您只需要弄清楚上述两个项目的设置在哪里。祝你好运。

6.38. 我在哪里可以获得免费提供的 MIDI 音色库来运行 SoftOSS?

SoftOSS 是内核声卡驱动程序附带的基于软件的波表合成器,它与 Gravis Utrasound 卡兼容。为了运行,该驱动程序需要 GUS 兼容的 MIDI 音色库文件。文档中提到了“可从多个 ftp 站点获得的公共领域 MIDIA 音色库”。请注意,从 2.4 内核开始,不再包含 SoftOSS。