目次: ALSA
未だにPipeWireの音切れがなくなりません。結論から書いておくと音切れは解決できませんでした。もう飽きました。今回はサーバー側PipeWire PulseAudioモジュールのレイテンシ調整をしました。
以前の日記(2025年10月11日の日記参照)で紹介したとおり、pipewireそのものにはリモート音声再生する機能はなくて、PulseAudioのプロトコルを受け付けるpipewire-pulseモジュールを使います。
モジュール(pipewire-pulse)の動作をstraceで追うと、設定ファイルは下記の3つが有効みたいです。
このうち/usr/share/pipewire/pipewire-pulse.confしか存在していなかったので、/usr/shareの設定ファイルを使います。
pulse.properties = {
#...
pulse.min.req = 64/48000
pulse.default.req = 128/48000
pulse.min.frag = 128/48000
pulse.default.frag = 96000/48000
pulse.default.tlength = 96000/48000
pulse.min.quantum = 64/48000
#...
}
とりあえずこんな感じに設定してみました。PipeWireの設定と何が違うんでしょうねえ。
S ID QUANT RATE WAIT BUSY W/Q B/Q ERR FORMAT NAME S 30 0 0 --- --- --- --- 0 Dummy-Driver S 31 0 0 --- --- --- --- 0 Freewheel-Driver S 47 0 0 --- --- --- --- 0 Midi-Bridge R 51 8192 48000 1.2ms 1.2ms 0.01 0.01 0 S24_32 2 48000 alsa_output.platform-es8316-s R 74 23744 48000 252.6us 692.1us 0.00 0.00 0 F32LE 2 48000 + mpv S 52 0 0 --- --- --- --- 0 alsa_input.platform-es8316-so S 53 0 0 --- --- --- --- 0 alsa_output.platform-hdmi0-so S 55 0 0 --- --- --- --- 0 alsa_output.platform-hdmi1-so S 56 0 0 --- --- --- --- 0 alsa_input.platform-hdmiin-so
PulseAudioモジュール側のバッファサイズが24000に近づきましたが、微妙に値が違います。まだ何か設定が要るんです??
しかし困ったことに、PipeWireのドキュメントは本当に意味がわからないです。読んでも「そんなこと聞いてないんだけど?」状態になります。設定項目のブロック構造もわからんし、何の設定項目があって、どの範囲の値が指定できて、どの値で何が起きるのか、全然分かりません。もうイヤ。
これ以上PipeWireに関してやる気が起きません……。PipeWireで何かトラブったら、PipeWireを即削除してPulseAudioを入れ直しをオススメします。
この記事にコメントする
目次: ALSA
PipeWireに変えてから音切れがなくなりません。PulseAudioのときも音切れはしてましたが、PipeWireになってから頻度が段違いに多いです。なぜー?結論から書いておくと、音切れは多少はマシになった気がしますが、完全には解決できていません。今回はサーバー側PipeWireのレイテンシ調整をしました。
PipeWireの設定ファイルはいくつかの場所を認識するみたいです。straceで追ってみると、
この3つが認識されるみたいで、私の環境では/usr/share/pipewire/pipewire.confのみ存在していたので、/usr/share以下にあるファイルを変更します。
設定変更前の状態を再掲しておきます。
S ID QUANT RATE WAIT BUSY W/Q B/Q ERR FORMAT NAME S 30 0 0 --- --- --- --- 0 Dummy-Driver S 31 0 0 --- --- --- --- 0 Freewheel-Driver S 47 0 0 --- --- --- --- 0 Midi-Bridge R 51 2048 48000 594.1us 320.5us 0.01 0.01 1 S24_32 2 48000 alsa_output.platform-es8316-s R 56 8192 48000 245.6us 253.7us 0.01 0.01 1 S32LE 2 48000 + mpv S 52 0 0 --- --- --- --- 0 alsa_input.platform-es8316-so S 53 0 0 --- --- --- --- 0 alsa_output.platform-hdmi0-so S 54 0 0 --- --- --- --- 0 alsa_output.platform-hdmi1-so S 55 0 0 --- --- --- --- 0 alsa_input.platform-hdmiin-so
RATEがサンプリング周波数で、QUANT(※)がバッファサイズのようです。ALSAデバイス側は2048サンプル、PulseAudioモジュール(mpvの話し相手)は8192サンプルです。mpvはpulse-buffer=500を指定したので、500msつまり24000サンプルになるはずですが、なぜか8192です。
ローカル再生なら2桁msのバッファサイズ量で問題ないし、むしろレイテンシがデカすぎなくらいですが、リモート再生だと音がブチブチ切れまくって聞くに堪えません。仕方ないのでバッファを増量する設定を追加します。context.propertiesにある「default.clock.*」系の設定が効くっぽいです。
context.properties = {
#...
default.clock.rate = 48000
default.clock.allowed-rates = [ 48000 ]
default.clock.quantum = 64
default.clock.min-quantum = 32
default.clock.max-quantum = 8192
default.clock.quantum-limit = 48000
こんな感じにしてみました。大事なのはmax-quantum(デフォルト値2048)とquantum-limit(デフォルト値8192)でした。max-quantumはALSAデバイス側に使われるようで、quantum-limitはmpvから指定された値の上限になるみたいです。mpvから長いレイテンシを指定しても、quantum-limitまで切り詰められ意味がなかったのです。
S ID QUANT RATE WAIT BUSY W/Q B/Q ERR FORMAT NAME S 30 0 0 --- --- --- --- 0 Dummy-Driver S 31 0 0 --- --- --- --- 0 Freewheel-Driver S 47 0 0 --- --- --- --- 0 Midi-Bridge R 51 8192 48000 508.0us 1.2ms 0.00 0.01 160 S24_32 2 48000 alsa_output.platform-es8316-s R 54 22080 48000 233.0us 181.7us 0.00 0.00 0 F32LE 2 48000 + mpv S 52 0 0 --- --- --- --- 0 alsa_input.platform-es8316-so S 53 0 0 --- --- --- --- 0 alsa_output.platform-hdmi0-so S 55 0 0 --- --- --- --- 0 alsa_output.platform-hdmi1-so S 56 0 0 --- --- --- --- 0 alsa_input.platform-hdmiin-so
設定変更後、ALSAデバイス側は8192サンプル、PulseAudioモジュール(mpvの話し相手)は22080サンプルになりました。mpvはpulse-buffer=500を指定しているので、24000になってほしいんですけど。なぜこんな微妙な値になるの……??
この記事にコメントする
目次: ブラウザー/メーラー
LinuxデスクトップマシンのFirefox(140.3.1esr 64bit)をアップデートしたところ、アドレスバーの上下に黒い線が表示されるようになりました。何も害はないですが、目立つなあ。Windows版でこのような線は見たことがありません。
昨今のブラウザってシステムのデザインはガン無視で、オレオレGUIコンポーネントを描画してるはずで。それでもデザイン統一できないのはバグなのか、Linux版に何か特有の事情があるのか……?
この記事にコメントする
目次: ALSA
PipeWireに変えてから音切れがなくなりません。PulseAudioのときも音切れはしてましたが、PipeWireになってから頻度が段違いに多いです。なぜー?今回はサーバー側PipeWireのレイテンシ調整に備えて、設定反映方法と設定確認方法を紹介します。
設定を反映するにはpipewire-pulse.socket, pipewire-pulse.service, pipewire.socket, pipewire.service, wireplumber.serviceのうち設定を変更したサービスを再起動すれば良いはずです。良くわからないときは全部再起動しましょう。
$ systemctl --user daemon-reload $ systemctl --user restart pipewire.service #### もし何かおかしかったら下記もやってみると吉 $ systemctl --user restart pipewire.socket $ systemctl --user restart wireplumber.service $ systemctl --user restart pipewire-pulse.service $ systemctl --user restart pipewire-pulse.socket
デバッグ出力を見たければ、上記の5つのサービスを全部stopしてからPipeWireと仲間たちを直接起動すると良いでしょう。
#### サービスを全部止める $ systemctl --user stop pipewire.socket $ systemctl --user stop pipewire.service $ systemctl --user stop wireplumber.service $ systemctl --user stop pipewire-pulse.socket $ systemctl --user stop pipewire-pulse.service #### 直接起動する $ /usr/bin/pipewire -v $ /usr/bin/wireplumber $ /usr/bin/pipewire-pulse -v
ちなみにデバッグログを出すとわかりますが、めちゃくちゃ大量に出ます……私には意味がわかりません。
PipeWireは設定確認にはリモート音声再生している状態でpw-topコマンドを起動して確認すると便利です。
S ID QUANT RATE WAIT BUSY W/Q B/Q ERR FORMAT NAME S 30 0 0 --- --- --- --- 0 Dummy-Driver S 31 0 0 --- --- --- --- 0 Freewheel-Driver S 47 0 0 --- --- --- --- 0 Midi-Bridge R 51 2048 48000 594.1us 320.5us 0.01 0.01 1 S24_32 2 48000 alsa_output.platform-es8316-s R 56 8192 48000 245.6us 253.7us 0.01 0.01 1 S32LE 2 48000 + mpv S 52 0 0 --- --- --- --- 0 alsa_input.platform-es8316-so S 53 0 0 --- --- --- --- 0 alsa_output.platform-hdmi0-so S 54 0 0 --- --- --- --- 0 alsa_output.platform-hdmi1-so S 55 0 0 --- --- --- --- 0 alsa_input.platform-hdmiin-so
RATEがサンプリング周波数で、QUANT(※)がバッファサイズのようです。ALSAデバイス側は2048サンプル、PulseAudioモジュール(mpvの話し相手)は8192サンプルです。mpvはpulse-buffer=500を指定したので、500msつまり24000サンプルになるはずですが、なぜか8192です。
(※)QUANT = quantumのこと。バッファサイズを決めるための数値らしく、単位はサンプルだと思われます。PipeWireのドキュメントを見てもquantumについて説明している部分が見当たらなくて困りました。
この記事にコメントする
目次: ALSA
先日(2025年10月11日の日記参照)の設定により、x86_64なPCからROCK 5Bにて動作しているPipeWireに対し、リモートオーディオ再生ができるようになりました。無事動いたまでは良いのですが、PipeWireにしてから音切れがひどくなり困ってしまいました。
クライアント側はx86_64、mplayer v0.40.0(今はmpvですね)+ libpipewire 1.4.8で、サーバー側はaarch64、libpipewire 1.4.2です。
一般的に音が切れるのはクライアントかサーバーかどちらかの音声用のバッファが足りない可能性が高いです。クライアント側の設定を確認するためにmpvに-vオプションを付けて実行します。
$ PULSE_SERVER=192.168.1.x mplayer --audio-device=pulse -v a.mp4 ...(略)... [ao] Trying audio driver 'pulse' [ao/pulse] requested format: 48000 Hz, stereo channels, floatp [ao/pulse] Library version: 17.0.0 [ao/pulse] Proto: 35 [ao/pulse] Server proto: 35 [ao/pulse] Channel layouts: [ao/pulse] - #fl [ao/pulse] - #fr [ao/pulse] - #fc [ao/pulse] - #lfe [ao/pulse] - #bl [ao/pulse] - #br [ao/pulse] - #flc [ao/pulse] - #frc [ao/pulse] - #bc [ao/pulse] - #sl [ao/pulse] - #sr [ao/pulse] - #tc [ao/pulse] - #tfl [ao/pulse] - #tfc [ao/pulse] - #tfr [ao/pulse] - #tbl [ao/pulse] - #tbc [ao/pulse] - #tbr [ao/pulse] result: stereo [ao/pulse] device buffer: 4800 samples. ★デバイスバッファが4800/48000 = 0.1秒 [ao/pulse] using soft-buffer of 9600 samples. ★バッファが9600/48000 = 0.2秒 ...
ログからバッファサイズをチェックしたところデフォルト100ms + 200msのようです。変更にはpulse-bufferオプションを使用します。値の単位はミリ秒です。
$ PULSE_SERVER=192.168.1.x mplayer --audio-device=pulse --pulse-buffer=1000 -v a.mp4 ... [ao/pulse] result: stereo [ao/pulse] device buffer: 48000 samples. [ao/pulse] using soft-buffer of 48000 samples. ...
ひとまず1000msくらいに変更してしばらく様子を見ようと思います。
今回は特に変えていませんが、サーバー側の設定は/usr/share/pipewire/pipewire-pulse.confにあります。設定を変更したらpipewire-pulseを再起動で反映されるはずです。ユーザー権限で動いているのでsudoは不要です。
$ systemctl --user restart pipewire-pulse
このファイルを書き換えると次のアップデートで上書きされてしまうらしいですが、他の場所にある設定ファイルが見当たらないんですよね。どこにあるんだろう。。。
この記事にコメントする
| < | 2025 | > | ||||
| << | < | 10 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | - | - | 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | - |
25年10月15日
25年10月18日
22年5月5日
25年10月19日
23年4月11日
06年4月22日
25年10月17日
25年10月6日
25年10月13日
20年10月23日
25年10月12日
20年8月29日
19年1月13日
18年10月13日
18年9月3日
18年8月20日
18年7月23日
18年7月22日
18年10月14日
18年11月10日
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: