1

Я запускаю USB-микрофон через USB-переключатель (вместе с мышью и клавиатурой) на нескольких компьютерах.

Когда я переключаюсь с другого компьютера, мой микрофон повторно активируется Linux, но TeamSpeak не может активировать его или все еще думает, что он неисправен / недоступен. Мне нужно изменить конфигурацию "Устройство захвата" в Teamspeak с "По умолчанию" на мой USB-микрофон или наоборот, чтобы он снова заработал.

В более старой установке Ubuntu я как-то решил эту проблему с помощью Google, чтобы USB-микрофон всегда казался активным (даже если он был отключен), но я не могу найти это исправление снова.

1 ответ1

0

Итак, после потоотделения и слез, прочитав тонны и тонны документации и испробовав вещи в течение нескольких дней, у меня есть решение. не очень хороший, но у меня есть.

сначала добавьте в конец вашей конфигурации 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 постоянно использует монитор Mic в качестве источника, открыв 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, и отладку практически невозможно. Я никогда не хочу видеть это снова.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .