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

📄 alsa-sound-5.html

📁 Linux初学者最好的老师就是howto了。相当于函数man。
💻 HTML
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>5</title>
</head>

<body>

<table>
  <tr>
    <td bgColor="#FFFFFF" vAlign="top"><a href="Alsa-sound-6.html"><img alt="Next" src="next.gif" width="16" height="16"></a> 
      <a href="Alsa-sound-4.html"><img alt="Previous" src="prev.gif" width="16" height="16"></a> <a href="Alsa-sound.html#toc5"><img alt="Contents" src="toc.gif" width="16" height="16"></a>
      <hr>
      <h2><a name="s5">5. 测试及使用</a></h2> 
      <p>现在应该是试试驱动程式是不是真能用的时候了.  
      接者就是使用它. 
      <h2><a name="ss5.1">5.1 /proc 档案系统</a></h2> 
      <p>您可以在 /proc  
      目录下找到很多关於您的系统的有用资讯. /proc 是一个&quot;虚拟的&quot;档案系统,  
      意即它并非真正存在,  
      而是和您正在执行的各程序间的连结. 要让 /proc 可用,  
      您需要将它编译进核心. 多数 Linux  
      安装套件已将它设为预设值,  
      但如果您重编译并且并没有将 /proc 包进来, 那麽在 /proc  
      下将什麽也没有. 
      <p>/proc/modules 记载了关於载入的模组的资讯. 当 ALSA  
      音效驱动程式载入後, 如果您打入 cat /proc/modules,  
      应该看到像这样的东西: 
      <blockquote> 
        <code> 
        <pre>snd-pcm1-oss      4            0
snd-sb16          1            1
snd-sb-dsp        4    [snd-sb16]      0
snd-pcm1          4    [snd-pcm1-oss snd-sb-dsp]      0
snd-pcm           3    [snd-pcm1-oss snd-sb16 snd-sb-dsp snd-pcm1]    0
snd-mixer         3    [snd-pcm1-oss snd-sb16 snd-sb-dsp]      1
snd-mpu401-uart   1    [snd-sb16]      0
snd-midi          4    [snd-sb16 snd-sb-dsp snd-mpu401-uart]   0
snd-opl3          1    [snd-sb16]      0
snd-synth         1    [snd-sb16 snd-opl3]     0
snd-timer         1    [snd-opl3]      0
snd               8    [snd-pcm1-oss snd-sb16 snd-sb-dsp snd-pcm1 snd-pcm snd-mixer snd-mpu401-uart snd-midi snd-opl3 snd-synth snd-timer]    0
</pre> 
        </code> 
      </blockquote> 
      如果在安装驱动程式时有哪步搞错了, 您仍能看到一堆  
      &quot;snd&quot; 设备, 但没有音效支援. 
      <p>例如说(请千万不要照著下面下命令, cs4236  
      驱动程式需要参数): 
      <blockquote> 
        <code> 
        <pre>win3:~# modprobe snd-card-cs4236
/lib/modules/2.0.35/misc/snd-card-cs4236.o: init_module: Device or resource busy
snd-mixer: Device or resource busy
win3:~# cat /proc/modules
snd-cs4236        2           0
snd-cs4231        3    [snd-cs4236]    0
snd-timer         1    [snd-cs4231]    0
snd-pcm1          4    [snd-cs4236 snd-cs4231] 0
snd-mixer         3    [snd-cs4236 snd-cs4231] 0
snd-pcm           3    [snd-cs4236 snd-cs4231 snd-pcm1]       0
snd-mpu401-uart   1           0
snd-midi          4    [snd-mpu401-uart]       0
snd-opl3          1           0
snd-synth         1    [snd-opl3]      0
snd-timer         1    [snd-cs4231 snd-opl3]   0
snd               8    [snd-cs4231 snd-timer snd-pcm1 snd-mixer snd-pcm]     0
</pre> 
        </code> 
      </blockquote> 
      <p>您可藉由看 /proc/asound/cards 内容来看音效卡是否存在.  
      例如: 
      <blockquote> 
        <code> 
        <pre>bash$ cat /proc/asound/cards
0 [card1          : SB16 - Sound Blaster 16
                    Sound Blaster 16 at 0x220, irq 5, dma 1&amp;5
</pre> 
        </code> 
      </blockquote> 
      在刚刚的例子中(就是我忘了加参数的), 输出会是像: 
      <blockquote> 
        <code> 
        <pre>win3:~# cat /proc/asound/cards
--- no soundcards ---
</pre> 
        </code> 
      </blockquote> 
      若 CS4236 卡能用, 将有以下输出 
      <blockquote> 
        <code> 
        <pre>0 [card1         ]: CS4236 - CS4237B
                    CS4237B at 0x534, irq 7, dma 1&amp;0
</pre> 
        </code> 
      </blockquote> 
      如果您再三检查您的设定正确後, 仍然找不到音效卡,  
      那麽去看看问题解决那节. 
      <p><code>/proc/asound/</code>  
      虚拟目录显示了关於此驱动程式的许多资讯. 请注意  
      /proc/asound 在您载入第一个 ALSA 模组後才会出现.  
      如果没有 /proc/asound, 那麽就是 &quot;snd&quot;  
      模组没有正确安装好. 您可以在 /proc/asound/cards  
      档中找到安装好的卡, 然後在 /proc/asound/0 找到关於 0  
      号卡, /proc/asound/1 中关於 1 号卡的资讯. 
      <p>如果 <code>cat /proc/asound/</code> 显示像 
      <blockquote> 
        <code> 
        <pre>      ES1370 DAC2/ADC
      Playback isn't active.
      Record isn't active.
</pre> 
        </code> 
      </blockquote> 
      这是说您的驱动程式一切都很好, 但目前并没有事做(所以一切正常). 
      <p>还有第三种找音效设备的方法, 就是如果您有 OSS  
      相容驱动程式, 那麽就有 /dev/sndstat 设备档. ALSA  
      驱动程式会体贴的提醒您不要依赖这些资讯, 它只是为跟  
      OSS 相容而做的. 由 /proc/asound 可以简单的得到更好的资讯. 
      <h2><a name="ss5.2">5.2 混音器</a></h2> 
      <p>一旦您的音效卡装好, 而 /proc 档案系统也这麽显示後,  
      您可以试试真正发出声音. 首先呢, 安装公用程式套件,  
      或至少把 &quot;amixer&quot; 命令放到一些合理的地方(如 /usr/local/bin).  
      先用 &quot;amixer&quot; 看看混音器设定. amixer  
      的输出会随卡的不同而有很大变化, 我的 SoundBlaster16  
      显示: 
      <blockquote> 
        <code> 
        <pre>Master         0  % (-14.00dB) : 0  % (-14.00dB)
Bass           0  % (-14.00dB) : 0  % (-14.00dB)
Treble         0  % (-14.00dB) : 0  % (-14.00dB)
Synth          0  % (-62.00dB) : 0  % (-62.00dB)
PCM            0  % (-62.00dB) : 0  % (-62.00dB)
Line-In        0  % (-62.00dB) : 0  % (-62.00dB) Mute
MIC            0  % (-62.00dB) : 0  % (-62.00dB) Mute
CD             0  % (-62.00dB) : 0  % (-62.00dB) Mute
In-Gain        0  % (-18.00dB) : 0  % (-18.00dB)
Out-Gain       0  % (-18.00dB) : 0  % (-18.00dB)
PC Speaker     0  % (-18.00dB) : 0  % (-18.00dB)
</pre> 
        </code> 
      </blockquote> 
      而我的 Crystal 4237B 的音效卡有很多其它选项: 
      <blockquote> 
        <code> 
        <pre>Master D       0  % (-22.00dB) : 0  % (-22.00dB) Mute
3D Center      0  % (-22.50dB) : 0  % (-22.50dB)
3D Space       0  % (-22.50dB) : 0  % (-22.50dB) Mute
Synth          0  % (-94.50dB) : 0  % (-94.50dB) Mute
FM             0  % (-94.50dB) : 0  % (-94.50dB) Mute
DSP            0  % (-94.50dB) : 0  % (-94.50dB) Mute
PCM            0  % (-94.50dB) : 0  % (-94.50dB) Mute
Line-In        0  % (-34.50dB) : 0  % (-34.50dB) Mute
MIC            0  % (-22.50dB) : 0  % (-22.50dB) Mute
CD             0  % (-34.50dB) : 0  % (-34.50dB) Mute
Record-Gain    0  % (  0.00dB) : 0  % (  0.00dB)
In-Gain        0  % (-18.00dB) : 0  % (-18.00dB)
Loopback       0  % (-94.50dB) : 0  % (-94.50dB) Mute
Mono           0  % (-45.00dB) : 0  % (-45.00dB) Mute
Aux A          0  % (-34.50dB) : 0  % (-34.50dB) Mute
</pre> 
        </code> 
      </blockquote> 
      <p>注意一下 &quot;Mute&quot; 那一栏, CS4237B  
      甚至连主音量也调静音了. 对 CS4237B, 我还要先打 <code>amixer  
      &quot;master d&quot; unmute</code> 以後才能发出声音. SoundBlaster  
      的输出就没有静音, 不过 <code>amixer master 100 unmute</code>  
      会将主音量解除静音, 还设为 100%. 您可以用数字, 或像  
      &quot;mute&quot; 及 &quot;unmute&quot; 的文字, 或都打, 来控制.  
      打 <code>amixer &quot;master d&quot; 100; amixer pcm 100 unmute</code>  
      可以将 CS4237B 卡的主音量设最大, 并将 PCM  
      音量解除静音并设为最大. 如果左右要不一样,  
      可以用冒号, 如 <code>amixer CD 25:50</code>.(不,  
      我不晓得那一个是指左右声道,  
      不过我强调一下这也和您的喇叭摆放位置有密切关系.) 
      <p>您应该下 <code>amixer cd rec</code> 以将 CD 当做录音的音源.  
      然後後下 <code>amixer cd norec</code>命令解除此设定.  
      如果您想要经由麦克风来录些东西, 您也许可以下 <code>amixer  
      record-gain 100; amixer mic 100 rec mute</code>(如果不将麦克风输入的放音设为静音的话,  
      麦克风会从喇叭收到本身的信号,  
      会造成高音部份音量降低.) 然而不幸的是我没能够用  
      amixer 来改变 3D center 及 3D space 的音量设定.  
      如果有人成功了, 请告知我. 这工作可由 alsamixer 来进行. 
      <p>ALSA FAQ 上面表示可以用 <code>cat &lt;file&gt; &gt; /proc/asound/#/mixerC0D0</code>  
      命令来回复混音设定, 其中 &lt;file&gt; 的内容是由 /proc/asound/#/mixerC0D0  
      中取得. 我无法重现相同的结果,  
      我的电脑抱怨此设备找不到. 
      <h2><a name="ss5.3">5.3 /dev/snd/ 下的设备</a></h2> 
      <p>ALSA 驱动程式在 /dev/snd/ 目录下有自己的驱动程式.  
      如果您有一片音效卡, 您可能看到以下设备: 
      <p> 
      <blockquote>
        <code>
        <pre>/dev/snd/pcmC0D0 - 这张音效卡的原生音效设备.
/dev/snd/mixerC0D0 - 第&quot;零&quot;号卡的混音器设备.
/dev/snd/controlC0D0 - 第&quot;零&quot;号卡的控制设备.
</pre>
        </code>
      </blockquote>
      第一个号码是指第几号音效卡.  
      第二个号码是代表单卡上的设备号码. 一张有两个 PCM  
      设备的音效卡应该有 pcmC0D0 及 pcmc0D1 设备. 
      <p>请疝N: ALSA 的设备档名和旧版已经不一样了. 旧的 ALSA  
      驱动程式用 /dev/snd/pcm00 (第一个是卡, 第二个是设备号).  
      如果看到本 HOWTO 中还有用旧的档名的, 请写封 Email  
      给我以便更正. 
      <p>现在您可以将任何您想听的音效档丢进第一片卡的 PCM  
      设备中了. 现在试试用 cat 把任何文字档(或任何档案)送进  
      /dev/snd/pcmC0D0, 就像这样: <code>cat &lt;filename&gt; &gt; /dev/snd/pcmC0D0</code>.  
      其中 filename 可以是任意档案, 只要它够大.  
      如果您已有现成的音效档, 也可以试试. 您也可以抓 <a href="http://www.ldp.org/sounds/english.au">http://www.ldp.org/sounds/english.au</a>.  
      这是 Linux Torvalds 讲 Linux 这个字如何发音的话. 
      <p>音效设备预先被设定为 8000Hz, 8 位元.  
      这意味著刚提到的 &quot;english.au&quot; 会发出讲话声,  
      而其它档可能只会发出噪音. 如果您听不到,  
      请检查您的喇叭, 或再执行 amixer 一遍或去看医师(该不会是...  
      您的耳朵聋了!?) . (稍後您可以用您喜欢的播放程式如 sox  
      或 mpg123 , 简单的来放完全的 48KHz, 16 位元声音.) 
      <p>如果您载入了 &quot;snd-pcm1-oss&quot; 模组, 您也可以利用  
      OSS 的相容性来存取音效卡. 两者间有以下的对应关系: 
      <p> 
      <blockquote>
        <code>
        <pre>/dev/snd/pcmC0D0 -&gt; /dev/audio0 (/dev/audio) -&gt; 次编号 4
/dev/snd/pcmC0D0 -&gt; /dev/dsp0 (/dev/dsp) -&gt; 次编号 3
/dev/snd/pcmC0D1 -&gt; /dev/adsp0 (/dev/adsp) -&gt; 次编号 12
/dev/snd/pcmC1D0 -&gt; /dev/audio1 -&gt; 次编号 4+16 = 20
/dev/snd/pcmC1D0 -&gt; /dev/dsp1 -&gt; 次编号 3+16 = 19
/dev/snd/pcmC1D1 -&gt; /dev/adsp1 -&gt; 次编号 12+16 = 28
/dev/snd/pcmC2D0 -&gt; /dev/audio2 -&gt; 次编号 4+32 = 36
/dev/snd/pcmC2D0 -&gt; /dev/dsp2 -&gt; 次编号 3+32 = 39
/dev/snd/pcmC2D1 -&gt; /dev/adsp2 -&gt; 次编号 12+32 = 44
</pre>
        </code>
      </blockquote>
      <p> 
      <h2><a name="ss5.4">5.4 额外的资讯</a></h2> 
      <p>在 ALSA 驱动程式目录中的 INSTALL  
      档也提到了一些小技巧, 告诉驱动程式要作何调整设定.  
      依照播放声音的用途, 您可能需要用这些命令.  
      一般的播放程式, 如 mpg123, sox(常以 ``play'' 命令来执行),  
      或 X11 应用程式如 RealPlayer都不必用到这些.  
      我本人也从没用过. 
      <p> 
      <h3>/proc/asound/#/pcm#0</h3>
      <p> 
      <p> 
      <blockquote>
        <code>
        <pre>&quot;Playback erase&quot; - 清除所有关於 OSS 应用程式的额外资讯.
&quot;Playback &lt;app_name&gt; &lt;fragments&gt; &lt;fragment_size&gt; [&lt;options&gt;]&quot;
&quot;Record erase&quot; - 清除所有关於 OSS 应用程式的额外资讯.
&quot;Record &lt;app_name&gt; &lt;fragments&gt; &lt;fragment_size&gt; [&lt;options&gt;]&quot;
</pre>
        </code>
      </blockquote>
      <p><code>&lt;app_name&gt;</code> - 应用程式名称, 包含(较优先假定)或不包含路径. 
      <p><code>&lt;fragments&gt;</code> - 片断(fragment)数, 给 0  
      则自动选择. 
      <p><code>&lt;fragment_size&gt;</code> - 一个片断的 byte 数, 或 0  
      选择自动. 
      <p><code>&lt;options&gt;</code> - 选择性的参数 
      <p><code>WR_ONLY</code> - 如果有个应用程式设开启模式为O_RDWR,  
      实际的权限将改为 O_WRONLY(播放), 对 Quake 等很有用... 
      <p>几个□例: 
      <blockquote> 
        <code> 
        <pre>echo &quot;Playback x11amp 128 16384&quot; &gt; /proc/asound/0/pcm0o
echo &quot;Playback squake 0 0 WR_ONLY&quot; &gt; /proc/asound/0/pcm0o
</pre> 
        </code> 
      </blockquote> 
      <h3>/proc/asound/#card#/sb16</h3> 
      <p> 
      <p> 
      <blockquote>
        <code>
        <pre>&quot;Playback 8&quot; -&gt; 驱动程式播放时只使用 8-bit DMA 通道.
&quot;Playback 16&quot; -&gt; 驱动程式播放时只使用 16-bit DMA 通道.
&quot;Playback auto&quot; (default) -&gt; 驱动程式自动选择(会先尝试使用 16-bit DMA 通道)
&quot;Record 8&quot; -&gt; 驱动程式录音时只使用 8-bit DMA 通道.
&quot;Record 16&quot; -&gt; 驱动程式录音时只使用 16-bit DMA 通道.
&quot;Record auto&quot; (default) -&gt; 驱动程式自动选择(会先尝试使用 16-bit DMA 通道)
</pre>
        </code>
      </blockquote>
      <p>例如: <code>echo &quot;Record 16&quot; &gt; /proc/asound/0/sb16</code> 
      <p>更进一步的资讯请参考 INSTALL 档. 
      <hr> 
      <a href="Alsa-sound-6.html"><img alt="Next" src="next.gif" width="16" height="16"></a> <a href="Alsa-sound-4.html"><img alt="Previous" src="prev.gif" width="16" height="16"></a> 
      <a href="Alsa-sound.html#toc5"><img alt="Contents" src="toc.gif" width="16" height="16"></a></td>
  </table>

</body>

</html>

⌨️ 快捷键说明

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