The Linux Sound HOWTO -- Linux 音效指引 作者: Jeff_Tranter, [1]jeff_tranter@pobox.com 译者: 伍永康 [2]yorkwu@ms4.hinet.net 中文版 v1.20C, 1999 年 7 月 24 日(原文 v1.20, 24 March 1999) _________________________________________________________________ 本文件描述在Linux下的关於音效的支援。 它列举出支援的音效硬体设备,也写 到了如何设好核心驱动程式,及常见问题的解答。 希望藉由它,可以让新手更提 早上路,同时减少在Usenet新闻组及通信论坛间的庞大 "灌水量"。 _________________________________________________________________ 1. 绪论 * 1.1 铭谢 * 1.2 最新版本何处寻 * 1.3 回馈 * 1.4 散布时的注意事项 2. 音效卡技术 3. 支援的硬体 * 3.1 音效卡 * 3.2 选择性的音效驱动程式 * 3.3 PC喇叭 * 3.4 平行(印表机)埠 4. 安装 * 4.1 安装音效卡 * 4.2 设定随插即用 * 4.3 设定核心 * 4.4 建立设备档 * 4.5 起动Linux及测试 * 4.6 问题与解决 5. 支援音效的应用软体 6. 常见问题与解答 * 6.1 这一堆音效设备档各代表什麽? * 6.2 怎样播放音效档案? * 6.3 怎样录制音效档? * 6.4 我可以有不只一片音效卡吗? * 6.5 音效设备发生错误: No such file or directory * 6.6 音效设备发生错误: No such device * 6.7 音效设备发生错误: No space left on device * 6.8 音效设备发生错误: Device busy * 6.9 还是逃不了'device busy'的错误! * 6.10 音效档放到一半就停了 * 6.11 播放 MOD 档断断续续 * 6.12 编译音效软体时出错 * 6.13 以前跑很好的软体,却出现 SEGV 错误 * 6.14 音效驱动程式有何已知的限制及 bug? * 6.15 关於音效驱动程式的 ioctl 等,哪里有记载? * 6.16 要完全平顺地录放音,需要多强的CPU才能办到? * 6.17 PAS16 和 Adaptec 1542 SCSI 卡的搭配问题 * 6.18 可不可以同时录放音? * 6.19 我的声霸卡 16 是设 IRQ 2,可是驱动程式不准我设这个值 * 6.20 我离开 Linux,起动 DOS,然後有些软体发声不正常 * 6.21 在 Linux 下跑 DOOM 出问题 * 6.22 怎样降低音效卡产生的杂音? * 6.23 能放音,不能录音 * 6.24 必须先进 DOS 跑驱动程式,不然我的"相容卡"没法用 * 6.25 我的 16 位元声霸卡相容卡在 Linux 下只能用 8 位元模式 * 6.26 在哪里找得到 Linux 的音效应用软体? * 6.27 音效驱动程式可不可以编译成可载入模组? * 6.28 我能把主控台的哔哔声改用音效卡发出吗? * 6.29 VoxWare是什麽? * 6.30 Sox/Play/Vplay 回报 "invalid block size 1024" * 6.31 我载入音效驱动程式模组後,混音设定就被重设了 * 6.32 只有 root 能录音 * 6.33 在IBM ThinkPad上的音效硬体可以支援吗? * 6.34 因为我的音效卡没有混音器,所以应用程式不让我用 * 6.35 SB16 CT4170 的问题 * 6.36 怎样将 MIDI keyboard 连接到音效卡上? * 6.37 IRQ 15 以及 Ensoniq PCI 128 之间的问题 * 6.38 我在哪儿可以抓到可自由散布的 MIDI patch,来给 SoftOSS 使用? 7. 参考文献 _________________________________________________________________ 1. 绪论 这是Linux Sound HOWTO文件。 它的主要目标是提供一切安装及建置Linux音效支 援所需知 识的快速参考资料。 我们一方面回答关於Linux下关於音效的常见问题 ,另一方面也指出 关於电脑音效/音乐方面种种主题的参考资料的来源。 本文的□围仅及於适合用於 Linux 的音效卡方面。 对於音效卡及电脑音效/音乐 原理的资料,请参阅参考文献那节列出的文件。 1.1 铭谢 这份文件很多来自音效驱动程式程式码所附的文件(由 Hannu Savolainen( [3]hannu@voxware.pp.fi)撰写)。 谢谢Hannu,Alan Cox,及开发 Linux 核心音 效驱动程式, 以及公用程式的许许多多其他人们。 由於有 [4]SGML Tools 套件,使得本文件可以由一个原始档产生出几种不同格式 。 1.2 最新版本何处寻 本文件之最新版本将定期张贴於 [5]comp.os.linux.answers 新闻组; 它也会放 到很多保存这类资讯的匿名ftp站,诸如 [6]ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/ 本文件及其它 HOWTO 文件的超文字版也放在很多 WWW 站台上,包括 [7]http://metalab.unc.edu/LDP/ 很多 Linux 的 CD-ROM 安装套件也内含 HOWTO 文件,通常放在 /usr/doc/ 目录下。 有时在CD-ROM 上的,或列印的,或 在ftp站里的会是过时的版本。 如果在本 HOWTO 上的日期已距今超过 六个月, 那麽在Internet上可能已经有新版了。 要请您注意的是,由於网际网路的动态性质,在本文件中所有的 WWW 及 FTP 连 结都可能发生改变。 本文件亦被翻译为几个不同语言的版本: 中文: [8]http://www.linux.org.tw/CLDP/Sound-HOWTO.html 法文: [9]http://www.freenix.org/unix/linux/HOWTO/ 日文: [10]http://yebisu.ics.es.osaka-u.ac.jp/linux/ 韩文: [11]http://kldp.linux-kr.org/HOWTO/html/Sound/Sound-HOWTO.html 俄文: [12]http://www.phtd.tpu.edu.ru/~ott/russian/linux/howto-rus/Sound-HOWT O.html 西班牙文: [13]ftp://ftp.insflug.org/es 多数本文件及其它的 Linux HOWTO 的翻译版也可以在 [14]http://metalab.unc.edu/pub/Linux/docs/HOWTO/translations/ 以及 [15]ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/translations/找到。 如果 您将本文件翻做其它语言,请告诉我,我会在这里替它做个连结。 1.3 回馈 这份 HOWTO 文件,需要各位读者协助,才能越来越好用。 如果您有任何建议, 修正, 或意见,请告诉作者( [16]jeff_tranter@pobox.com)。 我将会在下一版 试著加入这些意见。 (译注: 对本中文版的意见,请告诉 [17]译者(yorkwu@ms4.hinet.net)。) 我也很乐意尽我能力回答关於音效卡及Linux的一般问题。 但在这之前,请先耐 心读完这 整篇 HOWTO,然後再给我和这问题相关的所有细节资讯。 请不要问我 在非Linux作业系统 下关於音效卡的问题。 如果您在唯读光碟上或以硬拷贝形式发行此文件,欢迎附送一份过来。 请寄到我 的收信地 址。 也请考虑一下对 Linux 文件计画作点奉献,以支持 Linux 的免 费文件。 请和Linux HOWTO 协调人 Tim Bynum ( [18]mailto:linux-howto@metalab.unc.edu )联络以得到更多资讯。 1.4 散布时的注意事项 Copyright (c) 1995-1999 by Jeff Tranter. 中文版版权为伍永康及 Jeff Tranter (1997-1999) 所有。 This document may be distributed under the terms set forth in the LDP license at [19]http://metalab.unc.edu/LDP/COPYRIGHT.html 本文件得依照 [20]http://sunsite.unc.edu/LDP/COPYRIGHT.html 所记载之 LDP 执照的条款发行。 2. 音效卡技术 为了有助於您对本文後面讲到的有些了解,这一节简略地提一下电脑音效 技术的 概要。 如果想更进一步了解,请找数位音讯或数位信号处理的相关书籍。 声音是一种类比的现象(property); 它可能是在连续□围内的任意值。 然而电脑 却是数位的,只能表示□围中的几个点。 为了让声音能存进记忆体, 音效卡用 了一种叫类比/数位转换器(A/D或ADC),将声波信号(以电压表示) 转换成数字以 供储存。 另外也用一个数位/类比转换器(D/A或DAC) 将数字反过来转换成电压, 送进喇叭,发出声音。 由类比转换成数位的过程,叫作取样,会产生一些误差。 有两个因素决定转换过 的声音转得多好。 其一是取样率,是在单位时间内, 硬体对声音作几次取样(通 常用每秒几次或赫兹为单位)。 较低的取样率表示的类比信号就比较不准确。 其 二是样本大小, 是每一次取样的有效□围,通常用 bit 表示。 有效□围越大, 就能取出较准确的数位化声音。 音效卡一般用8或16 bit取样,取样率则在 4000-44000Hz 之间。 取样也分为单 声道(单音)或双声道(立体声)。 FM 合成是产生声音的旧方法。 它把不同的波型 (如正弦波,方波,三角波等)组 合起来产生声讯。 FM 合成硬体上比较简单, 但是较难程式化,也较没弹性。 很多音效卡仍提供 FM 合成以和过去的音效卡及软体相容。 通常会提供几组独立 的声音产生器及语音。 波型表合成结合了 D/A 转换的弹性及 FM 合成的多频道能力。 用这种方法,数 位语音可以下载到专用的记忆体内,在不太需要CPU负载的情况下播放, 合并及 修改。 最新锐的音效卡都支援波型表合成。 多数音效卡提供混音能力,可将不同讯号来源的声音加以合并,并控制增益 强度 。 MIDI是指乐器数位介面 (Musical Instrument Digital Interface), 是一种可 以让乐器彼此沟通的软硬体协定。 在 MIDI bus 上传送的事件可以存成 MIDI 档 , 供日後修改及重播。 很多音效卡提供 MIDI 介面,即使没有,靠音效卡本身 的能力, 仍然可以播放 MIDI 档。 MOD档是电脑产生歌曲常用的格式。 除了记录音符外, 档案也记录了乐器(或语 音)的数位取样。 MOD档是由Amiga电脑来的,但只要有适当的软体, 在包 括Linux的其它系统上也能播放。 3. 支援的硬体 这一节列出目前 Linux 支援的音效卡及音效介面, 以撰写时最新的 Linux 核心 为基准,在本文撰写时是 2.2.4。 这份文件只对包含在标准 Linux 核心码中的 音效驱动程式有效。 Linux 上尚有其它的音效驱动程式存在(请看後面关於 选择 性的音效驱动程式 一节) 关於 Linux 支援的音效卡以及它的功能的最新消息,请看 Linux 核心原始码中 的档案,通常装在/usr/src/linux/Documentation/sound 目录下。 在这份HOWTO里的资讯对Intel平台的Linux有效。 音效卡驱动程式应该也能支援Alpha平台上的多数音效卡。 然而有的卡虽然在 i386 平台上工作得很好,却会和 Alpha 系统上的其它设备位址相冲突。 所以通 常没试过的话,没办法得知一片卡到底能不能用。 所以除非亲自尝试过,不然也 不能确定一片音效卡能不能用。 有报告称在PowerPC平台上的 Linux 音效驱动程式还无法使用, 不过将来应该会 支援。 在MIPS平台的Linux可以将音效驱动程式挂进核心, 有部份MIPS机器有EISA插槽 ,或者内建的发音硬体。 Linux MIPS group 告诉我,在将来他们很有兴趣加入 对音效的支援。 Linux 核心也为 Atari 及 Amiga 平台的 Linux 一个分开的驱动程式, 它运用 这些机器内建硬体,实作了和 Intel 平台上 Linux 相容的子集合。 SPARC平台的 Linux 目前在某些机型上已支援音效。 有人和我说在主机板上的音 效硬体已可以用,但外部 DSP 音效盒还未支援,因为 Sun 并没有给相关规格资 料。 3.1 音效卡 以下音效卡为 Linux 核心驱动程式支援。 其中有些是音效晶片名称而非音效卡 名称。 这个列表并不是完整的列表, 因为有很多其它卡是和其中的一些卡相容 。 有些厂商隔一段时间就改变设计, 使新音效卡和旧的产生不相容性,但却还 用旧的型号,更增加了困扰。 * 6850 UART MIDI Interface * AD1816/AD1816A based cards * ADSP-2115 * ALS-007 based cards (Avance Logic) * ATI Stereo F/X (停产) * Acer FX-3D * AdLib (停产) * Audio Excel DSP 16 * AudioDrive * CMI8330 音效晶片 * Compaq Deskpro XL onboard sound * Corel Netwinder WaveArtist * Crystal CS423x * ESC614 * ESS1688 音效晶片 * ESS1788 音效晶片 * ESS1868 音效晶片 * ESS1869 音效晶片 * ESS1887 音效晶片 * ESS1888 音效晶片 * ESS688 音效晶片 * ES1370 音效晶片 * ES1371 音效晶片 * Ensoniq AudioPCI (ES1370) * Ensoniq AudioPCI 97 (ES1371) * Ensoniq SoundScape (及由Reveal和Spea生产的相容卡) * Gallant SC-6000 * Gallant SC-6600 * Gravis Ultrasound * Gravis Ultrasound ACE * Gravis Ultrasound Max * Gravis Ultrasound with 16 bit sampling option * HP Kayak * Highscreen Sound-Booster 32 Wave 3D * IBM MWAVE * Logitech Sound Man 16 * Logitech SoundMan Games * Logitech SoundMan Wave * MAD16 Pro (OPTi 82C928,82C929,82C930,82C924 晶片) * Media Vision Jazz16 * MediaTriX AudioTriX Pro * Microsoft Windows Sound System (MSS/WSS) * MiroSOUND PCM12 * Mozart (OAK OTI-601) * OPTi 82C931 * Orchid SW32 * Personal Sound System (PSS) * Pinnacle MultiSound * Pro Audio Spectrum 16 * Pro Audio Studio 16 * Pro Sonic 16 * Roland MPU-401 MIDI interface * S3 SonicVibes * SY-1816 * Sound Blaster 1.0 * Sound Blaster 2.0 * Sound Blaster 16 * Sound Blaster 16ASP * Sound Blaster 32 * Sound Blaster 64 * Sound Blaster AWE32 * Sound Blaster AWE64 * Sound Blaster PCI 128 * Sound Blaster Pro * Sound Blaster Vibra16 * Sound Blaster Vibra16X * TI TM4000M notebook * Terratec Base 1 * Terratec Base 64 * ThunderBoard * Turtle Beach Maui * Turtle Beach MultiSound Classic * Turtle Beach MultiSound Fiji * Turtle Beach MultiSound Hurricane * Turtle Beach MultiSound Monterey * Turtle Beach MultiSound Pinnacle * Turtle Beach MultiSound Tahiti * Turtle Beach WaveFront Maui * Turtle Beach WaveFront Tropez * Turtle Beach WaveFront Tropez+ * VIA chip set * VIDC 16-bit sound * Yamaha OPL2 音效晶片 * Yamaha OPL3 音效晶片 * Yamaha OPL3-SA1 音效晶片 * Yamaha OPL3-SA2 音效晶片 * Yamaha OPL3-SA3 音效晶片 * Yamaha OPL3-SAx 音效晶片 * Yamaha OPL4 音效晶片 对"相容"一词有些话先说在前: 虽然大多数音效卡号称相容於声霸卡, 但能 用Linux的声霸卡驱动程式的卡少之又少。 这些卡如果用 MSS/WSS 或 MAD16 驱 动程式通常会更好。 只有真正由 Creative Labs 做的声霸卡(用 Creative 的晶 片,如 SoundBlaster16 Vibra),或 MV Jazz16 及 ESS688/1688 的卡才能无问 题的用声霸卡驱动程式。 在所谓 "声霸卡相容的16位元 音效卡" 上用声霸卡驱 动程式只是浪费时间罢了。 Linux 核心也支援在音效卡上的 SCSI 介面(ProAudioSpectrum 16)及专属光碟机 介面 (如声霸卡 Pro)。 请看 Linux [21]SCSI HOWTO 及 [22]CDROM HOWTO 文件 以作更深入了解。 (译注: CDROM HOWTO 中文版在 [23]http://www.linux.org.tw/CLDP/CDROM-HOWTO.html) 在音效卡上常见的摇□介面,也有个核心可载入模组支援。 注意这里提到的SCSI,CD-ROM,摇□及音效驱动程式彼此是无关的。 3.2 选择性的音效驱动程式 Linux 核心的音效卡驱动程式最早是由 Hannu Savolainen 写的。 Hannu 後来继 续开发 Open Sound System,一个由 4Front Technologies 出售,支援多种 Unix 系统的商业版本音效驱动程式。 Red Hat Software 後来资助 Alan Cox 来 增强核心音效驱动程式,使它们完全模组化。 很多其他人也协助除错, 以及发 展新音效卡的额外驱动程式。 这些修改过的驱动程式由 Red Hat 在他们的 5.0 到 5.2 版发行套件中使用。 目前这些改变已经在 2.0 版整合进标准核心中。 Alan Cox 是现在标准核心音效驱动程式的维护人,虽然 Hannu 每隔些时候仍会 带进一些由商业版分割出来的程式码进来。 商业版本的 Open Sound System 驱动程式(由 4Front Technologies 发展)比较 起来容易设定,也支援较多的卡,特别是新的音效卡。 它也和对标准核心驱动程 式写的应用程式相容。 缺点是您要花钱,也不会得到原始码。 您可在决定要不 要买以前先下载免费试用版。 更详细的资讯可在4Front Technologies的网站 [24]http://www.opensound.com取得。 Jaroslav Kysela及其他人为Gravis UltraSound音效卡写了可选的驱动程式。 这 个计画後来改名为Advanced Linux Sound Architecture(先进 Linux 音效架构 ,ALSA),产生了一个他们认为更加一般可用, 且可用来取代核心中的音效驱动 程式。 ALSA 驱动程式支援许多常见的音效卡, 而且是全双工,全模组化,和现 存核心中的音效架构相容。 ALSA 计画的主要网站在 [25]http://www.alsa-project.org。 有个另外的 "Alsa-sound-mini-HOWTO", 里面主要是如何编译及安装这些驱动程式。 Markus Mummert ( [26]mum@mmk.e-technik.tu-muenchen.de写了给 Turtle Beach MultiSound(classic) ,Tahiti,及Monterey音效卡用的驱动程式,文件 中提到: "It is designed for high quality hard disk recording/playback without losing sync even on a busy system。 Other features such as wave synthesis,MIDI and digital signal processor (DSP) cannot be used。 Also,recording and playback at the same time is not possible。 It currently replaces VoxWare and was tested on several kernel versions ranging from 1.0.9 to 1.2.1。 Also,it is installable on UN*X SysV386R3.2 systems." (它是为高品质硬碟录放音设计,即使系统负载大,也不会掉音。 其它如波形 合成, MIDI 及数位信号处理器 (DSP) 则不能使用。 也不能同时录放音。 它目前可取代 VoxWare ,并在1.0.9到1.2.1版核心测试过。 它也可以装在 UN*X SysV386R3.2 系统上。) 可在 [27]http://www.cs.colorado.edu/~mccreary/tbeach找到。 Kim Burgaard ( [28]burgaard@daimi.aau.dk 写了给 MPU-401 MIDI 介面用的驱 动程式及公用程式。 Linux Software Map 给予如下的介绍: "A device driver for true Roland MPU-401 compatible MIDI interfaces (including Roland SCC-1 and RAP-10/ATW-10)。 Comes with a useful collection of utilities including a Standard MIDI File player and recorder. (一个给和 MPU-401完全相容的 MIDI 介面(包括 Roland SCC-1 及RAP-10/ATW-10) 用 的驱动程式。 也附带了好用的公用程式,包括标准的 MIDI 档播放器及录制程式。) Numerous improvements have been made since version 0.11a。 Among other things,the driver now features IRQ sharing policy and complies with the new kernel module interface。 Metronome functionality,possibility for synchronizing e.g。 graphics on a per beat basis without losing precision,advanced replay/record/overdub interface and much,much more." (从 0.11a 版起,又进行了多项改进。 其中包括了 IRQ 共用,还有可编译为 核心模组。 节拍器功能可达到每一拍都同步而不丧失准度,改良的重播/录音 及overdub(?) 介面及很多很多。) 可在 [29]ftp://metalab.unc.edu/pub/Linux/kernel/sound/mpu401-0.2.tar.gz 找到 。 音效卡在Linux下还有一个新奇用途 -- 当作业馀无线电的调变器。 2.1.x 版及 以後的核心包含了一个利用声霸卡及 Windows Sound System 相容卡来实作 1200 bps AFSK 及 9600 bps FSK 封包协定的驱动程式。 详情请见 Linux AX25 HOWTO。 (我(作者)也是个火腿族,代号 VE3ICH) 3.3 PC喇叭 另外还有一个不要额外硬体的驱动程式,它利用PC喇叭。 它和音效驱动程式软体 上大体相容,但可以想见的,它的音质差多了,CPU负担也高多了。 它产生的结 果视各别喇叭的特性而有很大差别。 请看内附的文件以更深的了解。 这个软体已有一段时间没有更新了,可在 [30]ftp://ftp.infomatik.hu-berlin.de/pub/os/linux/hu-sound/找到。 3.4 平行(印表机)埠 还有个选择,就是用平行埠加上一些东西做数位/类比转换。 它的音质比 PC 喇 叭好,但 CPU 负载仍嫌高。 前一小节提到的喇叭驱动程式有支援,它还包含了 制造所需硬体的说明。 4. 安装 要在Linux下支援音效,必须先进行以下步骤: 1. 安装音效卡 2. 设定随插即用(Plug and Play)(如果可以/需要的话) 3. 建造核心,使之支援音效 4. 建造设备档 5. 启动Linux核心,并测试 如果您使用 Red Hat Linux,里面有个公用程式叫 sndconfig, 在多数情形下能 自动侦测您的音效卡,并设定所需的设定档,载入所需的驱动程式。 如果您使用 Red Hat 我建议您试试它。 如果它成功了,本章後面的指示就可以跳过。 如果 sndconfig 失败了,或您使用别的发行套件, 或您想要经由手动设定更进 一步了解整个运作过程,底下将会详加解说每一步骤。 4.1 安装音效卡 按照说明书的指示,安装硬体,或是请厂商来装。 旧的音效卡通常有开关或跳线,以设定IRQ,DMA通道等,请把这些设定记下来。 如果您不确定要怎麽调,就照出厂值。 可能的话,避免和其它设备(如网路卡 ,SCSI卡, 平行及串列埠)相冲。 若您在DOS下有使用音效卡,通常应该设成和DOS下一样。 不过有些情况下(特别 是PnP的 卡)也可能要设成和DOS不一样的值。 这时可能要实验一下。 4.2 设定随插即用 现在多数音效卡用随插即用协定来设定 I/O 位址,中断及 DMA 通道号码。 如果 您使用的是设定值固定的或是有跳线调整的,那麽您可以跳过这一节。 在 2.2 版核心中,仍然还没有完全支援随插即用。 较好的解决之道是使用许多 Linux 发行套件中所附 isapnp 工具(或您也可以从 Red Hat 的网站 [31]http://www.redhat.com/下载)。 首先查看您的 Linux 安装套件中的文件。 它可能早帮您设定好随插即用了, 或 者可能和底下讲的略有不同。 如果您要手动设定,isapnp 工具的细节可以在 man page 中找到。 简单的说,您要经历的程序有: * 使用 pnpdump 来抓取所有您的随插即用设备的可能设定,把结果存成 /etc/isapnp.conf。 * 由其中选择和其它设备不相冲突的设定,并将在 /etc/isapnp.conf 中的相 对应行设成有效行(uncomment)。 别忘了把接近档尾的(ACT Y)前的注解符号 消掉。 * 确定开机时会执行到 isapnp,这通常由开机执行的命令稿之一完成。 重开 机或手动执行 isapnp。 如果为了一些理由您无法或不想使用 isapnp 工具,还有几种选择。 如果您在 Microsoft Windows 95 或 98,您可以利用装置管理员来设定卡,然後用 loadlin 暖开机进入 Linux。 确定 Linux 及 Windows 使用相同的设定参数。 如果您在 DOS 下使用这片卡,您可以用 SoundBlaster16 PnP 卡附的 icu 公用 程式,然後用 LOADLIN 暖开机进 Linux。 一样,确定 DOS 和 Linux 用一样的 设定。 有些音效卡驱动程式需要软体来初始化卡的随插即用功能。 请看卡的驱动程式的 说明文件得到更详细资讯。 4.3 设定核心 安装时您用的是预先编译过的核心,它们通常是不支援音效的。 所以最好自己编 译适合自 己用的核心。 而且,您也可能想要藉此来升级到更新版的核心,或是 缩小核心体积,增加 可用的记忆体。 然後,当您的音效卡能使用後,您可能想 重建核心, 把音效驱动程式做成模组。 在如何建造核心方面,您应该参考 [32]Linux Kernel HOWTO。 我在这里只提和 音效卡相关的部份。 (译注: 中文版在 [33]http://www.linux.org.tw/CLDP/Kernel-HOWTO.html 如果您还没有编译核心,加入音效支援的经验,先读一下核心驱动程式里的相关 文件 (特别是关於您的音效卡的部份)是个不错的主意。 这些档案可以在核心文 件目录中找到,通常在 /usr/src/linux/Documentation/sound。 如果没有这个 目录, 您可能还在使用非常旧的核心,或是根本没装核心原始码。 照一般造核心的程序来就好。 目前设定核心有三种介面可选择。 用 "make xconfig " 可叫出在X11下的图形设定介面; 用 "make menuconfig" 则是文字 模 式的选单介面; 最原始的方法,则是用 "make config",提供了简单的文 字问答 介面。 当设定核心时,在选择您的音效卡及驱动程式选项时会有很多选择。 在设定工具 中的线上求助应该可以为您解释每一个选项是什麽。 依照您所知的, 选择最适 当的选项。 在设定完所有选项後,您应该照 Kernel HOWTO 来重新编译并安装核心。 4.4 建立设备档 为了正常的操作,必须为各音效设备建立设备档。 正常状况下在您装 Linux 时 就已经 建好了,可以用下列的命令快速检查一下。 如果输出结果和下面很像(日 期不一样 没关系),那麽设备档差不多是设定正确了。 % ls -l /dev/sndstat crw-rw-rw- 1 root root 14, 6 Apr 25 1995 /dev/sndstat 注意有了正确的设备档并不保证一切完美了。 在设备能用以前,还是要先载入或 加进 核心驱动程式(稍後再详述)。 在极少数情况,如果您确信设备档设错,您可以重建它们。 多数 Linux 发行套 件有有个 /dev/MAKEDEV 命令稿可以用来做这事。 4.5 起动Linux及测试 您至此应该可以准备起动新核心,测试驱动程式了。 照著您平时安装及重启动新 核心的步 骤去做(当然,保留一份旧核心以防万一)。 在起动中,检查一下有没有类似以下的讯息:(如果讯息卷动太快,您可以 用dmesg 命令回过来查看。) Sound initialization started at 0x220 irq 5 dma 1,5 at 0x330 irq 5 dma 0 at 0x388 Sound initialization complete 这应该和您的音效卡及跳线设定(如果有的话)一致。 如果您用可载入模组,以上讯息就不会显示出来(除非您载入它时,用 insmod sound trace_init=1) 当音效驱动程式载入核心中时,应该会显示Sound initialization started 及Sound initialization complete讯息。 如果没有,表示音效驱 动程式没有载 入,这时您应该检查一下目前起动的核心有没有加入音效驱动程式支援。 如果在Sound initialization started及 Sound initialization complete间没 有印出什麽东西, 那表示没有侦测到音效设备。 这最可能的原因是您没有使用 正确的驱动程式,卡没被支援,I/O位址不对或您用了还没有设定过的 PnP 卡。 驱动程式起动中亦可能印出错误及警告讯息。 在设定完驱动程式後,重启动时, 注意这 些讯息。 再来是检查/dev/sndstat设备档。 读取这个状态档可以得知额外的资讯, 或是 音效卡驱动程式是不是正确启动了。 输出□例如下: % cat /dev/sndstat Sound Driver:3.5.4-960630 (Sat Jan 4 23:56:57 EST 1997 root, Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586) Kernel: Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586 Config options: 0 Installed drivers: Type 1: OPL-2/OPL-3 FM Type 2: Sound Blaster Type 7: SB MPU-401 Card config: Sound Blaster at 0x220 irq 5 drq 1,5 SB MPU-401 at 0x330 irq 5 drq 0 OPL-2/OPL-3 FM at 0x388 drq 0 Audio devices: 0: Sound Blaster 16 (4.13) Synth devices: 0: Yamaha OPL-3 Midi devices: 0: Sound Blaster 16 Timers: 0: System clock Mixers: 0: Sound Blaster 以上的命令也可能回报错误讯息。 "No such file or directory" 表示您还 没 建设备档(参考4.3节)。 "No such device" 表示音效程式没有载入,或没 有连 结进核心里。 请回到 4.2 节以修正之。 如果 /dev/sndstat 档中,在"Card config:"段的几行写在括号里 (就像" (SoundBlaster at 0x220 irq 5 drq 1,5)"),它表示设备已经设定了,但是没有 侦 测到。 现在您应该可以试试放简单的音效档了。 抓□例音效档,把它丢到设备档来检查 。 % cat endoftheworld >/dev/dsp % cat crash.au >/dev/audio (确定您没有省略掉大於符号) 注意,在平时用cat不是放音效档的贴切方法,这只是为了检查罢了。 去抓合适 的放音程式(後面详述)可以做得更好。 只有在 /dev/sndstat 内的 audio devices 这段至少列出一个设备的情形下, 以上命令才会有效。 如果这段没列出任何东西,您应该检查一下为何设备没侦测 到。 如果以上命令回报"I/O error",您可以用 "dmesg"命令检查 核心讯息的尾部, 在那很可能会有印出错误讯息,而且经常是 "Sound: DMA (output) timed out - IRQ/DRQ config error?"。 这个讯息是指驱动程式没有从音效卡得到应 该发 生的中断。 最有可能的原因是,IRQ 和 DMA 的设定没有作用。 解决这问题的最 好方法就是土法炼钢,把所有这张卡能设到的 DMA 和 IRQ 搭配都试试看。 另一种可能原因是驱动程式和卡不相容。 这几乎一定是所谓 "声霸卡(Pro/16)相 容卡 " 和声霸卡驱动程式搭不起来。 这种状况下您要找出和您的卡能搭配的驱 动程式才 行。(例如,可以投书到comp.os.linux.hardware讨论区问问) 一些音效□例档可在 [34]ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z 抓 到。 现在您可以试试录音了。 如果您的卡有录音能力,您可以用以下命令来快速测试 一下: # 从麦克风录进 4 秒声音 EDT% dd bs=8k count=4 < /dev/audio >sample.au 4+0 records in 4+0 records out # 把刚刚录的放出来 % cat sample.au > /dev/audio 显然您必需要有连接音效卡的麦克风,还要对著它讲话,才能试出有没有效。 您 也许也需 要弄到一个混音程式,设定麦克风为输入装置,并设定其录音的增益。 如果以上测试都通过了,您就有理由相信音效D/A及A/D硬体和软体都很正常。 如 果您碰到 问题,参考下一小节。 4.6 问题与解决 如果您进行了以上部骤,仍然有问题,那麽可以检查几个地方。 这些检查由简单 到复杂 依序排列,如果检查出问题,先解决,再进行下一道检查。 第一步: 确定您用您自己编译的核心起动。 您可以用核心的日期戳记来识别是不是您编译的那个有支援音效的核心。 您可以 用 uname命令来作: % uname -a Linux fizzbin 2.2.4 #1 Tue Mar 23 11:23:21 EST 1999 i586 unknown 或显示/proc/version档内容: % cat /proc/version Linux version 2.2.4 (root@fizzbin) (gcc version 2.7.2.3) #1 Tue Mar 23 11:23:21 EST 1999 如果日期戳记不是您编译核心的时间,那您用了旧的核心。 您真的重开机了吗? 如果您用 LILO,是不是有重装呢(平常用lilo)? 如果是软碟起动,您真的 做了 新开机片,并用它开机吗? 第二步: 确定核心音效驱动程式有编进去。 最简单的方法就是前面提过的,检查 "/dev/sndstat"的输出。 如果有地方不对 , 那麽核心设定或建立一定有问题。 再重新设定及建立,安装新核心的程序。 第三步: 核心起动时有侦测到您的音效卡吗? 确定核心启动时您的卡有被侦测到。 您应该看过开机讯息了,如果它卷得过快, 您通常可 用 dmesg 命令叫回来: % dmesg 或 % tail /var/adm/messages 如果您的卡没侦测到,就是某一处出问题。 确定那张卡真的装了。 如果那张卡 在DOS下工 作得很好,那您就有理由相信硬体是正常的。 不是您把音效卡设错型 式,下错参数,就是 您的音效卡和核心音效驱动程式不相容。 一种可能就是需要特殊DOS驱动程式来驱动的"相容"卡。 试著起动 DOS,载入 厂 商给的驱动程式,然後按Control-Alt-Delete暖开机进Linux。 确定卡的I/O位 址,DMA及IRQ设定都和DOS一样。 读在音效驱动程式原始码中的 Readme.cards 档以得到关於设定您的这型卡的提示讯息。 如果您的卡并没有在本文件中列出,可能是Linux驱动程式没支援的关系。 您可 以参考本文 末的参考文献来求助。 第四步: 您能从dsp设备读出资料吗? 试试用前面提过的 dd 命令读取 /dev/audio。 这个命令应该不会有错误才对。 如果不行,那可能是 IRQ/DMA 冲到,或某种硬体不相容(设备不为 Linux 支援, 或用错驱 动程式)。 还有一个少见的可能是不良的硬体。 可能的话,在DOS下测试一下,消去这种可 能性。 要是这些都没用呢? 如果您还是有问题,这里提供最後几招试试: * 小心重读这份HOWTO文件 * 读本文件後列的参考文献,及相关的核心原始码中的文件。 * 到 comp.os.linux 或其它Usenet讨论区 (comp.os.linux.hardware 是个好 地方; 因为这儿灌水量多, 最好在标题栏注明 "sound",这样适合的专家才 会找到它。) * 用Web/Usenet搜寻引擎,加上有智慧的搜寻条件,很快就能找到很好的结果 。 一个好选择是 [35]http://www.altavista.digital.com。 * 用最新的Linux核心。(但是只在最後关头才用,最新的发展用核心可能很不 稳) * 发封信给音效驱动程式作者 * 发封信给Sound HOWTO的作者 * 叫出emacs,输入Esc-x doctor :-) (译注: 当然最後一项是开玩笑的) 5. 支援音效的应用软体 如果您在Linux下能用音效卡, 我在这里提出一些您可能会想要的应用软体。 您 可以查一下 Linux Software Map,网际网路档案库,或是您的Linux CD-ROM 以 找出最新资讯。 您最少会想要以下的音效软体: * 音效档档案格式转换软体 (如 Sox) * 混音程式 (如 aumix 或 xmix) * 音效档播放软体 (如 play 或 wavplay) * MOD 档案播放软体 (如 tracker) * MIDI 档案播放软体 (如 playmidi) 这类工具有文字型式的,也有GUI型式的。 也有一些比较奇异一点的应用 (像语 音分析及辨识),您可能会想玩玩看。 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 第壹原生(raw)MIDI埠 /dev/midi01 第贰原生MIDI埠 /dev/midi02 第参原生MIDI埠 /dev/midi03 第肆原生MIDI埠 /dev/sndstat 读取时,显示音效驱动程式的状态(/proc/sound 也是一样的) PC喇叭驱动程式提供以下设备: /dev/pcaudio 和 /dev/audio 同样 /dev/pcsp 和 /dev/dsp 一样 /dev/pcmixer 和 /dev/mixer 一样 6.2 怎样播放音效档案? Sun 工作站的音效档(.au)可以丢到 /dev/audio 来放出, 原始取样档可以丢到 /dev/dsp,虽然这样一般来说会产生很差的输出。 使用像 play 这样的程式比较 好,而且还能辨别音效档格式, 设定正确的取样率等。 使用像 wavplay 或 vplay (在 snd-util 套件中)的程式播放 WAV 档是最好的了 , 然而它们无法辨识 Microsoft ADPCM压缩过的 WAV 档。 同时,旧版的 play (在 Lsox 套件中)对 16 位元的 WAV 档处理得并不好。 在 snd-util 中的 splay 命令如果以手动输入适切的参数,可以用来播放多数音 效档。 6.3 怎样录制音效档? 可以从 /dev/audio 或 /dev/dsp 中读取取样过的资料, 可以转向到档案去。 像 vrec 这样的程式可以较简单地控制取样率及时间等。 您也需要混音器,以便 选择想要的输入来源。 6.4 我可以有不只一片音效卡吗? 现在的音效驱动程式允许您装好几片声霸卡,声霸卡 Pro,声霸卡 16,MPU-401 或 MSS 卡。 装两片声霸卡是可能的,不过要手动编辑 local.h, 定 义SB2_BASE,SB2_IRQ,SB2_DMA 及 SB2_DMA2(有些情形下才要)。 也可以同时装 一片声霸卡及一片 PAS16。 若是您用make config来设定较新的2.0.x版核心的音效的话,您应该编 辑/usr/include/linux/autoconf.h而非local.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) 以下驱动程式不准您装多片卡: * GUS (驱动程式限制) * MAD16 (硬体限制) * AudioTrix Pro (硬体限制) * CS4232 (硬体限制) 6.5 音效设备发生错误: No such file or directory 您要先建立设备档。 请参见前面建立设备档的部份。 如果您确实有设备档, 检 查主编号及次编号是否正确。 (一些旧一点的 CD-ROM Linux 安装套件可能不会 在安装时建立正确的设备档) 6.6 音效设备发生错误: No such device 您的核心并不支援音效驱动程式,或是I/O位址设定和硬体不一致。 检查您是否 用新造的 核心开机,并确认其设定和硬体是一致的。 6.7 音效设备发生错误: No space left on device 如果您没有建立必要的设备档,就把资料丢进 /dev/audio 或 /dev/dsp,就会发 生这种情况。 这时这些"设备档"其实只是普通档案, 而且把您的磁碟塞满了。 您必须照本文件中建立设备档 这一小节的指引去执行那个命令稿。 在 Linux 2.0 或之後,当设备开启,系统却没有足够的 RAM 时亦会发生。 对每 个 DMA 通道,音效驱动程式至少需要两页 (8K) 连续记忆体区块。 这种情型在 不足 16M 的 RAM 或已经启动很久的系统上可能发生。 在再开启设备档以前,也 许可以先编译及执行以下的 C 程式,以空出一些 RAM 出来。 main() { int i; char mem[500000]; for (i = 0; i < 500000; i++) mem[i] = 0; exit(0); } 6.8 音效设备发生错误: Device busy 一个音效设备一次只能给一个程序用。 在这问题中, 最可能的情形就是有别的 程序正在使用这个设备。 确定的方法之一是用 fuser 命令: % fuser -v /dev/dsp /dev/dsp: USER PID ACCESS COMMAND tranter 265 f.... tracker 在上例中,fuser 命令显示 265 号程序开启了该设备。 可以选择等它完成或把 它砍掉,这样音效设备就又能使用了。 您应该以 root 身份执行 fuser 命令, 这样才会列出除了您以外的使用者。 6.9 还是逃不了'device busy'的错误! 根据 Brian Gough 的说法,使用一号 DMA 通道的声霸卡会和同样也占用 DMA 1 的 QIC-02 磁带机驱动程式相冲,造成 "device busy" 错误。 如果您使 用FTAPE, 您可能有加进这个磁带的驱动程式。 根据 FTAPE-HOWTO,QIC-02 驱 动程式在使用 FTAPE 时不是必要的; 只有 QIC-117 才必要。 重造核心,使用 QIC-117 驱动程式, 取消 QIC-02,这样 FTAPE 及音效驱动程式就能共存了。 6.10 音效档放到一半就停了 这种症状,通常是先播放一秒左右,然後完全停止,或印出 "missing IRQ" 或 "DMA timeout" 讯息。 八成是您的 IRQ 或 DMA 设错了。 核对一下,您在核心 中 的设定是不是和硬体跳线的一样,而且并没有和别的卡相冲。 另一种症状是声音一直重覆。 这通常导因於 IRQ 冲突。 6.11 播放 MOD 档断断续续 要播放MOD档,需要可观的 CPU 能力。 您可能跑太多程式导致系统反应过慢,无 法及时放音。 有下面几种解法: * 用较低的取样率,或只放单声道 * 把其它执行中程式干掉 * 买更快的电脑 * 买更强的音效卡(像 Gravis UltraSound) 如果您有用 Gravis UltraSound 音效卡,您应该使用专为 GUS 设计的 MOD 播放 程式 (如 gmod) 6.12 编译音效软体时出错 1.0c版以後和以前的音效驱动程式用完全不同且不相容的 ioctl() 方式。 抓新 版的原始码,或做必要改变,把它移植到适合新版驱动程式用。 详见音效驱动程 式的 Readme 档。 也请确定编译应用程式时,您使用最新的 soundcard.h 及 ultrasound.h。 请见 本文开头处里的安装指引。 6.13 以前跑很好的软体,却出现 SEGV 错误 这和上个问题可能是一样的。 6.14 音效驱动程式有何已知的限制及 bug? 请看核心音效驱动程式里的档案。 6.15 关於音效驱动程式的 ioctl 等,哪里有记载? 目前除原始码以外最佳的文件在 4Front Technologies 的网站 [36]http://www.opensound.com。 另一个来源是 Linux Multimedia Guide,在 参考文献那一章有详述。 6.16 要完全平顺地录放音,需要多强的CPU才能办到? 这问题不好回答,它取决於: * 使用 PCM 取样还是 FM 合成 * 取样率及样本大小 * 用哪个程式录放音 * 音效卡硬体 * 磁碟传输速率,CPU 时脉频率,快取大小等 一般来说,任何 386 以上机器应该都可以在 8 位元音效卡上播放音效,或用 FM 合成放音乐。 然而,放 MOD 档需要可观的 CPU 资源。 一些实验性的测量显示,要以 44KHz 播放, 要消耗一颗 486/50 CPU 的 40% 能力; 386/25 几乎不可能放比 22KHz 更高的取样率。 (以8位元音效卡,如声霸卡,所测得) 一些像 Gravis UltraSound 的卡硬体提供更多功能, 需要的CPU资源就较少。 这些是假设电脑没有在跑其它耗CPU能力的工作。 如果您的电脑有数学辅助处理器 (或 CPU 内部有 FPU), 用像 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 位元 ,44KHz 立体声录音,一面将档案存到挂在 1542 上的硬碟的话,麻烦就来了。 两组 DMA 会吃同一块记忆体,导致 RAM 没有时间充电,然後就会出现致命的 "PARITY ERROR - SYSTEM HALTED" 的讯息,您甚至还来不及知道怎麽当的。 更 糟糕的是有些 QIC-117 磁带的协力厂商建议设定汇流排开/关时间, 使 1542 占 汇流排更久。 从 Adaptec 的 BBS 或 Internet 的其它地方抓 SCSISEL.EXE 程 式,减少 BUS ON 时间或增加 BUS OFF 时间,直到这问题完全消失。 SCSISEL 会改变 EEPROM 的设定,所以比在 CONFIG.SYS 中载入的 DOS 驱动程式效力更 持久,开机就直接进 Linux 也有效(不像 DOS 修补程式)。 又解决了一个问题。 最後一个问题 - 旧的 Symphony 晶片组剧烈地降低 I/O 周期时间,加快汇流排 存取。 我所玩过的各种卡中,除了 PAS-16 以外,没有一片卡在降低周期时有出 现过 任何问题。 Media Vision 的 BBS 有个 SYMPFIX.EXE 可以将 Symphony 的 汇流排控制器的诊断位元互调,治好这种症状,但这并不能算有力的保证。 您也 许要: * 找主机板经销商,换掉旧版的晶片 * 换主机板,或 * 买别牌的音效卡。 Young Microsystems 愿意以 $30(美金)的代价为他们制的板子升级; 如果您能讲 出谁制的或谁进口的板子,别的厂商也可能会这样(祝您好运)。 据我所知这问题 出於 ProAudio 的汇流排介面晶片; 没有人会花 $120 买音效卡,然後把它插在 6MHz 的 AT 上。 多数人会升级到 25-40MHz 的 386/486,而如果设计正确, 至 少能承受 12MHz 以上的汇流排频率。 讲完了,下台一鞠躬。 第一个问题和您的主机板晶片组,汇流排速率,及其它 BIOS 设定,还有月亮的 圆缺有关。 (?) 第二个问题牵涉到您的记忆体充电方式 (隐藏式或同步式) ,1542 DMA 频率及汇流排 I/O 速率(可能有关)。 第三个问题,可以打电话到 Media Vision,问他们哪些 Symphony 晶片组的慢速设计和他们的卡不相容。 在 此警告一下, 我问过的四位"工程师"中,就有三个头壳坏去。 听他们讲别人的 硬体讲得啥一样, 其实他们甚至连自己的都搞不清楚。 译注: 这一段可能和原文意思差很多,有建议请不吝提供。 6.18 可不可以同时录放音? 一些卡的驱动程式能支援这功能。 请看在 4Front Technologies 的网站中的文 件, 了姐如何用它。 6.19 我的声霸卡 16 是设 IRQ 2,可是驱动程式不准我设这个值 在 '286 及以後的机器,IRQ2 中断连接了第二个中断控制器。 它等同於IRQ 9。 6.20 我离开 Linux,起动 DOS,然後有些软体发声不正常 这在暖开机进 DOS 後发生。 有时错误讯息会误导您,以为是 CONFIG.SYS 档哪 里写错了。 多数现在的音效卡有软体设定的 IRQ 及 DMA 设定。 如果您的卡在 Linux 下及 MSDOS/Windows 下设定值不一样的话,可能会造成问题。 有些音效卡不准设新参 数, 除非完全 reset。 (如把电源关掉再打开,或使用硬体上的reset钮) 简单对付方法就是按下reset键,或把开关关了再开,不要用暖开机(即 Ctrl-Alt-Del)。 正解则是确保您在MS-DOS及Linux下都用同样的IRQ及DMA设定 (或乾脆不要用DOS :-)。 6.21 在 Linux 下跑 DOOM 出问题 想玩 ID software 出的 DOOM 游戏之 Linux 版的玩家们, 可能对这个有兴趣。 要正确的音效输出,您必需使用 2.90 版或以後的音效驱动程式; 它支援了即时 的 DOOM模式。 音效样本是16 bit。 如果您用8 bit音效卡,您仍然可以用一些可在 [37]ftp://metalab.unc.edu/pub/Linux/games/doom中找到的一些程式,让声音 出现。 如果DOOM动作不流畅,把音效取消(把 sndserver 档改名)会有一些改进。 DOOM 预设不支援音乐(不像 DOS 版)。 musserver 程式将增加Linux下的 音乐支 援。 它可以在 [38]ftp://pandora.st.hmc.edu/pub/linux/musserver.tgz 中找 到。 6.22 怎样降低音效卡产生的杂音? 用高品质的屏蔽电缆,换个插槽插,可能有助於减低杂音。 如果音效卡有音量调 整钮,您可以试试不同的设定(最大声可能最好)。 您可以用混音程式,将不想要 的输入(如麦克风)调成零增益。 Philipp Braunbeck 报告他的 ESS-1868 音效卡上有个跳线用来关闭内建增益器 的, 如果装上,能帮助降低杂音。 在一台 386 电脑上,我发现核心命令列有个选项no-hlt可以降低杂讯。 这个选 项叫核心在跑□置回圈时不要用 HLT 指令。 您可以开机时手动试试, 或在 LILO 设定档中加上append="no-hlt" 有些音效卡偷工减料,没有好的遮蔽及接地,容易产生杂音 6.23 能放音,不能录音 如果您能放音,却不能录音,试试: * 使用混音程式选择适当来源(如麦克风) * 使用混音程式将该来源的增益调到最大 * 可以的话,在MS-DOS下测试,看看是不是硬体方面的问题 有时录音及放音用的 DMA 通道是不同的。 这种情况下八成是录音用 DMA 设定不 对。 6.24 必须先进 DOS 跑驱动程式,不然我的"相容卡"没法用 多数情况下,"声霸卡相容" 卡在 Linux 下若舍声霸卡驱动程式不用而改用 别的 驱动程式,会更好。 多数号称相容(如 "16 位元 SB Pro 相容" 或 SB 相容的 "16位元")的卡,它的声霸卡相容模式是提供 DOS 游戏的相容性所做的。 多数卡 自己的 16 位元模式可能在最近的 Linux(2.0.1以後) 会支援。 只有一些(通常很旧)的卡必须尝试用声霸卡模式运作。 新卡中只有一个例外,那 就是用 Mwave为主的卡。 6.25 我的 16 位元声霸卡相容卡在 Linux 下只能用 8 位元模式 号称和声霸卡相容的 16 位元音效卡其实只和 8 位元的声霸卡 Pro 相容而已。 它们有和声霸卡 16 不相容的 16 位元模式,和 Linux 音效驱动程式不相容。 也许改用 MAD16 或 MSS/WSS 驱动程式後,您就能用 16 位元模式了。 6.26 在哪里找得到 Linux 的音效应用软体? 这里有一些好的档案库,可以搜寻 Linux 专用的音效应用软体: * [39]ftp://metalab.unc.edu/pub/Linux/kernel/sound/ * [40]ftp://metalab.unc.edu/pub/Linux/apps/sound/ * [41]ftp://tsx-11.mit.edu/pub/linux/packages/sound/ * [42]ftp://nic.funet.fi/pub/OS/Linux/util/sound/ * [43]ftp://nic.funet.fi/pub/OS/Linux/xtra/snd-kit/ * [44]ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound/ 6.27 音效驱动程式可不可以编译成可载入模组? 最新的核心里的音效驱动程式可以做成可载入模组。 详情请参考在 /usr/src/linux/Documentation/sound 里的档案, 尤其是 Introduction 及 README.modules。 6.28 我能把主控台的哔哔声改用音效卡发出吗? 试试oplbeep程式,可在 [45]ftp://metalab.unc.edu/pub/Linux/apps/sound/oplbeep-2.3.tar.gz 中找 到。 另一个变种,叫 beep 程式,可在 [46]ftp://metalab.unc.edu/pub/Linux/kernel/patches/misc/modreq_beep.tg z 中找到。 modutils 套件有个□例程式及核心修补,支援在核心要求时, 执行外部程式, 产生声音。 另外在一些音效卡上,您可以将PC喇叭输出到音效卡上,这样所有声音就都由音 效卡 发出来了。 6.29 VoxWare是什麽? 由 4Front Technologies 出售的商业版音效驱动程式以前有像VoxWare, USS(Unix Sound System),甚至TASD(暂且无名的音效驱动程式) 之类名称。 现 在这个驱动程式的市场上叫 OSS(Open Sound System)。 在 Linux 核心中包含的 有时叫做OSS/Free。 要更多资讯,请上 4Front Technologies 网站 (在 [47]http://www.opensound.com/)。 我在 [48]Linux Journal 1997 年六月号有 写一篇 对 OSS/Linux 的评论文章。 6.30 Sox/Play/Vplay 回报 "invalid block size 1024" 在 1.3.67 版核心中的改变(错误的)使检查 SNDCTL_DSP_GETBLKSIZE ioctl 是否 传回大於 4096 的放音软体失效。 最新的驱动程式已修正,避免配置小於 4096 bytes 的碎块,解决了旧公用程式的问题。 6.31 我载入音效驱动程式模组後,混音设定就被重设了 您可以将音效驱动程式做成可载入模组,并使用 kerneld 自动载入及除去。 然 而这造成了一个问题 - 当模组重新载入时,混音器 设定又回归预定的值。 对有 些音效卡来说,这会太大声(如声霸卡16)或太小声。 Markus Gutschke (gutschk@uni-muenster.de)发现了这问题的解决之道,在您的 /etc/conf.modules 档中加入如下的一行: options sound dma_buffsize=65536 && /usr/bin/setmixer igain 0 ogain 0 vol 75 这会在音效驱动程式载入後立刻执行您的混音程式(在□例中是用 setmixer )。 dma_buffsize 参数没有意义,但是是必需的,因为这个命令 需要一些命令列的 选项。 把上面那行改成您想要的混音及增益设定值。 如果您将音效驱动程式连进核心,而想在开机後就自动设定音量,您可以在开机 自动执行 档/etc/rc.d/rc.local中将混音程式加进去。 6.32 只有 root 能录音 在 Readme.linux 中的命令稿预设会将音效设备档设成仅有 root 可读, 这是为 了填补安全上的漏洞。 在网路环境里, 外面的使用者可以远端连进有音效卡及 麦克风的Linux系统并窃听。 如果您不担心这个,您可以改变这个命令稿中的权 限。 在预设的安装法,一般使用者仍然可以播放音效档。 这不会造成安全上的风险, 反而可以省掉很多麻烦。 6.33 在IBM ThinkPad上的音效硬体可以支援吗? 关於如何在 Linux 下使用 IBM ThinkPad 上的 mwave 音效卡之资讯,可在 /usr/src/linux/Documentation/sound/mwave档中找到, 它也是核心原始码的一 部份。 6.34 因为我的音效卡没有混音器,所以应用程式不让我用 一些旧的 8 位元声霸卡没有混音器电路。 有些音效应用程式要求要能开启混音 器设备, 在这些卡上就会失效。 Jens Werner ( [49]werner@bert.emv.ing.tu-bs.de 报告了一个解法,把 /dev/mixer 连到 /dev/null後, 一切应该都很好了。 6.35 SB16 CT4170 的问题 以下由 Scott Manley( [50]spm@star.arm.ac.uk)提供: 看起来有一种新的声霸卡 -- 它以 SB16 的名义卖给我们,该卡的型式是 CT4170。 这玩意只有一组 DMA 通道,所以当您试著设定它时,核心存取 16 位元 DMA 会有麻烦。 解决之道是把第二组 DMA 设成 1,这样这张卡就和广 告上讲的相符了。 6.36 怎样将 MIDI keyboard 连接到音效卡上? 以下由 Kim G。 S。 OEyhus ( [51]kim@pvv.ntnu.no)提供: 我到网际网路上以及音效卡文件到处搜寻关於如何把主 keyboard 的 MIDI output 连接到音效卡的 MIDI input 这麽简单的事的方法,结果我什麽都没 找到。 问题是它们都使用同一设备,/dev/midi,至少在 OSS 音效系统上是 如此。 所以我找到了一种方法,希望和大家分享。 这样就造出了一个简单的 合成器,并有完整 MIDI 支援: 用 MIDI 直接将 MIDI 主 KEYBOARD 连接到音效卡 MIDI 主 keyboard 是一个没有合成器的 keyboard,上面只有一个 MIDI out 插座。 这可以透过适当的连接线连上音效卡上的 15 pin D-SUB 连接埠。 这个 keyboard 可以用来控制音效卡上的合成设备,做出了一个简单用 keyboard 控制的合成器。 之後再编译以下程式,如用 'gcc -o prog prog.c' 并执行它: #include main() { int fil,a; char b[256]; fil=open("/dev/midi",O_RDWR); for(;;) { a=read(fil,b,256); write(fil,b,a); } } 6.37 IRQ 15 以及 Ensoniq PCI 128 之间的问题 以下由 Matthew Inger ( [52]mattinger@mindless.com) 提供: 如何让 Ensoniq PCI 128 可用的资讯。 这展现的问题是它预设值是用 IRQ 15。(这点 Plug and Pray 得负起责任)。 这个中断也是第二组 IDE 控制器用到的,而且不能和其它设备共享。 您必须 强迫 es1370 使用其它中断(就像在 Windows 下可以用 IRQ 11 一样)。 信不信由你,我自行找到了这问题的解决之道。 我所做的事: a) 在 BIOS 中,您必须告知电脑您没有 随插即用 OS,我相信这在我的 BIOS 中的 advanced options 里。 b) 在 BIOS 中的 PCI 设定,要电脑保留中断 15 给 ISA设备。 在我的 BIOS,在 Advanced Options 中,有一部份是设定 PCI 的,在那里可以排除 一些资源不让 PCI 用,就在那里设定。 当您重开机进 Linux 後您就能听到声音了。 (我不记得它是不是照常显示开 机讯息了) 为安全起见,我再执行一遍 sndconfig,它会放出测试音效,听起 来不怎麽样, 但它发出声音了。 然而我放 CD 时,听起来真是棒极了。 Windows 那边就甭担心了,我试了两张卡,一张是 ISA Modem,另一张是音效 卡, 两个都运行无碍。 您的 BIOS 和我的可能不同,不过您只要搞清楚前面讲的两个设定在哪就好。 祝好运。 6.38 我在哪儿可以抓到可自由散布的 MIDI patch,来给 SoftOSS 使用? SoftOSS 是和 Gravis UltraSound 卡相容, 包含在核心音效驱动程式的软体波 形表合成器(也可以说是软体音源)。 要使用这个驱动程式,需要 GUS 相容的 MIDI patch 档。 文件上的说法是 "public domain MIDIA patchset available from several ftp sites" (公开的 MIDIA patch 集可在几个 ftp 站找到) 如同 4Front Technologies 网站上说的( [53]http://www.opensound.com/softoss.html),它们可在 [54]ftp://archive.cs.umbc.edu/pub/midia/instruments.tar.gz 下载。 7. 参考文献 如果您有片支援 CD-ROM 或 SCSI 介面的音效卡,参阅 [55]SCSI HOWTO 以及 Linux [56]CD-ROM HOWTO 可能可以给您更多有用的资讯。 (译注: CDROM HOWTO 中文版在 [57]http://www.linux.org.tw/CLDP/CDROM-HOWTO.html) [58]Sound Playing HOWTO 则对如何在Linux下播放各种不同的音效及音乐档有所 介绍。 (译注: 中文版在 [59]http://www.linux.org.tw/CLDP/Sound-Playing-HOWTO.html) [60]Linux SoundBlaster AWE32/64 Mini-HOWTO描述如何在 Linux 下使用声霸卡 32 或 64。 (译注: 中文版在 [61]http://www.linux.org.tw/CLDP/mini/Soundblaster-AWE.html) 程式设计资讯可由 4Front Technologies 网站 [62]http://www.opensound.com/pguide取得。 以下的FAQ定期张贴於Usenet讨论区 [63]news.announce 以及档案库 [64]ftp://rtfm.mit.edu/pub/usenet/news.answers中: * PCsoundcards/generic-faq (Generic PC Soundcard FAQ) * PCsoundcards/soundcard-faq (comp.sys.ibm.pc.soundcard FAQ) * PCsoundcards/gravis-ultrasound/faq (Gravis UltraSound FAQ) * audio-fmts/part1 (Audio file format descriptions) * audio-fmts/part2 (Audio file format descriptions) 这些FAQ也列出一些和产品相关的通信论坛及档案库。 以下的Usenet讨论区主要 讨论音效及 音乐相关的题材: * [65]alt.binaries.sounds.* (张贴音效档,很多群组) * [66]alt.binaries.multimedia (张贴多媒体档案用) * [67]alt.sb.programmer (和声霸卡程式设计有关) * [68]comp.multimedia (多媒体专题) * [69]comp.music (电脑音乐理论及研究) * [70]comp.sys.ibm.pc.soundcard.* (各种IBM PC音效卡的群组) 在 [71]http://viswiz.gmd.de/MultimediaInfo/有个多媒体 专门站台。 Creative Labs 的网站则在 [72]http://www.creaf.com/。 MediaTrix 的网站在 [73]http://www.mediatrix.com/ Linux通信论坛有许多关於不同主题(包括音效)的频道。 想知道如何参加, 寄一 封内容为 "help" 的信到 [74]majordomo@vger.rutgers.edu。 最好不要用它来 问如何设定音效卡这类问题, 它们是为开发者讨论用的。 前面提过好几次了,音效驱动程式包含很多Readme档, 里面有很多和驱动程式相 关的资讯。 它们常常放在 /usr/src/linux/drivers/sound目录里。 在4Front Technologies网站 [75]http://www.opensound.com/ 上,可以看到 Linux 及其它 Unix 相容作业系统用的商业版音效驱动程式OSS的资讯。 Linux Software Map是搜索Linux软体的极佳参考。 用关键字像 sound 搜寻 LSM 是识别关於音效硬体的应用程式之好办法。 LSM 可在很多匿名档案库,包括 [76]ftp://metalab.unc.edu/pub/Linux/docs/LSM/(先前名为 sunsite) 中找到 。 也有些网站维护 Linux 应用程式的资料库, [77]http://www.freshmeat.net 是其中之一。 Linux 文件计画(LDP)制作了好几本 Linux 的书,包括 Linux Installation and Getting Started。 这些可从主要的 Linux FTP 档案库免费取得,或是花钱 买硬拷贝型式的文件。 最後呢,虽然有些老王卖瓜之嫌,不过还是容我在此打打小广告: 如果您想学学 更多关於在 Linux 下的多媒体 (特别是关於 CD-ROM 及音效卡应用及程式设计 的),到书店找找我编著的 Linux Multimedia Guide,ISBN 1-56592-219-0,由 O'Reilly and Associates 公司出版。 除了原始的英文版外, 法文版和日文版 也正付印中。 若在北美洲,请电 800-998-9938。 或是光顾以下站台: [78]http://www.ora.com/catalog/multilinux/noframes.html 或本人的网址 [79]http://www.pobox.com/~tranter/ References 1. mailto:jeff_tranter@pobox.com 2. mailto:yorkwu@ms4.hinet.net 3. mailto:hannu@voxware.pp.fi 4. ftp://metalab.unc.edu/pub/Linux/utils/text/sgml-tools-0.99.0.tar.gz 5. news:comp.os.linux.answers 6. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/ 7. http://metalab.unc.edu/LDP/ 8. http://www.linux.org.tw/CLDP/Sound-HOWTO.html 9. http://www.freenix.org/unix/linux/HOWTO/ 10. http://yebisu.ics.es.osaka-u.ac.jp/linux/ 11. http://kldp.linux-kr.org/HOWTO/html/Sound/Sound-HOWTO.html 12. http://www.phtd.tpu.edu.ru/~ott/russian/linux/howto-rus/Sound-HOWTO.html 13. ftp://ftp.insflug.org/es 14. http://metalab.unc.edu/pub/Linux/docs/HOWTO/translations/ 15. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/translations/ 16. mailto:jeff_tranter@pobox.com 17. mailto:yorkwu@ms4.hinet.net 18. mailto:linux-howto@metalab.unc.edu 19. http://metalab.unc.edu/LDP/COPYRIGHT.html 20. http://sunsite.unc.edu/LDP/COPYRIGHT.html 21. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/unmaintained/SCSI-HOWTO 22. http://metalab.unc.edu/LDP/HOWTO/CDROM-HOWTO.html 23. http://www.linux.org.tw/CLDP/CDROM-HOWTO.html 24. http://www.opensound.com/ 25. http://www.alsa-project.org/ 26. mailto:mum@mmk.e-technik.tu-muenchen.de 27. http://www.cs.colorado.edu/~mccreary/tbeach 28. mailto:burgaard@daimi.aau.dk 29. ftp://metalab.unc.edu/pub/Linux/kernel/sound/mpu401-0.2.tar.gz 30. ftp://ftp.infomatik.hu-berlin.de/pub/os/linux/hu-sound/ 31. http://www.redhat.com/ 32. http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html 33. http://www.linux.org.tw/CLDP/Kernel-HOWTO.html 34. ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z 35. http://www.altavista.digital.com/ 36. http://www.opensound.com/ 37. ftp://metalab.unc.edu/pub/Linux/games/doom 38. ftp://pandora.st.hmc.edu/pub/linux/musserver.tgz 39. ftp://metalab.unc.edu/pub/Linux/kernel/sound/ 40. ftp://metalab.unc.edu/pub/Linux/apps/sound/ 41. ftp://tsx-11.mit.edu/pub/linux/packages/sound/ 42. ftp://nic.funet.fi/pub/OS/Linux/util/sound/ 43. ftp://nic.funet.fi/pub/OS/Linux/xtra/snd-kit/ 44. ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound/ 45. ftp://metalab.unc.edu/pub/Linux/apps/sound/oplbeep-2.3.tar.gz 46. ftp://metalab.unc.edu/pub/Linux/kernel/patches/misc/modreq_beep.tgz 47. http://www.opensound.com/ 48. http://www.ssc.com/lj/ 49. mailto:werner@bert.emv.ing.tu-bs.de 50. mailto:spm@star.arm.ac.uk 51. mailto:kim@pvv.ntnu.no 52. mailto:mattinger@mindless.com 53. http://www.opensound.com/softoss.html 54. ftp://archive.cs.umbc.edu/pub/midia/instruments.tar.gz 55. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/unmaintained/SCSI-HOWTO 56. http://metalab.unc.edu/LDP/HOWTO/CDROM-HOWTO.html 57. http://www.linux.org.tw/CLDP/CDROM-HOWTO.html 58. http://metalab.unc.edu/LDP/HOWTO/Sound-Playing-HOWTO.html 59. http://www.linux.org.tw/CLDP/Sound-Playing-HOWTO.html 60. http://metalab.unc.edu/LDP/HOWTO/mini/Soundblaster-AWE.html 61. http://www.linux.org.tw/CLDP/mini/Soundblaster-AWE.html 62. http://www.opensound.com/pguide 63. news:news.announce 64. ftp://rtfm.mit.edu/pub/usenet/news.answers 65. news:alt.binaries.sounds 66. news:alt.binaries.multimedia 67. news:alt.sb.programmer 68. news:comp.multimedia 69. news:comp.music 70. news:comp.sys.ibm.pc.soundcard 71. http://viswiz.gmd.de/MultimediaInfo/ 72. http://www.creaf.com/ 73. http://www.mediatrix.com/ 74. mailto:majordomo@vger.rutgers.edu 75. http://www.opensound.com/ 76. ftp://metalab.unc.edu/pub/Linux/docs/LSM/ 77. http://www.freshmeat.net/ 78. http://www.ora.com/catalog/multilinux/noframes.html 79. http://www.pobox.com/~tranter/