Repository navigation
Description
检查清单
- 我已检索仓库中所有的 Issues,确保我没有重复提交问题;或有相似 Issue,但我觉得我的情况不包含在那个相似 Issue 之内
- 我已经找到了可以复现这个问题的方法,并且写在了下面的「具体信息」中
- 此问题可以在我的设备和当前环境中稳定复现
- 此问题可以在最新版本 (Latest Release) 中复现
- 此问题是在我更新到当前版本后才出现的
当前系统环境
Arch Linux,Kernel 7.1.11-zen1-1-zen,PipeWire 1.6.8,WirePlumber 0.5.15
当前版本
v1.0.0
具体信息
复现步骤
- 启动 SPlayer-Next
- 在设置里把输出设备选为 PipeWire
- 播放任意歌曲
- 用
pactl list sink-inputs查看音频流信息
实际行为
所有歌曲输出固定 44100Hz,不随歌曲采样率变化。
预期行为
输出采样率应跟随歌曲原始采样率自适应切换(pipewire.conf 里已配好 clock.allowed-rates)。
排查过程
pactl list sink-inputs 的输出:
Sink Input #98
Driver: PipeWire
Sink: 53
Sample Specification: float32le 2ch 44100Hz
Resample method: PipeWire
Properties:
application.name = "PipeWire ALSA [SPlayer-Next]"
node.name = "alsa_playback.SPlayer-Next"
device.description = "ALSA Playback [SPlayer-Next]"
media.name = "ALSA Playback"
node.latency = "2048/44100"
node.rate = "1/44100"
application.name 是 PipeWire ALSA [SPlayer-Next],节点名是 alsa_playback.SPlayer-Next——cpal 走的是 ALSA 后端,不是 PipeWire 原生后端。音频流经过的路径是 cpal(ALSA) → ALSA默认设备@44100Hz → pipewire-alsa插件 → PipeWire → DAC,clock.allowed-rates 没有被 cpal 读到。
看了下进程内存映射:
$ cat /proc/$(pgrep -f SPlayer-Next)/maps | grep -E "pipewire|pulse|alsa"
# libpipewire 加载了
/usr/lib/libpipewire-0.3.so.0.1608.0
# ALSA PipeWire 插件也加载了
/usr/lib/alsa-lib/libasound_module_pcm_pipewire.so
# libpulse 没有
(无输出)
libpipewire 在进程里,但 cpal 的 PipeWire host 初始化应该还是失败了。libpulse 完全没加载说明 PulseAudio host 也没连上。fallback 链应该是 PipeWire(失败) → PulseAudio(失败) → ALSA(成功)。
PipeWire 侧的配置是正常的:
$ pw-metadata -n settings | grep rate
update: id:0 key:'clock.rate' value:'48000' type:''
update: id:0 key:'clock.allowed-rates' value:'[ 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000, 705600, 768000 ]' type:''
$ pw-cli info 0 | grep allowed-rates
* default.clock.allowed-rates = "[ 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000, 705600, 768000 ]"
DAC 是 BRZHIFI USB 声卡(alsa_output.usb-BRZHIFI_BRZHIFI_0-00.analog-stereo)。
另外试过 PIPEWIRE_LOG_LEVEL=2 SPlayer-Next,没有输出任何 PipeWire 相关日志,只有 Electron 的 ozone 警告:
[31010:0901/183550.785119:ERROR:ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc:249] '--ozone-platform=wayland' is not compatible with Vulkan. Consider switching to '--ozone-platform=x11' or disabling Vulkan
cpal host 初始化失败是完全静默的,没有任何错误输出,我是靠 pactl 反推出来的。
Activity
github-actions commentedon Sep 1, 2026
👋 您好 @scsfu,感谢提交 Issue!
🚀 我们已经收到您的反馈,会尽快确认您的问题。
👋 Hi @scsfu, thanks for opening this issue!
🚀 We have received your report and will review it as soon as possible.
PhantomPixel-0418 commentedon Sep 1, 2026
#106
scsfu commentedon Sep 1, 2026
抱歉可能说得不够准确。我想表达的是我这边的症状和 #106 可能有所差异
106 之后有 commit 8b9a91f 修复,改成选设备支持的最高采样率。但我这边跑 v1.0.0(应该包含了这个 fix)还是锁 44100。
排查下来发现 cpal 走的是 ALSA 后端(pactl list sink-inputs 里 application.name = "PipeWire ALSA [SPlayer-Next]",/proc//maps 里 libpulse 没加载),所以不管怎么选采样率,ALSA 那边只有 44100 可选。
不太确定 #106 那位的 cpal 是不是也走了 ALSA,如果是的话可能是同一个问题,那个 fix 只是在 ALSA 能看到的 config 里选最高的,但如果 ALSA 只报 44100 的话选了也没用。
scsfu commentedon Sep 1, 2026
检查发现后端回退问题似乎是误判。只要在原生PipeWire流中补全node.rate属性就能实现自适应采样率。
MoYingJi commentedon Sep 1, 2026
最新 commit 已经使用原生 pipewire 了,不用经 pipewire-alsa 了(应该是自 16b1f34 起?没有包含在 1.0.0 内)
scsfu commentedon Sep 1, 2026
原来是这样,我就说为什么我把仓库Fork下来发现没遇到ALSA的问题了🤔