PipeWire は音声データをリサンプリングして処理するのが基本なのだろうか?
MPD と Cantata で、16bit 44100Hz の FLAC ファイルを再生すると、以下のように、そのまま 16bit 44100Hz で再生される。

mpv で同じファイルを再生すると、出力先を alsa に設定していても、出力は PipeWire に渡される。(これは、そういうものである)

~/.config/pipewire/pipewire.conf で、


pw-metadata -n settings で、設定の内容を確認すると、pipewire.conf の上記の設定は反映されているのだが、'clock.force-rate' value:'48000' となっており、強制的に 48000Hzにされていることが分かる。

pw-metadata -n settings 0 clock.force-rate 44100 で、clock.force-rate を 44100Hz にすると、再生デバイスには 32bit 44100Hz で出力される(サービスをリスタートしなくても設定が反映される)。一方、PipeWire 内部では一旦 48000Hz にリサンプリングして、それを更に 44100Hz に再処理しているような印象を受ける。

~/.config/wireplumber/main.lua.d/50-alsa-config.lua で、alsa_monitor.rules = 以下の、apply_properties = の項目の中で、

ただし、["audio.allowed-rates"] の設定は意味が無いようで、48000Hz のファイルを再生しても、下図のように 44100Hz で出力される。

そして、やはり PipeWire 内部では 48000Hz で処理されているような感じである。
リサンプリングせずに出力することは出来ないのであろうか。
追記 2024.11.10
例えば、mpv で、設定ファイルに出力デバイスを記述すれば、PipeWire を介さずに直接出力できる。
関連記事参照
以上

mpv で同じファイルを再生すると、出力先を alsa に設定していても、出力は PipeWire に渡される。(これは、そういうものである)

~/.config/pipewire/pipewire.conf で、
default.clock.rate = 44100と設定しても、32bit 48000Hz で出力される。
default.clock.allowed-rates = [ 44100 48000 96000 ]


pw-metadata -n settings で、設定の内容を確認すると、pipewire.conf の上記の設定は反映されているのだが、'clock.force-rate' value:'48000' となっており、強制的に 48000Hzにされていることが分かる。

pw-metadata -n settings 0 clock.force-rate 44100 で、clock.force-rate を 44100Hz にすると、再生デバイスには 32bit 44100Hz で出力される(サービスをリスタートしなくても設定が反映される)。一方、PipeWire 内部では一旦 48000Hz にリサンプリングして、それを更に 44100Hz に再処理しているような印象を受ける。

~/.config/wireplumber/main.lua.d/50-alsa-config.lua で、alsa_monitor.rules = 以下の、apply_properties = の項目の中で、
["audio.format"] = "S16LE",と設定すると、clock.force-rate の値に関係なく 16bit 44100Hz で再生デバイスに出力されるようになる。
["audio.rate"] = 44100,
["audio.allowed-rates"] = "44100,48000,96000",

ただし、["audio.allowed-rates"] の設定は意味が無いようで、48000Hz のファイルを再生しても、下図のように 44100Hz で出力される。

そして、やはり PipeWire 内部では 48000Hz で処理されているような感じである。
リサンプリングせずに出力することは出来ないのであろうか。
追記 2024.11.10
例えば、mpv で、設定ファイルに出力デバイスを記述すれば、PipeWire を介さずに直接出力できる。
関連記事参照
以上








