Debian bullseyeでPipeWireに切り替えてPulseAudioに戻したらA2DPが使えなくなった

Debian BullseyeのサウンドサーバのPipeWireですが,experimentalだとかBullseyeのPipeWireは現在の状態を表すものではないとか書かれています.でもちょっと試したいことがあってDebian Wikiを見ながらPulseAudioからPipeWireに切り替えてみました.少し試したあと元のPuleAudioに戻したのですが,以前使えていたBluetooth A2DPに切り替えできなくなりました.

続きを読む

ミュートアンミュートスクリプトを修正

以前Awesome wmでボリュームコントロールをするのにscriptを書いてこれまで使っていました.

しかし,最近アンミュートにしても音が出なくなりました.

amixerではonになっているけど音が出ない
$ amixer -c 0 get Master
Simple mixer control 'Master',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 87
  Mono: Playback 36 [41%] [-38.25dB] [on]

pavucontrolで見るとミュートになっています.

pavucontrol mute

これをアンミュートすると音が出ます.
scriptで制御できるようコマンドで試します. pactl set-sink-mute コマンドで制御できました.

$ pactl set-sink-mute
You have to specify a sink name/index and a mute action (0, 1, or 'toggle')
$ pactl set-sink-mute 0 1 (1)
$ pactl set-sink-mute 0 0 (2)
  1. ミュート
  2. アンミュート

ということでscriptに追記しました.動作も問題なさそうです.これでビデオチャット時にアンミュートしたのに音が聞こえない??とならないといいな.

$ git -C ~/.config/awesome/ diff ~/.config/awesome/bin/awesome-audio.sh
diff --git a/bin/awesome-audio.sh b/bin/awesome-audio.sh
index 440f399..9c30d3d 100755
--- a/bin/awesome-audio.sh
+++ b/bin/awesome-audio.sh
@@ -22,6 +22,7 @@ case "$1" in
       amixer -q -c 0 set Master unmute
       amixer -q -c 0 set Speaker unmute
       amixer -q -c 0 set Headphone unmute
+      pactl set-sink-mute 0 0
       xset b
       echo -e "🔊\nunmute!"
       amixer -c 0 get Master | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-high.svg' numute
環境
$ dpkg-query -W pulseaudio pulseaudio-utils pavucontrol alsa-utils
alsa-utils      1.2.4-1
pavucontrol     4.0-2
pulseaudio      14.2-1
pulseaudio-utils        14.2-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

LinuxのPulseAudioのエコーキャンセルモジュールがいい感じ

皆さんオンラインミーティングとかやってますか?私は急にオンラインミーティングに参加する頻度が増えました.
これまでマイクはほとんど使っていなかったのでマイクは気にしていなかったのですが気になるようになりました.

Linuxで使えるリアルタイムノイズキャンセルソフトウェアはあるのだろうかと少し調べるとPulseAudioのモジュールで module-echo-cancel というものがあるのを知りました.

とりあえず規定値の設定は簡単で,/etc/pulse/default.pa`というファイルに`load-module module-echo-cancel`を書いてあげてPulseAudioの再起動でokです.
PulseAudioの再起動は手元の環境では `pulseaudio -k
で停止してすぐ自動起動してきました.

$ echo "load-module module-echo-cancel" | sudo tee -a /etc/pulse/default.pa
$ pulseaudio -k
$ ps ux | grep pulseaudio | grep -v grep || pulseaudio --daemonize=no
Note
追記)

/etc/pulse/default.pa はシステムワイドな設定でroot権限も必要なので自分しか使わないなら ~/.config/pulse/default.pa を使ったほうがいいですね.
そしてデーモンの再起動は上の方法だと乱暴なのでこんな感じかな

$ systemctl --user restart pulseaudio.service

これでマイクを利用したいアプリでオーディオデバイスをecho cancelのものに切り替えればOKです.

discord audio
zoom audio

という感じで簡単に設定できました.
この設定有効なのだろうか?とpavucontrolで見てみました.

以下は特に何も話していないときの様子です.上がマイク直のデバイス,下がecho cancel module のされたデバイスの状態です.

pulseaudio echo cancel

バーの動き的にはなにか効いてる感じです.

Discordで音声チャット中に切り替えて聴き比べてもらうと明らかに良くなってるとのこと.
てことでノイズ源が回りにある人は設定がお手軽なのでおすすめです.

ちなみにKrispというノイズキャンセルアプリケーションがあって評判がいいようです.しかし残念ながらLinuxは対応していません(◞‸◟)
でもChrome拡張機能があるのでChromeのウェブアプリでは利用できそうです.