Linux. Звук.
(Аппаратное обеспечение / Драйвера)


- X-Stranger, 19.10.02, http://linux.hitech.by/ -

Судя по письмам, приходящим на мой электронный почтовый адрес, у многих пользователей возникли некоторые трудности с настройкой звука. Попробуем рассмотреть этот вопрос поподробнее. Итак, сегодня мы будем учить Linux говорить.

На теперешний момент существует несколько различных драйверов звуковых карт под Linux. Почему? Углубимся в недалекое прошлое.

С появлением первых версий Linux Ханну Савойлайнен из Финляндии написал драйвера для звуковой карты Creative Labs Sound Blaster. После он вместе с другими разработчиками добавил поддержку и других популярных (и не очень) звуковых карт. Впоследствии американская фирма 4Front Technologies предложила Саволайнену сотрудничество и стала продавать драйверы звуковых карт в качестве коммерческого продукта,  который сейчас называется OSS v Open Sound System. Эти драйвера используются  во многих операционных системах. В состав ядра Linux входит бесплатная версия звукового драйвера OSS под названием OSS/Lite.

Но некоторых программистов, использовавших звуковые карты Gravis UltraSound, этот драйвер не устраивал. И они, во главе с Ярослевом Киселой, создали свой собственный проект под названием Gravis UltraSound Project, чтобы написать драйвер для своих звуковых карт. Впоследствии этот проект разросся, была добавлена поддержка других звуковых карт. Тогдаипоявилась ALSA v Advanced Linux Sound Architecture.

Но на этом дело не закончилось. Разработчик Алан Кокс по заданию фирмы Red Hat Software изменил звуковые драйвера OSS/Lite, выделив их в отдельные звуковые модули, чем упростил настройку звука. Эти драйвера входят в стандартную поставку Linux.

Есть еще группа драйверов. Эти драйверы выпускают сами производители звуковых карт, но они поставляются только в двоичном  коде. Это позволяет производителям программного обеспечения держать в секрете от конкурентов информацию об их оригинальных разработках. Но это не позволяет пользователям самим исправлять ошибки и совершенствовать драйвера.

Итак, сделаем выводы. Звуковые драйверы делятся на четыре группы:

  1. OSS/Lite - распространяются бесплатно, включены в ядро Linux, поддерживают большинство звуковых карт, но больше уже не совершенствуются и не имеют прямой поддержки Plug and Play;
  2. OSS - поддерживают большое количество звуковых карт, легко устанавливаются, поддерживают Plug and Play, хорошо совместимы с OSS/Lite, имеют дополнительные возможности, но это коммерческий продукт, который, кроме того, не предоставляет исходный код;
  3. ALSA - бесплатны, почти совместимы с OSS/Lite, поддерживают Plug and Play, активно совершенствуются, имеют дополнительные возможности, но в настоящее время поддерживают лишь несколько звуковых карт;
  4. Драйверы производителей звуковых карт - поддерживают звуковую карту, которая может не поддерживаться другими драйверами, но доступны лишь в двоичном коде, и не всегда полностью совместимы с OSS/Lite.

Ну вот, с выбором драйвера мы уже определились. Теперь, для настройки, нам не помешало бы собрать информацию о звуковой карте. Хотя часто успешно настроить звуковую карту и не имея всех данных, рекомендуется узнать производителя и модель звуковой карты, номер прерывания IRQ, адреса портов ввода-вывода, каналы DMA, тип микросхемы, использующейся в звуковой карте, тип шины для звуковой карты (ISA, ISA Plug and Play, PCI). Некоторые из этих параметров можно узнать просто открыв корпус компьютера. Если же у вас стоит какая-либо другая ОС, то можно использовать те же параметры, что и в ней.

Есть вообще три метода настройки звуковых карт в Linux. Рекомендуется пробовать их в той последовательности, в которой они описываются.

Первый метод - использование автоматизированной программы настройки. В состав некоторых дистрибутивов входит утилита, позволяющая автоматически настраивать звуковые карты. Использование этой программки является наиболее простым способом настройки звука. В Red Hat Linux для такой настройки используется программка sndsonfig. Она производит поиск всех карт, поддерживающих Plug and Play. Если таковые присутствуют в системе, то будет выведен список, в котором можно выбрать необходимую звуковую карту. Затем можно установить номер прерывания IRQ и каналы DMA, указать адрес порта ввода-вывода. Для карт Plug and Play эти параметры при можно установить автоматически. После, тип звуковой карты сохраняется в файле /etc/sysconfig/soundcard. Для Plug and Play карт также будет создан файл /etc/isapnp.conf , который используется утилитами ISA Plug and Play для настройки звука при загрузке системы. Также конфигурируется файл /etc/conf.modules , в котором указываются соответствующие модули ядра для загрузки во время старта системы.

Для настройки звуковых драйверов OSS или ALSA воспользуйтесь аналогичными программами, которые идут в поставке с ними.

Второй метод включает в себя выполнение описанных выше действий вручную. Если у вас карта ISA Plug and Play, то, если вы не используете драйвера OSS или ALSA, для настройки сначала вам необходимо воспользоваться утилитой isapnp. Для этого следует выполнить следующую последовательность действий: создать резервную копию файла /etc/isapnp.conf ; при помощи утилиты pnpdump создать новый файл /etc/isapnp.conf , для чего выполните команду pnpdump > /etc/isapnp.conf ; отредактировать этот файл, установив необходимые параметры карты, для чего достаточно снять комментарии с соответствующих строк; запустить программу isapnp. Более подробно о настройке карт ISA Plug and Play можно узнать из документации на isapnp, isapnp.conf, pnpdump.

Загрузкой звуковых модулей ядра занимается демон kerneld (или kmod в новых версиях). Чтобы указать модули, которые следует загружать, необходимо отредактировать файл /etc/conf.modules. Подробная информация о нем есть в документации на указанный демон. Приводимый ниже пример реализует загрузку драйверов для SoundBlaster 16 с драйвером OSS/Lite:

alias sound sb

alias synth0 midi

alias midi opl3

options opl3 io=0x388

options sb io=0x220 irq=10 dma=3 dma16=7 mpu_io=0x330

Если вы используете драйвер ALSA, то имена модулей будут другими, для их правильной настройки надо посмотреть соответствующую документацию. Для нашего же случая файл конфигурации будет выглядеть следующим образом:

alias char-major-116 snd

alias char-major-14 soundcore

alias snd-card-0 snd-sb16

alias snd-slot-0 snd-card-0

alias sound service-0-0 snd-mixer-oss

alias sound service-0-1 snd-seq-oss

alias sound service-0-3 snd-pcm1-oss

alias sound service-0-4 snd-pcm1-oss

options snd snd_card_limit=1

# options for sb16

options snd-sb16 snd_port=0x220 snd_mpu_port=0x330 snd_irq=10

  snd_dma8=3 snd_dma16=7 snd_dma8_size=64 snd_dma16_size=128

  smd_mic_agc=1 snd_isapnp=0

# initialize mixer

post-install snd-sb16 alsactl restore

Для настройки и загрузки драйвера OSS обычно используется скрипт soundon. Если модули сконфигурированы правильно, то они должны загружаться автоматически, как только какое-нибудь приложение обратится к звуковой карте.

Обычно модули расположены в каталоге /lib/modules/a.b.c/misc , где a.b.c v версия ядра. Иначе их надо встроить в ядро.

Третий метод заключается в непосредственной перекомпиляции ядра с указанием драйверов, которые необходимо в него встроить. Этот метод не требует указания модулей для загрузки. Подробнее перекомпиляцию ядра мы рассмотрим в какой-либо из следующих статей (хотя можно почитать и мануал), но вкратце процесс настройки драйверов звуковых карт можно описать так. После установки  пакета с исходными текстами, надо зайти в каталог с исходниками (/usr/src/linux) и дать команду make menuconfig. Загрузится текстовая оболочка с менюподобным интерфейсом. Для настройки требуется изменять опции в подменю ?Sound? и ?Additional low level sound drivers?. Программа интуитивно понятна и позволяет указать описанные выше параметры звуковых карт без особых проблем. После вам потребуется откомпилировать ядро и установить его.

Теперь, чтобы убедиться в правильности настройки звуковой карты, надо проверить, загружаются ли звуковые драйверы. Информацию о состоянии звуковой карты можно получить командой cat /dev/sndstat. Если вместо информации вы получите сообщение об ошибке, например cat:/dev/sndstat: Operation not supported by device, то это значит, что звуковые модули не были загружены. Здесь стоит сказать, что для драйвера ALSA каталог /dev/sndstat не создается. Его аналогом является каталог /dev/asound.

После того, как вы удостоверились, что звуковые модули загружаются, можно приступить к тестированию звуковой карты. В первую очередь рекомендуется запустить микшер, попробовать поизменять различные настройки и посмотреть, не возникают ли при этом ошибки. Используйте xmixer, aumix, kmix. Для проигрывания файлов можно воспользоваться программами play или kmedia.