Alsa-sound-mini-HOWTO Valentijn Sessink valentyn@alsa-project.org 譯者: 伍永康 yorkwu@ms4.hinet.net 中文版v0.2, 2000年6月15日 (原v0.2, 18 May 1999) _________________________________________________________________ 本文描述 Linux 的 AKSA 音效驅動程式的安裝. 由於它們相容. 這個音效驅動程 式可以用來取代平常用的音效驅動程式. _________________________________________________________________ 1. Introduction * 1.1 銘謝 * 1.2 版本沿革 * 1.3 本文件的新版本在哪? * 1.4 回饋 * 1.5 散布時的注意事項 2. 在開動之前 * 2.1 緒論 * 2.2 關於 ALSA 驅動程式的一般資訊 * 2.3 支援的硬體 * 2.4 其它 HOWTO 3. 如何安裝 ALSA 音效驅動程式 * 3.1 您需要什麼 * 3.2 取得驅動程式 * 3.3 解開驅動程式 * 3.4 編譯 * 3.5 準備設備檔 4. 載入驅動程式 * 4.1 用 modprobe 安插驅動程式 * 4.2 那張卡應該用哪個驅動程式? * 4.3 不自動偵測時怎麼載入驅動程式 * 4.4 使用 kerneld 來載入 * 4.5 向前相容 5. 測試及使用 * 5.1 /proc 檔案系統 * 5.2 混音器 * 5.3 /dev/snd/ 下的設備 * 5.4 額外的資訊 6. 小技巧及問題排除 * 6.1 編譯驅動程式 * 6.2 載入驅動程式 * 6.3 驅動程式載入了... 可是沒聲音 * 6.4 一般性建言 * 6.5 回報臭虫 * 6.6 小技巧: 聽 CD 時... * 6.7 小技巧: 安裝 MIDI 序列驅動動程式 * 6.8 小技巧: 換新核心? 換新模組! * 6.9 小技巧: KDE 及 ALSA 驅動程式 * 6.10 小技巧: 使用 ALSA 設備 * 6.11 小技巧: 移除所有模組 _________________________________________________________________ 1. Introduction 這是 ALSA 音效驅動程式的 mini HOWTO. 它提供您關於安裝及使用 ALSA 音效驅 動程式的資訊. ALSA 驅動程式是完全模組化, 並支援 kerneld 及 kmod. 它和 OSS API 相容, 但超越了其可能性. 一句話: 相容, 但更好. 1.1 銘謝 本文件包含了我從 ALSA 驅動程式網站得到的資訊. 其結構是由 SB-mini-HOWTO 分來的, 主要是它的結構和我理想中的很接近. 感謝有 [1]SGMLTools 軟體, 使 得本 HOWTO 只用一個共用的原始檔, 可以產生多種格式. 謝謝 Erik Warmelink 校閱(proof reading), 還有 Alfred Munnikes 提供很多問題和有助的建言, Yamahata Isaku 翻譯成日文, 以及 Miodrag Vallat 翻成法文. 接下來, Steve Crowd 很好的校訂了全文, 以及 Marc-Aur`ele Darche, Piotr Ingling, Juergen Kahrs 及 Tim Pearce 提供有用的小技巧(tip)及增補. 1.2 版本沿革 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! 1.3 本文件的新版本在哪? 最新版本可在 [2]http://www.alsa-project.org./~valentyn找到. 其它格式(全部的 html, sgml, txt)在 [3]other-formats 目錄下. Yamahata Isaku 翻譯了日文版, 將會放在日本 ALSA 網站, [4]http://plaza21.mbn.or.jp/~momokuri/alsa/index.html Miodrag Vallat 翻了法文版, 可在 [5]http://www.freenix.fr/unix/linux/HOWTO/mini/Alsa.html找到. 如果您將本文件翻成其它語言, 請讓我知道, 我將在這兒做個連結. 1.4 回饋 這份 HOWTO 文件, 需要各位讀者協助, 才能越來越好用. 如果您有任何建議, 修 正, 或意見, 請告訴作者 ( [6]alsa-howto@alsa-project.org) 我將會在下一版 試著加入這些意見. 請注意: 我還沒收到很多關於 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. ) 如果您在唯讀光碟上或以硬拷貝形式發行此文件, 請您附送我一份. 請送到我的 真實地址. 也請考慮一下對 Linux 文件計畫作點奉獻, 以支持 Linux 的免費文 件. 請和 Linux HOWTO 協調人 Tim Bynum ( [7]linux-howto@metalab.unc.edu ) 聯絡以得到更多資訊. 1.5 散布時的注意事項 Copyright 1998/1999 Valentijn Sessink 本中文版之版權為 Valentijn Sessink 及 伍永康 所有 (1999) (版權宣言原文照登) 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. 本 HOWTO 是自由文件; 您可以在合乎由自由軟體基金會出版的 GNU 一般公開執 照所載的條件下重新散布及/或修改它. 您可以選用該執照之第二版或(任您選)其 後的版本. This document is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See the GNU General Public License for more details. 本文件之散布, 是希望能有用, 但不提供任何保證; 即使是 商業上 或 合於特定 用途 的隱含保證亦無. 詳情請看 GNU 一般公開執照. You can obtain a copy of the GNU General Public License by writing to the [8]Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 您可以寫信到 [9]自由軟體基金會, 地址是 675 Mass Ave, Cambridge, MA 02139, USA. 來取得 GNU 一般公開執照. 2. 在開動之前 2.1 緒論 本文件嘗試幫助您在 Linux 下安裝及使用 ALSA 音效驅動程式. 參考系統使用 AMD/K6 (x86 相容)的機器, 裝 Slackware 3.5 發行套件. 不過應該裝在任何其 它 Linux 發行套件都不成問題. 由文件中 ALSA 驅動程式是否可在其它平台使用 不得而知. Alpha 已經測試證明可用. 我這兒只有 x86 PC, 所以您要是有任何多 的資料都很歡迎. 讀 Linux Sound HOWTO(請看其它 HOWTO 那一節)可能更有幫助, 但那個 HOWTO 主要是在討論核心內建的音效驅動程式. 2.2 關於 ALSA 驅動程式的一般資訊 ALSA 音效驅動程式原本是寫來取代 Gravis UltraSound 卡的 Linux 核心驅動程 式的. 當實證這取代得很成功, 作者便開始 ALSA 計畫, 以完全模組的設計, 寫 一個給幾種音效晶片的一般驅動程式. 它和 OSS/Free 及 OSS/Linux 音效驅動程式相容(核心的驅動程式), 但它有比 OSS 軀動程式更好的本身介面. 一些優點可以在 [10]http://www.alsa-project.org/intro.html看到. ALSA 計畫主網頁在 [11]http://www.alsa-project.org/ 2.3 支援的硬體 ALSA 驅動程式僅支援部份的音效卡. 在本文寫作時, 以下的卡有被支援: * 使用 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 中加入. * Gravis Ultrasound (GUS): "PnP", Extreme, Classic/ACE, MAX * 使用 GUS 晶片的卡: Dynasonic 3-D, STB Sound Rage 32, UltraSound 32-Pro (STB) * 聲霸卡: 1.0, 2.0, Pro, 16, AWE32/64, PCI64 * ESS AudioDrive ESx688 * ESS ES18xx (chipsets). 請注意我個人在 ESS1888 上經歷過很多麻煩. 這 個驅動程式的開發者已盡力了, but to no avail. * ESS Solo-1 ES1938 * Yamaha: OPL3-SA2, OPL3-SA3 (晶片組) * OAK Mozart * Schubert 32 PCI (PINE, S3 SonicVibes PCI 晶片組) * Ensoniq AudioPCI ES1370/1371 PCI 音效卡 (Soundblaster PCI64) * SonicVibes PCI 音效卡 (PINE Schubert 32 PCI) 接著一大票的 Crystal Semiconductors 的卡都支援. 這些晶片可在很多硬體上 看到, 有在音效卡上的(如 Philips PCA 系列), 也有主機板內建的(如 IBM Aptiva, Dell computers) 以下的晶片組有支援. * 4232 * 4232A * 4235 * 4236B * 4237B * 4238B * 4239 更新的列表在驅動程式套件中的 doc/SOUNDCARDS 中可找到. 2.4 其它 HOWTO ALSA-sound-mini-HOWTO 只是迷你版. 有些情形下這篇就有點簡略了, 看其它 HOWTO 可能對您有幫助. 我會點出您嘗試安裝 ALSA 驅動程式時可能會碰上的一 些狀況. 一般來說, HOWTO 可以在 metalab(先前的 sunsite)的鏡射站 (mirror site)找到. 因此請先找找 [12]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 系列的東西. 音效卡 也許您已經買了片音效卡, 甚至已經裝在您的電腦好幾年了. 現在您可以用它 了! 可以先看看 [13]Sound-HOWTO, 看看是不是值得冒這個風險. (您也許想買新 的什麼 Mega-Rumble-Blaster 的卡, 試試 ALSA 驅動程式. 隨插即用的卡 多數在 Intel 平台的新音效卡是 ISA PnP 卡, 是 "Plug and Play" 的縮寫. 其 意是指這張卡必須經由作業系統設定. 這必須在開機時經由一個程序完成. 您也 許需要運用 PnP-utils 套件來完成設定. 最近的每種 Linux 發行套件都包含這 些工具. 用法請參照 [14]Plug-and-Play-HOWTO ALSA 驅動程式似乎對一些卡有做一些自己的 ISA 隨插即用支援. 然而不幸的, 因為我 無法找到相關文件, 我無法向您說明怎麼做. 如果有人想試 ALSA 音效支 援但不想用 ISA-PnP-tools, 請給我一點說明. 可載入模組 ALSA 音效驅動程式是建為模組的. 您可以在 [15]Kernel-HOWTO 中得到關於模組 的更多資訊. 也有個 module-HOWTO, 但目前已 無人維護; 請在 Howto-HOWTO 那 裡看看無人維護的文件那小節. 有個 [16]Modules-mini-HOWTO 或許有用. (?) Kerneld 另外有一個對某些人有用的 HOWTO 是 [17]Kerneld-mini-HOWTO. Kerneld 是個 在需要時才安裝及移除核心模組的 常駐程式(daemon). (筆者對此沒有經驗, 所 以歡迎提供任何資訊. ALSA 驅動程式文件 包含了一些關於設定 kerneld 的資 訊, 並已包含於本 mini-HOWTO.) 3. 如何安裝 ALSA 音效驅動程式 3.1 您需要什麼 * 一套能動的 Linux 系統(如 Slackware 發行套件), 並有安裝開發工具套 件(像 gcc, make 等).) * 支援的音效卡 * 一些 Linux 的知識(您總要曉得 "ls", "cd", "tar" 等怎麼用. ) * root 帳號 如果您有 PnP 卡, 您也需要: * isapnptools 軟體套件 在驅程式目錄中的 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 驅動程式. 3.2 取得驅動程式 ALSA 驅動程式可在 [18]ftp://ftp.alsa-project.org/pub 找到, 並且在 [19]ftp://linux.a2000.nl/alsa 有一份鏡射(mirror). 要安裝 ALSA 的完整功 能, 您需要驅動程式, 函式庫及一些公用程式; 也就是說如果您由鏡射站抓您應 該 [20]ftp://linux.a2000.nl/alsa/driver/alsa-driver-0.3.0-pre4.tar.gz, [21]ftp://linux.a2000.nl/alsa/lib/alsa-lib-0.3.0pre4.tar.gz, 還有 [22]ftp://linux.a2000.nl/alsa/utils/alsa-utils-0.3.0-pre4.tar.gz. (喔, 上面的不是完整的連結, 您最好到原地點看看有沒有新版, 並抓最新的.) 3.3 解開驅動程式 用合理的命令像 tar -zxf 解開驅動程式. 以下的是寫給新手或常忘記的 人: (You extract the drivers by some reasonable command, like the all-time tar -zxf . For newbies and for those with amnesia:) cd /usr/src tar -zxf ~/alsa-driver-0.3.0-pre4.tar.gz (如果成功了, 您可能一直使用 root 身份進系統, 這是不對的, 停下來並讀一下 DOS/Win95-to-Linux-HOWTO. 不是這樣的話, 您已經知道這是關於系統管 理(administrative)的事, 您需要 superuser/root 權限. 所以, 您需要 root 權限, 輸入 su 以及密碼. tar -zxf ~/alsa-lib-0.3.0pre4.tar.gz tar -zxf ~/alsa-utils-0.3.0-pre4.tar.gz 下這樣的命令也可以, 且更有趣: find ~ -name alsa* -exec tar -zxf {} \; (孩子, 不要在家試這個, 這只是個範例而已. )注意如果您使用 Netscape 下載 驅動程式, 您可能抓下的是解開過的, 但延伸檔名還是 .tgz. 如果 tar 抱怨檔 案格式不對, 把 tar 命令中的 "z" 選項去掉, 可以得到較好的結果. 3.4 編譯 在您可以編譯及使用函式庫以前, 您需要先有驅動程式. 而有了函式庫後才可以 編譯使用公用程式. 所以我們開始吧: cd alsa-driver-0.3.0-pre4 (給那些不太有經驗的: 在 "alsa-d" 後接著按 ("tab" 鍵). 這樣就會叫 出 命令列自動補完(command line completion).) (譯注: 有更好的翻法嗎?) ./configure make 現在您需要用 root 身份安裝東東(可能您已經是 root 了) make install 如果它回應像 "version.h" 檔找不到之類的, 您可能沒有妥善安裝核心原始碼. 要編譯 ALSA 驅動程式需要核心原始碼中的一些檔案, 所以您把想用的 linux-2.x.y.tar.gz 在 /usr/src 下解開, 並下 make menuconfig 命令. (實際 上, make symlinks 可能就夠了). 現在編譯函式庫: cd ../alsa-lib-0.3.0-pre4 ./configure make make install OK, 您已經成功了, 再來是公用程式: cd ../alsa-utils-0.3.0-pre4 ./configure make make install 注意: 在第一次編譯公用程式時可先不打 "make install". 甚至您可以先不要動 函式庫及公用程式, 只檢查一下確定驅動程式能不能用. 3.5 準備設備檔 在驅動程式目錄下有個命令稿(script)可以把 ALSA 的音效設備檔安裝進 /dev 目錄. 在驅動程式目錄下打入 ./snddevices 如此應該有 /dev/snd 子目錄了(先看看有沒有. 如果您甚至連 "ls" 命令都不 熟, 請考慮先讀別的 HOWTO. 在安裝本驅動程式前您應該有些基本的 Linux 知識 才對.) 現在您可以安插驅動程式了. 請跳到下一段吧. 4. 載入驅動程式 有兩種使用 ALSA 音效模組的方法. 筆者個人比較喜歡使用手動的方法, 也就是 在開機 時安插驅動程式. ALSA 驅動程式是以可載入/卸除模組為目標來設計 -- 例如說它們不會在載入後重設音量 -- 所以您可以簡單地使用 kerneld 的方法. (譯注: 原文直譯為 ALSA 驅動程式設計成可載入/卸除模組, 但譯者認為 OSS 也 可以 這麼做(只差它會重設音量, 對模組使用者來說較不方便, 雖然解決辦法是 有(見 Sound HOWTO)), 這麼翻無法凸顯 ALSA 的優點, 故翻成上面的意思. 希望 沒誤解...) 請一定要閱讀 [23]向前相容這節, 如果您想要和以前的程式相容的話. 4.1 用 modprobe 安插驅動程式 請注意: 如果您有 PnP 音效卡, 您首先要設定正確的(或至少是已知的) IO/IRQ/DMA. 請讀 Plug-and-Play-HOWTO. 您已經設定過您的 隨插即用 音效卡 了嗎? 好, 那麼請繼續讀下去. 主要部份是 "modprobe snd-", 這樣 應該就可以. 不過並非所有安裝套件都把 /sbin 包含在您的 PATH 環境變數下. 如果您得到 "bash: modprobe: command not found" 這樣的回應, 可能是由於 modprobe 沒有在 path 中. 試著用 "/sbin/modprobe snd-sb16", 或想辦法找出 modprobe 公用程式在哪. 對 Crystal 晶片組的卡來說可能最困難. ALSA 驅動程式不對這些卡進行自動偵 測. 更進一步的資訊記載在驅動程式目錄下的 INSTALL 檔中. 接下來筆者舉兩個 例子, 然後接著是個列表: Gravis UltraSound (GUS) 及相容卡: /sbin/modprobe snd-gusclassic 對完全 16 位元的 SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP): /sbin/modprobe snd-sb16 4.2 那張卡應該用哪個驅動程式? Gravis UltraSound Extreme modprobe snd-gusextreme Gravis UltraSound MAX modprobe snd-gusmax ESS AudioDrive ESS AudioDrive ES-1688 及 ES-688 音效卡 modprobe snd-audiodrive1688 Gravis UltraSound PnP Gravis UltraSound PnP, Dynasonic 3-D/Pro, STB Sound Rage 32 以及其它用 AMD InterWave (tm) 晶片的音效卡. modprobe snd-interwave UltraSound 32-Pro UltraSound 32-Pro (STB 製 Compaq 使用) 及其它使用 AMD InterWave (tm) 晶 片以及用 TEA6330T 電路來做 bass, treble 及主音量控制的卡. modprobe snd-interwave-stb Soundblaster 8-bit Soundblaster 卡 (SoundBlaster 1.0, SoundBlaster 2.0, SoundBlaster Pro) modprobe snd-sb8 Soundblaster 16 16-bit SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP). 請注意本模組不支援 SoundBlaster VibraX16 音效卡. modprobe snd-sb16 Yamaha OPL3-SA2/SA3 音效卡 光是 "modprobe snd-opl3sa" 是無效的, 驅動程式不會自動偵測. 請看後面. S3 SonicVibes S3 SonicVibes PCI 音效卡. (PINE Schubert 32 PCI) modprobe snd-sonicvibes Ensoniq/Soundblaster PCI64 Ensoniq AudioPCI ES1370/1371 PCI 音效卡. (SoundBlaster PCI 64) modprobe snd-audiopci CS4232/4232A 所有使用 CS4232/CS4232A 晶片的音效卡. 光是 "modprobe snd-card-cs4232" 沒用, 不自動偵測, 看後面. 4235 以及其後的 所有使用 CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 晶片的. 光是 "modprobe snd-card-cs4236" 沒用, 不自動偵測, 看後面. 4.3 不自動偵測時怎麼載入驅動程式 如果您要用的驅動程式不自動偵測, 您必須在讓驅動程式運作前先提供額外資 訊. 更多資訊可在驅動程式目錄下的 INSTALL 檔中找到. OPL3-SA2 及 OPL3-SA3 根據 INSTALL 檔, 您需要提供驅動程式一切資訊. 如果您用 isapnp-tools 來初 始化您的卡, 也許可以在 /etc/isapnp.conf 檔中看到像下面的值: 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) 您要用 "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 大小的參數是不是非要不可. CS4232/CS4232A 晶片 根據 INSTALL 檔所言, 對這些卡您要提供 midi port 的資訊. 注意對下面例中 的卡, 它使用給 3235/6/7/8/9 的驅動程式, 我給了所有資訊(除了 DMA 大小), 不然它不會動. 所以您也許就用這整段命令列來載 入驅動程式吧! 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看到這些值: 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) 對標準設定值的卡, 您要用 "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 大小的參數是不是非要不可. CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 chips 根據 INSTALL 檔所言, 對這些卡您要提供 midi port 以及 control port 的資 訊. 注意對 CS4237B 的卡, 我給了所有資訊(除了 DMA 大小), 不然它不會動. 所以您也許就用這整段命令列來載 入驅動程式, 不只是有 snd_port 及 snd_cport 而已. 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看 到這些值: 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) 您要用 "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 的注意事項, 又, 沒有支援搖桿). 注意事項: * "NN" 值要給真正的, 我不知道合理值是多少才這麼寫. * 我的 CS4237B 卡沒有明白指定 DMA 大小也用得很好. 4.4 使用 kerneld 來載入 kerneld 是個在需要時插入模組, 並在不再使用時卸除它們的服務程 式(daemon). 由於筆者沒用過 kerneld, 不曉得下 面的資訊準不準確. 以下資訊 來自 ALSA 驅動程式套件的 INSTALL 檔. 關於 kerneld 的詳盡資訊可在 kerneld-mini-HOWTO 中找到. 照以下步驟做: * 編輯 /etc/conf.modules(後有範例) * 執行 'modprobe snd-card', 其中 snd-card 是您的音效卡名稱 [ 我覺得奇 怪, kerneld 應該負責載入它不是嗎? VS] 這是 Gravis UltraSound PnP 音效卡的 /etc/conf.modules 範例: 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 如果您想插更多卡, 這兒有範例(是同時有 Gravis UltraSound Classic 及 Sound Blaster 16 的情形) 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 如果有兩片 Gravis UltraSound Classic 音效卡, 就像下例: 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 4.5 向前相容 如果您想保留 OSS/Free 或 OSS/Linux 的相容性, 您還要再加一個驅動程式: snd-pcm1-oss 驅動程式, 提供 OSS 相容性. 下 modprobe snd-pcm1-oss 命令. 這將提供 /dev/audio 及 /dev/dsp 的支援, 就像 OSS/Free (核心)驅動 程式及 OSS/Linux (要 25 美金的)所做的一樣. 注意這只是模擬而已. 5. 測試及使用 現在應該是試試驅動程式是不是真能用的時候了. 接者就是使用它. 5.1 /proc 檔案系統 您可以在 /proc 目錄下找到很多關於您的系統的有用資訊. /proc 是一個"虛擬 的"檔案系統, 意即它並非真正存在, 而是和您正在執行的各程序間的連結. 要讓 /proc 可用, 您需要將它編譯進核心. 多數 Linux 安裝套件已將它設為預設值, 但如果您重編譯並且並沒有將 /proc 包進來, 那麼在 /proc 下將什麼也沒有. /proc/modules 記載了關於載入的模組的資訊. 當 ALSA 音效驅動程式載入後, 如果您 打入 cat /proc/modules, 應該看到像這樣的東西: 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-m ixer snd-mpu401-uart snd-midi snd-opl3 snd-synth snd-timer] 0 如果在安裝驅動程式時有哪步搞錯了, 您仍能看到一堆 "snd" 設備, 但沒有音效 支援. 例如說(請千萬不要照著下面下命令, cs4236 驅動程式需要參數): win3:~# modprobe snd-card-cs4236 /lib/modules/2.0.35/misc/snd-card-cs4236.o: init_module: Device or resource bus y 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 您可藉由看 /proc/asound/cards 內容來看音效卡是否存在. 例如: bash$ cat /proc/asound/cards 0 [card1 : SB16 - Sound Blaster 16 Sound Blaster 16 at 0x220, irq 5, dma 1&5 在剛剛的例子中(就是我忘了加參數的), 輸出會是像: win3:~# cat /proc/asound/cards --- no soundcards --- 若 CS4236 卡能用, 將有以下輸出 0 [card1 ]: CS4236 - CS4237B CS4237B at 0x534, irq 7, dma 1&0 如果您再三檢查您的設定正確後, 仍然找不到音效卡, 那麼去看看問題解決那 節. /proc/asound/ 虛擬目錄顯示了關於此驅動程式的許多資訊. 請注意 /proc/asound 在您載入第一個 ALSA 模組後才會出現. 如果沒有 /proc/asound, 那麼就是 "snd" 模組沒有正確安裝好. 您可以在 /proc/asound/cards 檔中找到安裝好的卡, 然後在 /proc/asound/0 找到關於 0 號卡, /proc/asound/1 中關於 1 號卡的資訊. 如果 cat /proc/asound/ 顯示像 ES1370 DAC2/ADC Playback isn't active. Record isn't active. 這是說您的驅動程式一切都很好, 但目前並沒有事做(所以一切正常). 還有第三種找音效設備的方法, 就是如果您有 OSS 相容驅動程式, 那麼就有 /dev/sndstat 設備檔. ALSA 驅動程式會體貼的提醒您不要依賴這些資訊, 它只 是為跟 OSS 相容而做的. 由 /proc/asound 可以簡單的得到更好的資訊. 5.2 混音器 一旦您的音效卡裝好, 而 /proc 檔案系統也這麼顯示後, 您可以試試真正發出聲 音. 首先呢, 安裝公用程式套件, 或至少把 "amixer" 命令放到一些合理的地 方(如 /usr/local/bin). 先用 "amixer" 看看混音器設定. amixer 的輸出會隨 卡的不同而有很大變化, 我的 SoundBlaster16 顯示: 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) 而我的 Crystal 4237B 的音效卡有很多其它選項: 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 注意一下 "Mute" 那一欄, CS4237B 甚至連主音量也調靜音了. 對 CS4237B, 我 還要先打 amixer "master d" unmute 以後才能發出聲音. SoundBlaster 的輸出 就沒有靜音, 不過 amixer master 100 unmute 會將主音量解除靜音, 還設為 100%. 您可以用數字, 或像 "mute" 及 "unmute" 的文字, 或都打, 來控制. 打 amixer "master d" 100; amixer pcm 100 unmute 可以將 CS4237B 卡的主音量 設最大, 並將 PCM 音量解除靜音並設為最大. 如果左右要不一樣, 可以用冒號, 如 amixer CD 25:50.(不, 我不曉得那一個是指左右聲道, 不過我強調一下這也 和您的喇叭擺放位置有密切關係.) 您應該下 amixer cd rec 以將 CD 當做錄音的音源. 然後後下 amixer cd norec命令解除此設定. 如果您想要經由麥克風來錄些東西, 您也許可以下 amixer record-gain 100; amixer mic 100 rec mute(如果不將麥克風輸入 的放 音設為靜音的話, 麥克風會從喇叭收到本身的信號, 會造成高音部份音量降低.) 然而不幸的是我沒能夠用 amixer 來改變 3D center 及 3D space 的音量設定. 如果 有人成功了, 請告知我. 這工作可由 alsamixer 來進行. ALSA FAQ 上面表示可以用 cat > /proc/asound/#/mixerC0D0 命令來回 復混音設定, 其中 的內容是由 /proc/asound/#/mixerC0D0 中取得. 我 無法重現相同的結果, 我的電腦抱怨此設備找不到. 5.3 /dev/snd/ 下的設備 ALSA 驅動程式在 /dev/snd/ 目錄下有自己的驅動程式. 如果您有一片音效卡, 您可能看到以下設備: /dev/snd/pcmC0D0 - 這張音效卡的原生音效設備. /dev/snd/mixerC0D0 - 第"零"號卡的混音器設備. /dev/snd/controlC0D0 - 第"零"號卡的控制設備. 第一個號碼是指第幾號音效卡. 第二個號碼是代表單卡上的設備號碼. 一張有兩 個 PCM 設備的音效卡應該有 pcmC0D0 及 pcmc0D1 設備. 請疝N: ALSA 的設備檔名和舊版已經不一樣了. 舊的 ALSA 驅動程式用 /dev/snd/pcm00 (第一個是卡, 第二個是設備號). 如果看到本 HOWTO 中還有用 舊的檔名的, 請寫封 Email 給我以便更正. 現在您可以將任何您想聽的音效檔丟進第一片卡的 PCM 設備中了. 現在試試用 cat 把任何文字檔(或任何檔案)送進 /dev/snd/pcmC0D0, 就像這樣: cat > /dev/snd/pcmC0D0. 其中 filename 可以是任意檔案, 只要它夠 大. 如果您已有現成的音效檔, 也可以試試. 您也可以抓 [24]http://www.ldp.org/sounds/english.au. 這是 Linux Torvalds 講 Linux 這個字如何發音的話. 音效設備預先被設定為 8000Hz, 8 位元. 這意味著剛提到的 "english.au" 會發 出講話聲, 而其它檔可能只會發出噪音. 如果您聽不到, 請檢查您的喇叭, 或再 執行 amixer 一遍或去看醫師(該不會是... 您的耳朵聾了!?) . (稍後您可以用 您喜歡的播放程式如 sox 或 mpg123 , 簡單的來放完全的 48KHz, 16 位元聲 音.) 如果您載入了 "snd-pcm1-oss" 模組, 您也可以利用 OSS 的相容性來存取音效 卡. 兩者間有以下的對應關係: /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 5.4 額外的資訊 在 ALSA 驅動程式目錄中的 INSTALL 檔也提到了一些小技巧, 告訴驅動程式要作 何調整設定. 依照播放聲音的用途, 您可能需要用這些命令. 一般的播放程式, 如 mpg123, sox(常以 ``play'' 命令來執行), 或 X11 應用程式如 RealPlayer 都不必用到這些. 我本人也從沒用過. /proc/asound/#/pcm#0 "Playback erase" - 清除所有關於 OSS 應用程式的額外資訊. "Playback []" "Record erase" - 清除所有關於 OSS 應用程式的額外資訊. "Record []" - 應用程式名稱, 包含(較優先假定)或不包含路徑. - 片斷(fragment)數, 給 0 則自動選擇. - 一個片斷的 byte 數, 或 0 選擇自動. - 選擇性的參數 WR_ONLY - 如果有個應用程式設開啟模式為O_RDWR, 實際的權限將改為 O_WRONLY(播放), 對 Quake 等很有用... 幾個範例: echo "Playback x11amp 128 16384" > /proc/asound/0/pcm0o echo "Playback squake 0 0 WR_ONLY" > /proc/asound/0/pcm0o /proc/asound/#card#/sb16 "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 通道) 例如: echo "Record 16" > /proc/asound/0/sb16 更進一步的資訊請參考 INSTALL 檔. 6. 小技巧及問題排除 請先看看音效卡驅動程式目錄的 FAQ 檔. 這一節仍然在增修中. 6.1 編譯驅動程式 Linux 核心原始碼目錄樹 如果 ALSA 驅動程式無法成功編譯, 出現像找不到 ``version.h'' 或其它引入 檔(header files)之類的錯誤, 這是指您沒有安裝核心的引入檔. 先花點時間看 看 Kernel-HOWTO, 將最新近的核心解開到 /usr/src 並且下 make config命令. 6.2 載入驅動程式 請檢查以下各條: 音效卡相容性 您是否百分之百的確定您的音效卡有支援呢? 千萬要記得檢查. 有時一片叫 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. ) ``Device busy'' 或 ``unresolved symbols'' 您可能在 2.0.x 版核心中將音效卡支援編進核心內, 或是已載入 OSS/Lite(核心 的)驅動程式(可用cat /proc/modules來檢查). 移除該驅動程式或重新編譯核 心(請看 Kernel-HOWTO 後動手). 在 2.0 版核心中的音效模組叫做 "sound.o", 不應該被啟用. (雖然 ALSA 的驅 動程式 "snd.o" 可以.) 如果您的核心是 2.2.x 版, 而沒有將音效支援編譯進去, ALSA 驅動程式也會無 法作用. 我也知道這兩種不同的狀況令人困擾, 所以我在此再作一次解釋. 如果您用的是 2.0.x版核心 ("uname -a"命令傳回像 "Linux penguin 2.0.35 #6 Wed Sep 23 10:19:16 CEST 1998 i686 unknown") 那麼您必須將音效驅動程式剔除掉. 如果您的核心是 2.2.x版核心, 那麼您需要音效驅動程式. 2.2.x 版核心應該將 音效驅動程式編譯進核心, 但不加入任何音效卡的支援. 因此您要選音效支援, 但也確定不要加入任何音效卡驅動程式. 又見 Unresolved symbols 另一個造成 "unresolved symbols" 訊息的原因可能是新版核心配合舊版驅動程 式. 請在重新編譯核心之後別忘了也重新編譯 ALSA 驅動程式. 如此才可以確定 驅動程式能配上您的新核心. 檢查 PnP 設定 確定音效卡起動(active)了嗎? 請另外花點時間讀讀 PnP-HOWTO, 確認您已正確 地致動(activate)了您的音效卡. 參數有設對嗎? 檢查, 再三檢查您的音效卡設定參數. 請小心: 534 不等於 543, 0x534 也不等 於 534. 同時, 有些音效卡要載入的模組不是您預期的那個. 休息一下, 喝杯啤酒或什麼 的, 然後再看看您 modprobe 的結果. 例如 Crystal 4232 應該插入的驅動程式 是 snd-card-cs4232, 不是 "snd-cs4231". 而 SoundBlaster PCI64 應該載入的 是 "snd-audiopci", 非 snd-es1370. (這些在文件中都有寫, 而筆者在寫這篇 HOWTO 時, 還曾花了一個晚上試著用 snd-cs4231 讓它發出聲音.) 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 使用者通信論壇, [25]alsa-user@alsa-project.org. 別忘了加上以下資訊: * 您的音效卡的名稱以及其使用的晶片. * 如果您的音效卡是 ISA PnP 的, 放入 isapnp.conf 中有關的部份. * 您的 conf.modules 檔或是啟動 ALSA 驅動程式的命令行. * 所有在 /var/log/messages 中應該和 ALSA 驅動程式有關的訊息. 6.5 回報臭虫 如果您發現了一隻臭虫, ALSA 驅動程式開發組希望能夠得知(至少)以下資訊: 1. 驅動程式及核心的版本: 'cat /proc/asound/version' 2. 音效卡資訊 + 廠商所標示的音效卡名稱 + 該卡上面的各個晶片標示 + 'cat /proc/asound/cards' 的執行結果 3. 所有在 /var/log/messages 中的相關訊息 4. 問題的描述 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/module s /proc/modules 請注意: 如果有一個模組依賴另一個模組的話, 您不可以只移除較上層的那個. 這意味著您可能有必要下第二道命令. (我從來沒碰到過這種情況; 看起來您可以 以依照在 /proc/modules 中的順序移除 ALSA 模組.) References 1. http://www.sgmltools.org/ 2. http://www.alsa-project.org/~valentyn 3. http://www.alsa-project.org/~valentyn/other-formats 4. http://plaza21.mbn.or.jp/~momokuri/alsa/index.html 5. http://www.freenix.fr/unix/linux/HOWTO/mini/Alsa.html 6. mailto:alsa-howto@alsa-project.org 7. mailto:linux-howto@metalab.unc.edu 8. http://www.fsf.org/ 9. http://www.fsf.org/ 10. http://www.alsa-project.org/intro.html 11. http://www.alsa-project.org/ 12. http://metalab.unc.edu/LDP/mirrors.html 13. file://localhost/tmp/Sound-HOWTO.html 14. file://localhost/tmp/Plug-and-Play-HOWTO.html 15. file://localhost/tmp/Kernel-HOWTO.html 16. file://localhost/tmp/zh-sgmltools.17683/Modules.html 17. file://localhost/tmp/zh-sgmltools.17683/Kerneld.html 18. ftp://ftp.alsa-project.org/pub/ 19. ftp://linux.a2000.nl/alsa 20. ftp://linux.a2000.nl/alsa/driver/ 21. ftp://linux.a2000.nl/alsa/lib/ 22. ftp://linux.a2000.nl/alsa/utils/ 23. file://localhost/tmp/zh-sgmltools.17683/Alsa-sound.txt.html#backw-compat 24. http://www.ldp.org/sounds/english.au 25. mailto:alsa-user@alsa-project.org