この記事は公開から3年以上経過しています。
Debian 10(PulseAudio+ALSA)に接続したUSBサウンドカードを光デジタル出力(S/PDIF)で利用しているとスリープから復帰したときにプチプチ音のノイズが発生してしまう現象に遭遇したため、その解決方法の備忘録。
PulseAudio/Alsa/カーネルパラメータによるチューニングなどで解決できない場合に解決できるかもしれません。
サスペンドからのレジューム後以外でも常にノイズが発生する場合は「PulseAudioでS/PDIF出力にプチプチノイズが出るときの対応」が参考になるかもしれません。
対応手順
-
以下のコマンドでコマンドからUSBをリセットできるか確認する。
which usbreset
結果
/usr/bin/usbreset
usbreset
コマンドが存在すると上記のようにコマンドのフルパスが表示されるので手順3へ。 -
usbreset
コマンドが存在しないときは以下のGitHubサイトのusbutilsソースをビルドしてusbresetコマンドをインストールする。 -
以下のコマンドでリセットしたいUSBサウンドカードを特定する。
/usr/bin/usbreset
結果
Usage: usbreset PPPP:VVVV - reset by product and vendor id usbreset BBB/DDD - reset by bus and device number usbreset "Product" - reset by product name Devices: Number BBB/DDD ID PPPP:VVVV USB Keyboard Number BBB/DDD ID PPPP:VVVV USB2.0 Hub Number BBB/DDD ID PPPP:VVVV USB Receiver Number BBB/DDD ID PPPP:VVVV USB Sound Device
本例ではDevicesに表示される製品名
USB Sound Device
が問題のサウンドカード。 -
以下のコマンドでUSBサウンドカードのリセットで現象を解決できるか確認する(同一の製品名が複数存在する場合は製品ID:供給元IDの
PPPP:VVVV
を指定)。/usr/bin/usbreset "USB Sound Device"
現象が解決できた場合は手順5へ。解決できない場合は残念ながらこの方法では解決できません。
-
任意のテキストエディタで以下のサービスを作成する。
/etc/systemd/system/reset-usbsound.service
[Unit] Description=Action to Reset USB sound device after resuming from suspend After=suspend.target [Service] Type=simple ExecStart=/usr/bin/usbreset "USB Sound Device" [Install] WantedBy=suspend.target
ExecStart
で製品名USB Sound Device
のリセットを行う(同一の製品名が複数存在する場合は製品ID:供給元IDのPPPP:VVVV
を指定)。 -
以下のコマンドでサービスを登録する。
sudo systemctl enable /etc/systemd/system/reset-usbsound.service
上記設定がうまくできていれば、サスペンドからの復帰後に以下のようなカーネルログ(dmesg)が記録され、デバイスがリセットできていることが確認できます。
usb x-x: reset full-speed USB device number x using xhci_hcd
参考ウェブサイトなど
-
GitHub
gregkh/usbutils -
archlinux wiki
Power management
以上です。