当前位置:Linux教程 - Linux - Alsa-sound-mini-HOWTO(六)

Alsa-sound-mini-HOWTO(六)

6.3 驱动程式载入了... 可是没声音


解除静音
ALSA 驱动程式可以运用多数音效卡都有的 ""静音"" 能力. 如果您载入了音效驱动程式, 一切看起来都还正确, 就是没有声音的话, 那麽您可能忘计把静音取消掉了. 要这麽做您要用 ""amixer"" 或 ""alsamixer"", 两者都附在驱动程式中. 只要键入:

amixer -c 1 master 70:70 unmute
amixer -c 1 pcm 70:70 unmute
amixer -c 1 cd 70:70 unmute

对多数的应用程式应该都有效的.

OSS/Linux 的相容性
如果这是您首次使用 ALSA 驱动程式, 而您以前使用过核心内建的那个的话, 您可能想要能和过去相容的能力.(即使用 /dev/pcmX 设备之能力). 这时您需要载入 ""OSS 相容驱动程式"". 执行 modprobe snd-pcm1-oss (详见关於载入本驱动程式那一节. ). 请疝N: snd-pcm1-oss 不能於 snd-pcm1. 对旧驱动程式的支援所需要的是 snd-pcm1-oss.


6.4 一般性建言


试着用 ""insmod""
用 ""insmod"" 取代 kerneld 总是有用的. 也许因此您就可以在萤幕上看到错误讯息了.


读 INSTALL 档.
在驱动程式目录中的 INSTALL 档可以发现很多资讯. 如果您的驱动程式不起作用, 别忘了看看这个档, 也许会有额外的资讯.


除错讯息
如果以上的方法还是没有用, 您可以重新编译驱动程式, 要求它将除错讯息送进 /var/log/messages 档中, 做为最後手段. 下cd /usr/src/alsa-driver-...命令进入驱动程式目录, 然後输入:


./configure --with-debug=detect; make clean; make

移除驱动程式(如果它已经启动的话, 请看後面有提到的移除模组小技巧) 然後用您刚刚用的 ""modprobe"" 指令安插新编译的驱动程式. 看看 /var/log/messages 里有没有任何相关讯息.


如果都没有用呢...
如果您无法由讯息中取得线索, 写封 Email 到 ALSA 使用者通信论坛, [email protected].

别忘了加上以下资讯:

您的音效卡的名称以及其使用的晶片.
如果您的音效卡是 ISA PnP 的, 放入 isapnp.conf 中有关的部份.
您的 conf.modules 档或是启动 ALSA 驱动程式的命令行.
所有在 /var/log/messages 中应该和 ALSA 驱动程式有关的讯息.

6.5 回报臭虫
如果您发现了一只臭虫, ALSA 驱动程式开发组希望能够得知(至少)以下资讯:

驱动程式及核心的版本: ''cat /proc/asound/version''
音效卡资讯
厂商所标示的音效卡名称
该卡上面的各个晶片标示
''cat /proc/asound/cards'' 的执行结果
所有在 /var/log/messages 中的相关讯息
问题的描述

6.6 小技巧: 听 CD 时...
如果您使用kmod/kerneld 以及 ALSA 驱动程式来听 CD, 那麽 kmod/kerneld 可能不会像预期一般载入驱动程式. 这是由於命令列的 CD 放音程式只会叫 CDROM 开始播放, 而不会使用到任何设备, 让 kmod/kerneld 来载入驱动程式. 这个问题的解可能就只有使用 modprobe 了.


6.7 小技巧: 安装 MIDI 序列驱动动程式
通常, 序列设备的 IO 埠会由标准的序列设备驱动程式占有. 所以在您可以进行 ""modprobe snd-serial"" 以前, 必须让驱动程式释放掉该序列设备.

以下是所需程序.


setserial /dev/ttyS0 uart none
modprobe snd-serial

(如果您的 MIDI 设备使用不一样的设备,将 /dev/ttyS0 换成相对应的 /dev/ttySx)


6.8 小技巧: 换新核心? 换新模组!
当您更新核心後, 您可能需要重新编译 ALSA 驱动程式. 如果它们还在原来的 /usr/src 目录下, 请别忘了在您进行 ./configure, make, make install 之前先下 make clean 命令.

喔! 还有个不太一样的核心版本编号 ""2.2.0ac1"", 会被 configure 命令档抱怨不是数字. 我想这个在新版的命令档中会解决, 不然您可能得改变原始码中的核心版本编号.


6.9 小技巧: KDE 及 ALSA 驱动程式
如果您使用了 KDE, 但却无法听到诸如开启视窗或改变使用的桌面等系统音效, 不过其它音效动作正常. 也就是您的 CD 播放, MP3 播放以及混音器都很正常, 那麽可能只是因为欠缺 ""kwmsound"" 而已.

所以: 确定在您的启动命令档($KDEDIR/bin/startkde)中有 ""kwmsound"".


6.10 小技巧: 使用 ALSA 设备
如果您以前有利用过 Linux 的音效支援, 那麽您的应用程式可能需要用到 /dev/pcm0, /dev/audio 及 /dev/mixer. 使用 OSS 相容模组 snd-pcm1-oss 是不错的解决方法, 但如果使用真正的 ALSA 设备(在 /dev/snd/下)的话那更好.


6.11 小技巧: 移除所有模组
要一个一个的移除十几个模组实在不是个好办法. 很幸运的, 所有的模组名都是由 snd- 开始, 所以用一点小小的命令列规划, 您可以轻易的下以下的命令移除 ALSA 音效驱动程式:


cat /proc/modules|gawk ''/^snd-/{print $1}|xargs -i rmmod {}

Juergen Kahrs 写道: ""我有一个命令档可以连 soundcore, soundlow 以及 sound 都一并消去, 如果它们已载入且没在使用中的话. 这个命令档处理 /proc/modules 三次, 这样在完成後应该不会有太多模组留下来."" 他的解法是:


awk ''/^snd/||/^sound/&&($3==0){system(""rmmod "" $1)}'' /proc/modules /proc/modules /proc/modules

请注意: 如果有一个模组依赖另一个模组的话, 您不可以只移除较上层的那个. 这意味着您可能有必要下第二道命令. (我从来没碰到过这种情况; 看起来您可以以依照在 /proc/modules 中的顺序移除 ALSA 模组.)