Dla ciebie jako programisty ważna jest wiadomość czy w danym systemie Linux znajduję się podłączona karta dźwiękowa. Jednym ze sposobów sprawdzenia tego jest sprawdzenie /dev/sndstat. Jeśli otwarcie /dev/sndstat się nie powiedzie i errno=ENODEV znaczy to, że sterownik dźwięku jest nieaktywny, co znaczy, że nie otrzymasz pomocy ze strony sterownika dźwięku jądra. Taki sam rezultat otrzymamy przez otwarcie /dev/dsp pod warunkiem, że nie jest to odnośnik do sterownika pcsnd, gdyż w takim przypadku polecenie open() się uda.
Jeśli chcesz się bawić kartą dzwiękową na poziomie sprzetowym musisz wiedzieć, że pewne kombinacje wywołań outb() i inb() wykryją kartę, której szukasz.
Używając sterownika dźwięku w twoich programach, są szanse że będą one także chodziły na innych systemach niż i386, ponieważ jacyś mądrzy ludzie użyli tych samych sterowników w Linuksie, isc, Free-BSD i wiekszości innych systemów bazowanych na i386. Pomoże to w dostosowaniu programów dla innych architektur, jeśli Linux oferuje ten sam interfejs sterownika dźwięku na innej platformie. Należy jednak pamiętać, że karta dźwiękowa nie należy do konsoli Linuxa, lecz jest specjalnym urządzeniem. Karta dźwiękowa głównie oferuje te trzy podstawowe cechy:
Każda z tych cech ma własny interfejs. Dla próbkowania cyfrowego jest to /dev/dsp,
dla modulacji częstotliwości jest to /dev/sequencer, a dla interfejsu midi
/dev/midi. Ustawienia dźwięku (takie jak głośność, balans, basy, tony) mogą być
kontrolowane przez interfejs /dev/mixer. Dla kompatybilności istnieje urządzenie
/dev/audio, które potrafi czytać format dźwięku SUN
-law, ale pasuje to do
urządzenia próbkowania cyfrowego.
Masz rację zgadując, że używamy ioctl() do manipulowania tymi urządzeniami. Polecenie ioctl() zdefiniowne jest w <linux/soundcard.h> i zaczyna się od SNDCTL_.
Ponieważ nie posiadam karty dźwiękowej, ktoś inny musi kontynuować dalej
Przetłumaczył: Przemysław Nowak
<nowakp@box43.gnet.pl>