Bociek PLD - Pisarz
I. Informacje podstawowe
II. Instalacja
III. Podręcznik użytkownika
IV. Podręcznik administratora
Usługi dostępne w PLD
ALSA - Dźwięk w Linuksie
V. Tworzenie PLD - Praktyczny poradnik
VI. O podręczniku
O tej książce
Spis treści
Inne wersje tego dokumentu
HTML (jeden plik)
Odnośniki
Tworzymy dokumentację PLD
Strona PLD
Listy dyskusyjne PLD

ALSA - Dźwięk w Linuksie

<- ->
 

Obecnie w Linuksie do obsługi dźwięku stosuje się system ALSA (ang: Advanced Linux Sound Architecture), będący następcą systemu OSS. ALSA to zestaw modułów jądra oraz kilku narzędzi pomocniczych, moduły możemy ładować za pomocą systemu UDEV lub statycznie, obydwie metody będą opisane w tym rozdziale. Druga z metod jest bardziej złożona, dlatego początkujących zachęcamy do korzystania z metody opartej o system UDEV.

Instalacja

Zaczynamy od pakietu zawierającego moduły kernela:

$ poldek -i kernel-sound-alsa

Potrzebujemy jeszcze kilku narzędzi, w tym programu do zarządzania mikserem:

$ poldek -i alsa-utils

W ogóle nie należy instalować pakietu kernel-sound-oss, ALSA potrafi emulować OSS.

Konfiguracja z użyciem systemu UDEV

Niezaawansowanym zalecamy użycie udeva zamiast statycznej konfiguracji (opisanej dalej), ze względu na łatwiejszą konfigurację. Zakładam, że w systemie mamy działający UDEV, instalujemy pakiet z rc-skryptem, koniecznym do zapisywania stanu miksera (inicjacja miksera jest wykonywana bezpośrednio przez UDEV):

$ poldek -i alsa-udev

i uruchamiamy go

# /etc/init.d/alsa-udev start

Nie należy sie martwić, że nic się nie wyświetla po jego uruchomieniu, parametr start nic nie robi. Najprawdopodobniej mamy już załadowane właściwe moduły i jedyne co pozostaje nam to w mikserze ustawić głośność i wyłączyć wyciszenie, co zostało opisane w dalszej części rozdziału. Więcej o systemie UDEV w tym dokumencie.

Konfiguracja statyczna

Konfiguracja statyczna jest alternatywną metodą w stosunku do powyższej. Zaczynamy od zainstalowania pakietu alsa-utils-init:

$ poldek -i alsa-utils-init

Teraz musimy postarać się o dodanie koniecznych aliasów do pliku /etc/modprobe.conf, które posłużą do załadowania koniecznych modułów, przez zainstalowany przed chwilą rc-skrypt. Możemy wykonać to na dwa sposoby:
  • samodzielnie - za pomocą dowolnego edytora tekstu; wpisy możemy skopiować z opisu Driver & Docs, urządzenia odnalezionego na liście obsługiwanego sprzętu

  • za pomocą programu alsaconf, który wykryje urządzenie i dokona koniecznych wpisów

Pierwsza z metod jest tak oczywista, że zajmiemy się tylko drugą z wymienionych. Na początek musimy się upewnić, że mamy pakiet pciutils i uruchamiamy program:

# /usr/sbin/alsaconf

Po ukazaniu się ekranu z napisem "Searching sound cards" czekamy ok. 10 sekund i wciskamy ctrl-c (konfigurator szybko znajduje naszą właściwą kartę - a ponieważ szuka również kart starego typu oraz różnych egzotycznych, co zajmuje mu bardzo dużo czasu dlatego przerywamy wyszukiwanie). Następne okno pokazuje nam listę znalezionych kart muzycznych (zwykle jedną). Zatwierdzamy wyświetloną kartę i na pytanie:

Do you want to modify /etc/modprobe.conf?

Odpowiadamy twierdząco, spowoduje to dopisanie odpowiednich aliasów modułów do pliku konfigurującego. Kiedy progam zakończy działanie, uruchamiamy rc-skrypt:

# /etc/init.d/alsasound start

Teraz pozostaje nam ustawić głośność w mikserze oraz wyłączyć wyciszenie.

Ustawienie miksera i testowanie

Domyślnie wszystkie "suwaki" miksera są ustawione na zero i dodatkowo włączone jest wyciszenie (mute), aby to zmienić musimy uruchomić program alsamixer lub amixer:

# /usr/bin/alsamixer

Wyłączmy mute (klawisz m) i przesuwamy "suwaki" (strzałkami) kanału Master i PCM. Teraz możemy przetestować ustawienia z poziomu root-a, możemy to zrobić odsłuchując dowolny plik wav (np. z pakietu gnome-audio):

# /usr/bin/aplay test.wav

lub plik mp3 (wymagany pakiet "alsaplayer" oraz "alsaplayer-input-mad"):

# /usr/bin/alsaplayer -o alsa test.mp3

To już praktycznie koniec instalacji. Pamiętać należy, że do niektórych programów należy doczytać odpowiednie wtyczki, które umożliwią prace z ALSA-ą. Wtyczki te łatwo rozpoznać po dopisce "alsa" w nazwie pakietu.

Na koniec pozostaje nam nadać uprawnienia wybranym użytkownikom, do obsługi dźwięku. Musimy zapisać użytkowników do grupy audio np.:

# usermod -A jkowalski audio

Więcej o uprawnieniach w tym dokumencie.

Zaawansowana obsługa miksera

W wielu przypadkach okazuje się, że posiadamy kartę muzyczną, która nie potrafi miksować dźwięku sprzętowo - co powoduje m.in., że jednocześnie może z karty korzystać jeden program lub proces. Zdarza się także, że niektóre programy na sztywno próbują połączyć się np. z OSS w celu obsługi dźwięku (np. Skype). W takim przypadku możemy skorzystać z wtyczki ALSA-y o nazwie dmix. Wbrew nazwie nie musimy niczego dogrywać - wszystko odbywa się w plikach tekstowych: /etc/asound (gdy chcemy ustawień globalnych) lub ~/.asoundrc (czyli indywidualnych ustawień dla każdego użytkownika). Przykładowy wpis przedstawimy poniżej - po więcej szczegółów odsyłamy na strony projektu ALSA (www.alsa-project.org):

# definiujemy urządzenie wirtualne nazwane przez nas demixer
# do którego później będziemy się odwoływać:
pcm.demixer	
	{
	type dmix 		# typ urządzenia, tutaj "dmix"
	ipc_key 1024 		# numer musi być unikalny
	slave	{
	pcm "hw:0,0" 		# you cannot use a "plug" device here,  darn. 
	period_time	0
	buffer_time	0
	period_size	1024	# must be power of 2 and much smoother 
				# than 1024/8192!
	buffer_size	8196	# must be power of 2 and for Audiophile
				# card (ICE1712 chip) or a VIA VT82xx
				# (snd-via82xx) must be less 6652
	#format	"S32_LE"
	periods	128
	rate	44100		# with rate 44100 Hz you *will* hear,
				# if demixer is used
		}
# bindings are cool. This says, that only the first
# two channels are to be used by dmix, which is enough for
# (most) oss apps and also lets multichannel chios work 
# much faster:
#
# Wskazujemy że tylko dwa pierwsze kanały bedą używane 
# przez demixer (czyli tutaj dmix)

	bindings	{
	0 0	# from 0 => to 0
	1 1	# from 1 => to 1
			}
	} # koniec konfiguracji wirtualnego urządzenia demixer
	
# następnie ustawiamy przekierowanie z wybranych
# urządzeń do wirtualnego urządzenia demixer:
# możemy przekierowywać z następujących urządzeń OSS:
#   /dev/audio
#   /dev/dsp
#   /dev/dspW
#   /dev/midi
#   /dev/mixer
#   /dev/music
#   /dev/sequencer (recording doesn't work yet)
#   /dev/sequencer2

# dla /dev/dsp0
pcm.dsp0	{
	type plug
        slave.pcm "demixer"
                }
# dla /dev/dsp
pcm.dsp		{
	type plug
	slave.pcm "demixer"
		}

# Software mixing for all aplications 
# uses ALSA "default" device
#
# Wszystkie aplikacje korzystające z urządzenia
# default ALSA-y przekierowujemy do miksera 
# czyli wszystko przechodzi przez dmix

pcm.!default	{
	type plug
	slave.pcm "demixer"
		}
		
# OSS device /dev/mixer0 use hardware
# Urządzenie OSS /dev/mixer0 bez zmian
# obsługuje pierwszą (0) kartę audio bezpośrednio

ctl.mixer0	{
	type hw
	card 0
	}

Jeśli chcemy jedynie przekierować dźwięk z programów obsługujących tylko OSS do ALSA, bez programowego miksowania (czyli bez używania dmix) wystarczy że wpiszemy tylko:

# from /dev/dsp0 to ALSA 
pcm.dsp0 {
	type plug
	slave.pcm "hw:0"
	}
# lub: 
#  pcm.dsp0 pcm.default
# jeśli "default" nie było redefiniowane

ctl.mixer0 {
	type hw
	card 0
	}

Natomiast najprostsze przekierowanie z /dev/dsp0 do dmix wygląda tak:

pcm.dsp0 {
    type plug
    slave.pcm "dmix"
    }

Dla chipsetów nvidia nforce(2) (intel8x0) oraz C-media konfiguracja powinna wyglądać na przykład tak:

pcm.nforce-hw {
        type hw
        card 0
}
pcm.!default {
        type plug
        slave.pcm "nforce"
}
pcm.nforce {
        type dmix
        ipc_key 1234
        slave {
                pcm "hw:0,0"
                period_time 0
                period_size 1024
                buffer_size 4096
                #rate 44100
                rate 48000
        }
}
ctl.nforce-hw {
		type hw
		card 0
		}

Następnie możemy przetestować nasz "dmix" czyli urządzenie demixer

alsaplayer -o alsa -d demixer test.mp3

ponieważ wcześniej zdefiniowaliśmy urządzenie "default", ALSA kieruje wszystko na urządzenie "demixer" - co jest równoważne:

alsaplayer -o alsa test.mp3

To tylko podstawowe przykłady działania jakie daje nam ALSA, a dzięki olbrzymim możliwościom definiowania dowolnych urządzeń wirtualnych i przekierowywania dźwięku, możemy uzyskać ciekawe i różnorodne efekty. Więcej o konfiguracji urządzeń PCM znajdziemy tutaj: www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html.

Przy pracy z pluginem "dmix" nie należy zapomnieć o wyłączeniu demonów ARTs i ESD gdyż w przeciwnym razie mogą pojawić się opóźnienie w odtwarzaniu dźwięków i zakłócenia w niektórych programach, gdyż wiele z nich próbuje najpierw korzystać z w/w demonów dźwięku.

Uwagi

Więcej o dźwięku pod Linuksem na stronie linux-muzyka.ixion.pl/.

 
<- ->