Gentoo Linux ALSA Guide
1.
介紹
什麼是 ALSA?
ALSA 是 Advanced Linux Sound Architecture 的縮寫,提供 Linux 音效以及
MIDI(Musical Instrument Digital Interface)功能。ALSA 是 2.6 核心預設的音效子系統,取代 2.4 核心中使用的 OSS(Open Sound System)。
ALSA 主要的特色,包含了從消費性音效卡至專業音效設備支援、完整模組化的驅動程式、多處理器及多執行續安全設計、向下相容 OSS、以及簡化應用程式設計的使用者空間函式庫
alsa-lib。
Gentoo 上的 ALSA
Gentoo 的主要強項,就是能最大化使用者控制他系統的安裝和設定。Gentoo 上的 ALSA
也遵循著相同的標準。有兩種辦法能讓您在系統上使用 ALSA,我們會在下面的章節中仔細介紹。
2.
安裝 ALSA
選項
警告:
底下列出的兩個辦法彼此互斥。您無法同時將 ALSA 編進核心,又同時使用
media-sound/alsa-driver。那是註定要失敗的。
|
這兩個選項是:
-
使用核心中提供的 ALSA,這是建議的選項。
-
使用 Gentoo 提供的 media-sound/alsa-driver 套件。
在您作決定之前,讓我們來看看兩個的差別:
若您決定使用和心中提供的 ALSA 支援,以下是優點及缺點:
| 核心中的 ALSA |
優缺點 |
| + |
核心中整合的驅動程式是非常穩定的。 |
| + |
一次弄好,不必一直重複 emerge。 |
| - |
可能會比 alsa-driver 提供的版本舊些。 |
並且,若您決定使用 alsa-driver:
| alsa-driver |
優缺點 |
| + |
可以使用 ALSA 的最新版本 |
| - |
每次重新編譯和新的之後,也要重新編譯 alsa-driver。 |
| - |
必須要將某些核心選項關閉才能正確工作。 |
所以...
使用 alsa-driver 與核心提供的 ALSA,最大的差別在 alsa-driver 通常比和心中提供的要新。由於平時這並不會產生太大的區別,我們建議您使用核心中提供的
ALSA,因為這比較簡單。在您向 Gentoo
Bugzilla 提出臭蟲報告以前,請先嘗試使用 alsa-driver,然後才提出報告。
在您開始之前
無論想使用什麼方法安裝,您都必須先知道您的音效卡要使用什麼驅動程式。大部分狀況下,音效卡(主機板內建或其他)都是透過 PCI 通道連接至您的電腦,所以 lspci
能幫您挖出必須的資訊。若您的系統上沒這東西,請 emerge sys-apps/pciutils 取得
lspci。如果您的音效卡是 USB 介面,sys-apps/usbutils 提供的
lsusb 也許能幫上忙。至於 ISA 介面的卡,請試試
sys-apps/isapnptools,它也許能幫上那些 ISA 音效卡的使用者。
注意:
為了簡化說明,在接下來的指南中我們將假設您使用 PCI 音效卡。
|
現在,讓我們找出音效卡的詳細資訊。
原始碼 2.1: 音效卡的詳細資訊 |
# lspci -v | grep -i audio
0000:00:0a.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 06)
|
現在我們知道了這台機器上的音效卡是 Sound Blaster Live!,以及製造廠商是 Creative
Labs。將您的瀏覽器指向 ALSA
音效卡列表,然後從下拉選單中選取 Creative Labs,就會被帶到 Creative Labs
列表,在那裡可以找到 SB Live! 使用 emu10k1 模組。這是我們現在需要的資訊,若您有興趣的話,按下旁邊的 "Details" 按鈕會帶您到 emu10k1 專區,裡面會告訴您更多東西。
使用您的核心中提供的 ALSA
若您跟我一樣是個喜歡把事情簡單化的人,那麼這就是辦法。
注意:
自從 2005.0 以後,Gentoo Linux 使用 2.6 作為預設核心。除非您指定要使用 2.4
profile,gentoo-sources 在大多數的系統上會是 2.6 的核心。請確定您的核心版本為 2.6,因為以下方法在 2.4 上面是沒用的。
|
讓我們設定核心以開啟 ALSA!
重要:
genkernel 使用者應執行 genkernel --menuconfig,然後照著「ALSA 的核心選項」章節的步驟作。
|
原始碼 2.2: 來到核心原始碼面前 |
# cd /usr/src/linux
# make menuconfig
|
注意:
以上的範例假設 /usr/src/linux 是指向您想使用核心的符號連結。請在繼續之前,確定您真的是想使用那個核心。
|
接著我們將看看那些必須在 2.6 核心啟動的選項,他們保證了我們音效卡的正確 ALSA 支援。
請注意,為了簡化流程,所有的範例都把 ALSA 編譯成模組。我們建議您也照著作,因為那將支援
alsaconf,在您想設定音效卡的時候,它會是個好幫手。請不要跳過本文中的「設定」小節。若您還是想把驅動程式編進核心,請確定您正確的更改了設定檔。
原始碼 2.3: ALSA 的核心選項 |
Device Drivers --->
Sound --->
<M> Sound card support
Open Sound System --->
< > Open Sound System (DEPRECATED)
Advanced Linux Sound Architecture --->
<M> Advanced Linux Sound Architecture
<M> Sequencer support
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
Generic devices --->
ISA devices --->
<M> Gravis UltraSound Extreme
PCI devices --->
<M> Emu10k1 (SB Live!, Audigy, E-mu APS)
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
<M> VIA 82C686A/B, 8233/8235 AC97 Controller
USB Devices --->
|
現在核心已經設定好了,您可以(重新)編譯您的核心以啟動 ALSA 支援。當您使用新核心重開以後,ALSA 應該已經被支援以及啟動了。接著您應該參考「ALSA 公用程式」以及看看是不是一切都如預料中進行。
使用 ALSA 驅動程式套件
若您決定要使用 alsa-driver,就... 讓我們開始吧!為了確定只有您的音效卡的驅動程式會被編譯,有些小動作必須先做好。雖然這並不是一定必須,不過它將節省您編譯不必須驅動程式的時間。
若您不知道您的音效卡使用什麼驅動程式,請參考「lspci」小節。當您抓出了您的驅動程式名稱(在我們的範例中,為 emu10k1),編輯
/etc/make.conf 並加入 ALSA_CARDS 變數。
原始碼 2.4: 在 make.conf 中加入 ALSA_CARDS |
ALSA_CARDS="emu10k1"
ALSA_CARDS="emu10k1 via82xx"
|
若您編譯了您的核心並想要使用 alsa-driver,請在繼續之前確定以下的東西,否則編譯
alsa-driver 是會失敗的。接下來將介紹您一種測試的方法。
注意:
genkernel 使用者可以跟著 安裝 alsa-driver
繼續,因為他們的設定預設與接下來列出的同步。
|
-
CONFIG_SOUND 有設定。(啟動基本音效支援)
-
CONFIG_SOUND_PRIME 沒有設定。(關閉內建 OSS 支援)
-
CONFIG_SND 沒有設定。(關閉內建 ALSA 支援)
-
/usr/src/linux 指向您想要啟用 ALSA 的核心原始碼。
原始碼 2.5: .config 檢查 |
# cd /usr/src/linux
# grep SOUND .config
CONFIG_SOUND=y
CONFIG_SOUND_PRIME is not set
# grep SND .config
CONFIG_SND is not set
|
接下來您要做的只剩輸入那美麗的魔法文字... 扼... 不,不是「嘛呢嘛呢吽」。
注意: 翻註:原文為「abracadabra」,意指... 「嘛呢嘛呢吽」~ XD~ |
原始碼 2.6: 安裝 alsa-driver |
# emerge alsa-driver
|
重要:
請注意您必須在每次核心(重新)編譯以後執行 emerge alsa-driver,因為之前的驅動程式會被刪除。
|
3.
設定、測試 ALSA
ALSA 公用程式
alsa-utils 可說是 ALSA 的一部分,它包含了一卡車很有用的程式,也附上了 ALSA
啟動命令稿。所以我們強烈建議您安裝 alsa-utils。
原始碼 3.1: 安裝 alsa-utils |
# emerge alsa-utils
|
注意:
若您啟動了核心中的 ALSA 支援,並且沒有將 ALSA
編成模組,請跳至「ALSA 啟動命令稿」章節。其餘使用者則必須設定 ALSA。透過 alsa-utils 提供的 alsaconf,其實非常容易。
|
設定
注意:
請在執行 alsaconf 以前關閉那些可能存取音效卡的程式。
|
設定您音效卡最簡單的辦法就是執行 alsaconf。請以 root 使用者在 shell 中輸入
alsaconf 命令。
原始碼 3.2: 發動 alsaconf |
# alsaconf
|
接著您會看到一個簡潔的嚮導介面,它會自動偵測您的設備並嘗試找出您的音效卡。請從選單中選出您的音效卡。當選好以後,它會徵求您的同意,以將變更存入
/etc/modules.d/alsa,然後它會調整您的音量設定至適當的大小、執行
modules-update、啟動 /etc/init.d/alsasound 服務。當
alsaconf 執行結束以後,您可以接著設定您的 ALSA 啟動命令稿。
ALSA 啟動命令稿
我們已經快要全部設定完成了!無論您選用何種方法安裝 ALSA,您都必須得找個東西來幫您在系統啟動時載入與初始化 ALSA 模組並設定音量。而 ALSA 啟動命令稿會幫您搞定這些東西,它叫做 alsasound,請把它加入 boot 執行層級。
原始碼 3.3: 將 ALSA 加入 boot 執行層級 |
# rc-update add alsasound boot
* alsasound added to runlevel boot
* rc-update complete.
|
接著,看看 /etc/conf.d/alsasound 裡的 SAVE_ON_STOP 變數是否為 "yes",
這樣它會幫您在每次關機之前儲存目前的音量設定。
音效群組
在您開始測試之前,還有最後一件重要的事情要作。*nix 作業系統的金科玉律:除非必要,別用根(root)權限做事。這在這裡也適用 :) 怎麼說呢?大部分的時間,您會用使用者權限登入,並聽些音樂或存取您的音效卡。要這麼作,您得在 "audio" 群組中。現在我們將把使用者加入 "audio" 群組中,讓他們不致在要存取音效設備的時候綁手綁腳。首先您必須以 root 使用者登入,然後透過 gpasswd 修改使用者的群組。
原始碼 3.4: 將使用者加入 auido 群組 |
# gpasswd -a <username> audio
Adding user <username> to group audio
|
音量設定!
好啦!我們已經做好所有設定以及要求,所以讓我們發動 ALSA 吧!若您使用 alsaconf
設定音效卡,您可以跳過這個步驟,因為 alsaconf 已經幫您作過了。
原始碼 3.5: 啟動服務 |
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Loading: snd-card-0 ... [ ok ]
* Loading: snd-pcm-oss ... [ ok ]
* Loading: snd-seq ... [ ok ]
* Loading: snd-emu10k1-synth ... [ ok ]
* Loading: snd-seq-midi ... [ ok ]
* Restoring Mixer Levels ... [ ok ]
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Restoring Mixer Levels ... [ ok ]
|
現在該做的都做了,不過一開始所有聲道都是靜音的。我們使用 alsamixer 來打開他們。
原始碼 3.6: 執行 alsamixer |
# alsamixer
|
重要:
若您無法成功執行 alsamixer,並得到如 alsamixer: function snd_ctl_open
failed for default: No such file or directory,這通常是 udev 沒有設好設備的問題。執行 killall udevd; udevstart 重載 /dev 目錄,並重新執行
alsamixer。這應該能解決問題。
|
第一次執行的時候,您的 ALSA Mixer 可能長成這樣。看到 Master 跟 PCM 兩個聲道,它們都有 MM 在底下,這表示他們目前是靜音的。在玩弄 alsamixer 時,您是不會聽見任何聲音從喇叭傳出來的。
圖示 3.1: ALSA Mixer 主視窗(靜音) |
 |
現在,我們把這些聲道的靜音取消,然後設定音量。
警告:
若您想要聽到喇叭的聲音,必須取消 Master 以及 PCM 聲道的靜音,並將音量設成您聽的見的大小。
|
-
使用左右箭頭(← & →)選擇聲道。
-
使用 m 鍵切換該聲道的靜音開關。
-
要增加或減少音量,使用上下箭頭(↑ & ↓)。
注意:
請小心設定低音和高音設定。50 通常是它們兩個不錯的設定。把低音設太高有可能讓喇叭破音,因為大多數的喇叭沒有設計來播放這麼大聲的低音。
|
在您全部設定完成以後,您的 ALSA Mixer 看起來應該跟以下範例類似。注意到他們顯示 00
而不是 MM,並且音量也都設定好了。
圖示 3.2: 準備唱歌的 ALSA Mixer |
 |
檢查聲音!
測試音效卡最惱人的方法,就是想辦法讓喇叭發出一些噪音。這不是很好玩,但它至少告訴你可以用了。
原始碼 3.7: 發出一些噪音 |
# cat /dev/urandom > /dev/dsp
|
注意:
/dev/dsp 是個指向 /dev/sound/dsp 的符號連結,它應該會被自動產生。試著重新導向輸出至 /dev/sound/dsp 若您沒有
/dev/dsp 檔案。
|
您應該會聽件一些噪音。按下 Ctrl + C 來停止。若您沒有聽到任何東西,那只好回到前面幾章,找出錯誤並更正它。
終於,聽些音樂吧!如果上面所有的步驟都完美的達成了,您現在應該可以播放些優美的音樂了。最快速的測試方法是使用例如 media-sound/madplay 一類的命令列工具。您也可以使用比較有名的 mpg123 或 xmms。若您是個 ogg 粉絲,則可以使用
media-sound/vorbis-tools 提供的 ogg123。使用任何您習慣的播放程式,如同往常,emerge您需要的東西。
原始碼 3.8: 取得軟體 |
# emerge madplay mpg123 xmms
# emerge vorbis-tools
|
然後播放您最愛的音樂...
原始碼 3.9: 播放音樂 |
# madplay -v /mnt/shyam/Music/Paul\ Oakenfold\ -\ Dread\ Rock.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
Title: Dread Rock
Artist: Paul Oakenfold
Album: Matrix Reloaded
Year: 2003
Genre: Soundtrack
Soundtrack
00:04:19 Layer III, 160 kbps, 44100 Hz, joint stereo (MS), no CRC
# ogg123 Paul\ Oakenfold\ -\ Dread\ Rock.ogg
Audio Device: Advanced Linux Sound Architecture (ALSA) output
Playing: Paul Oakenfold - Dread Rock.ogg
Ogg Vorbis stream: 2 channel, 44100 Hz
Genre: Soundtrack
Transcoded: mp3;160
Title: Dread Rock
Artist: Paul Oakenfold
Date: 2003
Album: Matrix Reloaded
Time: 00:11.31 [04:28.75] of 04:40.06 (200.6 kbps) Output Buffer 96.9%
|
ALSA 和 USE
您現在可以在 /etc/make.conf 中加入 alsa 這個 USE 旗標,這將保證那些支援 ALSA 的程式會把該有的東西編進去。某些平台,如 x86 和 amd64,這個旗標是預設開啟的。
問題?
若有某些原因讓您無法聽見聲音,第一個要檢查的會是 alsamixer 設定。80% 的人遇到的問題,都是沒有將聲道靜音取消、或設定了過低的音量。同時,檢查您視窗管理員的音效模組,確認音量夠大到讓您聽的見。
/proc 是您的好朋友。在這裡,/proc/asound 則是最好的朋友。讓我們看看這裡到底有多少有用的資訊。
原始碼 3.10: /proc/asound 的樂趣 |
# cat /proc/asound/cards
0 [Live ]: EMU10K1 - Sound Blaster Live!
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
# cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version 1.0.8 (Thu Jan 13 09:39:32 2005 UTC).
# cat /proc/asound/oss/sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.8 emulation code)
Kernel: Linux airwolf.zion 2.6.11ac1 #2 Wed May 4 00:35:08 IST 2005 i686
Config options: 0
Installed drivers:
Type 10: ALSA emulation
Card config:
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
Audio devices:
0: EMU10K1 (DUPLEX)
Synth devices: NOT ENABLED IN CONFIG
Midi devices:
0: EMU10K1 MPU-401 (UART)
Timers:
7: system timer
Mixers:
0: SigmaTel STAC9721/23
|
4.
其他 ALSA 二三事
設定 MIDI 支援
若您的音效卡式那種有內建 MIDI 合成器,並且您想聽一些 .mid 檔案,則您必須安裝
awesfx 程式。基本上它是個用來設定 AWE32 驅動程式的公用程式集合,您必須先安裝它。若您沒有硬體的合成器,您可以使用虛擬合成器。請看到「虛擬合成器」小節。
原始碼 4.1: 安裝 awesfx |
# emerge awesfx
|
注意:
您必須從您音效卡的驅動程式光碟裡複製樂器音色檔(SoundFont - SF2)至
/usr/share/sounds/sf2/ 目錄。例如,Creative SBLive! 的樂器音色檔會是
8MBGMSFX.SF2。
|
在複製了音色檔以後,我們就可以播放 MIDI 檔案了!您也許會想將 afxload 命令加入
/etc/conf.d/local.start,所以每次系統開機的時候會一併載入音色檔。
注意:
這裡提到的 /mnt 目錄在每台機器上並不相同。它只是個範例,請確定您輸入了適合您機器的目錄位置。
|
原始碼 4.2: 載入樂器音色檔 |
# cp /mnt/win2k/Program\ Files/CreativeSBLive2k/SFBank/8MBGMSFX.SF2 /usr/share/sounds/sf2/
# asfxload /usr/share/sounds/sf2/8MBGMSFX.SF2
|
您現在可以使用如 aplaymidi 之類的程式播放 MIDI 檔案。執行 aplaymidi -l
來看看可以使用的清單,然後選一個以播放檔案。
原始碼 4.3: 播放 MIDI |
# aplaymidi -l
Port Client name Port name
64:0 EMU10K1 MPU-401 (UART) EMU10K1 MPU-401 (UART)
65:0 Emu10k1 WaveTable Emu10k1 Port 0
65:1 Emu10k1 WaveTable Emu10k1 Port 1
65:2 Emu10k1 WaveTable Emu10k1 Port 2
65:3 Emu10k1 WaveTable Emu10k1 Port 3
# aplaymidi --port=65:0 /mnt/shyam/music/midi/mi2.mid
|
虛擬合成器
若您的音效卡缺少硬體合成器,您可以使用軟體模擬的版本,如 timidity++。安裝也很簡便。
原始碼 4.4: 安裝 timidity++ |
# emerge timidity++
|
要 timidity 播放音效,它也需要音色檔。若您沒有相關的音色的,請安裝
timidy-eawpatches 或 timidity-shompatches,這將給你一些音色檔。您可以同時安裝多個音色設定,或是放置您自己的音色檔案至
/usr/share/timidity。要切換不同的音色檔,請使用 timidity++ 套件中提供的
timidity-update 工具。
原始碼 4.5: 安裝音色檔 |
# emerge timidity-eawpatches
# timidity-update -g -s eawpatches
# emerge timidity-shompatches
# timidity-update -g -s shompatches
|
別忘了將 timidity 加入預設執行層級。
原始碼 4.6: 將 timidity 加入預設執行層級 |
# rc-update add timidity default
# /etc/init.d/timidity start
|
您現在可以嘗試「播放 MIDI」了。
工具及韌體
某些特定的音效卡能從 alsa-tools 以及 alsa-firmware 套件提供的工具中得到一些好處。若您需要 alsa-tools,請在 /etc/make.conf
中設定 ALSA_TOOLS 變數,列出您需要的工具。例如:
原始碼 4.7: 在 /etc/make.conf 中選擇需要的 ALSA 工具 |
ALSA_TOOLS="as10k1 ac3dec"
|
若 ALSA_TOOLS 變數沒有設定,Portage 會嘗試建立所有可用的工具。現在,安裝
alsa-tools(及/或 alsa-firmware)套件:
原始碼 4.8: 安裝 ALSA 工具 |
# emerge alsa-tools
|
特別感謝...
Everyone who contributed to the earlier version of the Gentoo ALSA Guide:
Vincent Verleye, Grant Goodyear, Arcady Genkin, Jeremy Huddleston,
John P. Davis, Sven Vermeulen, Benny Chuang, Tiemo Kieft and Erwin.
參考資料
這份文件是以
Creative Commons - 姓名標示-相同方式分享 授權條款發布
|