見出し画像

pipewire化してみた(ubuntu22、PiOS bookworm)

はじめに

ubuntu22のpulseaudioで、「avoid-resampling = yes」を設定に書いているにも関わらず、いつのまにか、resampleされるようになってしまったので、pipewireにしてみんとて、です。

pulseaudioで解決しようとしてみたが、

pulseaudioで解決しようアレコレやってみたが、「default-sample-rate = 192000」を設定したところ、192kHzなwavを再生時、resample (null)となるが、そうすると、xrdp上のオーディオ転送がうまくいかず、両立せず。

やはり、sample rateは出力先毎に、

おま環ではあるのだと思うが、自分の手持ちのDAC(AKMが主、時々ESSとか旧BB(PCM-xxx))だと、44.1kHzや48kHzより高い、特定のサンプルレートで投げたほうが、出音がいいような気がするため、意図したサンプルレートで投げるのは諦めたくない。
というのも、ΣΔなDAC、測定上の数値向上のために、前処理として、ディサリングとかオーバーサンプリングしているようだが、これがサンプルレートによって動作が微妙に違うのか(ブラックボックスでかつチップの内部のため、確かめるのが難しい)、出音が違うような感じがする。(Audacityとかffmpegでいじる場合も、ditherを切ったりすると明らかに音が変わるので、その可能性ありや?)
PiOS bookworm onラズパイ3B plusでも似たようなことになっていたので、pipewire化、まずは、PiOS bookwormから着手。

PiOS bookworm

まずは、aptで、

ネットをみると、PiOS bookwormでは、aptで拾える版のパッケージで対応できそうなので、まずは、aptで対応。

sudo apt install pipewire-audio pipewire-pulse pipewire-alsa libspa-0.2-bluetooth wireplumber

で、systemctlで、

systemctl --user disable pulseaudio
systemctl --user enable --now pipewire pipewire-pulse wireplumber

USB-DAC向かいを192kHzにすべく「/usr/share/pipewire/pipewire.conf」を変更。

    ## Properties for the DSP configuration.
    #default.clock.rate          = 48000
    #default.clock.allowed-rates = [ 48000 ]

の下に、

    default.clock.rate          = 192000
    default.clock.allowed-rates = [ 192000 ]

を追加。
pw-topを見ているとそれらしく動いている様子。

pipewire-module-xrdpを拾ってきて野良ビルド

完全にpipewireベースにしてしまったので、今の状態だと、RDP接続したときに、オーディオが転送できない。
ということで、pipewire-module-xrdpをビルドしたいが、その前にaptでいくつか必要となるパッケージを拾ってくる。

sudo apt install pipewire-bin libpipewire-0.3-dev libspa-0.2-dev
sudo apt install autoconf automake libtool pkg-config

で、pipewire-module-xrdpのgithubサイトからgit clone、ビルド。

git clone https://github.com/neutrinolabs/pipewire-module-xrdp.git
cd pipewire-module-xrdp/
./bootstrap
./configure
make
sudo make install

PiOS on ラズパイでは、xrdp/xorg.confで、DRMDevice関係を修正しておかないとハマる[1]ようなので、修正。
[1] https://zenn.dev/haru_iida/articles/raspberrypi_xrdp_fix

# Option "DRMDevice" "/dev/dri/renderD128"
Option "DRMDevice" ""

これで、めでたく、「wpctl set-default」でxrdpに向けると44.1kHzで、USB-DACに向けると192kHzで投げてくれる環境ができた。

ubuntu22

とりあえず、aptで引っ張ってこれる範囲で、pipewire化してみた。

sudo apt install pipewire pipewire-pulse wireplumber
systemctl --user disable pulseaudio
systemctl --user enable --now pipewire pipewire-pulse wireplumber

ここで、PCを再起動。
pulseaudioはon pipewire化されて、mplayer等でpulseaudioに投げると、pw-topで出てくるのだが、alsaで投げると、出てこない。
もしかして、alsaはon pipewireではなく、nativeで稼働しているのか?
あと、RDP接続すると、やはりxrdp-sinkとかが使えなくなっている。
「pavucontrol」の候補にも出てこない。

pipewire-module-xrdpを拾ってきて野良ビルド、でハマる、

pulseaudioからpipewireに変えてしまったため、xrdpのオーディオ転送がNGとなってしまった様子。
そのため、PiOS bookworm同様、pipewire-module-xrdpをビルドしてみる。

sudo apt install libpipewire-0.3-dev
sudo apt install libspa-0.2-dev
mkdir ubuntu22-pipewire
cd ubuntu22-pipewire/
git clone https://github.com/neutrinolabs/pipewire-module-xrdp.git
sh ./bootstrap
sh ./configure

「libpipewireが0.3.58より古い」、とconfigureに怒られる。
試しに、バージョンチェックを無理やりskipすると、ビルド時に、「spa/utils/dll.h」がないと怒られる。
PiOS bookwormでは、libspaパッケージにある様子。

pipewireを拾ってきてビルド

aptで拾えるのより新しい版のlibspaを拾ってきて野良ビルドしなくては、とネットを調べると、pipewireそのものを拾ってきてのビルド&インストールとなるらしい。
pipewireの0.3.58というaptの0.3.48より新しいのをlaunchpadなページで見つけたので、とりあえず、lanuchpadから拾ってくる。
origでないtar.xzは、どうも、ubuntuの差分っぽいので、今回は無視。

mkdir ubuntu22-libspa
cd ubuntu22-libspa/
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/pipewire/0.3.58-2ubuntu1/pipewire_0.3.58.orig.tar.bz2
tar xvf pipewire_0.3.58.orig.tar.bz2

で、野良ビルド&インストール。

cd pipewire-0.3.58/
meson setup builddir
meson configure builddir
sudo meson install -C builddir

systemctlとかの依存関係が面倒くさそうなので、ここは、素直に、PCを再起動。

再度、pipewire-module-xrdpをビルド

ようやっと、本題の、pipewire-module-xrdpのビルドに。

cd ubuntu22-pipewire/
sh ./bootstrap
sh ./configure
make
sudo make install

こんどは、すんなり、configureが終わったので、「make」、「make install」。
念のため、PCを再起動。

pavucontrolで、出力先を変更したり、出力先の音量は制御できるように。もちろん、wpctlでデフォルトの出力先の変更もできるように。
alsaの方も、pw-topで確認すると、pipewire経由になるようになった。
youtubeの動画 on Chromeも、xrdp-sinkに出力できて、44.1kHzで出ることを確認。

youtube on Chromeをxrdp-sinkに出力

余談だが・・・

ubuntu22を動かしているPC、「ubuntu24.04が準備できたので、あげなさい」的なメッセージが出ているので、ubuntu24.04にあげれば、面倒なことをしなくても、PiOS bookwormのとき同様にほぼaptで解決するのだは思うが、このPCはしばらくは22.04で動かしたいので、当面はこのまま。

おわりに

無事、pipewire化できて、xrdp経由のオーディオ転送が再度OKに、xrdp向かいは44.1kHz、USB-DAC向かいは192kHzと打ち分けられるようになりました。
この投稿が、同様のことでつまづいている人の一助になれば幸いです。

20250801追記

「setxkbmap us」を唱えないとJP配列になってしまうJP問題再発?と思っていたら、上記の「pipewire-module-xrdp」の「make install」でどうも「xrdp_keyborad.ini」が書き換わっていたのに気がついた。
自身の備忘録[A1]を見ながら、「xrdp_keyborad.ini」を再修正して、様子見。
[A1] https://note.com/cammi_wart/n/na5e500f881ae


いいなと思ったら応援しよう!