Jump to content

User:Zunguguzunguzeng/ALSA

From ArchWiki

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).