Linux 版 (精华区)

发信人: clx (楚留香), 信区: Unix
标  题: The Linux Sound HOWTO -- Linux 音效指引(07)
发信站: 紫 丁 香 (Sat Jun 27 17:33:04 1998), 转信

The Linux Sound HOWTO -- Linux 音效指引 : 常见问题与解答
Previous: 支援音效的应用软体
Next: 参考资料 


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

     读取时, 显示音效驱动程式的状态

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 (6)#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 for sound
devices

要建立设备档啊! 请参见前面建立设备档的部份. 如果你确实有设
备档, 检查主编号及次 编号是否正确. (一些旧一点的CD-ROM
Linux套餐可能不会在安装时建立正确的设备档) 

6.6. 错误: No such device for sound devices

你的核心并不支援音效驱动程式, 或是I/O位址设定和硬体不一致.
检查你是否用新造的 核心开机, 并确认其设定和硬体是一致的.

6.7. 错误: No space left on device for sound
devices

如果你没有建立必要的设备档, 然後把音效档朝/dev/audio或
/dev/dsp丢, 就会发生这种 情况. 这时这些``设备档''其实只是普
通档案, 而且把你的磁碟塞满了. 你必 须照本文件中建立设备档这
一小节的指引去执行那个script.

在Linux 2.0或之後, 当设备开启, 系统却没有足够的RAM时亦会发
生. 对每个DMA通道, 音效驱动程式至少需要两页(8K)连续记忆体区
块. 这种情型在不足16M的RAM或已经启动很 久的系统上可能发生.
要清出一些RAM, 在再开启设备档以前, 先编译及执行以下的C程式
也许可行.

     main() {
       int i;
       char mem[500000];
       for (i = 0; i < 500000; i++)
         mem[i] = 0;
       exit(0);
     }

6.8. 错误: Device busy for sound devices

一个音效设备一次只能给一个程序用. 问题中, 最可能就是有别的
程序正在使用这个设 备. 确定的方法之一是用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?

看音效程式里附的Readme及CHANGELOG档.

6.15. 关於音效驱动程式的ioctl等, 哪里有记载?

它们有一部份放在现在以草案型式存在的Hacker's Guide to
VoxWare. 最新版是第二草案, 可在
ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound 中找到. 注意这
目录是``隐藏的'', 不会在目录列表出现. 如果您``cd'' 进去再
``dir''就可以发现这些档案.

在写这篇时, 新文件已经可以在4Front Techonlogies的网站上看到
了.

另一个来源就是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. 可不可以同时录放音?

受限於硬体, 在多数音效卡上是不可能的. 一些新卡能支援这功能.
请看在 Hacker's Guide to Voxware中的"bidirectional mode"这
一节.

6.19. 我的声霸卡16是设IRQ 2, 可是驱动程式不准我
设这个值

在'286及以後的机器, IRQ2中断连接了第二个中断控制器. 它等同
於IRQ 9.

6.20. 声霸卡AWE32及声霸卡16ASP有支援吗?

在过去, Creative Labs很不愿意为这些卡出版程式设计资讯. 现在
他们已经改变策略, 而在2.1.x核心中也包含了AWE驱动程式了.

6.21. 我离开Linux, 起动DOS, 然後有些软体发声不正


这在暖开机进DOS後发生. 有时错误讯息会误导您, 以为是
CONFIG.SYS档哪里 写错了.

多数现在的音效卡有软体设定的IRQ及DMA设定. 如果您的卡在Linux
下及MSDOS/Windows 下设定值不一样的话, 可能会造成问题. 有些
音效卡不准设新参数, 除非完全 reset. (如把电源关掉再打开, 或
使用硬体上的reset钮)

简单对付方法就是按下reset键, 或把开关关了再开, 不要用暖开机
(即 Ctrl-Alt-Del).

正解则是确保您在MS-DOS及Linux下都用同样的IRQ及DMA设定 (或乾
脆不要用DOS :-).

6.22. 在Linux下跑DOOM出问题

想玩ID software出的DOOM游戏之Linux版的玩家们, 可能对这个有
兴趣.

要正确的音效输出, 您必需使用2.90版或以後的音效驱动程式; 它
支援了即时的 ``DOOM模式''.

音效样本是16 bit. 如果您用8 bit音效卡, 您仍然可以用一些可在
ftp://sunsite.unc/edu/pub/Linux/games/doom中找到的一些程式,
让声音 出现.

如果DOOM动作不流畅, 把音效取消(把sndserver档改名)会有一些改
进.

DOOM预设不支援音乐(如同DOS版). musserver程式将增加Linux下的
音乐支援. 它可以在
ftp://pandora.st.hmc.edu/pub/linux/musserver.tgz 中找到.

6.23. 怎样降低音效卡产生的杂音?

用高品质的屏蔽电缆, 换个插槽插, 可能有助於减低杂音. 如果音
效卡有音量调整钮, 您 可以试试不同的设定(通常最大声最好)

您可以用混音程式, 将不想要的输入(如麦克风)调成无增益

有些音效卡偷工减料, 没有好的遮蔽及接地, 容易产生杂音

最後, 在我的电脑上, 我发现核心命令列有个选项no-hlt可以降低杂
讯. 这个选 项叫核心在跑□置回圈时不要用HLT指令. 您可以开机
时手动试试, 或在LILO设定档中加上 append="no-hlt"

6.24. 能放音, 不能录音

如果您能放音, 却不能录音, 试试: 

     使用混音程式选择适当来源(如麦克风) 
     使用混音程式将该来源的增益调到最大 
     可以的话, 在MS-DOS下测试, 看看是不是硬体方面的问题 

有时录音及放音用的DMA通道是不同的. 这种情况下八成是录音用
DMA设定不对.

6.25. 必须先进DOS跑驱动程式, 不然我的"相容卡"没
法用

多数情况下, ``声霸卡相容''卡在Linux下若舍声霸卡驱动程式不用
而改用 别的驱动程式, 会更好用. 多数号称相容(如``16位元SB
Pro相容''或SB相容的 ``16位元'')的卡, 它的声霸卡相容模式是提
供DOS游戏的相容性所做的. 多数卡有可能 被最近的Linux(2.0.1以
後)支援的, 自身的16位元模式.

只有一些(通常很旧)的卡必须尝试用声霸卡模式运作. 新卡中只有
一个例外, 那就是用 Mwave为主的卡.

6.26. 我的16位元声霸卡相容卡在Linux下只能用8位元
模式

号称和声霸卡相容的16位元音效卡其实只和8位元的声霸卡Pro相容
而已. 它们有和声霸卡 16不相容的16位元模式, 和Linux音效驱动
程式不相容.

也许改用MAD16或MSS/WSS驱动程式後, 您就能用16位元模式了.

6.27. 在哪里找得到Linux的音效软体?

这里有一些好的档案库, 可以搜寻Linux专用的音效应用软体: 

     ftp://sunsite.unc.edu:/pub/Linux/kernel/sound/ 
     ftp://sunsite.unc.edu:/pub/Linux/apps/sound/ 
     ftp://tsx-11.mit.edu:/pub/linux/packages/sound/ 
     ftp://nic.funet.fi:/pub/OS/Linux/util/sound/ 
     ftp://nic.funet.fi:/pub/OS/Linux/xtra/snd-kit/ 
     ftp://nic.funet.fi:/pub/OS/Linux/ALPHA/sound/ 

6.28. 音效驱动程式可不可以编译成可载入模组?

最新的核心里的音效驱动程式可以做成可载入模组.

详情请参考:/usr/src/linux/drivers/sound/Readme.modules及
/usr/src/linux/Documentation/modules.txt(或/usr/src/linux/README)

6.29. 我能把主控台的哔哔声改用音效卡发出吗?

试试oplbeep程式, 可在 
ftp://sunsite.unc.edu/pub/Linux/apps/sound/oplbeep-alpha.tar.gz
中找到.

另一个变种, 叫beep程式, 可在 
ftp://sunsite.unc.edu/pub/Linux/kernel/patches/misc/modreq_beep.tgz
中找到.

modutils套件有个□例程式及核心修补, 支援在核心要求时, 执行外
部程式, 产生声音.

另外在一些音效卡上, 您可以将PC喇叭输出到音效卡上, 这样所有
声音就都由音效卡 发出来了.

6.30. VoxWare是什麽?

支援很多Intel为基台的Unix相容作业系统的核心音效驱动程式, 也
可以以独立於 Linux核心的套件取得. 在1996年二月以前, 作者称
这软体为 ``VoxWare''. 然而不幸的, 这名称已成了VoxWare
Incorporated的注册商标, 不能再被使用了. 现在这个驱动程式的
新名 称叫OSS/Free.

Open Sound System(OSS)是给很多Unix系统用的, 商业版核心音效
驱动程式, 由 4Front Technologies出售. 叫做 OSS/Free 的免费
版本将继续在Linux系统上以免费型式存在.

更多资讯可在4Front Technologies网站(在
http://www.4front-tech.com/) 上看到.

同一个东西, 您可能有听过的名称还有TASD(暂时的无名音效驱动程
式)及USS (Unix音效系统)

欲取得更多资讯, 请见4Front Technologies的网页,
在http://www.4front-tech.com/. 我在1997年六月的Linux
Journal有写过OSS/Linux的评论文章.

6.31. 有支援随插即用音效卡吗?

到了Linux 2.1版後应该能完全支援随插即用. 现在要让随插即用音
效卡能用, 还有不少 要做的.

如果您用有Plug and Play BIOS的新Pentium机器, 要小心设定您的
卡. 确定您将核心 音效驱动程式的I/O位址, IRQ及DMA等设得和
BIOS给的一样.

给Linux用, 可用来设定这种卡的随插即用工具是存在的. 您可以在
Red Hat的网站 http://www.redhat.com/找到. 它也可能包含在您
的Linux套餐中.

如果您在 Windows95 下使用这种卡, 可以用设备管理员来设定卡,
然後用LOADLIN 暖启动进Linux. 确定 Windows95 及 Linux 使用相
同的设定参数.

如果您在DOS下用这种卡, 您可以使用声霸卡16PnP卡附的icu公用程
式, 在DOS 下设定. 然後用LOADLIN暖开机进Linux. 一样, 确定
DOS 及 Linux 用相同的设定参数.

商业版的OSS音效驱动程式支援声霸卡16PnP, 您可以向 4Front
Technologies 购买.

6.32. Sox/Play/Vplay 回报 "invalid block size
1024"

在1.3.67版核心中的改变让(错误的)检查SNDCTL_DSP_GETBLKSIZE
ioctl是否传回大 於4096的放音软体失效. 在最新的
snd-util-3.x.tar.gz套件(在 
ftp://ftp.4front-tech.com/ossfree 中的公用程式现已能处理这
种状况了. 最新的驱动程式也已修正, 避免配置小於4096 bytes的
碎块, 解决了旧公用程式的问题.

6.33. 音效驱动程式为何要用自己的设定程式?

音效驱动程式支援很多不同的设定参数. 驱动程式中的configure 会
检查各参数间的相依性. 而核心的设定工具就没有提供这样的功能.

这就是说, 最新的核心部份地允许音效驱动程式使用标准核心设定
工具(参见前面 ``设定核心''那一小节.)

6.34. 我载入音效驱动程式模组後,混音设定就被重设了

您可以将音效驱动程式做成可载入模组, 并使用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.35. 只有root能录音

在Readme.linux中的script, 会将音效设备档设成仅有root可读, 这
是为了填补 安全上的漏洞. 在网路环境里, 外面的使用者可以远端
连进有音效卡及麦克风的Linux系统 并窃听. 如果您不担心这个,
您可以改变这个script中的权限.

在预设的安装法, 一般使用者仍然可以播放音效档. 这不会造成安
全上的负担, 反而可 以省掉很多麻烦.

6.36. 在IBM ThinkPad上的音效硬体可以支援吗?

关於如何在Linux下使用IBM ThinkPad上的mwave音效卡之资讯, 可
在http://www.screamin.demon.co.uk/查到.


The Linux Sound HOWTO -- Linux 音效指引 : 常见问题与解答
Previous: 支援音效的应用软体
Next: 参考资料 


--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.244.16]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:232.216毫秒