ALSA - dim13/lor GitHub Wiki
Advanced Linux Sound Architecture (ALSA) — Архитектура звуковых драйверов, а также широкий их набор для Linux, призванная сменить OSS и обеспечивающая возможность обмена между приложениями звуковыми данными с гарантируемой предельно низкой задержкой. ALSA поддерживает широкий спектр как любительских, так и профессиональных звуковых интерфейсов (в том числе, многоканальных), а также совместима с OSS API и способна работать с большинством программ написанных только для OSS.
Как установить и настроить alsa?
В большинстве современных дистрибутивных ядер ALSA является стандартной звуковой подсистемой и, если у вас не установлено какое-нибудь экзотическое аудиоустройство, достаточно будет установить пакет alsa-tools, после чего система сама распознает и настроит вашу звуковую карту. Драйверы ALSA, предоставляемые ядром, могут немного отличаться от находящихся на сайте проекта. Фактически, это две разные ветки и некоторые звуковые карты могут не заработать с одной, но прекрасно функционировать с другой. Для начала стоит попробовать драйверы, содержащиеся в ядре и, если они предоставляют необходимый функционал, остановиться на них.
Если у вас установлена мало распространенная звуковая карта, может оказаться, что ваше в вашем ядре не собран модуль для работы с ней. В этом случае, будет достаточно пересобрать ядро, вместе с требуемым модулем (его название можно узнать в описании вашей звуковой карты по адресу 1).
TODO: написать о сборке ALSA из исходников, брать отсюда: 2
Поставил альсу (alsa), а звука нет. Что делать?
По умолчанию после установки alsa (если ранее она не стояла), все каналы находятся в заглушенном положении (mute). Поэтому запустите alsamixer и снимите mute клавишей m с каналов Master и PCM.
Кнопки курсора вверх и вниз позволят установить требуемый уровень звука.
Сохраняются настройки командой alsactl store.
Как сохранить настройки микшера при использовании ALSA? Как сделать, чтобы они восстанавливались?
Для сохранения настроек выполните команду
user@linux# /usr/sbin/alsactl store
А чтобы они восстанавливались (и записывались) нужно, чтобы в ваших инициализационных скриптах стартовал демон alsasound. Устанавливается он вместе с alsa-driver.
В дистрибутивах Fedora Core 1 и 2 запись и восстановление настроек прописано двумя строчками в /etc/modules.conf (/etc/modprobe.conf), например:
install snd-intel8x0 /sbin/modprobe --ignore-install snd-intel8x0 && /usr/sbin/alsactl restore >/dev/null 2>&1 ¦¦ :
remove snd-intel8x0 { /usr/sbin/alsactl store >/dev/null 2>&1 ¦¦ : : }; /sbin/modprobe -r --ignore-remove snd-intel8x0
Удобнее убрать эти строчки и установить демон alsasound (его можно взять, например, в пакете alsa-driver с www.alsaproject.org). Это позволит нормально выгружать драйверы в случае необходимости. Однако в случае Fedora Core 3 этого делать не нужно - демон alsasound не сработает.
Где в Linux эквалайзер? Как мне поднять/прибрать высокие/низкие частоты для всех аудио-приложений?
Этот вопрос задается регулярно. Наиболее простой способ, если вы пользуетесь ALSA, описан здесь. В звуковых картах Creative Labs (семейства Live!, Audigy, X-Fi) встроен двухполосный аппаратный эквалайзер, но пользоваться им не рекомендуется из-за ощутимого ухудшения звучания при его использовании.
Когда у меня включен xmms/mplayer/другая программа, звук с kde/gnome или других программ не выводится. Приложение польностью занимает звуковую карту, что делать? Как заставить приложения в KDE воспроизводить звук одновременно? (устройство вывода занято)?
Начнем с карты. Раз такое происходит, значит ваша карточка не умеет аппаратно смешивать звуковые потоки. Лучше бы от нее избавиться, а если она встроенная, то купить внешнюю. Sb live 5.1 стоит копейки. Но не суть.
В kde и gnome существуют так называемые звуковые серверы. Звуковые серверы занимаются смешиванием звуковых потоков. Эти серверы в случае выведения звука занимают звуковую карту и по большой и светлой идее все программы должны работать через них.
Но вот незадача - если программа не умеет работать через звуковой сервер, то она сама занимает карточку и после этого сервер уже не может ею воспользоваться, равно как и любая другая программа.
Есть два решения этой проблемы - для xmms скачать (если не включен в пакет) плагин xmms-arts или xmms-esd - первый для KDE, второй для Gnome. В mplayer указать вывод звука -ao arts и так далее.
Можно сделать проще - отключить эти серверы и воспользоваться программным микшером самой alsa (у кого OSS - это их проблемы). Для того, чтобы проигрывать системные звуки KDE или Gnome нужно указать проигрывать их внешней программой (например, play из пакета sox).
Если вам необходим качественный звуковой сервер (вы занимаетесь музыкой), то не повредит сочетание программного микшера и звукового сервера jack, который специально писался для работы со звуком.
Как сделать программное микширование с ALSA на картах, не поддерживающих аппаратное?
Использовать dmix. Для alsa > 1.0.9pre2 делать то, что написано ниже, необязательно, т.к. alsa сама определяет, способна ли карта микшировать аппаратно и если нет, включает dmix.
Кидаем в /etc такой конфиг (назвается asound.conf)
/etc/asound.conf:
pcm.!default {
type plug
slave.pcm "dmixer"
}
pcm.dsp0 {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 8192
#buffer_size 32768
#periods 128
rate 44100
}
bindings {
0 0
1 1
}
}
ctl.mixer0 {
type hw
card 0
}
За ответ спасибо McMcc. Готовый файл лежит на 3
Что за ошибка FATAL: Error running install command for sound_slot_0?
Есть три варианта - простой, сложный, очень сложный.
- Простой: в /etc/modprobe.conf (или /etc/modules.conf для ветки ядер 2.4.х) не хватает упоминания snd-slot-0. Правильно написать так:
alias snd-slot-0 snd-card-0
- Сложный: Невозможно загрузить модуль звуковой карты и как следствие, нельзя к нему обратиться. Может перепутано имя, может карта неплотно стоит в слоте (отвалилась, такое бывает).
- Очень сложный: Вы работаете в дистрибутиве с поддержкой selinux (например, fedora core) и последний включен. Либо отключите его, либо настраивайте разрешения.