Gentoo Logo

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。那是註定要失敗的。

這兩個選項是:

  1. 使用核心中提供的 ALSA,這是建議的選項。
  2. 使用 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

(請確認 OSS 是關閉的)
Open Sound System   --->
   < > Open Sound System (DEPRECATED)

(回上一個選項,進入 ALSA 設定)
Advanced Linux Sound Architecture  --->
   <M> Advanced Linux Sound Architecture
   (如果您想要 MIDI 合成器以及重新導向,請選取它)
   <M> Sequencer support
   (/dev/mixer* 以及 /dev/dsp* 的向下相容。建議啟用。)
   <M> OSS Mixer API
   <M> OSS PCM (digital audio) API 

(接下來是您想啟動支援的音效卡。基本上,您只會有一種裝置,而不是一堆。
如果您有兩張以上的音效卡,請在這裡統統選上。)

(以下是測試以及開發用的選項,一般使用者不需要它。
除非您知道您在幹什麼,不然別選它們。)
Generic devices  --->
   
(ISA 音效卡選項)
ISA devices   --->
(若您有 Gravis 的卡,請選取這個選項。)
   <M> Gravis UltraSound Extreme

(回到 PCI device 選單,大部分今日的音效卡都是 PCI 介面。)
PCI devices   --->
   (現在為我們的卡選取 emu10k1 驅動程式)
   <M> Emu10k1 (SB Live!, Audigy, E-mu APS)
   (Intel 的卡會是...)
   <M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
   (或是 VIA 的音效卡...)
   <M> VIA 82C686A/B, 8233/8235 AC97 Controller

(若您使用 USB 音效卡,在這裡選取它們。)
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 繼續,因為他們的設定預設與接下來列出的同步。

  1. CONFIG_SOUND 有設定。(啟動基本音效支援)
  2. CONFIG_SOUND_PRIME 沒有設定。(關閉內建 OSS 支援)
  3. CONFIG_SND 沒有設定。(關閉內建 ALSA 支援)
  4. /usr/src/linux 指向您想要啟用 ALSA 的核心原始碼。

原始碼 2.5: .config 檢查

(確定 linux 符號連結指向正確的核心原始碼目錄)
# cd /usr/src/linux
# grep SOUND .config
(1. 為真)
CONFIG_SOUND=y
(2. 為真)
CONFIG_SOUND_PRIME is not set
# grep SND .config
(3. 也為真)
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 群組

(請將 <username> 改成您的使用者名稱)
# gpasswd -a <username> audio 
Adding user <username> to group audio

音量設定!

好啦!我們已經做好所有設定以及要求,所以讓我們發動 ALSA 吧!若您使用 alsaconf 設定音效卡,您可以跳過這個步驟,因為 alsaconf 已經幫您作過了。

原始碼 3.5: 啟動服務

(ALSA 模組)
# /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 ]
(ALSA 編入核心)
# /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 主視窗(靜音)

Fig. 1: AlsaMixer(靜音)

現在,我們把這些聲道的靜音取消,然後設定音量。

警告: 若您想要聽到喇叭的聲音,必須取消 Master 以及 PCM 聲道的靜音,並將音量設成您聽的見的大小。

  • 使用左右箭頭(← & →)選擇聲道。
  • 使用 m 鍵切換該聲道的靜音開關。
  • 要增加或減少音量,使用上下箭頭(↑ & ↓)。

注意: 請小心設定低音和高音設定。50 通常是它們兩個不錯的設定。把低音設太高有可能讓喇叭破音,因為大多數的喇叭沒有設計來播放這麼大聲的低音。

在您全部設定完成以後,您的 ALSA Mixer 看起來應該跟以下範例類似。注意到他們顯示 00 而不是 MM,並且音量也都設定好了。


圖示 3.2: 準備唱歌的 ALSA Mixer

Fig. 2: AlsaMixer(取消靜音)

檢查聲音!

測試音效卡最惱人的方法,就是想辦法讓喇叭發出一些噪音。這不是很好玩,但它至少告訴你可以用了。

原始碼 3.7: 發出一些噪音

# cat /dev/urandom > /dev/dsp

注意: /dev/dsp 是個指向 /dev/sound/dsp 的符號連結,它應該會被自動產生。試著重新導向輸出至 /dev/sound/dsp 若您沒有 /dev/dsp 檔案。

您應該會聽件一些噪音。按下 Ctrl + C 來停止。若您沒有聽到任何東西,那只好回到前面幾章,找出錯誤並更正它。

終於,聽些音樂吧!如果上面所有的步驟都完美的達成了,您現在應該可以播放些優美的音樂了。最快速的測試方法是使用例如 media-sound/madplay 一類的命令列工具。您也可以使用比較有名的 mpg123xmms。若您是個 ogg 粉絲,則可以使用 media-sound/vorbis-tools 提供的 ogg123。使用任何您習慣的播放程式,如同往常,emerge您需要的東西。

原始碼 3.8: 取得軟體

(安裝您想要的應用程式)
# emerge madplay mpg123 xmms
(用這個播放 .ogg 檔案)
# 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 的樂趣

(第一且最重要的,若 /proc/asound/cards 有列出您的卡,表示 ALSA 正確選擇了您的音效卡。)
# cat /proc/asound/cards
0 [Live           ]: EMU10K1 - Sound Blaster Live!
                     Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11

(若您跟我一樣使用核心內的 ALSA 支援,又想知道自己跟 alsa-driver 差多遠,這裡會顯示正在執行的 ALSA 版本。)
# cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version 1.0.8 (Thu Jan 13 09:39:32 2005 UTC).

(ALSA OSS 模擬的細節資訊)
# 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
(選擇一個埠口,並播放 mid 檔)
#  aplaymidi --port=65:0 /mnt/shyam/music/midi/mi2.mid

虛擬合成器

若您的音效卡缺少硬體合成器,您可以使用軟體模擬的版本,如 timidity++。安裝也很簡便。

原始碼 4.4: 安裝 timidity++

# emerge timidity++

要 timidity 播放音效,它也需要音色檔。若您沒有相關的音色的,請安裝 timidy-eawpatchestimidity-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.

參考資料



列印

最後更新 2005年 7月 26日

這份文件的原始版本已不再被維護

大綱: 這篇文章幫助使用者在 Gentoo Linux 上設定 ALSA (進階 Linux 音效架構)。

Shyam Mani
Author

Victor Tseng
Translator

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.