Nach dem Schwitzen von Blut und Tränen, dem Lesen von Tonnen von Dokumentation und dem Ausprobieren von Material für Tage habe ich eine Lösung. kein guter, aber ich habe einen.
füge zuerst am Ende deiner pulseaudio config hinzu (in meinem Fall sudo nano /etc/pulse/default.pa
) die folgende config:
# 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
Dadurch entsteht eine "Null-Senke", die nicht entfernt wird, wenn ein Gerät getrennt wird, weil es keinem Gerät angehört, das auch eine entsprechende Monitorquelle hat, die TS3 als permanente Quelle verwenden kann. dann wird ein Loopback vom Mikrofon zur Nullsenke erstellt.
Starten Sie jetzt pulseaudio neu:
pulseaudio -k
Jetzt müssen Sie sicherstellen, dass TS3 den Mic-Monitor dauerhaft als Quelle verwendet, indem Sie ihn öffnen pavucontrol
und sicherstellen, dass unter der Registerkarte "Aufnahme" "TeamSpeak3" im Dropdown-Menü an "Überwachung der Nullausgabe" gebunden ist.
Normalerweise reicht das aus, aber der Loopback wird von pulseaudio nicht erneut angeschlossen, wenn das Mikrofon erneut angeschlossen wird. Dafür brauchen wir udev.
Erstellen Sie zunächst ein Skript, das von udev aufgerufen werden kann:
sudo nano /usr/local/bin/udev_sound
und fügen Sie das folgende Skript hinzu:
#!/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
Machen Sie jetzt das Skript ausführbar:
sudo chmod +x /usr/local/bin/udev_sound
Dies prüft 10 Sekunden lang, ob das Mikrofon angeschlossen ist. Falls ja, erstellen Sie den pulseaudio-Loopback erneut, der beim Abnehmen des Mikrofons entfernt wurde.
Jetzt können Sie eine udev-Regel erstellen, die das Skript startet, wenn das Gerät erneut angeschlossen wird:
sudo nano /lib/udev/rules.d/91-someNameYouWillRecogniseAsYours.rules
mit folgendem Inhalt:
ACTION=="add", SUBSYSTEM=="sound", ATTR{id}=="SC450USB", RUN+="/bin/su YOURuSERnAME -c 'screen -d -m /usr/local/bin/udev_sound'"
Jetzt udev neu starten:
sudo /etc/init.d/udev restart
Dies prüft, ob ein Gerät mit einer bestimmten ID hinzugefügt (angehängt) wurde, und führt das soeben erstellte Skript unter Ihrem Benutzernamen aus (vergessen Sie nicht, es zu ändern). Dies ist wichtig, da Pulseaudio auf den meisten Systemen im Benutzerland ausgeführt wird. screen -d -m
Dies ist wichtig, damit das Skript nicht blockiert wird. Andernfalls wird das Mikrofon nicht angeschlossen, bis das Skript beendet ist.
Ihr gerätespezifischer Befehl wird höchstwahrscheinlich anders aussehen. Welche "ATTR" und andere Bezeichnungen zu verwenden sind, hängt von Ihrem Gerät ab. Wie Sie das herausfinden, wird millionenfach online beschrieben.
das sollte es sein. Jedes Mal, wenn das Mikrofon wieder angeschlossen wird, erstellt das Skript den Loopback, und TS3 sollte die ganze Zeit den Nullsenken-Monitor hören, der der Meinung ist, es sei ein echtes Mikrofon.
Ersetzen Sie in all diesen Schritten "alsa_input.usb-Thomann_SC450USB-00.iec958-stereo" durch den Namen Ihres Geräts!
Insgesamt kann ich sagen, dass ich udev hasse. Es hat eine Million spezielle Dinge, die es anders behandelt als ein normales Linux-System, und es ist fast unmöglich zu debuggen. Ich möchte es nie wieder sehen.
.asoundrc
? Etwas?