⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sound-howto-6.html

📁 linux how_to 有365个文件, linux unix的一些基础性的东西
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7"> <TITLE>The Linux Sound HOWTO -- Linux 音效指引: 常见问题与解答</TITLE> <LINK HREF="Sound-HOWTO-7.html" REL=next> <LINK HREF="Sound-HOWTO-5.html" REL=previous> <LINK HREF="Sound-HOWTO.html#toc6" REL=contents></HEAD><BODY><A HREF="Sound-HOWTO-7.html">Next</A><A HREF="Sound-HOWTO-5.html">Previous</A><A HREF="Sound-HOWTO.html#toc6">Contents</A><HR><H2><A NAME="s6">6. 常见问题与解答</A></H2><P><P><P>这一节回答经常在Usenet讨论区及通信论坛常被问到的问题.<P><P>可以在OSS音效驱动程式的网站看到更多问题的解答.<P><H2><A NAME="ss6.1">6.1 这一堆音效设备档各代表什麽?</A></H2><P><P><P>以下是最``标准''的设备档档名, 虽然有些Linux套件可能用不太一样的名称.<P><DL><DT><B>/dev/audio</B><DD><P>一般是连到 <CODE>/dev/audio0</CODE><DT><B>/dev/audio0</B><DD><P>和Sun工作站相容的声讯设备 (只作了部份, 并不支援Sun的ioctl介面, 只有u-law编码)<DT><B>/dev/audio1</B><DD><P>第二个音讯设备 (如果音效卡支援, 或不只有一张音效卡的话)<DT><B>/dev/dsp</B><DD><P>一般连到 <CODE>/dev/dsp0</CODE><DT><B>/dev/dsp0</B><DD><P>第壹数位取样设备<DT><B>/dev/dsp1</B><DD><P>第贰数位取样设备<DT><B>/dev/mixer</B><DD><P>通常连结到 <CODE>/dev/mixer0</CODE><DT><B>/dev/mixer0</B><DD><P>第壹混音器<DT><B>/dev/mixer1</B><DD><P>第贰混音器<DT><B>/dev/music</B><DD><P>高阶编曲器介面<DT><B>/dev/sequencer</B><DD><P>低阶MIDI, FM, 及GUS存取用<DT><B>/dev/sequencer2</B><DD><P>通常连结到 <CODE>/dev/music</CODE><DT><B>/dev/midi00</B><DD><P>第壹原生(raw)MIDI埠<DT><B>/dev/midi01</B><DD><P>第贰原生MIDI埠<DT><B>/dev/midi02</B><DD><P>第参原生MIDI埠<DT><B>/dev/midi03</B><DD><P>第肆原生MIDI埠<DT><B>/dev/sndstat</B><DD><P>读取时, 显示音效驱动程式的状态</DL><P><P>PC喇叭驱动程式提供以下设备:<P><DL><DT><B>/dev/pcaudio</B><DD><P>和/dev/audio同样<DT><B>/dev/pcsp</B><DD><P>和/dev/dsp一样<DT><B>/dev/pcmixer</B><DD><P>和/dev/mixer一样</DL><P><H2><A NAME="ss6.2">6.2 怎样播放音效档案?</A></H2><P><P><P>Sun工作站的音效档(.au)可以丢到<CODE>/dev/audio</CODE>来放出, 原始取样档可以丢到<CODE>/dev/dsp</CODE>, 虽然这样一般来说会产生很差的输出. 使用像<CODE>play</CODE>这样的程式比较好, 而且还能辨别音效档格式, 设定正确的取样率等.<P><P>像wavplay或vplay(在snd-util套件中)的程式, 给它WAV档会产生最佳结果. 然而它们无法辨识Microsoft ADPCM压缩过的WAV档. 同时, 旧版的play(在Lsox套件中)对16位元的WAV档处理并不好.<P><P>在snd-util中的splay命令如果以手动输入适切的参数, 可以用来播放多数音效档.<P><H2><A NAME="ss6.3">6.3 怎样录制音效档?</A></H2><P><P><P>可以从<CODE>/dev/audio</CODE>或<CODE>/dev/dsp</CODE>中读取取样过的资料, 可以转向到档案去. 像<CODE>vrec</CODE>这样的程式可以较简单地控制取样率及时间等. 你也需要混音器,以便选择想要的输入来源.<P><H2><A NAME="ss6.4">6.4 我可以有不只一片音效卡吗?</A></H2><P><P><P>现在的音效驱动程式允许你装好几片声霸卡, 声霸卡Pro, 声霸卡16, MPU-401 或MSS卡. 装两片声霸卡是可能的, 不过要手动编辑 local.h, 定义SB2_BASE, SB2_IRQ, SB2_DMA 及 SB2_DMA2(有些情形下才要). 也可以同时装一片声霸卡及一片PAS16.<P><P>若是你用make config来设定较新的2.0.x版核心的音效的话, 你应该编辑<CODE>/usr/include/linux/autoconf.h</CODE>而非<CODE>local.h</CODE>. 你会看到几行:<P><BLOCKQUOTE><CODE><PRE>#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)</PRE></CODE></BLOCKQUOTE><P>在它们後面加入几行(数值依照你的系统设定)<P><BLOCKQUOTE><CODE><PRE>#define SB2_BASE 0x330#define SB2_IRQ (7)#define SB2_DMA (2)#define SB2_DMA2 (2)</PRE></CODE></BLOCKQUOTE><P><P>以下驱动程式不准你装两片卡:<P><UL><LI>GUS (驱动程式限制)</LI><LI>MAD16 (硬体限制)</LI><LI>AudioTrix Pro (硬体限制)</LI><LI>CS4232 (硬体限制)</LI></UL><P><H2><A NAME="ss6.5">6.5 错误: No such file or directory for sound devices</A></H2><P><P><P>要建立设备档啊! 请参见前面建立设备档的部份. 如果你确实有设备档, 检查主编号及次编号是否正确. (一些旧一点的CD-ROM Linux套餐可能不会在安装时建立正确的设备档) <P><H2><A NAME="ss6.6">6.6 错误: No such device for sound devices</A></H2><P><P><P>你的核心并不支援音效驱动程式, 或是I/O位址设定和硬体不一致. 检查你是否用新造的核心开机, 并确认其设定和硬体是一致的.<P><H2><A NAME="ss6.7">6.7 错误: No space left on device for sound devices</A></H2><P><P><P>如果你没有建立必要的设备档, 然後把音效档朝/dev/audio或/dev/dsp丢, 就会发生这种情况. 这时这些``设备档''其实只是普通档案, 而且把你的磁碟塞满了. 你必须照本文件中<EM>建立设备档</EM>这一小节的指引去执行那个script.<P><P>在Linux 2.0或之後, 当设备开启, 系统却没有足够的RAM时亦会发生. 对每个DMA通道, 音效驱动程式至少需要两页(8K)连续记忆体区块. 这种情型在不足16M的RAM或已经启动很久的系统上可能发生. 要清出一些RAM, 在再开启设备档以前, 先编译及执行以下的C程式也许可行.<P><BLOCKQUOTE><CODE><PRE>main() {  int i;  char mem[500000];  for (i = 0; i &lt; 500000; i++)    mem[i] = 0;  exit(0);}</PRE></CODE></BLOCKQUOTE><P><H2><A NAME="ss6.8">6.8 错误: Device busy for sound devices</A></H2><P><P><P>一个音效设备一次只能给一个程序用. 问题中, 最可能就是有别的程序正在使用这个设备. 确定的方法之一是用<CODE>fuser</CODE>命令:<P><BLOCKQUOTE><CODE><PRE>% fuser -v /dev/dsp/dev/dsp:             USER       PID ACCESS COMMAND                      tranter    265 f....  tracker</PRE></CODE></BLOCKQUOTE><P><P>在上例中, fuser命令显示265号程序开启了该设备. 可以选择等它做完或把它砍掉, 这样它就又能使用了. 你应该以root身份执行<CODE>fuser</CODE>命令, 这样才会列出除了你以外的使用者.<P><H2><A NAME="ss6.9">6.9 还是逃不了'device busy'的错误!</A></H2><P><P><P>根据Brian Gough的说法, 使用一号DMA通道的声霸卡会和同样也占用DMA 1的QIC-02磁带机驱动程式相冲, 造成``device busy''错误. 如果您使用FTAPE, 您可能有加进这个驱动程式. 根据FTAPE-HOWTO, QIC-02驱动程式在使用FTAPE上不是必要的; 只有QIC-117才必要. 重造核心, 使用QIC-117驱动程式, 取消QIC-02, 这样FTAPE及音效驱动程式就能共存了.<P><H2><A NAME="ss6.10">6.10 音效档放到一半就停了</A></H2><P><P><P>这种症状, 通常是先播放一秒左右, 然後完全停止, 或印出``missing IRQ''或``DMA timeout''讯息. 八成是您的IRQ或DMA设错了. 核对一下, 您在核心中的设定是不是和硬体跳线的一样, 而且并没有和别的卡相冲.<P><P>另一种症状是声音一直重覆. 这通常导因於IRQ冲突.<P><H2><A NAME="ss6.11">6.11 播放MOD档断断续续</A></H2><P><P><P>要播放MOD档, 需要可观的CPU能力. 您可能跑太多程式导致系统反应过慢, 无法及时放音. 有下面几种解法:<P><UL><LI>用较低的取样率, 或只放单声道</LI><LI>把其它执行中程式干掉</LI><LI>买更快的电脑</LI><LI>买更强的音效卡(像 Gravis UltraSound)</LI></UL><P><P>如果您有用Gravis UltraSound音效卡, 您应该使用专为GUS设计的MOD播放程式(如 <CODE>gmod</CODE>)<P><H2><A NAME="ss6.12">6.12 编译音效软体时出错</A></H2><P><P><P>1.0c版以後和以前的音效驱动程式用完全不同且不相容的<CODE>ioctl()</CODE>方式. 抓新版的原始码, 或做必要改变, 把它移执到适合新版驱动程式用. 详见音效驱动程式的<CODE>Readme</CODE>档.<P><P>也请确定编译应用程式时, 您使用最新的<CODE>soundcard.h</CODE>及<CODE>ultrasound.h</CODE>.请见本文开头处里的安装指引.<P><H2><A NAME="ss6.13">6.13 以前跑很好的软体, 却出现SEGV错误</A></H2><P><P><P>这和上个问题可能是一样的.<P><H2><A NAME="ss6.14">6.14 音效驱动程式有何已知的限制及bug?</A></H2><P><P><P>看音效程式里附的<CODE>Readme</CODE>及<CODE>CHANGELOG</CODE>档.<P><H2><A NAME="ss6.15">6.15 关於音效驱动程式的ioctl等, 哪里有记载?</A></H2><P><P><P>它们有一部份放在现在以草案型式存在的<EM>Hacker's Guide to VoxWare</EM>.最新版是第二草案, 可在<A HREF="ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound">ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound</A>中找到. 注意这目录是``隐藏的'', 不会在目录列表出现. 如果您``cd''进去再``dir''就可以发现这些档案.<P><P>在写这篇时, 新文件已经可以在4Front Techonlogies的网站上看到了.<P><P>另一个来源就是Linux Multimedia Guide, 在参考资料那节有讲.<P><H2><A NAME="ss6.16">6.16 要完全平顺地录放音, 需要多强的CPU才能办到?</A></H2><P><P><P>这问题不好回答, 它取决於:<P><UL><LI>使用PCM取样还是FM合成</LI><LI>取样率及样本大小</LI><LI>用哪个程式录放音</LI><LI>音效卡硬体</LI><LI>磁碟传输速率, CPU时脉频率, 快取大小等</LI></UL><P><P>一般来说, 任何386机器应该都可以在8位元音效卡上播放音效, 或用FM合成放音乐.<P><P>然而, 放MOD档需要可观的CPU资源. 一些实验性的测量显示, 要以44KHz播放,要消耗一颗486/50 CPU的 40% 能力; 386/25几乎不可能放比22KHz 更高的取样率.(以8位元音效卡,如声霸卡, 所测得)一些像Gravis UltraSound的卡硬体提供更多功能, 需要的CPU资源就较少.<P><P>这些是假设电脑没有在跑其它耗CPU能力的工作.<P><P>如果您的电脑有数学辅助处理器(或CPU内部有FPU), 用像<CODE>sox</CODE>这样的程式做音效转换或增加效果会快不少. 虽然核心驱动程式本身是没有用到浮点运算啦.<P><H2><A NAME="ss6.17">6.17 PAS16和Adaptec 1542 SCSI卡的搭配问题</A></H2><P><P><P>(以下解释由<CODE>seeker@indirect.com</CODE>提供)<P><P>Linux只能认出在330(预设值)或334位址上的1542, 而PAS只能将MPU-401模拟设在330. 即使你用软体消去MPU-401, 如果有东西还在这个预设位址上, 仍然会和1542相冲. 把1542移到334就什麽都解决了.<P><P>另外, 1542和PAS-16都有用到16位元DMA, 所以如果你一面以16位元, 44KHz立体声录音, 一面将档案存到挂在1542上的硬碟的话, 麻烦就来了. DMA会重叠, 导致RAM没有时间充电, 然後就会出现 &quot;PARITY ERROR - SYSTEM HALTED&quot; 的讯息, 您甚至还来不及知道怎麽当的. 更糟糕的是有些QIC-117磁带的协力厂商建议设定汇流排开/关时间, 使1542占汇流排更久. 从Adaptec的BBS或Internet的其它地方抓SCSISEL.EXE 程式, 减少BUS ON时间或增加BUS OFF时间, 直到这问题完全消失.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -