ADHD 专注白噪音 · DSH 插件
一边用 DeepSeek Harness,一边播放适合 ADHD 专注的固定声景:颜色噪声(棕色 / 粉红 / 白)、雨声和风扇声。 所有声音在浏览器里实时合成,不下载任何音频文件,不占用网络。
安装
dsh plugin --profile desktop add "git+https://github.com/tommy00748-tech/dsh-adhd-noise.git"
也可以本地路径安装:dsh plugin --profile desktop add "link:/path/to/dsh-adhd-noise"。
装好后重启 DSH(或刷新页面)即可在输入框下方看到胶囊。插件只在浏览器里合成声音,不需要 API Key、不读取任何凭据。
使用
安装后在对话输入框下方出现一个小胶囊(conversation.composer.dock,和耗时/用量同一排,26px 高):
[▶] ◍ 粉红噪声 24:12 ⌃
▶/⏸一键播放;播放时胶囊里出现一个随声音轻轻呼吸的小光球。⌃在输入框上方右侧浮出一张 400px 宽的"声景"卡片(浮层shell.overlay,不占布局、不挤压对话、不产生空白, 锚点由输入框顶部 0 高度探针提供,窗口缩放/滚动自动跟随)。卡片下沿与输入框下沿精确对齐: 探针会向右/向上扫描紧邻的同类兄弟节点找到 composer 卡片本身,用它的bottom作为对齐基准; 并监听该卡片的尺寸变化(输入框变高时自动跟随)。
卡片的设计语言:
- 声球(Sound Orb):顶部一枚 132px 的柔和渐变光球,颜色随所选声音变化(棕/粉/白/雨/风扇各有自己的粉彩色),
播放时随音量与节奏轻微呼吸、放大;球内一条白色细线是真实输出波形(
AnalyserNode时域数据),像水面包裹在球里。 - 衬线标题:标题直接显示当前声音名(粉红噪声 / 雨声…),下面只留一枚圆形播放按钮和剩余时间,不再有第二行小字。
- 声音选择:五枚粉彩渐变小圆球(参考图里的 chip 语言),选中时放大 10%,标签变主色,而不是描边胶囊。
- 音量/定时:一根 2px 细滑杆 + 极简文字时间选项,尽量少线条。
×、Esc、点击卡片外侧都能收起。
真实采样感的合成升级:雨声改为"粉红底噪 + 低频 body + 6 kHz 水雾 shimmer + 密度起伏的雨滴(含偶尔的大雨滴)", 风扇加入 55/110/165 Hz 的扇叶谐波与空气噪声;雨声/风扇改成去相关的立体声缓冲区(联合归一化,保持声像), 戴耳机时的宽度明显更好。所有调制频率都取 8 秒循环的整数周期,循环点依旧无爆音。
玻璃透镜折射:卡片背面除了 backdrop-filter: blur(),还叠了一层 SVG feTurbulence + feDisplacementMap 的
url(#adn-noise-refraction),让玻璃边缘真的"弯折"背后的内容;不支持该写法或开了"减少透明度"时自动退回纯模糊。
窄窗口翻转:会测量输入框卡片的矩形。如果 400px 的卡片会压住输入框,就优先挪到输入框左侧/右侧的空白里; 两侧都不够时改为悬浮在输入框上方,绝不让设置面板盖住发送按钮。
默认值可配置:Host 端把插件行的 config 注入页面(window.__ADHD_NOISE_DEFAULTS__),localStorage 优先:
- id: adhd-noise
name: dsh-adhd-noise
config:
defaultSound: brown # brown | pink | white | rain | fan
defaultVolume: 0.35 # 0–1 或 0–100
timerMinutes: 25 # 0 | 15 | 25 | 50 | 90
Liquid Glass 材质(参考 Apple 的 Liquid Glass 设计):
- 半透明材质:
backdrop-filter: blur(30px) saturate(180%),卡片后面真实模糊并提饱和,聊天内容会透上来 - 边缘折射:
conic-gradient渐变 +mask-composite描出 1px 玻璃边,左上最亮、右下回光,模拟光在玻璃边缘的折射 - 镜面高光:
::after白色径向高光跟随鼠标位置(--adn-mx/--adn-my),像光斑在玻璃表面移动 - 声球也加了玻璃高光:顶左一道白色镜面弧、内部柔光,球体像封在玻璃里
- 按压反馈:按钮/小球
scale(.96~.94)+ 160ms 缓动;面板出现时 220ms 轻微上浮缩放 - 材质随主题自适应:读取
--dsw-alias-bg-base的亮度给面板打data-tone(light/dark),分别调整边的白度、阴影深度与高光强度;不支持backdrop-filter时自动退回不透明底色 prefers-reduced-motion下关闭呼吸、缩放和入场动画
所有文字/控件仍然使用宿主主题 token(深浅色自动适配),粉彩色只用于"声球 / 声音小球"这类装饰画面。
prefers-reduced-motion 下光球不再呼吸,只做静态渲染。
和其他白噪音插件的区别
- 零素材、零联网:五种声音全部由 Web Audio 实时合成,仓库里没有任何音频文件,点击即响;不下载、不上传、不请求网络。
- 为 ADHD 调的默认值:默认粉红噪声、30% 安全音量、1.5 秒淡入 / 2 秒淡出 / 定时到点 8 秒淡出,尊重「减少动态效果 / 减少透明度」。
- 视觉是功能的一部分:真实输出波形驱动的声球、五枚粉彩声音小球、Liquid Glass 浮层;不是设置页里的一个复选框。
- 可配置默认值:Host 端把插件行
config注入页面,团队/个人可以预设默认声音音量与定时。
为什么这样设计
- 默认粉红噪声:白噪声/粉红噪声是目前唯一有少量对照研究支持的声音(Nigg 等 2024 的元分析,13 项研究、 335 名被试,实验室注意力任务平均约 8–10% 的小幅改善;对非 ADHD 人群反而略有干扰)。效果个体差异很大, 临床样本中约三分之一的人反而更差,所以面板里明确写出"因人而异",一键暂停始终可见。
- 棕色噪声是选项而非默认:目前没有针对 ADHD 的对照试验,流行更多来自主观体验;按钮的悬停提示会说明这一点。
- 不做 40 Hz 双耳节拍:现有对照研究未发现对注意力网络有作用,且依赖耳机、容易与音频缓冲产生拍频干扰。
- 淡入淡出:开始 1.5 秒淡入、暂停 2 秒淡出、切换声音 1.2 秒交叉淡化、定时到点 8 秒淡出, 避免突然的声音触发惊跳(ADHD 常见的感觉敏感)。
- 音量:默认 30%,参考 WHO 安全听音建议(80 dB 每周不超过 40 小时);面板提示每小时让耳朵休息。
实现要点
- Web Audio API 合成:白噪声、Paul Kellet 粉红滤波、泄漏积分器棕色噪声;雨声 = 粉红底噪 + 低通"body 层"
- 稀疏雨滴瞬态;风扇 = 棕色噪声 + 0.25 Hz 缓慢起伏。
- 8 秒循环缓冲区,首尾 0.4 秒等功率交叉淡化,循环点无爆音。
- 每个预设做响度校正(以白噪声为 1.0,粉红 0.891、棕色 0.398、雨声 0.708、风扇 0.562),切换声音不会忽大忽小; 棕色噪声强制 50 Hz 高通,避免 1/f² 低频只吃动态余量。
- 信号链:buffer → 预设 biquad → 响度 trim → 淡入淡出 → 主音量(
v^1.8感知曲线)→ 峰值限制器。 - 引擎生命周期绑定插件
apply,切换会话继续播放;暂停后挂起 AudioContext 省电。
使用与维护
- 启用/停用:设置 → 插件(本插件行
dsh-adhd-noise),停用后输入框下方条目消失,声音停止。 - 本地开发:本仓库目录即包本体,profile 里是符号链接(
link:依赖)。修改client.js后需要重启 DSH 或刷新页面以加载新的客户端模块。 - 卸载:在插件管理中移除
dsh-adhd-noise;本地文件不受影响。
已知限制
- 需要浏览器 Web Audio API(桌面端 DSH 具备);不支持时面板会显示说明并禁用按钮。
- 声音由浏览器合成,音色是"接近"而非采样级真实雨声/风扇录音;需要绝对逼真的环境音时应换成采样音频方案。
- 未做多语言以外的国际化(仅简体中文 / English)。
研究参考
- Nigg 等 2024,JAACAP 白/粉噪声元分析:https://www.jaacap.org/article/S0890-8567(24)00074-1/abstract
- BPS Research Digest 摘要(约 8–10% 改善;非 ADHD 略有干扰):https://www.bps.org.uk/research-digest/does-pink-noise-really-help-you-focus
- 临床 ADHD 样本(无主效应,注意力缺陷型/多动冲动型分化):https://pmc.ncbi.nlm.nih.gov/articles/PMC11585357/
- ADDA:棕色噪声目前只有轶事证据:https://add.org/brown-noise-adhd/
- WHO 安全听音:https://www.who.int/news-room/questions-and-answers/item/deafness-and-hearing-loss-safe-listening
- 40 Hz 双耳节拍对照研究(注意力网络无差异):https://link.springer.com/article/10.1007/s12144-023-04681-3
- Paul Kellet 粉红噪声滤波器:https://www.musicdsp.org/en/latest/Filters/76-pink-noise-filter.html
开发自检
node tools/verify.cjs # 用 DSH 自带 node 也行:<runtime>/node/bin/node tools/verify.cjs
离线加载 client.js(mock React / Web Audio / Canvas2D / DOM),检查:三个槽位注册、浮层几何(下沿对齐、窄窗翻转、
再无可退空间时上移)、声球/小球画布尺寸与 dpr、5 个声音 + 5 个定时项、完整文案 key、引擎播放/暂停/换声/定时、
Host 注入的默认值、立体声缓冲(雨声/风扇 2 声道)及 RMS/峰值。
改动 UI 或音频后跑一遍即可发现大部分回归。
还可以做的优化(候选)
按投入产出排序,需要哪个我再做:
- 每声音独立音量记忆:切换到雨声时自动用它上次的音量偏好,而不是全局音量。
- 快捷键:如果当前版本 client 没有暴露 shortcuts 服务,就做面板内快捷键(空格播放、1–5 切声音)。
- 真实采样音色:把雨声/风扇换成小体积采样 + 交叉淡化,听感比合成更真实(会增加包体积与首次加载,约 +300–600KB)。
- 定时结束的轻提示:可选的单音提示或系统通知,避免专注结束时毫无反馈。
- 更多声景:篝火、咖啡馆等人声/环境采样(受体积限制,适合作为可选下载)。
- 深/浅色截图回归:目前无法在会话里截图;如果你愿意手动截两张,我可以据此微调玻璃浓度和高光强度。
收录状态
- 开放插件市场(dshopen.org):已提交收录申请 #231
- awesome-dsh-plugin(format-1 索引,
dsh-market与dshmarket的数据源):收录 PR #11903(仓库刚建,等待 1 天年龄门槛后转 ready)
许可证
MIT © tommy00748-tech
No comments yet. Be the first to write one.