要在Linux下享用音效, 必须先进行以下步骤:
底下我们将对每一步作详细解说.
按照说明书的指示, 安装硬体, 或是请厂商来装.
旧的音效卡通常有开关或跳线, 以设定IRQ, DMA通道等, 请把这些设定记下来. 如果你不 确定要怎麽调, 就照出厂值. 可能的话, 避免和其它设备(如网路卡, SCSI卡, 平行及串列 埠)相冲.
若你在DOS下有使用音效卡, 通常应该设成和DOS下一样. 不过有些情况下(特别是PnP的 卡)也可能要设成和DOS不一样的值. 这时可能要实验一下.
安装时您用的是预先编译过的核心, 它们通常是不支援音效的. 所以最好自己编译适合自 己用的核心. 而且, 您也可能想要藉此来升级到更新版的核心, 或是缩小核心体积, 增加 可用的记忆体.
在如何建造核心方面, 您应该参考 Linux Kernel HOWTO. 我在这里只提和音效卡相关的部份.
如果您还没有编译核心, 加入音效支援的经验, 先读一下核心驱动程式里的Readme
档(特别是关於您的音效卡的部份)是个不错的主意. 以下档案可以在核心音效驱动程式
的目录中找到, 通常放在/usr/src/linux/drivers/sound
:
CHANGELOG - 简介每一版中的变更 COPYING - 拷贝及版权限制 Readme - 最新, 最重要的消息 Readme.aedsp16 - 关於 Audio Excel DSP 16 音效卡的资讯 Readme.cards - 设定音效卡的说明 Readme.linux - 安装核心以外散布的驱动程式之注意事项 Readme.modules - 如何作成可载入模组 Readme.v30 - 3.0 版的新功能介绍 experimental.txt - 讲一些实验中的功能
照一般造核心的程序来就好. 目前设定核心有三种介面可选择. 用 ``make xconfig '' 可叫出在X11下的图形设定介面; 用 ``make menuconfig'' 则是文字 模式的选单介面; 最原始的方法, 则是用 ``make config'', 提供了简单的文 字问答介面.
当用``make xconfig''或``make menuconfig''时, 所有Yes/No问题 都要特别小心确认. 这些命令给的预设答案都是No, 这并不见得就是正确的选择. 特别是 ``/dev/dsp and /dev/audio support'' (CONFIG_AUDIO) 选项通常是要打开 的.
在这篇文件中, 我假设你用传统的命令行式 ``make config''来做. 虽然说其实别的方式也差不多.
设定音效的方法也有二则. 其一, ``老''方法(在2.0.0板以前的核心只能 用这方法), 使用一个内附的设定程式. 这种方法对多数音效卡有用, 除了少数需要 额外``低阶''驱动程式的(如miroSOUND, AWE32, 及AEDSP16)以外.
第二种是``新''方法, 它和设定核心的其它部份用的选单介面有较佳的整合性. 这方法对要韧体下载档的音效卡无效. 这些卡包括PSS, SM Wave, AudioTrix Pro 及 TurtleBeach Tropez/Maui卡, 对付它们你只好用老方法了.
``make xconfig''一定用``新''方法. 在``make menuconfig'' 中, 你可以在音效子画面中选择用``老''方法或``新''方法. "make config"的情况, 预设是用``老''方法, 不过如果你已经用过 一次``新''方法了, 那麽它也会改成用新方法. 之後你仍可以在"make menuconfig"中切换回老方法.
我们建议用``make menuconfig''加``老''方法. 很多设定问题都 (至少一部份是)由於误用了新方法所致.
也可以把音效驱动程式做成核心可载入模组. 我建议一开始先不要做成模组, 等测试过可 用後, 再试试把它做程模组.
执行``make config''时, 以``y''回答下列问题, 以起动音效支援.
Sound card support (CONFIG_SOUND) [M/n/y/?]
这问题答完後, 音效设定程式会被编译, 执行. 它会问你要那些装置及选项. 回答这些问 题时要小心, 前面回答错误可能後面的问题就不会问了. 例如说, 如果你没有PAS16音效 卡, 第一个问题(PAS16)就不要答``yes''. 不要加入比你会用上的卡还多的驱 动程式, 这只会浪费记忆体. 有些驱动程式(像MPU-401)可能会和你的SCSI卡相冲, 结果 开不了机.
作者在此简短的叙述各个设定选项的意义. 对每一个问题请以``y''(yes)或 ``n''(no)作答. 里面会显示预定答案, 如``[Y/n/?]''表示 预定``y'' 而``[N/y/?]''表示预定是``n''. 你可以 直接按Enter选预定的答案, 但记住预定答案不一定是对的.
输入问号(``?'')会给你对此选项的简短的描述.
也注意一下不见得每个问题都会问, 设定程式可能会依据前面的选择而自动取消或设定某 些选项.
如果你以前有设定过音效驱动程式, 您的设定会被存起来. 如果您想直接用上次的设定, 回答``y''. 如果您想作些改变或换了新版核心, 您应该回答 ``n'' 并继续下面的设定程序.
只有当您有ProAudio Spectrum 16, ProAudio Studio 16或罗技 SoundMan 16 时, 答'y'. 如果您有其它Media Vision或罗技的卡, 还是请回答'n', 因为它们并不和 PAS16相容.
如果您有真正由Creative Labs制的声霸卡或100%硬体相容(如 Thunderboard 或 SM Games
)卡, 回答'y'. 如果您的卡在支援之列, 请先看Readme.cards
中和卡相关的指示
再回答. 对完全不知道的卡, 如果它坚称是和声霸卡相容, 你可以回答'y'.
如果您有GUS或GUS Max,回答'y'. 不然就回答'n', 这个驱动程式吃记忆体吃得凶.
这问题要小心. 几乎所有的卡都支援MPU-401 MIDI介面, 然而, 有些卡需要专属的驱动程
式. 在这种卡上开启这个驱动程式会造成冲突. 在没有MPU-401的电脑上使用这个驱动程式
也会造成麻烦. 如果你的卡在支援之列, 看Readme.cards
档中的指示. 如果你有
真正的MPU-401 MIDI介面卡, 那就可以放心回答'y'.
最好回答'n'. 6850 UART 介面甚少被用到.
如果你有Orchid SW32, Cardinal DSP16或其它用PSS晶片组(AD1848 编解码器 + ADSP-2115 DSP晶片 + Echo ESC614 ASIC晶片)的卡, 答'y', 不然答'n'.
如果您的GUS上有装16 bit取样子卡, 回答'y'. 如果您有GUS MAX, 回答 'n'. 启动这个就 会关闭GUS MAX.
除非你有GUS Max, 不然回答'n'吧!
一样请先三思再答. 如果你有微软制的原版Windows Sound System卡或Aztech SG 16 Pro
(或NX16 Pro)的话, 可放心回答'y'. 如果你的音效卡不在上面所列, 也可以答'y'试试.
对VoxWare支援的卡请先看Readme.cards
. 有些驱动程式有自己的一套驱动MSS的
方法, 起动这个会造成冲突.
如果你的卡用的是Ensonic Soundscape晶片, 回答'y'. 这种卡至少有Ensoniq, Spea 及 Reveal(也做别种卡)在制造.
如果你有AudioTrix Pro的话, 答'y'.
如果你是用莫扎特音效卡(OAK OTI-601)或MAD16(Opti 82c928或82c929)音效介面晶片. 这 种晶片非常普遍, 所以一些无牌卡也许就用它. 除此之外, MAD16也被一些知名厂商像 TurtleBeach(Tropez), Reveal(几种型式), 及 Diamond(最新的)用来放在他们的卡上.
如果你的卡用Crystal CS4232晶片, 答'y'.
如果你有上面列出的卡才选'y'.
如果你的卡是声霸卡Pro或声霸卡16, 答'y'. 对声霸卡Pro相容的也可以用它. 回答'n'省 一点记忆体, 但'y'也是安全的选择.
如果你的卡是声霸卡16(包括AWE32), 答'y'.
如果你用Audio Excel DSP16的话, 答'y'. 请看Readme.aedsp16
以获得更多资
讯.
然後设定程式会问你关於高阶服务方面的问题. 建议对每一项都答'y', 除非你很 明白你不会用到这功能才答'n'.
回答'n'的话, /dev/dsp
及/dev/audio
(及A/D及D/A转换装置)就不能
用了. 回答'y'吧!
回答'n'则会让/dev/midixx
及使用/dev/sequencer
和/dev/music
的MIDI连接埠失效. 这选项也会影响MPU-401及General MIDI相容设备.
在这请回答'y'.
回答'n'就会让/dev/sequencer
及/dev/music
失效.
如果你有SoundGalaxy NX音效卡, 想支援它的延伸混音功能的话, 答'y'.
如果你有MV Jazz16(ProSonic等), 答'y'.
如果你有罗技SoundMan Games音效卡, 答'y'.
以上问题问完後, 设定程式提示你回答和卡相关的设定问题. 通常只问I/O位址, IRQ及DMA
号码. 对某些卡会要你用一些启始时需要的档案. 这是用在一些必须载入程式(微码)以起
动的DSP晶片或微处理器. 有时这写在.h档里, 在编译时加入驱动程式里. 同样, 读Readme.cards
中关於你的卡的部份以便了解更多.
最後它会说:
The sound driver is now configured.
Save copy of this configuration to /etc/soundconf [Y/n/?]
(音效驱动程式已经设定完毕.
要不要将设定存到/etc/soundconf [Y/n/?])
正常状况下你会答'y', 这样一来, 今後你重编译核心的话, 可以直接用上次的音效驱动 程式设定.
如果你由旧版的音效驱动程式升级, 确定/usr/include/sys/soundcard.h
及
/usr/include/sys/ultrasound.h
以符号连结连到/usr/include/linux
下的同名档案, 或是它们分别包含#include <linux/soundcard.h>
及#include <linux/ultrasound.h>
你现在已准备好, 可以编译及安装新核心了.
为了正常的操作, 必须为各音效设备建立设备档. 通常在你装Linux时就已经 建好了, 可以用下列的命令快速检查一下. 如果输出结果和下面很像(日期不一样 没关系), 那麽设备档差不多是设定正确了.
% ls -l /dev/sdnstat
crw-rw-rw- 1 root root 14, 6 Apr 25 1995 /dev/sndstat
译注: 作者打错了, 是ls -l /dev/sndstat才对
注意有了正确的设备档并不保证一切完美了. 在设备能用以前, 还是要先载入或加进 核心驱动程式(稍後再详述).
如果您觉得设备档设错了, 您可以以root
身份执行在/usr/src/linux/drivers/sound
目录里的Readme.linux
档尾部, 那个很短
的shell script来重建它们. 另外, 多数Linux套件也提供/dev/MAKEDEV script, 可以作
这种用途.
如果您用PC喇叭驱动程式, 请读内附文件, 以决定是否需要建立设备档.
您至此应该可以准备起动新核心, 测试驱动程式了. 照著您平时安装及重启动新核心的步 骤去做(当然, 保留一份旧核心以防万一).
在起动中, 检查一下有没有类似以下的讯息:(如果讯息卷动太快, 您可以用dmesg
命令回过来查看.)
Sound initialization started
<Sound Blaster 16 (4.13)> at 0x220 irq 5 dma 1,5
<Sound Blaster 16> at 0x330 irq 5 dma 0
<Yamaha OPL3 FM> 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讨论区问问)
一些音效□例档可在 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硬体和软体都很正常. 如果您碰到 问题, 参考下一小节.
如果您进行了以上部骤, 仍然有问题, 那麽可以检查几个地方. 这些检查由简单到复杂 依序排列, 如果检查出问题, 先解决, 再进行下一道检查.
您可以用核心的日期戳记来识别是不是您编译的那个有支援音效的核心. 您可以用
uname
命令来作:
% uname -a
Linux fizzbin 2.0.0 #1 Tue Jun 4 16:57:55 EDT 1996 i386
或显示/proc/version
档内容:
% cat /proc/version
Linux version 2.0.0 (root@fizzbin) (gcc version 2.7.0) #1 Tue Jun 4 16:57:55 EDT 1996
如果日期戳记不是您编译核心的时间, 那您用了旧的核心. 您真的重开机了吗? 如果您用
LILO, 是不是有重装呢(平常用/etc/lilo/install
)? 如果是软碟起动, 您真的
做了新开机片, 并用它开机吗?
最简单的方法就是前面提过的, 检查``/dev/sndstat''的输出. 如果有地方不对, 那麽核心设定或建立一定有问题. 再重新设定及建立, 安装新核心的程序.
确定核心启动时您的卡有被侦测到. 您应该看过开机讯息了, 如果它卷得过快, 您通常可 用dmesg命令叫回来:
% dmesg
或
% tail /var/adm/messages
如果您的卡没侦测到, 就是某一处出问题. 确定那张卡真的装了. 如果那张卡在DOS下工 作得很好, 那你就有理由相信硬体是正常的. 不是您把音效卡设错型式, 下错参数, 就是 您的音效卡和核心音效驱动程式不相容.
一种可能就是需要特殊DOS驱动程式来驱动的``相容''卡. 试著起动DOS, 载入
厂商给的驱动程式, 然後按Control-Alt-Delete
暖开机进Linux. 确定卡的I/O位
址, DMA及IRQ设定都和DOS一样. 读在音效驱动程式原始码中的Readme.cards
档
以得到关於设定您的这型卡的提示讯息.
如果您的卡并没有在本文件中列出, 可能是Linux驱动程式没支援的关系. 您可以参考本文 末的参考资料来求助.
试试用前面提过的``dd''命令读取/dev/audio
. 这个命令应该不会有
错误才对.
如果不行, 那可能是IRQ/DMA冲到, 或某种硬体不相容(设备不为Linux支援, 或用错驱 动程式).
还有一个少见的可能是不良的硬体. 可能的话, 在DOS下测试一下, 消去这种可能性.
如果您还是有问题, 这里提供最後几招试试:
comp.os.linux
或其它Usenet讨论区(comp.os.linux.hardware 是个好地方;
因为这儿水量多, 最好在标题栏注明 "sound", 这样适合的专家才会找到它.)Esc-x doctor
:-)