Repository navigation
Conversation
修改部分: - Services 新增 AudioPeakMeter(麦克风峰值采样:实时计量优先 + 多重回退采样 + 结果缓存 + 信号量并发保护)、DecibelCalculator(分贝换算纯函数)、DecibelNotificationProvider(ClassIsland 超阈值提醒通知提供方); - Plugin.cs 改为注册共享 AudioPeakMeter 单例与通知提供方,移除原设备枚举采样逻辑; - 组件与设置控件去掉各自重复的 WaveIn/Wasapi 采样实现,统一复用共享采样服务,并修正 Avalonia INotifyPropertyChanged 事件转发;校准流程改用显示刻度参考; - 设置模型新增阈值提醒配置(启用开关、阈值、提示文字、冷却分钟数); - 新增单元测试工程(覆盖 DecibelCalculator 纯函数)与 ClassIsland 集成冒烟测试 workflow;调整 Build/Test workflow;.gitignore 忽略 cipx/ 打包产物;删除多余占位文件并更新 README。 修改逻辑: - 原采样代码在组件与设置控件中重复且高频刷新会反复打开音频设备,易并发抢占、开销大、设备不提供实时计量时数值长期为 0; - 现将采样收敛为单一共享服务:快速路径仅读 AudioMeterInformation,验证过支持实时计量的设备在静音时直接返回真实 0;不支持时才做短时录音回退采样,结果缓存、会话受信号量保护,避免 UI 高频刷新触发耗时操作; - 补齐超阈值提醒:超过阈值时组件显示提示并经 ClassIsland 通知系统弹出提醒,冷却期内不重复触发;换算逻辑抽为与设备无关的纯函数便于测试。 由 VS Code 的 Cline 使用 DeepSeek V4 Flash 生成。
- 提醒(强调通知侧)设置:通知提供方改用泛型基类获得自动持久化设置,注册通知渠道并通过 Channel 发送,修复空渠道/时序导致的提醒不触发;新增通知设置控件 - 插件设置页侧:新增 SettingsPage(AddSettingsPage) 承载全局采样偏好与设备诊断,ReferenceDecibel 持久化到组件设置 - 组件(显示侧):仅保留校准设置;组件改用 AvaloniaProperty 驱动绑定,动态获取通知提供方实例 - 健壮性:抽取 PeakSample 纯函数并补单测,AudioPeakMeter 缓存加锁与采样参数可配置 - README 更新三处设置说明
- AudioPeakMeter 默认关闭录音回退:GetDefaultDevicePeakLinearAsync 只用 AudioMeterInformation,不再周期性打开 Wasapi/WaveIn 录音通道,解决 Windows 麦克风占用图标闪烁与读数不稳定 - 新增 CaptureSamplePeakAsync 供校准等显式操作一次性采样;校准改用它 - 全局设置新增 EnableFallbackSampling 开关(默认 false),设置页与 README 更新说明
- 新增常驻 WASAPI 捕获流:保持一条低开销捕获流持续计算峰值,数值稳定、无周期性开/关录音,解决之前 meter 需打开系统声音设置才有值的问题 - 设备变化/流异常自动重启(带退避),事件回调按对象身份校验避免新旧流串扰 - 全局设置以 EnableContinuousMonitoring 取代 EnableFallbackSampling(默认开启),设置页与 README 更新 - 校准等显式采样保留一次临时采样(CaptureSamplePeakAsync)
- DecibelComponentSettings 新增 ShowAlertTextOnComponent(默认 true) - 组件超阈值时是否点亮提示文字由该开关控制;系统通知不受影响仍会发送 - 组件设置面板与 README 同步更新
- 校准参考 dB/放大倍数由组件设置上收为插件全局设置(DecibelMonitorGlobalSettings),校准入口移至插件设置页 - 组件设置仅保留显示偏好(ShowAlertTextOnComponent),组件显示统一使用全局放大倍数 - 插件设置页新增全局校准区(参考滑块/校准按钮/放大倍数显示);测量与提醒仍分属插件页与通知
- DecibelComponentSettings 新增 ShowDecibelPrefix(默认 true) 与 UpdateIntervalMs(默认 200ms) - 组件文本按前缀显示为'分贝: 70.0',更新频率设置变化后下一拍即生效 - 组件设置面板与 README 同步更新
This was referenced Sep 14, 2026
Author
|
本 PR 的内容已按主题拆分为 5 个可独立编译、单测全绿的小 PR(fork 侧 CI 含集成测试已全部通过),请以拆分后的 PR 为准,按依赖顺序合并:
因此关闭本 PR(源分支 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概述
将 dev 分支的开发成果合入 master,为 Decibel_Monitor 分贝监测插件带来以下改进(12 个提交):
1. 麦克风采样健壮性(f369b0d)
2. 三处设置分布 + 提醒不触发修复(6b0e955)
3. 常驻静默捕获流读取分贝(4938af1,取代 79a4766 中间方案)
4. 设置按作用域重排(d473909)
5. 组件显示增强(679e6b4、3d1902d)
6. 健壮性修复、测试补齐与采样服务拆分(2026-09-13:e6d0326、0198acd、2c75321、8a66bfd、5825d19)
DecibelMonitorSettingsService在构造时一次性反序列化整个DecibelMonitorGlobalSettings,消除“新增设置项忘记同步读取”的隐患(旧配置文件缺字段时保留默认值、文件损坏时回退默认值)。DecibelAlertEvaluator.Evaluate(...)(仅依赖 BCL),DecibelNotificationProvider改为调用它;补 9 条边界用例(等于阈值不触发、冷却期内不重复通知、冷却刚过可通知、冷却下限 1 分钟、未激活时不改动下次提醒时间等)。LinearToDisplayDb上/下 clamp(含 ±Infinity)与CalculateMagnification自定义上限,共 5 条。AudioPeakMeter拆为AudioDeviceEnumerator(设备枚举与缓存)、ContinuousPeakCapture(常驻静默捕获流)、OneShotPeakCapture(一次性采样的三级回退)三个internal sealed类;AudioPeakMeter保留为门面,全部 public 成员签名不变,调用方零改动,常量、锁粒度、回退顺序、提前返回条件均未变。.github/、.gitignore、本地规则等非功能文件改动。测试
dotnet test:37/37 通过(原有 23 条 + 提醒判定 9 条 + 刻度换算边界 5 条)。dotnet build -c Release:0 警告 0 错误。此次会话已加载插件:Decibel_Monitor(Decibel_Monitor,0.0.0.1)。说明
本 PR 由 VS Code 中的 Cline(DeepSeek-V4-Flash 模型)辅助生成;2026-09-13 的修复 / 测试 / 重构提交同样由 VS Code 中的 Cline 辅助生成。