web-dev-qa-db-ja.com

USBマイクオーバーUSBスイッチがTeamSpeakで機能しない

複数のコンピューターでUSBスイッチ(マウスとキーボードを使用)を介してUSBマイクを実行しています。

他のコンピューターから切り替えると、マイクはLinuxによって再アクティブ化されますが、TeamSpeakはそれを再アクティブ化できないか、壊れている/使用できないと見なします。 Teamspeakの「CaptureDevice」構成を「Default」からUSBマイクに変更するか、またはその逆に変更して、再び機能させる必要があります。

古いUbuntuのインストールでは、Googleの助けを借りてこれを解決し、USBマイクが常にアクティブに見えるようにしました(プラグが抜かれていても)が、私はこの修正を再び見つけることができません。

1
TimeWaster

だから、血と涙を流した後、たくさんのドキュメントを読んで、何日も試してみた後、私は解決策を持っています。良いものではありませんが、私は持っています。

最初に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

次に、pavucontrolを開き、[記録]タブで[TeamSpeak3]がドロップダウンの[無効な出力の監視]にバインドされていることを確認して、TS3がマイクモニターをソースとして永続的に使用することを確認する必要があります。

通常はこれで十分ですが、マイクが再接続されると、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

これにより、特定のIDを持つデバイスが追加(接続)されているかどうかがチェックされ、ユーザー名で作成したスクリプトが実行されます(変更することを忘れないでください)。ほとんどのシステムではpulseaudioがユーザーランドで実行されるため、これは重要です。 screen -d -mは重要であるため、スクリプトは非ブロッキングで実行されます。そうでない場合、スクリプトの実行が終了するまでマイクは接続されません。

デバイス固有のコマンドはおそらく異なって見えるでしょう。使用する「ATTR」やその他の識別子はデバイスによって異なります。それを見つける方法はオンラインで何百万回も説明されています。

これはそれであるはずです。これで、マイクが再接続されるたびに、スクリプトがループバックを作成します。TS3は、それが本物のマイクであると考えて、ヌルシンクモニターを常にリッスンしている必要があります。

これらすべての手順で、「alsa_input.usb-Thomann_SC450USB-00.iec958-stereo」をデバイスの名前に置き換えてください!

全体的に、私はudevが嫌いだと言えます。通常のLinuxシステムとは異なる処理を行う100万の特別な機能があり、デバッグすることはほぼ不可能です。二度と見たくない。

0
TimeWaster