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