USB-микрофон через USB-переключатель не работает с TeamSpeak
Я запускаю USB-микрофон через USB-переключатель (вместе с мышью и клавиатурой) на нескольких компьютерах.
Когда я переключаюсь с другого компьютера, мой микрофон повторно активируется Linux, но TeamSpeak не может активировать его или все еще думает, что он неисправен / недоступен. Мне нужно изменить конфигурацию "Устройство захвата" в Teamspeak с "По умолчанию" на мой USB-микрофон или наоборот, чтобы он снова заработал.
В более старой установке Ubuntu я каким-то образом решил эту проблему с помощью Google, чтобы USB-микрофон всегда казался активным (даже если он был отключен), но я не могу найти это исправление снова.
1 ответ
Итак, после потоотделения и слез, прочитав тонны документации и попробовав несколько дней подряд, у меня есть решение. не очень хороший, но у меня есть.
сначала добавьте в конец свой конфиг pulseaudio (в моем случае sudo nano /etc/pulse/default.pa
) следующий конфиг:
# create virtual sink named Mic and loopback USB Microphone to virtual sink
load-module module-null-sink sink_name=Mic
load-module module-loopback source=alsa_input.usb-Thomann_SC450USB-00.iec958-stereo sink=Mic source_dont_move=true sink_dont_move=true
set-default-source Mic.monitor
это создает "нулевой приемник", который не исчезает, когда какое-либо устройство отсоединяется, поскольку оно не принадлежит ни одному устройству, которое также имеет соответствующий источник монитора, который TS3 может использовать в качестве постоянного источника. затем создается петля от микрофона до нулевого приемника. Теперь перезапустите pulseaudio:
pulseaudio -k
Теперь вам нужно убедиться, что TS3 постоянно использует микрофонный монитор в качестве источника, открыв pavucontrol
и убедитесь, что на вкладке "Запись" "TeamSpeak3" связан с "Монитор нулевого выхода" в раскрывающемся списке.
обычно этого было бы достаточно, но pulseaudio не подключает петлю после повторного подключения микрофона. Для этого нам нужен Udev.
сначала создайте скрипт, который может быть вызван udev:
sudo nano /usr/local/bin/udev_sound
и добавьте следующий скрипт:
#!/bin/bash
# check if microphone is mounted already
while ! $(pactl list sources|grep -q 'alsa_input.usb-Thomann_SC450USB-00.iec958-stereo')
do
let "n += 1"
sleep 1
if [ "$n" -eq 10 ]
then break
fi
echo "running"
done
# loopback microphone to null sink
export PULSE_RUNTIME_PATH="/run/user/$(id -u)/pulse/"
pactl load-module module-loopback source=alsa_input.usb-Thomann_SC450USB-00.iec958-stereo sink=Mic source_dont_move=true sink_dont_move=true
Теперь сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/udev_sound
в течение 10 секунд будет проверяться, подключен ли микрофон, и если да, снова создайте петлю Pulseaudio, которая была удалена при отсоединении микрофона.
Теперь давайте создадим правило udev, запускающее скрипт, когда устройство повторно подключается:
sudo nano /lib/udev/rules.d/91-someNameYouWillRecogniseAsYours.rules
со следующим содержанием:
ACTION=="add", SUBSYSTEM=="sound", ATTR{id}=="SC450USB", RUN+="/bin/su YOURuSERnAME -c 'screen -d -m /usr/local/bin/udev_sound'"
Теперь перезапустите Udev:
sudo /etc/init.d/udev restart
это проверяет, добавлено ли (подключено) ли устройство с определенным идентификатором, и запускает сценарий, который мы только что создали под вашим именем пользователя (не забудьте изменить его). это важно, поскольку в большинстве систем pulseaudio запускается в пользовательском пространстве. screen -d -m
важно, чтобы скрипт выполнялся неблокирующим, иначе микрофон не был бы подключен, пока скрипт не закончил работу.
Ваша специфичная для устройства команда, скорее всего, будет выглядеть по-другому, то, какой "ATTR" и другие идентификаторы будут использоваться, зависит от вашего устройства, как узнать, как это описано миллион раз онлайн.
это должно быть это. теперь каждый раз, когда снова подключается микрофон, сценарий создает петлю, и TS3 должен все это время слушать монитор нулевых приемников, думая, что это настоящий микрофон.
во всех этих шагах замените "alsa_input.usb-Thomann_SC450USB-00.iec958-стерео" на любое имя вашего устройства!
В целом, я могу сказать, что ненавижу Udev. у него есть миллион специальных вещей, которые он обрабатывает не так, как обычная система Linux, и его практически невозможно отладить. Я никогда не хочу видеть это снова.