Alsa-sound-mini-HOWTO <author>Valentijn Sessink <tt/valentyn@alsa-project.org/ <newline>譯者: 伍永康 <tt/yorkwu@ms4.hinet.net/ <date>中文版v0.2, 2000年6月15日 (原v0.2, 18 May 1999) <abstract> 本文描述 Linux 的 AKSA 音效驅動程式的安裝. 由於它們相容. 這個音效驅動程式可以用來取代平常用的音效驅動程式. </abstract> <toc> <sect>Introduction <p> 這是 ALSA 音效驅動程式的 mini HOWTO. 它提供您關於安裝及使用 ALSA 音效驅動程式的資訊. ALSA 驅動程式是完全模組化, 並支援 kerneld 及 kmod. 它和 OSS API 相容, 但超越了其可能性. 一句話: 相容, 但更好. <sect1> 銘謝 <p> 本文件包含了我從 ALSA 驅動程式網站得到的資訊. 其結構是由 SB-mini-HOWTO 分來的, 主要是它的結構和我理想中的很接近. 感謝有 <htmlurl url="http://www.sgmltools.org" name="SGML">Tools 軟體, 使得本 HOWTO 只用一個共用的原始檔, 可以產生多種格式. 謝謝 Erik Warmelink 校閱(proof reading), 還有 Alfred Munnikes 提供很多問題和有助的建言, Yamahata Isaku 翻譯成日文, 以及 Miodrag Vallat 翻成法文. 接下來, Steve Crowd 很好的校訂了全文, 以及 Marc-Aur`ele Darche, Piotr Ingling, Juergen Kahrs 及 Tim Pearce 提供有用的小技巧(tip)及增補. <sect1> 版本沿革 <p> 1.4 版 - 1999 年 5 月 18 日. 加入了法文版的 URL, 改了更多 URL. 1.3 版 - 1999 年 5 月 16 日. 謝謝 Jaroslav, 在 ALSA 計畫網站建了本 HOWTO 的新家. 因此, 電郵及網站位址有了些改變. 1.2 版 - 1999 年 5 月 11 日. 幾處更新. 1.1 版 - 1999 年 3 月 11 日. 在新的 0.3 版驅動程式中加入了一些音效卡的驅動程式. 寫了一點關於 2.2 版核心的部份. 1.0 版 - 1999 年 2 月 8 日. 在問題解決那節加進了些東西, 看來蠻完整了. 0.3 beta 版 - 1999 年 1 月 20 日. 在 ALSA 網站上有了連結. 哈! 終於是正式的了! 0.2 alpha 版. 1999 年 1 月中. 第一個 sgml 版. 0.1 alpha 版. 1999 年 1 月. 第一版, 多數是 HTML. Still: please submit any patches in plain English, you native speakers! 還有: 使用英語的各位, 請多寄純英文的 patch! <sect1> 本文件的新版本在哪? <p> 最新版本可在<htmlurl url="http://www.alsa-project.org/~valentyn" name="http://www.alsa-project.org./˜valentyn">找到. 其它格式(全部的 html, sgml, txt)在 <htmlurl url="http://www.alsa-project.org/~valentyn/other-formats" name="other-formats"> 目錄下. Yamahata Isaku 翻譯了日文版, 將會放在日本 ALSA 網站, <htmlurl url="http://plaza21.mbn.or.jp/˜momokuri/alsa/index.html" name="http://plaza21.mbn.or.jp/˜momokuri/alsa/index.html"> Miodrag Vallat 翻了法文版, 可在 <htmlurl url="http://www.freenix.fr/unix/linux/HOWTO/mini/Alsa.html" name="http://www.freenix.fr/unix/linux/HOWTO/mini/Alsa.html">找到. 如果您將本文件翻成其它語言, 請讓我知道, 我將在這兒做個連結. <sect1> 回饋 <p> 這份 HOWTO 文件, 需要各位讀者協助, 才能越來越好用. 如果您有任何建議, 修正, 或意見, 請告訴作者 (<htmlurl url="mailto:alsa-howto@alsa-project.org" name="alsa-howto@alsa-project.org">) 我將會在下一版試著加入這些意見. <p> 請注意: 我還沒收到很多關於 ALSA 驅動程式的信件, 任何增加都很歡迎. 即使是 "謝謝你..." 都好. 也許文中加入 "我欣賞大半內容" 或 "這裡我還是看不太懂" 這些話並不是很困難吧! (?) (原文是 Please note: I do not get a lot of mail about the ALSA drivers and any addition is welcome. Even a ``thank you for'' is appreciated - maybe it's not too much work to add a ``I appreciated most'' or ``this-or-that was not immediately clear to me''-section. ) <p> 如果您在唯讀光碟上或以硬拷貝形式發行此文件, 請您附送我一份. 請送到我的真實地址. 也請考慮一下對 Linux 文件計畫作點奉獻, 以支持 Linux 的免費文件. 請和 Linux HOWTO 協調人 Tim Bynum (<htmlurl url="mailto:linux-howto@metalab.unc.edu" name="linux-howto@metalab.unc.edu"> ) 聯絡以得到更多資訊. <sect1> 散布時的注意事項 <p> Copyright 1998/1999 Valentijn Sessink <p> 本中文版之版權為 Valentijn Sessink 及 伍永康 所有 (1999) <p>(版權宣言原文照登) <p>This HOWTO is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. <p>本 HOWTO 是自由文件; 您可以在合乎由自由軟體基金會出版的 GNU 一般公開執照所載的條件下重新散布及/或修改它. 您可以選用該執照之第二版或(任您選)其後的版本. <p>This document is distributed in the hope that it will be useful, but <bf>without any warranty</bf>; without even the implied warranty of <bf>merchantability</bf> or <bf>fitness for a particular purpose</bf>. See the GNU General Public License for more details. <p>本文件之散布, 是希望能有用, 但<bf>不提供任何保證</bf>; 即使是 <bf>商業上</bf> 或 <bf>合於特定用途</bf> 的隱含保證亦無. 詳情請看 GNU 一般公開執照. <p>You can obtain a copy of the GNU General Public License by writing to the <htmlurl url="http://www.fsf.org" name="Free Software Foundation">, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. <p>您可以寫信到<htmlurl url="http://www.fsf.org" name="自由軟體基金會">, 地址是 675 Mass Ave, Cambridge, MA 02139, USA. 來取得 GNU 一般公開執照. <p> <sect> 在開動之前 <p> <sect1> 緒論 <p> 本文件嘗試幫助您在 Linux 下安裝及使用 ALSA 音效驅動程式. 參考系統使用 AMD/K6 (x86 相容)的機器, 裝 Slackware 3.5 發行套件. 不過應該裝在任何其它 Linux 發行套件都不成問題. 由文件中 ALSA 驅動程式是否可在其它平台使用不得而知. Alpha 已經測試證明可用. 我這兒只有 x86 PC, 所以您要是有任何多的資料都很歡迎. 讀 Linux Sound HOWTO(請看其它 HOWTO 那一節)可能更有幫助, 但那個 HOWTO 主要是在討論核心內建的音效驅動程式. <sect1> 關於 ALSA 驅動程式的一般資訊 <p> ALSA 音效驅動程式原本是寫來取代 Gravis UltraSound 卡的 Linux 核心驅動程式的. 當實證這取代得很成功, 作者便開始 ALSA 計畫, 以完全模組的設計, 寫一個給幾種音效晶片的一般驅動程式. 它和 OSS/Free 及 OSS/Linux 音效驅動程式相容(核心的驅動程式), 但它有比 OSS 軀動程式更好的本身介面. 一些優點可以在<htmlurl url="http://www.alsa-project.org/intro.html" name="http://www.alsa-project.org/intro.html">看到. ALSA 計畫主網頁在 <htmlurl url="http://www.alsa-project.org/" name="http://www.alsa-project.org/"> <sect1> 支援的硬體 <p> ALSA 驅動程式僅支援部份的音效卡. 在本文寫作時, 以下的卡有被支援: <itemize> <item> 使用 Trident 4D Wave DX/NX 晶片的卡, 感謝 Trident Microsystem 提供了 ALSA "第一手" GPL 驅動程式(僅 MIXER 及 PCM 設備), 以及他們的 4D Wave PCI 音效晶片的文件. 請看 http://www.tridentmicro.com/HTML/products%20folder/audio.htm 得到更多資訊. 這驅動程式現已在 CVS, 將在 ALSA 0.3.0-pre5 中加入. <item> Gravis Ultrasound (GUS): "PnP",  Extreme, Classic/ACE, MAX </item> <item> 使用 GUS 晶片的卡: Dynasonic 3-D, STB Sound Rage 32, UltraSound 32-Pro (STB) </item> <item> 聲霸卡: 1.0, 2.0, Pro, 16, AWE32/64, PCI64</item> <item> ESS AudioDrive ESx688</item> <item> ESS ES18xx (chipsets). 請注意我個人在 ESS1888 上經歷過很多麻煩. 這個驅動程式的開發者已盡力了, but to no avail.</item> <item> ESS Solo-1 ES1938</item> <item> Yamaha: OPL3-SA2, OPL3-SA3 (晶片組)</item> <item> OAK Mozart</item> <item> Schubert 32 PCI (PINE, S3 SonicVibes PCI 晶片組)</item> <item> Ensoniq AudioPCI ES1370/1371 PCI 音效卡 (Soundblaster PCI64)</item> <item> SonicVibes PCI 音效卡 (PINE Schubert 32 PCI)</item> </itemize> 接著一大票的 Crystal Semiconductors 的卡都支援. 這些晶片可在很多硬體上看到, 有在音效卡上的(如 Philips PCA 系列), 也有主機板內建的(如 IBM Aptiva, Dell computers) 以下的晶片組有支援. <itemize> <item> 4232</item> <item> 4232A</item> <item> 4235</item> <item> 4236B</item> <item> 4237B</item> <item> 4238B</item> <item> 4239</item> </itemize> 更新的列表在驅動程式套件中的 doc/SOUNDCARDS 中可找到. <sect1> 其它 HOWTO <p> ALSA-sound-mini-HOWTO 只是迷你版. 有些情形下這篇就有點簡略了, 看其它 HOWTO 可能對您有幫助. 我會點出您嘗試安裝 ALSA 驅動程式時可能會碰上的一些狀況. 一般來說, HOWTO 可以在 metalab(先前的 sunsite)的鏡射站 (mirror site)找到. 因此請先找找<htmlurl url="http://metalab.unc.edu/LDP/mirrors.html" name="http://metalab.unc.edu/LDP/mirrors.html">, 去離你最近的鏡射站閱讀. 您可以在 LDP/HOWTO 目錄下找到 HOWTO 文件. 請注意: 本文件的連結是相對於 /LDP/HOWTO/mini 的. 如果您從鏡射得很一致的站台看, 您就能找到這些 HOWTO. 另外對 2.2.x 核心作點補充. 在 2.2.x 系列核心裡, 音效支援就如同其它支援一般, 它還能用, 但和您習慣的用法不同. 本 HOWTO (就像其它 HOWTO 一樣) 以 2.0 系列核心為主, 不過我會試著指明兩者之不同點. 我將很高興加入任何使本 HOWTO 能跟上 2.2 系列的東西. <sect2> 音效卡 <p> 也許您已經買了片音效卡, 甚至已經裝在您的電腦好幾年了. 現在您可以用它了! 可以先看看 <htmlurl url="../Sound-HOWTO.html" name="Sound-HOWTO">, 看看是不是值得冒這個風險. (您也許想買新的什麼 Mega-Rumble-Blaster 的卡, 試試 ALSA 驅動程式. <sect2> 隨插即用的卡 <p> 多數在 Intel 平台的新音效卡是 ISA PnP 卡, 是 "Plug and Play" 的縮寫. 其意是指這張卡必須經由作業系統設定. 這必須在開機時經由一個程序完成. 您也許需要運用 PnP-utils 套件來完成設定. 最近的每種 Linux 發行套件都包含這些工具. 用法請參照 <htmlurl url="../Plug-and-Play-HOWTO.html" name="Plug-and-Play-HOWTO"> ALSA 驅動程式似乎對一些卡有做一些自己的 ISA 隨插即用支援. 然而不幸的, 因為我 無法找到相關文件, 我無法向您說明怎麼做. 如果有人想試 ALSA 音效支援但不想用 ISA-PnP-tools, 請給我一點說明. <sect2> 可載入模組 <p> ALSA 音效驅動程式是建為模組的. 您可以在 <htmlurl url="../Kernel-HOWTO.html" name="Kernel-HOWTO"> 中得到關於模組的更多資訊. 也有個 module-HOWTO, 但目前已 無人維護; 請在 Howto-HOWTO 那裡看看無人維護的文件那小節. 有個 <htmlurl url="Modules.html" name="Modules-mini-HOWTO"> 或許有用. (?) <sect2> Kerneld <p> 另外有一個對某些人有用的 HOWTO 是 <htmlurl url="Kerneld.html" name="Kerneld-mini-HOWTO">. Kerneld 是個在需要時才安裝及移除核心模組的 常駐程式(daemon). (筆者對此沒有經驗, 所以歡迎提供任何資訊. ALSA 驅動程式文件 包含了一些關於設定 kerneld 的資訊, 並已包含於本 mini-HOWTO.) <sect> 如何安裝 ALSA 音效驅動程式 <p> <sect1> 您需要什麼 <p> <itemize> <item> 一套能動的 Linux 系統(如 Slackware 發行套件), 並有安裝開發工具套件(像 gcc, make 等).) </item> <item> 支援的音效卡</item> <item> 一些 Linux 的知識(您總要曉得 "ls", "cd", "tar" 等怎麼用. ) </item> <item> root 帳號 </item> </itemize> 如果您有 PnP 卡, 您也需要: <itemize> <item> isapnptools 軟體套件 </item> </itemize> 在驅程式目錄中的 INSTALL 檔內文提到對有些卡驅動程式內已經能處理 PnP 的支援. 我也從 Jaroslav 那兒得到一樣的論點. 如果我將來得到更多資訊, 我會將它們加進本 mini-HOWTO. (原文是 The INSTALL text in the driver directory suggests that for some cards, PnP support is native. I also received a suggestion from Jaroslav about this. When I get further information about this topic I will add it to this mini-HOWTO. } 請注意如果您想使用 ALSA 驅動程式, 那麼您不應該先載入任何其它音效驅動程式. 如果您的核心中內含音效驅動程式, 那麼有必要重編譯核心. 如果您正在使用舊的 sound.o 模組, 您必須解除它. 如果您使用 kerneld, 這可能就是要您刪去 /lib/modules/<核心版本>/misc 目錄下的 sound.o. 新的 RedHat 系統的音效驅動程式組織方式不太一樣, 要載入好幾個模組, 這種情況您需要解除全 部的模組. 2.2 版核心對音效則採用了新的方式. 您應該要包含音效的支援! 是的, 沒有說錯, 您在核心中加入了對音效的支援, 但沒有包含任何音效卡的部份. 然後重編譯及安裝核心, 接著編譯 ALSA 驅動程式. <sect1> 取得驅動程式 <p> ALSA 驅動程式可在 <htmlurl url="ftp://ftp.alsa-project.org/pub/" name="ftp://ftp.alsa-project.org/pub"> 找到, 並且在 <htmlurl url="ftp://linux.a2000.nl/alsa" name="ftp://linux.a2000.nl/alsa"> 有一份鏡射(mirror). 要安裝 ALSA 的完整功能, 您需要驅動程式, 函式庫及一些公用程式; 也就是說如果您由鏡射站抓您應該 <htmlurl url="ftp://linux.a2000.nl/alsa/driver/" name="ftp://linux.a2000.nl/alsa/driver/">alsa-driver-0.3.0-pre4.tar.gz, <htmlurl url="ftp://linux.a2000.nl/alsa/lib/" name="ftp://linux.a2000.nl/alsa/lib/">alsa-lib-0.3.0pre4.tar.gz, 還有 <htmlurl url="ftp://linux.a2000.nl/alsa/utils/" name="ftp://linux.a2000.nl/alsa/utils/">alsa-utils-0.3.0-pre4.tar.gz. (喔, 上面的不是完整的連結, 您最好到原地點看看有沒有新版, 並抓最新的.) <sect1> 解開驅動程式 <p> 用合理的命令像 tar -zxf <file> 解開驅動程式. 以下的是寫給新手或常忘記的人: (You extract the drivers by some reasonable command, like the all-time tar -zxf <file>. For newbies and for those with amnesia:) <tscreen><verb>cd /usr/src</verb></tscreen> <tscreen><verb>tar -zxf ˜/alsa-driver-0.3.0-pre4.tar.gz</verb></tscreen> (如果成功了, 您可能一直使用 root 身份進系統, 這是不對的, 停下來並讀一下 DOS/Win95-to-Linux-HOWTO. 不是這樣的話, 您已經知道這是關於系統管理(administrative)的事, 您需要 superuser/root 權限. 所以, 您需要 root 權限, 輸入 su 以及密碼. <tscreen><verb>tar -zxf ˜/alsa-lib-0.3.0pre4.tar.gz</verb></tscreen> <tscreen><verb>tar -zxf ˜/alsa-utils-0.3.0-pre4.tar.gz</verb></tscreen> 下這樣的命令也可以, 且更有趣: find ˜ -name alsa* -exec tar -zxf {} \; (孩子, 不要在家試這個, 這只是個範例而已. )注意如果您使用 Netscape 下載驅動程式, 您可能抓下的是解開過的, 但延伸檔名還是 .tgz. 如果 tar 抱怨檔案格式不對, 把 tar 命令中的 "z" 選項去掉, 可以得到較好的結果. <sect1> 編譯 <p> 在您可以編譯及使用函式庫以前, 您需要先有驅動程式. 而有了函式庫後才可以編譯使用公用程式. 所以我們開始吧: <tscreen><verb>cd alsa-driver-0.3.0-pre4</verb></tscreen> (給那些不太有經驗的: 在 "alsa-d" 後接著按 <tab> ("tab" 鍵). 這樣就會叫出 <it>命令列自動補完(command line completion)</it>.) (譯注: 有更好的翻法嗎?) <tscreen><verb>./configure</verb></tscreen> <tscreen><verb>make</verb></tscreen> 現在您需要用 root 身份安裝東東(可能您已經是 root 了) <tscreen><verb>make install</verb></tscreen> 如果它回應像 "version.h" 檔找不到之類的, 您可能沒有妥善安裝核心原始碼. 要編譯 ALSA 驅動程式需要核心原始碼中的一些檔案, 所以您把想用的 linux-2.x.y.tar.gz 在 /usr/src 下解開, 並下 <tt>make menuconfig</tt> 命令. (實際上, <tt>make symlinks</tt> 可能就夠了). 現在編譯函式庫: <tscreen><verb>cd ../alsa-lib-0.3.0-pre4</verb></tscreen> <tscreen><verb>./configure</verb></tscreen> <tscreen><verb>make</verb></tscreen> <tscreen><verb>make install</verb></tscreen> OK, 您已經成功了, 再來是公用程式: <tscreen><verb>cd ../alsa-utils-0.3.0-pre4</verb></tscreen> <tscreen><verb>./configure</verb></tscreen> <tscreen><verb>make</verb></tscreen> <tscreen><verb>make install</verb></tscreen> 注意: 在第一次編譯公用程式時可先不打 "make install". 甚至您可以先不要動函式庫及公用程式, 只檢查一下確定驅動程式能不能用. <sect1> 準備設備檔 <p> 在驅動程式目錄下有個命令稿(script)可以把 ALSA 的音效設備檔安裝進 /dev 目錄. 在驅動程式目錄下打入 <tscreen><verb>./snddevices</verb></tscreen> 如此應該有 /dev/snd 子目錄了(先看看有沒有. 如果您甚至連 "ls" 命令都不熟, 請考慮先讀別的 HOWTO. 在安裝本驅動程式前您應該有些基本的 Linux 知識才對.) <p> 現在您可以安插驅動程式了. 請跳到下一段吧. <sect> 載入驅動程式 <p> 有兩種使用 ALSA 音效模組的方法. 筆者個人比較喜歡使用手動的方法, 也就是在開機 時安插驅動程式. ALSA 驅動程式是以可載入/卸除模組為目標來設計 -- 例如說它們不會在載入後重設音量 -- 所以您可以簡單地使用 kerneld 的方法. (譯注: 原文直譯為 ALSA 驅動程式設計成可載入/卸除模組, 但譯者認為 OSS 也可以 這麼做(只差它會重設音量, 對模組使用者來說較不方便, 雖然解決辦法是有(見 Sound HOWTO)), 這麼翻無法凸顯 ALSA 的優點, 故翻成上面的意思. 希望沒誤解...) 請一定要閱讀<ref id="backw-compat" name="向前相容">這節, 如果您想要和以前的程式相容的話. <sect1> 用 modprobe 安插驅動程式 <p> 請注意: 如果您有 PnP 音效卡, 您首先要設定正確的(或至少是已知的) IO/IRQ/DMA. 請讀 Plug-and-Play-HOWTO. 您已經設定過您的 隨插即用 音效卡了嗎? 好, 那麼請繼續讀下去. 主要部份是 "modprobe snd-<soundcard>", 這樣應該就可以. 不過並非所有安裝套件都把 /sbin 包含在您的 PATH 環境變數下. 如果您得到 "bash: modprobe: command not found" 這樣的回應, 可能是由於 modprobe 沒有在 path 中. 試著用 "/sbin/modprobe snd-sb16", 或想辦法找出 modprobe 公用程式在哪. 對 Crystal 晶片組的卡來說可能最困難. ALSA 驅動程式不對這些卡進行自動偵測. 更進一步的資訊記載在驅動程式目錄下的 INSTALL 檔中. 接下來筆者舉兩個例子, 然後接著是個列表: Gravis UltraSound (GUS) 及相容卡: <tscreen><verb>/sbin/modprobe snd-gusclassic</verb></tscreen> 對完全 16 位元的 SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP): <tscreen><verb>/sbin/modprobe snd-sb16</verb></tscreen> <sect1>那張卡應該用哪個驅動程式?<p> <sect2>Gravis UltraSound Extreme<p> <tt/modprobe snd-gusextreme/ <sect2>Gravis UltraSound MAX<p> <tt/modprobe snd-gusmax/ <sect2>ESS AudioDrive<p> ESS AudioDrive ES-1688 及 ES-688 音效卡 <tt/modprobe snd-audiodrive1688/ <sect2>Gravis UltraSound PnP<p> Gravis UltraSound PnP, Dynasonic 3-D/Pro, STB Sound Rage 32 以及其它用 AMD InterWave (tm) 晶片的音效卡. <tt/modprobe snd-interwave/ <sect2>UltraSound 32-Pro<p> UltraSound 32-Pro (STB 製 Compaq 使用) 及其它使用 AMD InterWave (tm) 晶片以及用 TEA6330T 電路來做 bass, treble 及主音量控制的卡. <tt/modprobe snd-interwave-stb/ <Sect2>Soundblaster<p> 8-bit Soundblaster 卡 (SoundBlaster 1.0, SoundBlaster 2.0, SoundBlaster Pro) <tt/modprobe snd-sb8/ <Sect2>Soundblaster 16<p> 16-bit SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP). 請注意本模組不支援 SoundBlaster VibraX16 音效卡. <tt/modprobe snd-sb16/ <Sect2>Yamaha OPL3-SA2/SA3 音效卡<p> 光是 "modprobe snd-opl3sa" 是無效的, 驅動程式不會自動偵測. 請看後面. <Sect2>S3 SonicVibes<p> S3 SonicVibes PCI 音效卡. (PINE Schubert 32 PCI) <tt/modprobe snd-sonicvibes/ <Sect2>Ensoniq/Soundblaster PCI64<p> Ensoniq AudioPCI ES1370/1371 PCI 音效卡. (SoundBlaster PCI 64) <tt/modprobe snd-audiopci/ <Sect2>CS4232/4232A<p> 所有使用 CS4232/CS4232A 晶片的音效卡. 光是 "modprobe snd-card-cs4232" 沒用, 不自動偵測, 看後面. <Sect2>4235 以及其後的<p> 所有使用 CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 晶片的. 光是 "modprobe snd-card-cs4236" 沒用, 不自動偵測, 看後面. <sect1> 不自動偵測時怎麼載入驅動程式 <p> 如果您要用的驅動程式不自動偵測, 您必須在讓驅動程式運作前先提供額外資訊. 更多資訊可在驅動程式目錄下的 INSTALL 檔中找到. <sect2> OPL3-SA2 及 OPL3-SA3 <p> 根據 INSTALL 檔, 您需要提供驅動程式一切資訊. 如果您用 isapnp-tools 來初始化您的卡, 也許可以在 /etc/isapnp.conf 檔中看到像下面的值: <tscreen><verb>snd_port - control port # for OPL3-SA chip snd_wss_port - WSS port # for OPL3-SA chip (0x530,0xe80,0xf40,0x604) snd_midi_port - port # for MPU-401 UART (0x300,0x330), -1 = disable snd_fm_port - FM port # for OPL3-SA chip (0x388), -1 = disable snd_irq - IRQ # for OPL3-SA chip (5,7,9,10) snd_dma1 - first DMA # for Yamaha OPL3-SA chip (0,1,3) snd_dma1_size - max first DMA size in kB (4-64kB) snd_dma2 - second DMA # for Yamaha OPL3-SA chip (0,1,3), -1 = disable snd_dma2_size - max second DMA size in kB (4-64kB)</verb></tscreen> 您要用 "modprobe snd-opl3sa snd_port=0xNNN snd_wss_port=0x530 snd_midi_port=-1 snd_fm_port=0x388 snd_irq=5 snd_dma1=0 snd_dma1_size=NN snd_dma2=1 snd_dma2_size=NN" 命令來載入驅動程式(沒有 midi 支援, 我仍然相信如果您有合成器之類想連上 Linux 主機, 您需要它. 如果只是聽 MIDI 檔就不必了.) 上例的 "NN" 值您要給真正的值, 我不曉得合理值是多少, 所以才這麼寫. 我不曉得 dma 大小的參數是不是非要不可. <sect2> CS4232/CS4232A 晶片 <p> 根據 INSTALL 檔所言, 對這些卡您要提供 midi port 的資訊. 注意對下面例中的卡, 它使用給 3235/6/7/8/9 的驅動程式, 我給了所有資訊(除了 DMA 大小), 不然它不會動. 所以您也許就用這整段命令列來載 入驅動程式吧! 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看到這些值: <tscreen><verb>snd_port - port # for CS4232 chip (PnP setup - 0x534) snd_cport - control port # for CS4232 chip (PnP setup - 0x120) snd_mpu_port - port # for MPU-401 UART (PnP setup - 0x300), -1 = disable snd_fm_port - FM port # for CS4232 chip (PnP setup - 0x388), -1 = disable snd_jport - joystick port for CS4232 chip (PnP setup - 0x200), -1 = disable snd_irq - IRQ # for CS4232 chip (5,7,9,11,12,15) snd_mpu_irq - IRQ # for MPU-401 UART (9,11,12,15) snd_dma1 - first DMA # for CS4232 chip (0,1,3) snd_dma1_size - max first DMA size in kB (4-64kB) snd_dma2 - second DMA # for Yamaha CS4232 chip (0,1,3), -1 = disable snd_dma2_size - max second DMA size in kB (4-64kB)</verb></tscreen> 對標準設定值的卡, 您要用 "modprobe snd-card-cs4232 snd_port=0x534 snd_cport=0x120 snd_mpu_port=-1 snd_fm_port=0x388 snd_jport=-1 snd_irq=5 snd_dma1=0 snd_dma1_size=NN snd_dma2=1 snd_dma2_size=NN" 命令來載入驅動程式(沒有 midi 支援, 請看 Yamaha OPL-3 的注意事項, 又, 沒有支援搖桿). 如果您的 /etc/isapnp.conf 中的值不同, 那麼這裡的值也該變一下. (用用您的頭腦想想比較好 ;) 上例的 "NN" 值您要給真正的值, 我不曉得合理值是多少, 所以才這麼寫. 我不曉得 dma 大小的參數是不是非要不可. <sect2> CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 chips <p> 根據 INSTALL 檔所言, 對這些卡您要提供 midi port 以及 control port 的資訊. 注意對 CS4237B 的卡, 我給了所有資訊(除了 DMA 大小), 不然它不會動. 所以您也許就用這整段命令列來載 入驅動程式, 不只是有 snd_port 及 snd_cport 而已. 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看到這些值: <tscreen><verb>snd_port - port # for CS4232 chip (PnP setup - 0x534) snd_cport - control port # for CS4232 chip (PnP setup - 0x120) snd_mpu_port - port # for MPU-401 UART (PnP setup - 0x300), -1 = disable snd_fm_port - FM port # for CS4232 chip (PnP setup - 0x388), -1 = disable snd_jport - joystick port for CS4232 chip (PnP setup - 0x200), -1 = disable snd_irq - IRQ # for CS4232 chip (5,7,9,11,12,15) snd_mpu_irq - IRQ # for MPU-401 UART (9,11,12,15) snd_dma1 - first DMA # for CS4232 chip (0,1,3) snd_dma1_size - max first DMA size in kB (4-64kB) snd_dma2 - second DMA # for Yamaha CS4232 chip (0,1,3), -1 = disable snd_dma2_size - max second DMA size in kB (4-64kB)</verb></tscreen> 您要用 "modprobe snd-card-cs4232 snd_port=0x534 snd_cport=0x120 snd_mpu_port=-1 snd_fm_port=0x388 snd_jport=-1 snd_irq=5 snd_dma1=0 snd_dma1_size=NN snd_dma2=1 snd_dma2_size=NN" 命令來載入驅動程式(沒有 midi 支援, 請看 Yamaha OPL-3 的注意事項, 又, 沒有支援搖桿). 注意事項: <itemize> <item>"NN" 值要給真正的, 我不知道合理值是多少才這麼寫. </item> <item>我的 CS4237B 卡沒有明白指定 DMA 大小也用得很好. </item> </itemize> <sect1> 使用 kerneld 來載入 <p> <tt>kerneld</tt> 是個在需要時插入模組, 並在不再使用時卸除它們的服務程式(daemon). 由於筆者沒用過 kerneld, 不曉得下 面的資訊準不準確. 以下資訊來自 ALSA 驅動程式套件的 INSTALL 檔. 關於 kerneld 的詳盡資訊可在 kerneld-mini-HOWTO 中找到. <p>照以下步驟做: <itemize> <item> 編輯 /etc/conf.modules(後有範例) </item> <item> 執行 'modprobe snd-card', 其中 snd-card 是您的音效卡名稱 [ 我覺得奇怪, kerneld 應該負責載入它不是嗎? VS] </item> </itemize> 這是 Gravis UltraSound PnP 音效卡的 /etc/conf.modules 範例: <tscreen><verb>alias char-major-14 snd alias snd-minor-oss-0 snd-interwave alias snd-minor-oss-3 snd-pcm1-oss alias snd-minor-oss-4 snd-pcm1-oss alias snd-minor-oss-5 snd-pcm1-oss alias snd-minor-oss-12 snd-pcm1-oss alias snd-card-0 snd-interwave options snd snd_major=14 snd_cards_limit=1 options snd-interwave snd_index=1 snd_id="guspnp" snd_port=0x220 snd_irq=5 snd_dma1=5 snd_dma2=6</verb></tscreen> 如果您想插更多卡, 這兒有範例(是同時有 Gravis UltraSound Classic 及 Sound Blaster 16 的情形) <tscreen><verb>alias char-major-14 snd alias snd-minor-oss-0 snd-mixer alias snd-minor-oss-3 snd-pcm1-oss alias snd-minor-oss-4 snd-pcm1-oss alias snd-minor-oss-5 snd-pcm1-oss alias snd-minor-oss-12 snd-pcm1-oss alias snd-card-0 snd-sb16 alias snd-card-1 snd-gusclassic options snd snd_major=14 snd_cards_limit=2 options snd-sb16 snd_index=1 snd_port=0x220 snd_irq=5 snd_dma8=1 snd_dma16=5 options snd-gusclassic snd_index=2 snd_irq=11 snd_dma1=6 snd_dma2=7</verb></tscreen> 如果有兩片 Gravis UltraSound Classic 音效卡, 就像下例: <tscreen><verb>alias char-major-14 snd alias snd-minor-oss-0 snd-mixer alias snd-minor-oss-3 snd-pcm1-oss alias snd-minor-oss-4 snd-pcm1-oss alias snd-minor-oss-5 snd-pcm1-oss alias snd-minor-oss-12 snd-pcm1-oss alias snd-card-0 snd-gusclassic alias snd-card-1 snd-gusclassic options snd snd_major=14 snd_cards_limit=2 options snd-gusclassic snd_index=1,2 snd_port=0x220,0x260 snd_irq=5,11 snd_dma1=5,6 snd_dma2=7,3</verb></tscreen> <sect1> 向前相容<label id="backw-compat"> <p>如果您想保留 OSS/Free 或 OSS/Linux 的相容性, 您還要再加一個驅動程式: snd-pcm1-oss 驅動程式, 提供 OSS 相容性. 下 <tscreen><verb>modprobe snd-pcm1-oss</verb></tscreen> 命令. 這將提供 /dev/audio 及 /dev/dsp 的支援, 就像 OSS/Free (核心)驅動程式及 OSS/Linux (要 25 美金的)所做的一樣. 注意這只是模擬而已. <sect> 測試及使用 <p> 現在應該是試試驅動程式是不是真能用的時候了. 接者就是使用它. <sect1> /proc 檔案系統 <p> 您可以在 /proc 目錄下找到很多關於您的系統的有用資訊. /proc 是一個"虛擬的"檔案系統, 意即它並非真正存在, 而是和您正在執行的各程序間的連結. 要讓 /proc 可用, 您需要將它編譯進核心. 多數 Linux 安裝套件已將它設為預設值, 但如果您重編譯並且並沒有將 /proc 包進來, 那麼在 /proc 下將什麼也沒有. /proc/modules 記載了關於載入的模組的資訊. 當 ALSA 音效驅動程式載入後, 如果您 打入 cat /proc/modules, 應該看到像這樣的東西: <tscreen><verb>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</verb></tscreen> 如果在安裝驅動程式時有哪步搞錯了, 您仍能看到一堆 "snd" 設備, 但沒有音效支援. 例如說(請千萬不要照著下面下命令, cs4236 驅動程式需要參數): <tscreen><verb>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</verb></tscreen> 您可藉由看 /proc/asound/cards 內容來看音效卡是否存在. 例如: <tscreen><verb>bash$ cat /proc/asound/cards 0 [card1 : SB16 - Sound Blaster 16 Sound Blaster 16 at 0x220, irq 5, dma 1&5</verb></tscreen> 在剛剛的例子中(就是我忘了加參數的), 輸出會是像: <tscreen><verb>win3:˜# cat /proc/asound/cards --- no soundcards ---</verb></tscreen> 若 CS4236 卡能用, 將有以下輸出 <tscreen><verb>0 [card1 ]: CS4236 - CS4237B CS4237B at 0x534, irq 7, dma 1&0</verb></tscreen> 如果您再三檢查您的設定正確後, 仍然找不到音效卡, 那麼去看看問題解決那節. <tt>/proc/asound/</tt> 虛擬目錄顯示了關於此驅動程式的許多資訊. 請注意 /proc/asound 在您載入第一個 ALSA 模組後才會出現. 如果沒有 /proc/asound, 那麼就是 "snd" 模組沒有正確安裝好. 您可以在 /proc/asound/cards 檔中找到安裝好的卡, 然後在 /proc/asound/0 找到關於 0 號卡, /proc/asound/1 中關於 1 號卡的資訊. 如果 <tt>cat /proc/asound/</tt> 顯示像 <tscreen><verb> ES1370 DAC2/ADC Playback isn't active. Record isn't active.</verb></tscreen> 這是說您的驅動程式一切都很好, 但目前並沒有事做(所以一切正常). 還有第三種找音效設備的方法, 就是如果您有 OSS 相容驅動程式, 那麼就有 /dev/sndstat 設備檔. ALSA 驅動程式會體貼的提醒您不要依賴這些資訊, 它只是為跟 OSS 相容而做的. 由 /proc/asound 可以簡單的得到更好的資訊. <sect1> 混音器 <p> 一旦您的音效卡裝好, 而 /proc 檔案系統也這麼顯示後, 您可以試試真正發出聲音. 首先呢, 安裝公用程式套件, 或至少把 "amixer" 命令放到一些合理的地方(如 /usr/local/bin). 先用 "amixer" 看看混音器設定. amixer 的輸出會隨卡的不同而有很大變化, 我的 SoundBlaster16 顯示: <tscreen><verb>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)</verb></tscreen> 而我的 Crystal 4237B 的音效卡有很多其它選項: <tscreen><verb>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</verb></tscreen> 注意一下 "Mute" 那一欄, CS4237B 甚至連主音量也調靜音了. 對 CS4237B, 我還要先打 <tt>amixer "master d" unmute</tt> 以後才能發出聲音. SoundBlaster 的輸出就沒有靜音, 不過 <tt>amixer master 100 unmute</tt> 會將主音量解除靜音, 還設為 100%. 您可以用數字, 或像 "mute" 及 "unmute" 的文字, 或都打, 來控制. 打 <tt>amixer "master d" 100; amixer pcm 100 unmute</tt> 可以將 CS4237B 卡的主音量設最大, 並將 PCM 音量解除靜音並設為最大. 如果左右要不一樣, 可以用冒號, 如 <tt>amixer CD 25:50</tt>.(不, 我不曉得那一個是指左右聲道, 不過我強調一下這也和您的喇叭擺放位置有密切關係.) 您應該下 <tt>amixer cd rec</tt> 以將 CD 當做錄音的音源. 然後後下 <tt>amixer cd norec</tt>命令解除此設定. 如果您想要經由麥克風來錄些東西, 您也許可以下 <tt>amixer record-gain 100; amixer mic 100 rec mute</tt>(如果不將麥克風輸入 的放音設為靜音的話, 麥克風會從喇叭收到本身的信號, 會造成高音部份音量降低.) 然而不幸的是我沒能夠用 amixer 來改變 3D center 及 3D space 的音量設定. 如果 有人成功了, 請告知我. 這工作可由 alsamixer 來進行. ALSA FAQ 上面表示可以用 <tt>cat <file> > /proc/asound/#/mixerC0D0</tt> 命令來回復混音設定, 其中 <file> 的內容是由 /proc/asound/#/mixerC0D0 中取得. 我無法重現相同的結果, 我的電腦抱怨此設備找不到. <sect1> /dev/snd/ 下的設備 <p> ALSA 驅動程式在 /dev/snd/ 目錄下有自己的驅動程式. 如果您有一片音效卡, 您可能看到以下設備: <tscreen><verb> /dev/snd/pcmC0D0 - 這張音效卡的原生音效設備. /dev/snd/mixerC0D0 - 第"零"號卡的混音器設備. /dev/snd/controlC0D0 - 第"零"號卡的控制設備. </verb></tscreen> 第一個號碼是指第幾號音效卡. 第二個號碼是代表單卡上的設備號碼. 一張有兩個 PCM 設備的音效卡應該有 pcmC0D0 及 pcmc0D1 設備. 請疝N: ALSA 的設備檔名和舊版已經不一樣了. 舊的 ALSA 驅動程式用 /dev/snd/pcm00 (第一個是卡, 第二個是設備號). 如果看到本 HOWTO 中還有用舊的檔名的, 請寫封 Email 給我以便更正. 現在您可以將任何您想聽的音效檔丟進第一片卡的 PCM 設備中了. 現在試試用 cat 把任何文字檔(或任何檔案)送進 /dev/snd/pcmC0D0, 就像這樣: <tt>cat <filename> > /dev/snd/pcmC0D0</tt>. 其中 filename 可以是任意檔案, 只要它夠大. 如果您已有現成的音效檔, 也可以試試. 您也可以抓 <htmlurl url="http://www.ldp.org/sounds/english.au" name="http://www.ldp.org/sounds/english.au">. 這是 Linux Torvalds 講 Linux 這個字如何發音的話. 音效設備預先被設定為 8000Hz, 8 位元. 這意味著剛提到的 "english.au" 會發出講話聲, 而其它檔可能只會發出噪音. 如果您聽不到, 請檢查您的喇叭, 或再執行 amixer 一遍或去看醫師(該不會是... 您的耳朵聾了!?) . (稍後您可以用您喜歡的播放程式如 sox 或 mpg123 , 簡單的來放完全的 48KHz, 16 位元聲音.) 如果您載入了 "snd-pcm1-oss" 模組, 您也可以利用 OSS 的相容性來存取音效卡. 兩者間有以下的對應關係: <tscreen><verb> /dev/snd/pcmC0D0 -> /dev/audio0 (/dev/audio) -> 次編號 4 /dev/snd/pcmC0D0 -> /dev/dsp0 (/dev/dsp) -> 次編號 3 /dev/snd/pcmC0D1 -> /dev/adsp0 (/dev/adsp) -> 次編號 12 /dev/snd/pcmC1D0 -> /dev/audio1 -> 次編號 4+16 = 20 /dev/snd/pcmC1D0 -> /dev/dsp1 -> 次編號 3+16 = 19 /dev/snd/pcmC1D1 -> /dev/adsp1 -> 次編號 12+16 = 28 /dev/snd/pcmC2D0 -> /dev/audio2 -> 次編號 4+32 = 36 /dev/snd/pcmC2D0 -> /dev/dsp2 -> 次編號 3+32 = 39 /dev/snd/pcmC2D1 -> /dev/adsp2 -> 次編號 12+32 = 44 </verb></tscreen> <sect1> 額外的資訊 <p> 在 ALSA 驅動程式目錄中的 INSTALL 檔也提到了一些小技巧, 告訴驅動程式要作何調整設定. 依照播放聲音的用途, 您可能需要用這些命令. 一般的播放程式, 如 mpg123, sox(常以 ``play'' 命令來執行), 或 X11 應用程式如 RealPlayer都不必用到這些. 我本人也從沒用過. <sect2> /proc/asound/#/pcm#0 <p> <tscreen><verb>"Playback erase" - 清除所有關於 OSS 應用程式的額外資訊. "Playback <app_name> <fragments> <fragment_size> [<options>]" "Record erase" - 清除所有關於 OSS 應用程式的額外資訊. "Record <app_name> <fragments> <fragment_size> [<options>]"</verb></tscreen> <tt><app_name></tt> - 應用程式名稱, 包含(較優先假定)或不包含路徑. <tt><fragments></tt> - 片斷(fragment)數, 給 0 則自動選擇. <tt><fragment_size></tt> - 一個片斷的 byte 數, 或 0 選擇自動. <tt><options></tt> - 選擇性的參數 <tt>WR_ONLY</tt> - 如果有個應用程式設開啟模式為O_RDWR, 實際的權限將改為 O_WRONLY(播放), 對 Quake 等很有用... 幾個範例: <tscreen><verb>echo "Playback x11amp 128 16384" > /proc/asound/0/pcm0o echo "Playback squake 0 0 WR_ONLY" > /proc/asound/0/pcm0o</verb></tscreen> <sect2> /proc/asound/#card#/sb16 <p> <tscreen><verb>"Playback 8" -> 驅動程式播放時只使用 8-bit DMA 通道. "Playback 16" -> 驅動程式播放時只使用 16-bit DMA 通道. "Playback auto" (default) -> 驅動程式自動選擇(會先嘗試使用 16-bit DMA 通道) "Record 8" -> 驅動程式錄音時只使用 8-bit DMA 通道. "Record 16" -> 驅動程式錄音時只使用 16-bit DMA 通道. "Record auto" (default) -> 驅動程式自動選擇(會先嘗試使用 16-bit DMA 通道) </verb></tscreen> 例如: <tt>echo "Record 16" > /proc/asound/0/sb16</tt> 更進一步的資訊請參考 INSTALL 檔. <sect> 小技巧及問題排除 <p> 請先看看音效卡驅動程式目錄的 FAQ 檔. 這一節仍然在增修中. <sect1> 編譯驅動程式 <p> <sect2> Linux 核心原始碼目錄樹 <p> 如果 ALSA 驅動程式無法成功編譯, 出現像找不到 ``version.h'' 或其它引入檔(header files)之類的錯誤, 這是指您沒有安裝核心的引入檔. 先花點時間看看 Kernel-HOWTO, 將最新近的核心解開到 /usr/src 並且下 <tt>make config</tt>命令. <sect1> 載入驅動程式 <p> 請檢查以下各條: <sect2> 音效卡相容性 <p> 您是否百分之百的確定您的音效卡有支援呢? 千萬要記得檢查. 有時一片叫 X123 的音效卡並不全等於叫 X123b 的, 這樣可能會浪費您的時間. 在另一方面, 即使是有支援的卡也可能會找您麻煩 - 為了安裝一片 CS4237B 的卡, 耗了我兩個小時來搞清楚, 結果發現說明文件裡有. (原文是 On the other hand, even a supported card can give you troubles - it took me two hours to figure out the installation of a CS4237B which was, after all, just a fine example of RTFM. ) <sect2> ``Device busy'' 或 ``unresolved symbols'' <p> 您可能在 2.0.x 版核心中將音效卡支援編進核心內, 或是已載入 OSS/Lite(核心的)驅動程式(可用<tt>cat /proc/modules</tt>來檢查). 移除該驅動程式或重新編譯核心(請看 Kernel-HOWTO 後動手). 在 2.0 版核心中的音效模組叫做 "sound.o", <bf>不應該</bf>被啟用. (雖然 ALSA 的驅動程式 "snd.o" 可以.) 如果您的核心是 2.2.x 版, 而沒有將音效支援編譯進去, ALSA 驅動程式也會無法作用. 我也知道這兩種不同的狀況令人困擾, 所以我在此再作一次解釋. 如果您用的是 <bf>2.0.x版</bf>核心 ("uname -a"命令傳回像 "Linux penguin 2.0.35 #6 Wed Sep 23 10:19:16 CEST 1998 i686 unknown") 那麼您必須將音效驅動程式<bf>剔除</bf>掉. 如果您的核心是 <bf>2.2.x版核心</bf>, 那麼您<bf>需要音效驅動程式</bf>. 2.2.x 版核心應該<bf>將音效驅動程式編譯進核心, 但不加入任何音效卡的支援</bf>. 因此您要選音效支援, 但也確定不要加入任何音效卡驅動程式. <sect2> 又見 Unresolved symbols <p> 另一個造成 "unresolved symbols" 訊息的原因可能是新版核心配合舊版驅動程式. 請在重新編譯核心之後別忘了也重新編譯 ALSA 驅動程式. 如此才可以確定驅動程式能配上您的新核心. <sect2> 檢查 PnP 設定 <p> 確定音效卡起動(active)了嗎? 請另外花點時間讀讀 PnP-HOWTO, 確認您已正確地致動(activate)了您的音效卡. <sect2> 參數有設對嗎? <p> 檢查, 再三檢查您的音效卡設定參數. 請小心: 534 不等於 543, 0x534 也不等於 534. 同時, 有些音效卡要載入的模組不是您預期的那個. 休息一下, 喝杯啤酒或什麼的, 然後再看看您 modprobe 的結果. 例如 Crystal 4232 應該插入的驅動程式是 snd-card-cs4232, 不是 "snd-cs4231". 而 SoundBlaster PCI64 應該載入的是 "snd-audiopci", 非 snd-es1370. (這些在文件中都有寫, 而筆者在寫這篇 HOWTO 時, 還曾花了一個晚上試著用 snd-cs4231 讓它發出聲音.) <sect1> 驅動程式載入了... 可是沒聲音 <p> <sect2> 解除靜音 <p> ALSA 驅動程式可以運用多數音效卡都有的 "靜音" 能力. 如果您載入了音效驅動程式, 一切看起來都還正確, 就是沒有聲音的話, 那麼您可能忘計把靜音取消掉了. 要這麼做您要用 "amixer" 或 "alsamixer", 兩者都附在驅動程式中. 只要鍵入: <tscreen><verb>amixer -c 1 master 70:70 unmute amixer -c 1 pcm 70:70 unmute amixer -c 1 cd 70:70 unmute</verb></tscreen> 對多數的應用程式應該都有效的. <sect2> OSS/Linux 的相容性 <p> 如果這是您首次使用 ALSA 驅動程式, 而您以前使用過核心內建的那個的話, 您可能想要能和過去相容的能力.(即使用 /dev/pcmX 設備之能力). 這時您需要載入 "OSS 相容驅動程式". 執行 <tt>modprobe snd-pcm1-oss</tt> (詳見關於載入本驅動程式那一節. ). 請疝N: snd-pcm1-oss 不能於 snd-pcm1. 對舊驅動程式的支援所需要的是 snd-pcm1-oss. <sect1> 一般性建言 <p> <sect2> 試著用 "insmod" <p> 用 "insmod" 取代 kerneld 總是有用的. 也許因此您就可以在螢幕上看到錯誤訊息了. <sect2> 讀 INSTALL 檔. <p> 在驅動程式目錄中的 INSTALL 檔可以發現很多資訊. 如果您的驅動程式不起作用, 別忘了看看這個檔, 也許會有額外的資訊. <sect2> 除錯訊息 <p> 如果以上的方法還是沒有用, 您可以重新編譯驅動程式, 要求它將除錯訊息送進 /var/log/messages 檔中, 做為最後手段. 下<tt>cd /usr/src/alsa-driver-...</tt>命令進入驅動程式目錄, 然後輸入: <tscreen><verb>./configure --with-debug=detect; make clean; make</verb></tscreen> 移除驅動程式(如果它已經啟動的話, 請看後面有提到的移除模組小技巧) 然後用您剛剛用的 "modprobe" 指令安插新編譯的驅動程式. 看看 /var/log/messages 裡有沒有任何相關訊息. <sect2> 如果都沒有用呢... <p> 如果您無法由訊息中取得線索, 寫封 Email 到 ALSA 使用者通信論壇, <htmlurl url="mailto:alsa-user@alsa-project.org" name="alsa-user@alsa-project.org">. 別忘了加上以下資訊: <itemize> <item> 您的音效卡的名稱以及其使用的晶片.</item> <item> 如果您的音效卡是 ISA PnP 的, 放入 isapnp.conf 中有關的部份. </item> <item> 您的 conf.modules 檔或是啟動 ALSA 驅動程式的命令行. </item> <item> 所有在 /var/log/messages 中應該和 ALSA 驅動程式有關的訊息.</item> </itemize> <sect1> 回報臭虫 <p> 如果您發現了一隻臭虫, ALSA 驅動程式開發組希望能夠得知(至少)以下資訊: <enum> <item> 驅動程式及核心的版本: 'cat /proc/asound/version' <item> 音效卡資訊 <itemize> <item> 廠商所標示的音效卡名稱 <item> 該卡上面的各個晶片標示 <item> 'cat /proc/asound/cards' 的執行結果 </itemize> <item> 所有在 /var/log/messages 中的相關訊息 <item> 問題的描述 </enum> <sect1> 小技巧: 聽 CD 時... <p> 如果您使用kmod/kerneld 以及 ALSA 驅動程式來聽 CD, 那麼 kmod/kerneld 可能不會像預期一般載入驅動程式. 這是由於命令列的 CD 放音程式只會叫 CDROM 開始播放, 而不會使用到任何設備, 讓 kmod/kerneld 來載入驅動程式. 這個問題的解可能就只有使用 modprobe 了. <sect1> 小技巧: 安裝 MIDI 序列驅動動程式 <p> 通常, 序列設備的 IO 埠會由標準的序列設備驅動程式占有. 所以在您可以進行 "modprobe snd-serial" 以前, 必須讓驅動程式釋放掉該序列設備. 以下是所需程序. <tscreen><verb>setserial /dev/ttyS0 uart none modprobe snd-serial</verb></tscreen> (如果您的 MIDI 設備使用不一樣的設備,將 /dev/ttyS0 換成相對應的 /dev/ttySx) <sect1> 小技巧: 換新核心? 換新模組! <p> 當您更新核心後, 您可能需要重新編譯 ALSA 驅動程式. 如果它們還在原來的 /usr/src 目錄下, 請別忘了在您進行 ./configure, make, make install 之前先下 <tt>make clean</tt> 命令. 喔! 還有個不太一樣的核心版本編號 "2.2.0ac1", 會被 configure 命令檔抱怨不是數字. 我想這個在新版的命令檔中會解決, 不然您可能得改變原始碼中的核心版本編號. <sect1> 小技巧: KDE 及 ALSA 驅動程式 <p> 如果您使用了 KDE, 但卻無法聽到諸如開啟視窗或改變使用的桌面等系統音效, 不過其它音效動作正常. 也就是您的 CD 播放, MP3 播放以及混音器都很正常, 那麼可能只是因為欠缺 "kwmsound" 而已. 所以: 確定在您的啟動命令檔($KDEDIR/bin/startkde)中有 "kwmsound". <sect1> 小技巧: 使用 ALSA 設備 <p> 如果您以前有利用過 Linux 的音效支援, 那麼您的應用程式可能需要用到 /dev/pcm0, /dev/audio 及 /dev/mixer. 使用 OSS 相容模組 snd-pcm1-oss 是不錯的解決方法, 但如果使用真正的 ALSA 設備(在 /dev/snd/下)的話那更好. <sect1> 小技巧: 移除所有模組 <p> 要一個一個的移除十幾個模組實在不是個好辦法. 很幸運的, 所有的模組名都是由 snd- 開始, 所以用一點小小的命令列規劃, 您可以輕易的下以下的命令移除 ALSA 音效驅動程式: <tscreen><verb>cat /proc/modules|gawk '/^snd-/{print $1}|xargs -i rmmod {}</verb></tscreen> Juergen Kahrs 寫道: "我有一個命令檔可以連 soundcore, soundlow 以及 sound 都一併消去, 如果它們已載入且沒在使用中的話. 這個命令檔處理 /proc/modules 三次, 這樣在完成後應該不會有太多模組留下來." 他的解法是: <tscreen><verb>awk '/^snd/||/^sound/&&($3==0){system("rmmod " $1)}' /proc/modules /proc/modules /proc/modules</verb></tscreen> 請注意: 如果有一個模組依賴另一個模組的話, 您不可以只移除較上層的那個. 這意味著您可能有必要下第二道命令. (我從來沒碰到過這種情況; 看起來您可以以依照在 /proc/modules 中的順序移除 ALSA 模組.) </article>