1.Вступление
The Advanced Linux Sound Architecture (ALSA) - это проект, который призван улучшить звуковую подсистему в ОС Linux. Предполагается, что в более новых версиях ядра Linux (2.3.x или 3.3.x) эти драйверы будут включены в ядро.
ALSA драйверы предоставляют полную поддержку аудио и MIDI в системе Linux.
Основываясь на данных с сайта http://www.alsa-project.org/, у ALSA драйверов есть следующие функции:
- Полная поддержка всех звуковых интерфейсов, от простых звуковых до профессиональных многоканальных карт.
- Драйверы представлены в системе в виде модулей.
- Поддержка параллельного воспроизведения файлов (SMP-Symmetric Multiprocessing)
- Высоко функциональная, легко используемая приложениями, библиотека пользовательского уровня (alsa-lib)
- Поддержка более старых OSS API, совместимость с большинством OSS программ.
Если ваша карта поддерживается звуковой подсистемой ядра или коммерческими OSS/4Front звуковыми драйверами, которые встроены в ядро версии 2.4.x, то вы можете сразу включить поддержку вашей карты в виде модуля. Если вы решили пойти по этому пути то ознакомьтесь с Linux Sound HOWTO.
Однако у OSS/4Front драйверов есть некоторые ограничения из-за того, что они коммерческие. ALSA, напротив, лишена всех этих недостатков. ALSA это полностью GPL и LGPL система звуковых драйверов, которые предоставляют профессиональное качество записи, воспроизведения и обработки MIDI.
Какие звуковые карты поддерживают ALSA драйверы?
Разработчики ALSA драйверов стараются предоставить поддержку как можно большего числа звуковых карт, при этом предоставляя открытый исходный код. Однако некоторые производители могут предоставлять бинарную версию драйверов.
Узнать поддерживается ли ваша звуковая карта можно на сервере: http://www.alsa-project.org/alsa-doc/.
2.Инсталляция
Учитывая, что большинство людей использует ядро версии 2.4.х то нам потребуется собрать модули ядра и модули ALSA драйверов отдельно. Те же, кто использует ядро версии 2.5.х могут сделать это на уровне ядра, так как ALSA драйверы уже встроены в ядро этих версий.
Сначала давайте удостоверимся, что наше ядро готово для работы с ALSA драйверами. Надо убедиться, что в ядре отключены все звуковые драйверы, а поддержка звука выставлена как модуль (M). В результате мы должны получить модуль soundcore.o.
Note: Возможно, что ALSA драйверы будут работать, даже если поддержка звука в ядре выставлена как (Y), вместо модуля (M). Однако официальная инструкция по установке ALSA драйверов предполагает наличие модуля, чтобы ALSA сама могла его подгрузить когда это необходимо. |
Если у вас уже есть рабочая конфигурация ядра системы, то надо убедиться, что убрана поддержка всех звуковых карт, а поддержка звука выставлена как модуль (M). Если вы хотите сделать это не перезагружаясь то следуйте нижеприведённым инструкциям:
# cd /usr/src/linux # cp .config ~/ # make mrproper # cp ~/.config . # make menuconfig |
Теперь выберите поддержку звука (Sound Card Support) как модуль (M) и уберите поддержку всех звуковых карт. Теперь надо пересобрать ядро:
# make dep clean # make modules modules_install |
Команда make modules сотрёт все модули из системы и соберёт их заново, даже те которые остались после предыдущей инсталляции ALSA драйверов.
Important: Это означает, что придётся переустанавливать alsa-driver после каждой пересборки ядра. |
Note: Однако нет необходимости переустанавливать nvidia-kernel, так как Nvidia драйверы находятся в отдельной директории /lib/modules/*/video и не будут удалены командами make modules modules_install. |
Теперь пришло время установить ALSA модули для поддержки вашей звуковой карты. Если у вас PCI звуковая карта то можно узнать чипсет, на котором она сделана выводом команды /proc/pci
# grep audio /proc/pci
|
Warning: Если у вас уже были установлены звуковые модули другого производителя то их надо теперь выгрузить. Проверить какие модули загружены можно командой lsmod и потом, с помощью команды rmmod выгрузить их из системы. |
Теперь можно просто воспользоваться командой emerge alsa-driver, и через некоторое время мы получим установленные звуковые драйверы с поддержкой всех звуковых карт.
Однако можно сэкономить время узнав имя модуля, который требуется для корректной работы ALSA драйверов со звуковой картой. Это можно сделать посмотрев ALSA Soundcard Matrix. Мой модуль называется snd-emu10k1, так как у меня звуковая карта SBlive! на чипсете EMU10K1. Теперь можно указать звуковым драйверам тип нашей звуковой карты не используя префикс snd.
# env ALSA_CARDS='emu10k1' emerge alsa-driver
|
Note: Вы можете также указать тип вашей звуковой карты в файле /etc/make.conf, тогда при переустановке звуковых драйверов ALSA можно просто воспользоваться командой emerge alsa-driver. Например, это можно сделать так: echo 'ALSA_CARDS="emu10k1"' >> /etc/make.conf |
Note: Если вы хотите поставить ALSA драйверы для нескольких звуковых карт то можно вписать их через пробел в переменную ALSA_CARDS. Например так: env ALSA_CARDS='emu10k1 intel8x0 ens1370' emerge alsa-driver |
Note: Если вы хотите чтобы ALSA драйверы поддерживали OSS то надо поставить alsa-oss командой emerge alsa-oss, это ALSA/OSS совместимая оболочка. |
Теперь звуковые драйверы ALSA установлены в вашей системе.
Настройка звуковых драйверов ALSA
Для корректной работы драйверов необходимо внести изменения в некоторые конфигурационные файлы.
Сначала отредактируем файл /etc/modules.d/alsa.
Warning: Не надо редактировать файл /etc/modules.conf. Вместо этого надо настраивать /etc/modules.d. |
Проверьте наличие следующих строк в самом конце этого файла. Там же нужно выставить максимальное количество используемых вами звуковых карт (как правило, одну).
alias /dev/mixer snd-mixer-oss
alias /dev/dsp snd-pcm-oss
alias /dev/midi snd-seq-oss
# Выставите правильное количество.
options snd cards_limit=1
|
Теперь надо указать какой модуль будут использовать ALSA драйвера:
## после завершения запустите `update-modules'. ## Для дополнительно информации прочтите INSTALL file в /usr/share/doc. ## ## ALSA блок alias snd-card-0 snd-emu10k1 ## Если у вас больше чем одна, добавьте: ## alias snd-card-1 snd-intel8x0 ## alias snd-card-2 snd-ens1370 ## OSS/Free блок ## alias sound-slot-0 snd-card-0 ## alias sound-slot-1 snd-card-1 ## |
Note: Если у вас в системе установлено несколько звуковых карт то надо в переменной cards_limit указать их точное число и в snd-card прописать все нужные модули. Вы можете найти примеры в Разделе 6 инструкции ALSA Howto. |
Проверьте, не закомментированы ли следующие строки:
alias /dev/mixer snd-mixer-oss alias /dev/dsp snd-pcm-oss alias /dev/midi snd-seq-oss |
Теперь проверьте, правильно ли вы отредактировали /etc/modules.d/alsa и потом запустите команду update-modules.
# update-modules
|
Note: Команда update-modules внесёт исправления в файл /etc/modules.conf основываясь на изменениях, которые вы сделали в файле /etc/modules.d/alsa. |
Также вы должны проверить файл /etc/devfsd.conf и удостовериться, что ALSA драйверы зарегистрированы правильно.
# ALSA/OSS содержание # Вы можете изменить права доступа к аудио устройствам LOOKUP snd MODLOAD ACTION snd LOOKUP dsp MODLOAD LOOKUP mixer MODLOAD LOOKUP midi MODLOAD REGISTER sound/.* PERMISSIONS root.audio 660 REGISTER snd/.* PERMISSIONS root.audio 660 |
Note: Данные из файла devfsd.conf устанавливают права доступа к /dev/sound. Поэтому, если вы не обладаете root правами, нужно убедиться, что вы внесены в группу audio. |
3.Запуск ALSA драйверов
Добавление ALSA драйверов в автозагрузку
Первое, что надо сделать чтобы ALSA драйверы запускались на стадии загрузки системы это:
# rc-update add alsasound boot
|
Warning: Имейте в виду, что alsasound скрипт должен быть занесен в "boot" - загрузочный уровень, а не "default". |
Запуск драйверов и настройка звука
Так, как мы пользуемся OS Linux то перезагружаться не требуется. Надо просто запустить ALSA драйвер вручную.
# /etc/init.d/alsasound start
|
Теперь ALSA драйверы запущены. Если все в порядке то команда lsmod должна показать модуль ALSA. Однако звука пока не будет, так как не установлены alsa-utils.
# emerge alsa-utils # amixer |
Warning: Если возникнут проблемы с запуском amixer: "amixer: Mixer attach default error: No such file or directory", то надо выполнить insmod snd-mixer-oss и snd-pcm-oss. Теперь можно запустить amixer снова. |
# insmod snd-mixer-oss # insmod snd-pcm-oss # amixer |
Если всё прошло успешно то теперь можно включить звук на основном и дополнительном канале.
# amixer set Master 100 unmute # amixer set PCM 100 unmute # aplay /usr/kde/3/share/sounds/pop.wav // (pop.wav это часть KDE) |
Если вы хотите слушать музыку через XMMS то надо установить alsa-xmms командой emerge alsa-xmms.
Теперь, если вы перезагрузите систему то alsasound скрипт запуститься и восстановит все ваши настройки.4.Последние штрихи
Если вы обновите ядро системы то придётся пересобрать ALSA модули.
Нет необходимости переустанавливать alsa-libs и alsa-utils, так они не будут удалены при пересборке/смене ядра системы. Удален будет только alsa-driver, так как он ставиться в директорию /lib/modules/*/kernel/sound/pci/.
# emerge alsa-driver
|
Нет необходимости редактировать /etc/modules.autoload, так как после выполнения команды rc-update add alsasound boot, ALSA модули будут автоматически загружены при запуске системы.
Нет необходимости добавлять snd-pcm-oss или snd-mixer-oss в этот файле. Обратитесь к этой документации за подробностями.
По этим ссылкам вы можете найти дополнительную документацию:
- The Gentoo Linux Desktop Configuration Guide
- ALSA Project Homepage
- ALSA Users Documentation
- ALSA Howto's and FAQ's
- Linux Sound HOWTO
- Sound and MIDI Software For Linux