Skip to content

fix: 修复切歌时音频输出流未及时停止 - #382

Merged
imsyy merged 1 commit into
SPlayer-Dev:devfrom
EveSunMaple:codex/fix-headphone-song-switch
Oct 15, 2026
Merged

imsyy merged 1 commit into
SPlayer-Dev:devfrom
EveSunMaple:codex/fix-headphone-song-switch

Conversation

@EveSunMaple

@EveSunMaple EveSunMaple commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

改动类型

  • 新功能(feat)
  • 缺陷修复(fix)
  • 重构 / 优化(不改变对外行为)
  • 文档(docs)
  • 其他(请在「改动说明」中注明)

是否包含破坏性变更

  • 是(请在「改动说明」中详细描述)
  • 否

改动说明

从 1.0.0 升级到 1.1.0 后,使用耳机播放列表时,歌曲切换后偶尔会进入暂停状态,需要手动点击播放才能继续。这个问题记录在 Issue #259。

排查发现,1.1.0 将音频输出从 Rodio 切换到了 CPAL。切歌时,PlaybackHandle::stop() 只设置 stopped 标志,让实时回调输出静音,但没有立即暂停底层音频流。旧流在新流创建期间仍可能占用耳机设备,导致输出设备切换异常,最终出现“歌曲已经切换,但播放器处于暂停状态”的现象。

本次修复在设置 stopped 后立即调用 cpal::Stream::pause(),先停止旧的设备流,再释放播放句柄,避免切歌时新旧输出流短暂重叠。

关联 Issue

Closes #259

测试情况

  • cargo test -p audio-engine:103 passed,3 ignored。
  • pnpm test:Node 端 35 passed,Web 端 195 passed。
  • rustfmt --edition 2021 --check native/audio-engine/src/output/playback.rs:通过。
  • pnpm format:通过,未产生格式化改动。
  • pnpm typecheck:通过。
  • pnpm lint:通过,0 errors;仓库现有 2 条 Vue 规则 warning。
  • pnpm build:native:通过。
  • macOS 外置耳机手动连续切歌:通过。
  • 当前手动验证平台为 macOS,Windows 和 Linux 尚未验证。

后台挂歌一小时再未发现中断情况

截图 / 录屏

无 UI 改动。

自查清单

  • 本 PR 只包含一个主要功能 / 修复,没有夹带无关改动
  • 已在本地完整测试通过;AI 生成的代码同样自行测试并审阅过,未做未经验证的提交
  • 已运行 pnpm format,并确认 pnpm typecheck、pnpm lint 通过
  • 改动涉及原生模块时已 pnpm build:native 验证;未手写 native/*/index.d.ts
  • 已向 dev 分支提交

@imsyy
imsyy merged commit 0223b4e into SPlayer-Dev:dev Oct 15, 2026
4 checks passed
@EveSunMaple
EveSunMaple deleted the codex/fix-headphone-song-switch branch October 16, 2026 01:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

从 1.0.0 更新到 1.1.0,出现播放中断问题

2 participants