Тестирование и использование

Теперь вам предстоит удостовериться, что драйвер правильно установлен и попробовать его в действии.

Файловая система /proc

Вы можете узнать много интересной информации о своей системе в подкаталоге /proc. Подкаталог /proc - это виртуальная файловая система, то есть, не существующая в действительности, но управляющая некоторыми процессами и задачами в вашем компьютере. Для того, чтобы ее запустить, вам нужно скомпилировать в ядре поддержку этой системы. У большинства дистрибутивов Linux это делается по умолчанию, но если вы специально пропустили поддержку /proc при компиляции, то разумеется в каталоге /proc ничего не будет.

В каталоге /proc/modules есть информация по загруженным модулям. Когда у вас загружены драйверы ALSA, напишите cat /proc/modules, и увидите примерно следующее:
snd-pcm1-oss      4            0
snd-sb16          1            1
snd-sb-dsp        4    [snd-sb16]      0
snd-pcm1          4    [snd-pcm1-oss snd-sb-dsp]      0
snd-pcm           3    [snd-pcm1-oss snd-sb16 snd-sb-dsp snd-pcm1]    0
snd-mixer         3    [snd-pcm1-oss snd-sb16 snd-sb-dsp]      1
snd-mpu401-uart   1    [snd-sb16]      0
snd-midi          4    [snd-sb16 snd-sb-dsp snd-mpu401-uart]   0
snd-opl3          1    [snd-sb16]      0
snd-synth         1    [snd-sb16 snd-opl3]     0
snd-timer         1    [snd-opl3]      0
snd               8    [snd-pcm1-oss snd-sb16 snd-sb-dsp snd-pcm1 snd-pcm snd-mixer snd-mpu401-uart snd-midi snd-opl3 snd-synth snd-timer]    0
Если у вас во время инсталляции что-то было сделано неправильно, то вы обнаружите несколько устройств "snd", но поддержки звука не будет.

Например (Запомните: никогда не запускайте подобную команду - драйверу cs4236 необходимы все опции):
win3:˜# modprobe snd-card-cs4236
/lib/modules/2.0.35/misc/snd-card-cs4236.o: init_module: Device or resource busy
snd-mixer: Device or resource busy
win3:˜# cat /proc/modules
snd-cs4236        2           0
snd-cs4231        3    [snd-cs4236]    0
snd-timer         1    [snd-cs4231]    0
snd-pcm1          4    [snd-cs4236 snd-cs4231] 0
snd-mixer         3    [snd-cs4236 snd-cs4231] 0
snd-pcm           3    [snd-cs4236 snd-cs4231 snd-pcm1]       0
snd-mpu401-uart   1           0
snd-midi          4    [snd-mpu401-uart]       0
snd-opl3          1           0
snd-synth         1    [snd-opl3]      0
snd-timer         1    [snd-cs4231 snd-opl3]   0
snd               8    [snd-cs4231 snd-timer snd-pcm1 snd-mixer snd-pcm]     0
Вы можете проверить наличие карты, заглянув в /proc/asound/cards. Например:
bash$ cat /proc/asound/cards
0 [card1          : SB16 - Sound Blaster 16
                    Sound Blaster 16 at 0x220, irq 5, dma 1&5
В предыдущем случае (где я забыл) на экране появится:
win3:˜# cat /proc/asound/cards
--- no soundcards ---
Работающая карта CS4236 ответит так:
0 [card1         ]: CS4236 - CS4237B
                    CS4237B at 0x534, irq 7, dma 1&0
Если вы проверили и перепроверили ваши установки, и не можете "найти" свою карту, посмотрите в главу, посвященную устранению ошибок.

Каталог /proc/asound/ содержит множество другой информации о вашей системе. Не забудьте, что /proc/asound/ будет существовать только после загрузки драйвера ALSA. Если у вас нет /proc/asound, то это означает, что вы неправильно загрузили модуль "snd". Вы можете проверить установленные карты в /proc/asound/cards; для карты0 смотрите /proc/asound/0, /proc/asound/1 для карты1 и т.д.

Если после cat /proc/asound/card1/pcm0 появляется
      ES1370 DAC2/ADC
      Playback isn't active.
      Record isn't active.
это означает, что ваш драйвер готов к работе , но в настоящий момент ничего не делает. (Все прошло правильно).

Для пользователей ядра 2.0.x есть еще один способ получения информации о звуковых устройствах, а именно - если вы установили драйвер совместимости с OSS, то у вас есть /dev/sndstat . Разработчики драйверов ALSA говорят, что нельзя полностью положиться на эту информацию, так как она взята из драйвера для совместимости, а более надежный источник находится в /proc/asound/. В ядре 2.2.x ALSA использует модуль ядра soundcore и поэтому не может эмулировать /dev/sndstat, так как он будет конфликтовать с драйверами OSS.

Микшер

Наконец-то, драйверы для вашей карты установлены и файловая система /proc подтверждает это, теперь вы можете пользоваться картой. Для этого нужно настроить микшера на нужные значения громкости. Для этого вам понадобится "amixer" из пакета alsa-utils. Сначала установите пакет или, хотя бы, "amixer" в какое-нибудь доступное место, например /usr/local/bin.

Версия 0.3.2 или более поздняя имеют интерфейс, отличающийся от аналогов в драйверах OSS. Если вы наберете "amixer", увидите составляющие и их значения. Одной из этих составляющих будет "Master volume". Это будет выглядеть примерно так:

Group 'Master',0
  Capabilities: volume
  Channels: Front-Left Front-Right 
  Limits: min = 0, max = 31
  Front-Left: 31 [100%] [on] [---]
  Front-Right: 26 [84%] [on] [---]

К сожалению, я не знаю, как раздельно установить громкость на каналах. При помощи amixer вы можете менять громкость командой "amixer set". Например, для того, чтобы установить Master volume, вам следует ввести:

amixer set Master 15

Не забывайте, что названия элементов в каждой карте могут звучать по разному.

Если у вас установлена версия 0.3.0-pre4 ALSA, то amixer будет работать, как нормальный микшер. Вы можете посмотреть его настройки, набрав "amixer". Эта команда выводит список настроек микшера. Выходные сигналы с карт могут сильно различаться, на моей Soundblaster 16 они следующие:
Master         0  % (-14.00dB) : 0  % (-14.00dB)
Bass           0  % (-14.00dB) : 0  % (-14.00dB)
Treble         0  % (-14.00dB) : 0  % (-14.00dB)
Synth          0  % (-62.00dB) : 0  % (-62.00dB)
PCM            0  % (-62.00dB) : 0  % (-62.00dB)
Line-In        0  % (-62.00dB) : 0  % (-62.00dB) Mute
MIC            0  % (-62.00dB) : 0  % (-62.00dB) Mute
CD             0  % (-62.00dB) : 0  % (-62.00dB) Mute
In-Gain        0  % (-18.00dB) : 0  % (-18.00dB)
Out-Gain       0  % (-18.00dB) : 0  % (-18.00dB)
PC Speaker     0  % (-18.00dB) : 0  % (-18.00dB)

Если вы при такой команде получаете строку типа "amixer: Specify command...", то, скорее всего, вы используете утилиты ALSA 3.2 . Я бы посоветовал, установить версию 0.4.1e или более позднюю или 0.3.0-pre4.

Установки микшера для воспроизведения

Вы наверное заметили, что на установках некоторых устройств стоит "Mute". Это означает, что это устройство выключено. На некоторых картах (например CS4237B) можно отключить и основной канал. Поэтому для CS4237B, я бы написал

amixer set "Master d" unmute

для того, чтобы карта могла воспроизводить звук. У Soundblaster нельзя отключить основной канал, но я пишу

amixer set Master 100 unmute

для того, чтобы звук на выходе воспроизводился на 100% . Наберите

amixer set "Master d" 100; amixer set PCM 100 unmute

для того, чтобы установить выходной звук с карты CS4237B на максимум и то же самое сделать для устройства PCM.

Если вы используете более старую версию amixer, то вам надо пропустить "set" в команде и просто напечатать:

amixer "master d" 100

Элементы микшера

Различные части микшера могут быть вам не знакомы, если вы не имели дела с цифровым звуком. В этом вам может помочь sound-HOWTO, а здесь описаны основные термины.

В действительности, вы будете использовать некоторые элементы микшера: один из них "CD" (это аналоговый сигнал с вашего CDROM, большинство CD ROM соединяются со звуковой картой 3-ех или 4-ех жильным красно/бело/черным проводом).

Установка "PCM" используется для большинства приложений. Такие программы, как mpg123, xmms, speakfreely, realplayer, в основном, используют канал PCM.

Установки "MIC" относятся к микрофону, "line-in" - это дополнительный вход звука на вашу карту.

Различные "gain" - это дополнительное усиление сигналов. (Например record-gain - это дополнительное усиление для канала записи, которое может быть полезно при использовании микрофона).

Установки микшера для записи

Вы можете установить канал CD на запись командой:

amixer set CD capture

и остановить запись командой:

amixer set CD nocapture.

Напомню, что более старый amixer для этого использует команды ``amixer CD rec'' и ``amixer CD norec''.

Для канала микрофона эти команды выглядят как:

amixer set "Input Gain" 100; amixer set Mic 100 capture mute.

(Using the Большинство микрофонов имеет установку "gain", для регулировки громкости.

Опять же, старый amixer использует команды ``amixer "input gain" 100; amixer mic 100 rec mute''.

Другие установки микшера

К сожалению, я не смог изменить установки "3d center" и "3d space" при помощи 0.3.0-pre4. Я еще не пробовал это с 0.4.1e (просто мой компьютер работает под ядром 2.0.38). Если кому-то удастся, то, пожалуйста, дайте мне знать. Для этого можно использовать alsamixer, но он еще не переведен для работы с 0.4.1e.

В ALSA FAQ говорится, что возможно делать установки при помощи cat <file> > /proc/asound/#/mixerC0D0, где <file> получен из /proc/asound/#/mixerC0D0. Я не смог этого сделать, так как моя система начала указывать на отсутствие устройств. Также есть программа ``alsactl'', которой я не пользуюсь. И я приглашаю вас (да, именно вас!). чтобы написать эту главу.

Устройства /dev/snd/

В каталоге /dev/snd/ находятся звуковые устройства драйверов. Если у вас стоит одна карта, вам надо просмотреть следующие устройства:
/dev/snd/pcmC0D0 - прямое аудио-устройство карты 0
/dev/snd/mixerC0D0 - микшер карты 0
/dev/snd/controlC0D0 - устройство управления картой 0
Первое число означает номер карты, второе (если есть) номер устройства . Если у карты два устройства PCM, то там будут pcmC0D0 и pcmC0D1. В старых драйверах ALSA используется обозначение /dev/snd/pcm00 (где первое число означает номер карты, второе номер устройства).

Теперь вы можете послать звуковой файл в устройство PCM первой карты. То есть, послать в /dev/snd/pcmC0D0 следующим образом: cat <filename> > /dev/snd/pcmC0D0. filename - это любой файл. Если у вас есть свой звуковой файл, воспользуйтесь им или загляните на http://www.ldp.org/sounds/english.au и скачайте файл, в котором Linus Torvalds объясняет, как произносить слово Linux :)

Ваше звуковое устройство по умолчанию настроено на 8000 Hz, 8 bit. Это означает, что файл "english.au", описанный выше, воспроизведет речь, а другие тестовые файлы только шум. Если вы ничего не услышали, то проверьте ваши колонки, перезапустите "amixer" или обратитесь к доктору. (Позже вы можете использовать настройки 48 KHz, 16 bit, при использовании вашего проигрывателя типа sox или mpg123).

Если вы загрузили модуль"snd-pcm1-oss", вы можете использовать совместимость с OSS при воспроизведении с карты. Но надо сделать следующие настройки:
/dev/snd/pcmC0D0 -> /dev/audio0 (/dev/audio) -> minor 4
/dev/snd/pcmC0D0 -> /dev/dsp0 (/dev/dsp) -> minor 3
/dev/snd/pcmC0D1 -> /dev/adsp0 (/dev/adsp) -> minor 12
/dev/snd/pcmC1D0 -> /dev/audio1 -> minor 4+16 = 20
/dev/snd/pcmC1D0 -> /dev/dsp1 -> minor 3+16 = 19
/dev/snd/pcmC1D1 -> /dev/adsp1 -> minor 12+16 = 28
/dev/snd/pcmC2D0 -> /dev/audio2 -> minor 4+32 = 36
/dev/snd/pcmC2D0 -> /dev/dsp2 -> minor 3+32 = 35
/dev/snd/pcmC2D1 -> /dev/adsp2 -> minor 12+32 = 44

Если вы хотите использовать модуль ``snd-mixer-oss'', то вам придется это делать через микшер обратной совместимости.

Дополнительная информация

В файле INSTALL упомянуты настройки, которые должен использовать драйвер ALSA. Но их использование зависит от того, какой программой вы пользуетесь при воспроизведении звука. Обычные программы типа: mpg123, sox или программы X11 типа RealPlayer, будут прекрасно работать и без них.

/proc/asound/#/pcm#0

"Playback erase" - удалить всю дополнительную информацию о приложениях OSS
"Playback <app_name> <fragments> <fragment_size> [<options>]"
"Record erase" - удалить всю дополнительную информацию о приложениях OSS
"Record <app_name> <fragments> <fragment_size> [<options>]"

<app_name> - имя приложения с/без указания пути

<fragments> - количество фрагментов или ноль, если авто

<fragment_size> - размер фрагментов или ноль, если авто

<options> - дополнительные параметры

WR_ONLY - если вы хотите, чтобы приложение только выводило на устройство pcm (это хорошо, например, для Quake)

Примеры:
echo "Playback x11amp 128 16384" > /proc/asound/0/pcm0o
echo "Playback squake 0 0 WR_ONLY" > /proc/asound/0/pcm0o

/proc/asound/#card#/sb16

"Playback 8" -> драйвер будет всегда для воспроизведения использовать только 8-битный DMA-канал.
"Playback 16" -> драйвер будет всегда для воспроизведения использовать только 16-битный DMA-канал.
"Playback auto" (по умолчанию) -> драйвер будет находиться в автоматическом режиме
"Record 8" -> драйвер будет всегда для записи использовать только 8-битный DMA-канал.
"Record 16" -> драйвер будет всегда для записи использовать только 16-битный DMA-канал.
"Record auto" (по умолчанию) -> драйвер будет находиться в автоматическом режиме

Пример: echo "Record 16" > /proc/asound/0/sb16

Для разъяснения обратитесь к файлу INSTALL.