ПК имеет как минимум одно звуковое устройство: встроенный динамик (PC speaker). Вы также можете купить звуковую карту для вашего ПК, обладающую большими звуковыми возможностями (см. Linux Sound User's Guide или Sound-HOWTO для поддерживаемых звуковых карт).
Встроенный динамик часть консоли Linux и, поэтому является символьным устройством. Как следствие, существуют запросы ioctl для манипуляций с ним:
Генерирует сигнал beep заданной длительности, используя таймер ядра.
Пример: ioctl (fd, KDMKTONE,(long) argument).
Генерирует бесконечный beep или прерывает звучащий в настоящий момент.
Пример: ioctl(fd,KIOCSOUND,(int) tone).
Третий аргумент первого примера содержит значение тона в нижнем
слове и сдвиг в верхнем. Тон это не частота. Таймер 8254 материнской
платы ПК заведен на 1.19 МГц и поэтому тон = 1190000/частота.
Сдвиг измеряется в шагах таймера. Оба вызова срабатывают немедленно,
поэтому вы можете порождать звуковые сигналы, не блокируя программу.
KDMKTONE можно использовать для предупреждающих сигналов,
поскольку вам не приходится заботиться о его прекращении.
При помощи KIOCSOUND можно проигрывать мелодии, как это
демонстрируется в примере программы splay. Для остановки сигнала
значение тона устанавливается в 0.
Для вас как для программиста важно знать, что современные Linux-системы имеет встроенную звуковую карту. Один путь проверки: испытать /dev/sndstat. Если открытие /dev/sndstat закончилось неудачно и errno=ENODEV, то это означает, что ни один звуковой драйвер не активирован, и вы не получите никакой помощи от звукового драйвера ядра. Тот же результат может иметь попытка открыть /dev/dsp, если он не связан с драйвером pcsnd.
Если вы хотите повозиться со звуковыми картами на уровне железа, знайте, что комбинация вызовов outb() и inb() определит звуковую карту, которую вы ищете.
Программы, использующие звуковой драйвер, будут хорошо переноситься на другие i386 системы, поскольку некоторые умные люди решили использовать один драйвер для Linux, isc, FreeBSD и большинства других i386 архитектур. Звуковая карта уже не часть консоли Linux, а специальное устройство. Звуковая карта предлагает три основных возможности:
Каждая из возможностей имеет свой драйвер устройства. Для цифровых сэмплов это /dev/dsp, для модуляции частоты /dev/sequencer, для midi интерфейса /dev/midi. Звуковые установки (volume, balance, bass) контролируются через интерфейс /dev/mixer. В целях сравнения существует устройство /dev/audio, которое может читать звуковые данные SUN-law, но с преобразованием в сэмплы цифрового устройства.
Вы были правы, если подумали, что нужно использовать ioctl() для
работы с этими устройствами. Запросы ioctl() определены в
Converted on:
Fri Mar 29 14:43:04 EST 1996