Skip to content

Comments

fix: 优化了音频逻辑#1030

Closed
fly602 wants to merge 1 commit intolinuxdeepin:masterfrom
fly602:fix-soundEffect
Closed

fix: 优化了音频逻辑#1030
fly602 wants to merge 1 commit intolinuxdeepin:masterfrom
fly602:fix-soundEffect

Conversation

@fly602
Copy link
Contributor

@fly602 fly602 commented Feb 9, 2026

  1. 优化了音频初始化配置设置
  2. 优化了音频切换端口检查的逻辑

Log: 音频优化
PMS: BUG-350057
Influence: audio

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @fly602, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: fly602

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

1. 优化了音频初始化配置设置
2. 优化了音频切换端口检查的逻辑
3. 优化了音频音量静音的设置

Log: 音频优化
PMS: BUG-350057
Influence: audio
@deepin-ci-robot
Copy link

deepin pr auto review

Git Diff 代码审查报告

总体评价

这次提交对音频模块的初始化流程、自动切换端口逻辑以及静音设置进行了重构。主要改进包括:

  • 简化了初始化流程
  • 改进了自动切换端口的逻辑,增加了端口存在性检查
  • 优化了静音设置逻辑
  • 移除了一些冗余函数

详细审查意见

1. 代码逻辑问题

1.1 初始化流程中的配置加载顺序变化

位置: audio1/audio.go 第788-791行

问题: 配置加载(GetConfigKeeper().Load())被移到了LoadNullSinkModule()之后,refresh()之前。

建议:

  • 确认这个顺序变化是否会影响后续逻辑。如果配置中包含影响refresh()行为的参数,则应该保持原有顺序。
  • 如果这个变化是有意的,建议添加注释说明原因。

1.2 自动切换端口逻辑变化

位置: audio1/audio.go 第812-819行

问题: 原代码中分别调用autoSwitchOutputPort()autoSwitchInputPort(),现在统一调用autoSwitchPort(),但autoSwitchPort()的实现未在diff中显示。

建议:

  • 确认autoSwitchPort()是否正确实现了原代码中的两个函数的功能
  • 确保这个重构不会改变原有的行为

1.3 静音设置逻辑变化

位置: audio1/audio.go 第1245-1251行

问题: resumeSinkConfig函数中,静音设置逻辑从s.setMute(GetConfigKeeper().Mute.MuteOutput || !portConfig.Enabled)变为s.setMute(GetConfigKeeper().Mute.MuteOutput),移除了!portConfig.Enabled条件。

建议:

  • 确认这个变化是否是有意的
  • 如果是有意的变化,需要确保端口禁用状态的处理逻辑在其他地方得到正确处理

2. 代码质量问题

2.1 函数命名不一致

位置: audio1/priority_manager.go 第193行

问题: 新函数LoopAvaiablePort拼写错误,应为LoopAvailablePort

建议: 修正函数名为LoopAvailablePort

2.2 日志信息改进

位置: 多处日志输出

问题: 部分日志信息从Debug级别改为Debugf,并添加了格式化参数,如logger.Debugf("loop prefer output port: %+v", prefer)

建议:

  • 统一日志输出格式
  • 确保格式化字符串与参数匹配
  • 考虑添加更多上下文信息到日志中,便于调试

2.3 错误处理

位置: audio1/audio_events.go 第134-146行

问题: 在checkAutoSwitchOutputPort函数中,当获取卡或端口失败时,使用continue继续循环,而不是直接返回。

建议:

  • 添加计数器或最大重试次数,避免无限循环
  • 考虑添加日志记录跳过的原因

3. 代码性能问题

3.1 循环中的重复查询

位置: audio1/audio_events.go 第130-160行

问题: 在checkAutoSwitchOutputPort函数中,每次循环都会查询卡和端口是否存在,可能影响性能。

建议:

  • 考虑缓存卡和端口信息,减少重复查询
  • 如果卡和端口信息变化不频繁,可以在初始化时加载并定期更新

4. 代码安全问题

4.1 空指针检查

位置: audio1/audio_events.go 第236行

问题: 在checkAutoSwitchInputPort函数中,添加了对card.ActiveProfile的空指针检查,这是一个好的改进。

建议:

  • 对其他类似的地方也进行空指针检查
  • 考虑使用Go的零值和空指针检查最佳实践

4.2 并发安全

位置: audio1/sink.go 第237-248行

问题: SetMutesetMute函数中的并发安全需要确认。

建议:

  • 确保对共享资源的访问有适当的锁保护
  • 考虑使用更细粒度的锁,提高并发性能

总结

这次提交主要改进了音频模块的初始化流程和自动切换端口逻辑,整体代码质量有所提高。主要关注点包括:

  1. 配置加载顺序变化的影响
  2. 自动切换端口逻辑的正确性
  3. 静音设置逻辑的变化
  4. 函数命名和日志格式的统一
  5. 错误处理和并发安全的改进

建议在合并前进行充分测试,特别是针对自动切换端口和静音设置的功能,确保重构后的行为与预期一致。

@fly602 fly602 closed this Feb 9, 2026
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.

2 participants