普段の仕事で利用しているPCは以下のとおり Ubuntu 22.04 の環境なんですが、オンラインミーティングの際に、「会話の話し始めの声が聞こえにくくて後半は聞こえるような感じ」、「音声の入力がないと最初の入力が弱くなるような」といったことを言われるようになりました。
$ grep PRETTY_NAME /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
現在利用しているPCは「Dell Latitude 3420 - Build Your Own」という Ubuntu 20.04 がプリインストールされているモデルで、これを Ubuntu 22.04 にアップデートして使っています。
使い始めてから3年ほど経っていますが、以前はそんな指摘を受けたことがなかったので、考えられるとしたらオンラインミーティングの際に利用している「Jabra Engage 50」が悪さをしているのではと考えていました。
そんなことを社内のチャットに書き込んだところ、そのあたりに詳しい先輩から「デフォルト設定でオーディオソース/シンクに一定時間入力がないと当該シンク/ソースをサスペンドしちゃうみたいな設定になってるのが悪さしてるんだと思います。」と教えてもらいました。
そして、サウンドサーバーが「PulseAudio」を利用している場合は↓ここを見よとのことでした。
説明を読んでみると、「非アクティブな状態が一定時間続くとシンクをサスペンドする可能性」とあり、まさにこれっぽい事象が発生しています。
PulseAudio は非アクティブな状態が一定時間続くとシンクをサスペンドする可能性があります。これにより、可聴ノイズ (音割れ、破裂音、ひっかくような音) が発生する可能性があります。時々、ボリュームスライダーを動かしたときや、ウィンドウを閉じた時 (KDE4) などにも発生します。この挙動はデフォルトの設定ファイルで有効化されています
サウンドサーバーが「PulseAudio」、「PipeWire」のどちらを利用しているかを確認するため、以下のコマンドを実行してみたところ、どうやら自分の環境は「PulseAudio」を利用しているようです。
$ pactl info |grep -E '(pulse|pipe)'
サーバー文字列: /run/user/1001/pulse/native
サーバー名: pulseaudio
利用環境の /etc/pulse/default.pa を確認すると、確かに「module-suspend-on-idle」をロードするように記述されていました。
$ grep suspend /etc/pulse/default.pa
### Automatically suspend sinks/sources that become idle for too long
load-module module-suspend-on-idle
pactl list modules を実行してロードされているモジュールを一覧表示すると、「module-suspend-on-idle」がロードされていることが確認できます。
$ pactl list modules |grep suspend
名前: module-suspend-on-idle
module.description = "When a sink/source is idle for too long, suspend it"
「PulseAudio/トラブルシューティング」のページに具体的な対処方法が記載されていますので、指示に従い以下のファイルを作成して再起動を行ないます。
※ /etc/pulse/default.pa を編集して load-module module-suspend-on-idle をコメントアウトする対応方法でもよいみたいですが、デフォルトのファイルを直接編集するとパッケージ更新などで思わぬ影響が発生する可能性もあるため、 ~/.config/pulse/default.pa で設定を上書きする方法が安全な対応かと思います。
$ cat ~/.config/pulse/default.pa
.include /etc/pulse/default.pa
.nofail
unload-module module-suspend-on-idle
.fail
ファイルの内容的には以下のような感じだと思います。
-
.include /etc/pulse/default.pa: デフォルト設定の/etc/pulse/default.paを読み込む。(/etc/pulse/system.paというファイルもありますが、デスクトップ用途として PulseAudio を利用する場合は/etc/pulse/default.paを指定しておけば良さそうです) -
.nofail: これ以降の処理に失敗しても処理を中断しない。つまり、「module-suspend-on-idle」をアンロードしようとして失敗してもエラーを無視する。 -
unload-module module-suspend-on-idle:module-suspend-on-idleがロードされていたらアンロードする。 -
.fail: これ以降の処理に失敗したら処理を中断する。
再起動後に pactl list modules を実行すると ~/.config/pulse/default.pa の設定が有効化され、 module-suspend-on-idle がロードされていないようです。
$ pactl list modules |grep suspend
(何も表示されない)
冒頭でも触れたとおり現在のPCは3年ほど使っており、今回のような現象はほとんど発生していなかったので、恐らく直近で使い始めた「Jabra Engage 50」と「PulseAudio」の相性が悪く、「非アクティブな状態が一定時間続くとシンクをサスペンドする」というのが頻発してしまっていたのかもしれません。
上記の設定変更を行って以降は音声が聞き取りづらいといった声を聞かなくなったので、今回の設定がうまく効いているんだと思います。
めでたし、めでたし。
おまけ
サウンドサーバーが「PipeWire」を利用している場合は、以下を参考にするとよいかもしれません。