USB-Mikrofon über USB-Switch funktioniert nicht mit TeamSpeak

1

Ich verwende ein USB-Mikrofon über einen USB-Switch (zusammen mit Maus und Tastatur) auf mehreren Computern.

Wenn ich von meinem anderen Computer zurückschalte, wird mein Mikrofon von Linux wieder aktiviert, aber TeamSpeak kann es nicht erneut aktivieren oder glaubt immer noch, dass es defekt / nicht verfügbar ist. Ich muss die "Capture Device" -Konfiguration in Teamspeak von "Default" auf mein USB-Mikrofon oder umgekehrt ändern, damit es wieder funktioniert.

In einer älteren Ubuntu-Installation habe ich dies irgendwie mit Hilfe von Google gelöst, sodass das USB-Mikrofon immer aktiv war (obwohl es nicht angeschlossen war), aber ich kann dieses Update nicht mehr für mich finden.

TimeWaster
quelle
Erinnerst du dich an Details, wie du es gelöst hast? Mit einer Null-Pulseaudio-Senke und Loopback? Mit einigen ALSA-Plugins bearbeiten .asoundrc? Etwas?
dirkt
@dirkt nein, leider nicht. Ich habe gerade die Nullsenke mit einer Loopback-Modul-Idee ausprobiert, und sie funktioniert nur einmal, wenn ich das Mikrofon mehrmals abklemme, wird das Mikrofon nicht erneut mit der Nullsenke verbunden.
TimeWaster

Antworten:

0

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.

TimeWaster
quelle