User:Zunguguzunguzeng/ALSA

From ArchWiki
Jump to: navigation, search

Advanced Linux Sound Architecture (ALSA) это компонент ядра, призванный заменить оригинальную Open Sound System (OSSv3) в предоставлении драйверов звуковым картам. Помимо драйверов звуковых устройств, ALSA также включает в себя пользовательскую библиотеку для разработчиков приложений, которые хотели бы использовать возможности драйвера с API более высокого уровня чем простое взаимодействие с драйвером ядра.

Note: Другое звуковое окружение можно найти на странице Open Sound System.

Установка

ALSA уже включена в ядро Арча по умолчанию, как набор модулей, так что в установке нет необходимости.

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

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

# gpasswd -a yourusername audio
Note: Изменения вступят в силу только после следующего входа в систему.

Пользовательские утилиты

Пакет alsa-utils включает в себя программу alsamixer, которая позволяет настраивать звук из консоли, или терминала. Устанавливается с помощью pacman:

# pacman -S alsa-utils

Установите пакет alsa-oss если хотите, чтобы ваши OSS-приложения работали с dmix (software mixing):

# pacman -S alsa-oss
Note: С версии udev>=171, модули эмуляции OSS (snd_seq_oss, snd_pcm_oss, snd_mixer_oss) не загружаются автоматически по умолчанию.

Установите пакет alsa-plugins, если вам нужны high quality resampling, upmixing/downmixing и другие дополнительные программы:

# pacman -S alsa-plugins

Включение каналов

Текущая версия ALSA устанавливается с заглушенными по умолчанию каналами. Включать каналы нужно вручную.

Для этого прекрасно подойдёт alsamixer (сделанный в ncurses) (либо можно использовать amixer из командной строки):

$ alsamixer

Буквы "MM" под обозначением канала говорят о том, что канал заглушен, а "00" о том, что включен.

Включите каналы Master и PCM с помощью стрелок на клавиатуре, и клавиши M. Используйте клавишу , и увеличьте громкость, чтобы gain стал 0dB (его уровень можно увидеть левом верхнем углу: Item: Master [dB gain: 0,00, 0,00]). Больший уровень gain может стать причиной искажений и шума.

Для 5.1 или 7.1 surround надо включить остальные каналы, такие как: Front, Surround, Center, LFE (subwoofer) и Side (это названия каналов Intel HD Audio, для других карточек они могут отличаться). Здесь надо заметить, что таким образом качество обычного стерео повышено не будет (как повысить качество читай #Upmixing/Downmixing).

Выход из alsamixer осуществляется кнопкой Esc.

Note: У некоторых карточек должен быть выключен digital output, чтобы услышать аналоговый звук. Для Soundblaster Audigy LS надо отключать IEC958 channel.
Note: У некоторых машин, (таких как Thinkpad T61), есть канал Speaker, его нужно включить и прибавить.
Note: У некоторых машин также приходится включать каналы Front и Headphone.

Дальше проверка, как работает/не работает звук:

$ speaker-test -c 2

Измените Change -c в соответствии со своей аудиосистемой. Для системы 7.1 используйте -c 8:

$ speaker-test -c 8

Если не работает, читайте #Настройка и #Поиск проблем, чтобы разобраться.

Если всё получилось, то осталось лишь сохранить настройки микшера:

# alsactl -f /var/lib/alsa/asound.state store

Этой командой создаётся файл /var/lib/alsa/asound.state, содержащий установки alsamixerа.

Потом добавьте демон alsa в секцию DAEMONS файла /etc/rc.conf, чтобы микшер автоматически восстанавливал значения при загрузке:

/etc/rc.conf
DAEMONS=(... @alsa ...)
Note: демон alsa просто восстанавливает настройки каналов, читая их из /var/lib/alsa/asound.state. It is separate from the alsa audio library (and kernel level API).

Настройка

Если вы так ничего не слышите, то проверьте ещё раз настройки микшера, и попробуйте запустить alsaconf от имени root:

# alsaconf

Все необходимые модули udev должен определить и подгрузить автоматически. Особых настроек потребоваться не должно, (если только для карт ISA).

Warning: Не используйте alsaconf если у вас звуковая карта PCI или ISAPNP, так как записи в modprobe.conf, которые делает alsaconf, могут нарушить автоопределение udevа.

Установка дефолтной звуковой карты

В окружении ядра

Чтобы предотвратить конфликты другого оборудования со звуковой картой, узнайте название модели: lspci(8), и названия модулей ALSA с помощью ls:

$ ls -l /sys/module/snd/holders
total 0
lrwxrwxrwx 1 root root 0 Apr 25 00:56 snd_hda_codec -> ../../snd_hda_codec
lrwxrwxrwx 1 root root 0 Apr 25 00:56 snd_hda_codec_realtek -> ../../snd_hda_codec_realtek
lrwxrwxrwx 1 root root 0 Apr 25 00:56 snd_hda_intel -> ../../snd_hda_intel
lrwxrwxrwx 1 root root 0 Apr 25 00:56 snd_hwdep -> ../../snd_hwdep
lrwxrwxrwx 1 root root 0 Apr 25 00:56 snd_pcm -> ../../snd_pcm
lrwxrwxrwx 1 root root 0 Apr 25 00:56 snd_timer -> ../../snd_timer

Или лучше (source[1]):

$ cat /proc/asound/modules

Then add the names of your sound card modules to (source[2]):

/etc/modprobe.d/alsa.conf
options snd slots=snd-intel8x0

These entries ensure that the Intel 82801DB-ICH4 sound card will become card 0 and the PC speaker will become card 1.

Note: You will need to unload all your sound modules and reload them for the changes to take effect. It might be easier to reboot. Your choice.
Note: This method will NOT work if the conflicting devices use the same module. If you would prefer to not configure sound on a per user basis as in the section below, you can directly modify /usr/share/alsa/alsa.conf. For example, replace all "card 0" with "card 1" .

Пользовательский способ

Этот способ не требует прав администратора, изменения делаются от имени простого пользователя, и вступают в силу сразу после перезапуска приложения.

В файле /usr/share/alsa/alsa.conf содержится список настроек, которые alsa применяет по умолчанию. Он может быть переписан в файл ~/.asoundrc.

~/.asoundrc
pcm.!default {
type hw
card 1
device 0
}
ctl.!default {
type hw
card 1
device 0
}

Опции 'pcm' определяют какая именно карта будет использоваться для воспроизведения звука. В свою очередь опции 'ctl' определяют какую карту будут использовать программы управления, такие как alsamixer, amixer итп.

Чтобы выяснить какие цифры какое устройство обозначают, используйте aplay -l.

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: Conexant Digital [Conexant Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: JamLab [JamLab], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Audio [Altec Lansing XT1 - USB Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Как узнать, загрузились ли модули

Допустим, что udev определил устройства правильно, вы можете это проверить:

$ lsmod|grep '^snd' | column -t
snd_hda_codec_hdmi     22378   4
snd_hda_codec_realtek  294191  1
snd_hda_intel          21738   1
snd_hda_codec          73739   3  snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel
snd_hwdep              6134    1  snd_hda_codec
snd_pcm                71032   3  snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec
snd_timer              18992   1  snd_pcm
snd                    55132   9  snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_timer
snd_page_alloc         7017    2  snd_hda_intel,snd_pcm

Если вывод команды схож с приведённым выше, значит звуковые драйвера успешно определились.

Note: Начиная с udev>=171, OSS модули (snd_seq_oss, snd_pcm_oss, snd_mixer_oss) не загружаются по умолчанию, это надо сделать вручную: modprobe и/или добавьте их в секцию MODULES, в /etc/rc.conf, если необходимо.

Вам также возможно захочется заглянуть в папку /dev/snd, чтобы просмотреть названия файлов устройств:

$ ls -l /dev/snd
total 0
crw-rw----  1 root audio 116,  0 Apr  8 14:17 controlC0
crw-rw----  1 root audio 116, 32 Apr  8 14:17 controlC1
crw-rw----  1 root audio 116, 24 Apr  8 14:17 pcmC0D0c
crw-rw----  1 root audio 116, 16 Apr  8 14:17 pcmC0D0p
crw-rw----  1 root audio 116, 25 Apr  8 14:17 pcmC0D1c
crw-rw----  1 root audio 116, 56 Apr  8 14:17 pcmC1D0c
crw-rw----  1 root audio 116, 48 Apr  8 14:17 pcmC1D0p
crw-rw----  1 root audio 116,  1 Apr  8 14:17 seq
crw-rw----  1 root audio 116, 33 Apr  8 14:17 timer
Note: При обращении за помощью в IRC, или на форумы, пишите вывод этих команд.

если у вас присутствуют по крайней мере устройства controlC0 и pcmC0D0p или аналоги, значит звуковые модули определены и загружены правильно.

В случае, если модули определились неправильно, можете попробовать загрузить их вручную:

  • Найдите модуль для своей звуковой карты здесь: ALSA Soundcard Matrix, перед названием модуля нужно поставить 'snd-' (например: 'snd-via82xx').
  • Загрузите модули:
 # modprobe snd-NAME-OF-MODULE
  • Сверьтесь с файлами устройств в /dev/snd (см. выше) and/or try if alsamixer or amixer have reasonable output.
  • Add snd-NAME-OF-MODULE and snd-pcm-oss to the list of MODULES in /etc/rc.conf to ensure they are loaded next time (make sure snd-NAME-OF-MODULE is before snd-pcm-oss).