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:
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):
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:
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:
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/.
|