Как известно, Microsoft безжалостно выпилила поддержку ALSA из Skype 4.3. А я, в свою очередь, недавно пару вечеров старательно выпиливал этот PulseAudio из openSUSE 13.2, после того, как никакими молотками и "волшебными" русскими словами не смог заставить этот самый PulseAudio видеть порт line-in на старой карте видео-захвата. Кроме того, я попытался снять звук обычной звуковой картой и получил на записи великолепный белый шум, хотя ожидал услышать немного другое.
После "лечения" системы от PulseAudio осталась только одна проблема - неработающий Skype. В интернетах сразу нашел совет использовать эмулятор PulseAudio для ALSA - apulse. Нормальный такой рабочий костыль. Один из вариантов настройки apulse заключается в создании файла ~/.asoundrc. У меня он, например, такого содержания:
1 2 3 4 5 6 7 8 9 10 11 | pcm.!default { type asym playback.pcm { type plug slave.pcm "hw:1,0" } capture.pcm { type plug slave.pcm "hw:3,0" } } |
Где "hw:1,0" и "hw:3,0" это ALSA-идентификаторы устройств воспроизведения и захвата звука, соответственно. Но такой подход оказался не очень удобным, потому что в компьютере у меня одновременно было 2 устройства воспроизведения и 3 устройства захвата звука. И если ID основного устройства для вывода звука оказывался всегда "hw:1,0", то нужное устройство захвата периодически оказывалось то с ID "hw:3,0", то "hw:2,0". Ну и, понятное дело, чтобы Skype начал получать звук с правильного устройства, надо было поменять его ID в файле .asoundrc и после этого перезапустить Skype через apulse:
apulse skype
Наверное, можно прибить гвоздями все ID к соответствующим звуковым устройствам через UDEV, но как-то мне всегда лень "лазить через Google" в его конфиги. Поэтому предлагаю более простой и универсальный вариант динамической настройки apulse.
Он основывается на том, что указать устройства для apulse можно с помощью установленных переменных окружения APULSE_PLAYBACK_DEVICE и APULSE_CAPTURE_DEVICE. А с помощью программ aplay и arecord можно легко выдернуть циферки, которые присвоены вашим звуковым устройствам.
Например, вот мой вывод команды aplay -l:
**** List of PLAYBACK Hardware Devices **** card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: PCH [HDA Intel PCH], device 0: ALC1150 Analog [ALC1150 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: PCH [HDA Intel PCH], device 1: ALC1150 Digital [ALC1150 Digital] Subdevices: 1/1 Subdevice #0: subdevice #0
Интересующее меня устройство вывода называется ALC1150 Analog. Команда play -l говорит что ему присвоены идентификаторы card 1 и device 0. Из этих сочетаний в моем случае надо сформировать имя "hw:1,0". В других дистрибутивах имя может строиться немного по-другому, например, "plughw:1,0".
Таким образом, всё что надо сделать это выдернуть циферки, назначенные устройствам воспроизведения и захвата, сформировать для них валидные ALSA-идентификаторы и записать их в соответствующие переменные окружения. Автоматизировать эту процедуру можно добавлением следующих строчек в ваш файл ~/.profile, который будет выполнятся при каждом входе в систему под вашим именем:
1 2 3 4 5 6 7 8 9 10 11 12 | PLAY_DEV_NAME= "ALC1150 Analog" REC_DEV_NAME= "U0x46d0x804" PLAY_CARD=`aplay -l | grep "$PLAY_DEV_NAME" | grep -E -o "card +[0-9]+" ` PLAY_DEV=`aplay -l | grep "$PLAY_DEV_NAME" | grep -E -o "device +[0-9]+" ` APULSE_PLAYBACK_DEVICE= "hw:${PLAY_CARD##card },${PLAY_DEV##device }" REC_CARD=`arecord -l | grep "$REC_DEV_NAME" | grep -E -o "card +[0-9]+" ` REC_DEV=`arecord -l | grep "$REC_DEV_NAME" | grep -E -o "device +[0-9]+" ` APULSE_CAPTURE_DEVICE= "hw:${REC_CARD##card },${REC_DEV##device }" export APULSE_PLAYBACK_DEVICE APULSE_CAPTURE_DEVICE |
Только нужно поменять значения переменных PLAY_DEV_NAME и REC_DEV_NAME на имена ваших устройств.
Комментариев нет:
Отправить комментарий