📄 sound-howto.txt
字号:
sound trace_init=1) 当音效驱动程式载入核心中时,应该会显示Sound initialization started 及Sound initialization complete讯息。 如果没有,表示音效驱 动程式没有载 入,这时您应该检查一下目前起动的核心有没有加入音效驱动程式支援。 如果在Sound initialization started及 Sound initialization complete间没 有印出什麽东西, 那表示没有侦测到音效设备。 这最可能的原因是您没有使用 正确的驱动程式,卡没被支援,I/O位址不对或您用了还没有设定过的 PnP 卡。 驱动程式起动中亦可能印出错误及警告讯息。 在设定完驱动程式後,重启动时, 注意这 些讯息。 再来是检查/dev/sndstat设备档。 读取这个状态档可以得知额外的资讯, 或是 音效卡驱动程式是不是正确启动了。 输出□例如下: % cat /dev/sndstatSound 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 i586Config options: 0Installed drivers:Type 1: OPL-2/OPL-3 FMType 2: Sound BlasterType 7: SB MPU-401Card config:Sound Blaster at 0x220 irq 5 drq 1,5SB MPU-401 at 0x330 irq 5 drq 0OPL-2/OPL-3 FM at 0x388 drq 0Audio devices:0: Sound Blaster 16 (4.13)Synth devices:0: Yamaha OPL-3Midi devices:0: Sound Blaster 16Timers:0: System clockMixers: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.au4+0 records in4+0 records out# 把刚刚录的放出来% cat sample.au > /dev/audio 显然您必需要有连接音效卡的麦克风,还要对著它讲话,才能试出有没有效。 您 也许也需 要弄到一个混音程式,设定麦克风为输入装置,并设定其录音的增益。 如果以上测试都通过了,您就有理由相信音效D/A及A/D硬体和软体都很正常。 如 果您碰到 问题,参考下一小节。 4.6 问题与解决 如果您进行了以上部骤,仍然有问题,那麽可以检查几个地方。 这些检查由简单 到复杂 依序排列,如果检查出问题,先解决,再进行下一道检查。 第一步: 确定您用您自己编译的核心起动。 您可以用核心的日期戳记来识别是不是您编译的那个有支援音效的核心。 您可以 用 uname命令来作: % uname -aLinux fizzbin 2.2.4 #1 Tue Mar 23 11:23:21 EST 1999 i586 unknown 或显示/proc/version档内容: % cat /proc/versionLinux version 2.2.4 (root@fizzbin) (gcc version 2.7.2.3) #1 Tue Mar 23 11:23:21EST 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 档处理得并不好。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -