7.2. Ustawianie karty muzycznej

Napisał Moses Moore. Rozszerzenie dla FreeBSD 5.X Marc Fonvieille.

7.2.1. Konfigurowanie systemu

Zanim zaczniemy cokolwiek robić, powinniśmy znać model karty muzycznej którą posiadamy, chip którego używa, oraz czy jest to karta PCI czy ISA. FreeBSD wspiera szeroką paletę obu, zarówno PCI jak i ISA. Sprawdźmy listę obsługiwanych urządzeń audio w Hardware Notes, aby się dowiedzieć, czy nasza karta jest obsługiwana. W tym dokumencie także będzie napisane, który sterownik odpowiada za jej obsługę.

Aby móc używać naszej karty muzycznej, musimy załadować odpowiedni sterownik. Możemy to zrobić na jeden z dwóch sposobów. Najprostszy to po prostu załadowanie odpowiedniego modułu jądra dla naszej karty muzycznej przy pomocy kldload(8). Może to być wykonane z linii poleceń:

# kldload snd_emu10k1

albo przez dodanie odpowiedniej linii do pliku /boot/loader.conf podobnej do tej:

snd_emu10k1_load="YES"

Te przykłady są dla karty Creative SoundBlaster® Live! Pozostałe dostępne moduły ładowalne są wypisane w /boot/defaults/loader.conf. Jeśli nie jesteśmy pewni, który należy wybrać, możemy spróbować załadować moduł snd_driver:

# kldload snd_driver

Jest to pseudosterownik ładujący wszystkie dostępne sterowniki na raz. Przyśpiesza to poszukiwania tego właściwego. Jest też możliwe załadowanie wszystkich sterowników za pomocą pliku /boot/loader.conf.

Jeśli chcemy się dowiedzieć, który sterownik został wybrany do obsługi naszej karty muzycznej po załadowaniu pseudosterownika snd_driver, możemy sprawdzić plik /dev/sndstat przy użyciu komendy cat /dev/sndstat:

Drugim sposobem jest statyczne wkompilowanie obsługi naszej kary muzycznej w jądro. Rozdział poniżej dostarcza informacji jak dodać obsługę naszego urządzenia w ten sposób. Po więcej informacji o rekompilacji jądra zobaczmy Rozdział 8.

7.2.1.1. Konfigurowanie jądra z obsługą dźwięku

Pierwszą rzeczą, którą musimy wykonać jest dodanie podstawowego sterownika audio sound(4) do jądra. Aby to zrobić, musimy dodać następującą linię do pliku konfiguracyjnego jądra:

device sound

Następnie należy dodać obsługę naszej karty. Oczywiście musimy wiedzieć, który sterownik odpowiada za jej obsługę. Aby się tego dowiedzieć, sprawdźmy listę obsługiwanych urządzeń audio w Hardware Notes. Na przykład dla karty Creative SoundBlaster Live! jest to snd_emu10k1(4). Żeby dodać obsługę tej karty wstawmy następujący wpis:

device snd_emu10k1

Omówienie składni dla sterownika jest w jego podręczniku (man). Informacje przybliżające składnię sterowników muzycznych w pliku konfiguracyjnym jądra znajdują się także w pliku /usr/src/sys/conf/NOTES

Karty ISA nie obsługujące PnP mogą wymagać dodatkowych informacji przekazanych jądru (IRQ, port we/wy, itp.). Jest to robione poprzez plik /boot/device.hints. W czasie startu systemu loader(8) przeczyta ten plik i przekaże ustawienia do jądra. Na przykład stara karta muzyczna Creative SoundBlaster 16 ISA non-PnP będzie używała sterownika snd_sbc(4) w połączeniu z snd_sb16(4). Dla tej karty następujące linie muszą być dodane do pliku konfiguracyjnego jądra:

device snd_sbc
device snd_sb16

oraz te do /boot/device.hints:

hint.sbc.0.at="isa"
hint.sbc.0.port="0x220"
hint.sbc.0.irq="5"
hint.sbc.0.drq="1"
hint.sbc.0.flags="0x15"

W tym przypadku karta używa 0x220 portu we/wy i IRQ 5.

Składnia użyta w pliku /boot/device.hints jest omówiona w podręczniku sterownika muzycznego.

Ustawienia pokazane wyżej są domyślnymi. W niektórych przypadkach będzie wymagana zmiana IRQ lub pozostałych ustawień, aby się zgadzały z naszą kartą. Zobaczmy stronę podręcznika o snd_sbc(4) aby uzyskać więcej informacji.

7.2.2. Testowanie karty muzycznej

Po ponownym uruchomieniu komputera ze zmodyfikowanym jądrem, lub po załadowaniu wymaganego modułu, wiadomość o naszej karcie muzycznej powinna pojawić się w buforze wiadomości systemowych (dmesg(8)) jako coś w stylu:

pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0
pcm0: [GIANT-LOCKED]
pcm0: <Cirrus Logic CS4205 AC97 Codec>

Status karty może być sprawdzony poprzez plik /dev/sndstat:

# cat /dev/sndstat
FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz 16384
kld snd_ich (1p/2r/0v channels duplex default)

Wiadomość z naszego systemu może się różnić. Jeśli nie zostały wyświetlone żadne urządzenia pcm, wróćmy i przeczytajmy co zrobiliśmy wcześniej. Jeśli wkompilowalismy sterowniki w jądro, przeczytajmy jego plik konfiguracyjny i upewnijmy się, że odpowiednie urządzenie zostało wybrane. Częste problemy są wymienione w Sekcja 7.2.2.1

Jeśli wszystko poszło pomyślnie mamy działającą kartę muzyczną. Jeśli nasz CD-ROM albo DVD-ROM jest poprawnie połączony z naszą kartą muzyczną, możemy włożyć płytę CD do napędu i odtwarzać ją za pomocą cdcontrol(1):

% cdcontrol -f /dev/acd0 play 1

Różne aplikacje, takie jak audio/workman oferuja wygodniejszy interfejs. Możemy również zainstalować taką aplikację jak audio/mpg123, aby móc słuchać plików MP3. Szybkim sposobem na przetestowanie karty jest wysłanie danych do /dev/dsp, jak tutaj:

% cat filename > /dev/dsp

gdzie filename to dowolny plik (byle nie za krótki). Komenda ta powinna spowodować odtworzenie jakiegoś dźwięku, potwierdzając, że karta działa.

Poziomy miksera (czyli głośność) karty muzycznej mogą być zmienione za pomocą komendy mixer(8). Więcej szczegółów możemy znaleźć w podręczniku na stronie mixer(8).

7.2.2.1. Częste problemy

Błąd Rozwiązanie
unsupported subdevice XX

Jeden lub więcej plików/węzłów urządzeń nie zostało poprawnie utworzonych. Powtórzmy kroki wymienione powyżej.

sb_dspwr(XX) timed out

Port we/wy nie jest ustawiony poprawnie.

bad irq XX

IRQ nie jest ustawione poprawnie. Upewnijmy się, że ustawione IRQ i IRQ karty jest takie samo.

xxx: gus pcm not attached, out of memory

Nie ma wystarczająco dużo pamięci, aby używać urządzenia.

xxx: can't open /dev/dsp!

Sprawdźmy fstat | grep dsp czy inna aplikacja nie używa urządzenia. Wartymi wspomnienia są esound i system dźwięku KDE, które mogą powodować tego typu błąd.

7.2.3. Wykorzystanie wielu źródeł dźwięku

Napisał Munish Chopra.

Potrzebujemy czasem, aby możliwe było odtwarzanie z kilka źródeł dźwięku jednocześnie, jednak nasze programy nam na to nie pozwalają. Przykładem mogą być esound i artsd, które nie wspierają współdzielenia urządzenia muzycznego.

FreeBSD pozwala nam na zrobienie tego poprzez Wirtualne Kanały Dźwięku, które są ustawiane przez sysctl(8). Wirtualne kanały pozwalają przeprowadzić multipleksację kanałów naszej karty muzycznej, miksując je bezpośrednio w jądrze.

Istnieją dwa parametry sysctl'a, pozwalające ustawić liczę wirtualnych kanałów które, jeśli jesteśmy rootem, możemy ustawić:

# sysctl hw.snd.pcm0.vchans=4
# sysctl hw.snd.maxautovchans=4

Powyższy przykład rezerwuje cztery wirtualne kanały, które w codziennym użytku się przydają. hw.snd.pcm0.vchans jest liczbą wirtualnych kanałów, które posiada pcm0, które można ustawić od chwili podłączenia (w systemie) urządzenia. hw.snd.maxautovchans jest liczbą wirtualnych kanałów przypisanych urządzeniu, gdy jest ono podłączanie przez użycie kldload(8). Ponieważ moduł pcm może być ładowany niezależnie od sterowników urządzeń, hw.snd.maxautovchans może przechowywać liczbę wirtualnych kanałów, która będzie automatycznie przypisana nowo podłączonym urządzeniom.

Notatka: Notatka: Nie można zmienić liczby wirtualnych kanałów, podczas gdy urządzenie jest w użyciu. Najpierw należy zamknąć wszelkie programy używające urządzenia, takie jak odtwarzacze muzyki czy demony głosu.

Jeśli nie używamy devfs(5), będziemy musieli sami wskazać naszym aplikacjom na /dev/dsp0.x, gdzie x to 0 do 3, jeśli hw.snd.pcm.0.vchans jest ustawione na 4, jak w powyższym przykładzie. W systemie używającym devfs(5), powyższe będzie automatycznie przydzielone bez wiedzy użytkownika.

7.2.4. Ustawianie domyślnych wartości kanałów miksera

Napisał Josef El-Rayes.

Notatka: To jest wspierane tylko w FreeBSD 5.3-RELEASE i późniejszych.

Domyślne wartości dla różnych kanałów miksera są wpisane w źródło sterownika pcm(4). Istnieje wiele różnych aplikacji i demonów, które umożliwiają nam ustawienie wartości dla miksera i ich zapamiętanie. Następnie przy każdym uruchomieniu będą one ponownie ustawiane, jednak nie jest to czyste rozwiązanie. My chcemy mieć domyślne wartości na poziomie sterownika. Jest to osiągane przez zdefiniowane odpowiednich wartości w pliku /boot/device.hints, np.:

hint.pcm.0.vol="100"

Ustawi to kanał głośności na domyślną wartość 100, gdy moduł pcm(4) jest ładowany.

Ten i inne dokumenty można pobrać z ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

W przypadku pytań o FreeBSD prosimy przeczytać dostępną dokumentację przed kontaktem z <questions@FreeBSD.org>.
W sprawie zapytań o tę dokumentację prosimy o kontakt z <doc@FreeBSD.org>.