使用方法
- 先选「噪声类型」。三者的差别只在频谱形状:白噪音每个赫兹分到的功率相同,听感偏「沙沙」的高频;粉红噪音功率与频率成反比,听感更接近雨声、瀑布;棕噪音功率与频率平方成反比,低频更重,接近远处的轰鸣。不要凭名字去猜,先各试听 20 秒再决定。
- 「采样率」选 44100 或 48000 Hz。两者的区别是能表达的最高频率(奈奎斯特频率):44100 Hz 对应 22050 Hz,48000 Hz 对应 24000 Hz。因为人耳上限通常在 20000 Hz 附近,这两个采样率听感上几乎没有差别,选默认的 44100 即可;要对齐视频工程时再选 48000。
- 「时长」填 30(示例值),允许 1~600 秒的整数。它只决定下载出来的 WAV 有多长,不影响实时试听——实时播放时音频缓冲会无缝循环,你听到的是无限长的噪声,不会在 30 秒处断掉。
- 「音量」填 −18(示例值),范围 −60~0 dB。这里的 dB 是相对满量程的数字增益:0 dB 表示把归一化后的波形按原样输出,−18 dB 表示乘上
10−18/20 ≈ 0.125892。先在 −30 dB 左右试听,确认音量合适再往上加。 - 「淡入」「淡出」默认 0.80 与 1.20 秒。它给缓冲的首尾各套一段线性斜坡,避免循环点或起停瞬间出现「啪」的爆音。若把淡入设成 0,且下载的是白噪音,首尾突变的台阶会在耳机里听到明显的咔哒声。
- 点「播放」开始试听,点「停止」结束。点「下载 WAV」把当前参数下的完整缓冲编码成 16 位单声道 PCM 文件保存到本地。
- 「复制对照表」把下方三分之一倍频程表按 TSV 复制,可直接粘进电子表格;表格下方的「加载更多」用于展开被折叠的其余频段行。
这个白噪音生成器能解决什么问题
一是把「到处找一段环境音」换成「现场按需要的频谱合成」。网上流传的白噪音文件往往来历不明、码率参差,还可能被人为加入音乐或提示音。这个白噪音生成器直接由算法生成采样点,你拿到的是纯净的噪声,没有任何附加内容,也不用担心版权与来源。
二是让参数可复现、可对照。噪声类型、采样率、时长、音量、淡入淡出全部显式列出,同一组参数随时能再生成一次;频谱形状不是「听起来差不多」,而是由明确的斜率定义:白 0 dB/oct、粉红 −3.01 dB/oct、棕 −6.02 dB/oct(功率谱密度口径)。
三是纠正「白噪音等于粉红噪音」这个常见混用。很多人把任何「沙沙声」都叫白噪音,但两者在高频差得很远:以 1 kHz 为 0 dB,三分之一倍频程带级在 20 kHz 处白噪音是 +13.0 dB、粉红噪音是 +4.3 dB,相差约 8.7 dB。选错类型,听感会明显偏「尖」或偏「闷」。
四是完全离线、不上传任何内容。合成、归一化、淡变、编码都在当前页面用 Web Audio 与 DataView 完成,没有任何网络请求,也不会把音频写进浏览器存储。
本页不做这些事:不承诺改善睡眠、不承诺提升专注力、不做任何医疗用途的暗示,也不提供「治疗耳鸣」之类的说法。噪声只是声音,效果因人而异。想测试自己的耳机或麦克风,可以用页面底部的「麦克风测试」;想给练习定时,可以用「番茄钟计时器」或「HIIT 间隔训练计时器」。
生成原理:频谱形状、Web Audio 缓冲与 WAV 封装
噪声的「颜色」由功率谱密度(PSD)的斜率定义,不是由振幅决定。白噪音的每个采样点互相独立、取自同一均匀分布,因此单位带宽内的功率处处相同,PSD 是常数,斜率记作 0 dB/oct。粉红噪音要求 PSD 与频率成反比 1/f,也就是每个倍频程内功率相同,斜率是 −10·log10(2) = −3.0103 dB/oct。棕噪音(也叫布朗噪音、红噪音)要求 1/f²,斜率是 −20·log10(2) = −6.0206 dB/oct。
这里有个几乎所有人都踩过的换算陷阱。上面那组数字是「每赫兹密度」的斜率。如果你用实时频谱仪按三分之一倍频程或倍频程读数,读到的带级要再加 +3.01 dB/oct——因为带宽本身随频率翻倍,带内功率等于密度乘带宽。换算后,带级斜率是:白噪音 +3.01 dB/oct、粉红噪音 0 dB/oct、棕噪音 −3.01 dB/oct。粉红噪音的带级在三分之一倍频程上是一条水平线,这正是它听起来最「自然」的原因。本页实测(4 秒缓冲、4096 点 Welch 平均、100 Hz~10 kHz 最小二乘)得到白 +2.75、粉 −0.18、棕 −2.67 dB/oct,与理论值相差在 0.3 dB/oct 以内。
三种噪声分别怎么算。白噪音最简单:每个采样点取 2·rand()−1,落在 [−1,1] 上均匀分布,理论 RMS 为 sqrt(1/3) = 0.577350,波峰因数正好是 sqrt(3) = 1.732。粉红噪音用 Paul Kellett 在 2000 年给出的 7 极点近似:把一路白噪音同时喂给 7 个一阶低通,再把输出加权求和,用一组极点的叠加去逼近理想的 1/f 曲线。棕噪音用一阶泄漏积分器 y[n] = (y[n−1] + 0.02·x[n]) / 1.02——分母取 1.02 让直流增益恰好等于 1,既实现 −6 dB/oct 的积分特性,又不会像「裸积分」那样让直流分量慢慢漂出量程。
缓冲、归一化与淡变。生成一段长度为「采样率乘时长」的 Float32Array 后,先算它的实际 RMS,再乘以增益把它拉到目标 RMS(10^(dB/20))。归一化是必要的:三种噪声的原始 RMS 相差极大(实测白 0.577、粉 1.774、棕 0.058),不归一化的话切换类型时音量会跳变 30 dB 以上。随后按淡入淡出样点数套线性斜坡,最后交给 AudioBufferSourceNode 播放;把该节点的 loop 设为 true,缓冲会首尾相接无限循环。
WAV 文件的 44 字节头。导出时按 RIFF/WAVE 规范写定长头:偏移 0 写 RIFF,偏移 4 写「36 加数据字节数」,偏移 8 写 WAVE,偏移 12 写 fmt (注意末尾有一个空格),偏移 16 写子块长度 16,偏移 20 写格式码 1(表示 PCM),偏移 22 写通道数 1(单声道),偏移 24 写采样率,偏移 28 写字节率(采样率乘 2),偏移 32 写块对齐 2,偏移 34 写位深 16,偏移 36 写 data,偏移 40 写数据字节数。浮点采样转 16 位整数时,正值乘 32767、负值乘 32768,这个不对称是为了让取值范围正好覆盖 −32768 到 +32767 而不溢出。
完整示例(数值仅作演示)
示例条件与打开页面时的默认值一致:白噪音、44100 Hz、30 秒、−18 dB、淡入 0.80 秒、淡出 1.20 秒。逐项算一遍:
- 采样数
44100 × 30 = 1,323,000个; - 目标 RMS
10^(−18/20) = 0.125892;白噪音理论 RMS1/√3 = 0.577350; - 归一化增益
0.125892 / 0.577350 = 0.218053,折算20·log10(0.218053) = −13.22 dB;白噪音波峰因数是 1.732,所以归一化后峰值0.218053 × 1.732 ≈ 0.3778,远低于 1.0,不会削顶; - 淡入 0.80 秒采样数
44100 × 0.8 = 35,280,淡出 1.20 秒采样数44100 × 1.2 = 52,920,两者合计 88,200,占 1,323,000 的 6.67%; - WAV 体积
44 + 1,323,000 × 2 = 2,646,044字节,即2,646,044 / 1,048,576 = 2.52 MiB; - 若把时长改成 60 秒,采样数翻倍到 2,646,000,文件变成 5,292,044 字节(5.05 MiB);30 分钟则是 158,760,000 字节(151.40 MiB)。
切换到粉红噪音时,同一目标 RMS 下的增益会小得多:粉红噪音实测原始 RMS 约 1.774,增益只有 0.125892 / 1.774 = 0.07097(−22.98 dB);棕噪音原始 RMS 约 0.0579,增益反而是 0.125892 / 0.0579 = 2.1743(+6.75 dB)。也就是说,在相同听感音量下,棕噪音需要放大、粉红噪音需要大幅衰减——这正是「归一化不能省」的直接证据。切到棕噪音时还要注意,它的低频游走让波峰因数随缓冲变长而上升:4 秒缓冲实测 3.94,10 秒 4.41,30 秒 4.56,60 秒升到 4.64,所以缓冲越长,留给峰值的余量要越多。
三种噪声频谱斜率与三分之一倍频程电平对照表
下表按 ISO 266 的 30 个三分之一倍频程中心频率列出三种噪声的功率谱密度相对电平,统一以 1 kHz 为 0 dB 基准。默认显示前 12 行,点「加载更多」看全部 30 行;「复制对照表」按 TSV 复制全表。
| 中心频率 | 白噪音 密度 | 粉红噪音 密度 | 棕噪音 密度 |
|---|---|---|---|
| 25 Hz | 0.0 dB | −16.0 dB | −32.0 dB |
| 31.5 Hz | 0.0 dB | −15.0 dB | −30.0 dB |
| 40 Hz | 0.0 dB | −14.0 dB | −28.0 dB |
| 50 Hz | 0.0 dB | −13.0 dB | −26.0 dB |
| 63 Hz | 0.0 dB | −12.0 dB | −24.0 dB |
| 80 Hz | 0.0 dB | −11.0 dB | −21.9 dB |
| 100 Hz | 0.0 dB | −10.0 dB | −20.0 dB |
| 125 Hz | 0.0 dB | −9.0 dB | −18.1 dB |
| 160 Hz | 0.0 dB | −8.0 dB | −15.9 dB |
| 200 Hz | 0.0 dB | −7.0 dB | −14.0 dB |
| 250 Hz | 0.0 dB | −6.0 dB | −12.0 dB |
| 315 Hz | 0.0 dB | −5.0 dB | −10.0 dB |
| 400 Hz | 0.0 dB | −4.0 dB | −8.0 dB |
| 500 Hz | 0.0 dB | −3.0 dB | −6.0 dB |
| 630 Hz | 0.0 dB | −2.0 dB | −4.0 dB |
| 800 Hz | 0.0 dB | −1.0 dB | −1.9 dB |
| 1000 Hz | 0.0 dB | 0.0 dB | 0.0 dB |
| 1250 Hz | 0.0 dB | +1.0 dB | +1.9 dB |
| 1600 Hz | 0.0 dB | +2.0 dB | +4.1 dB |
| 2000 Hz | 0.0 dB | +3.0 dB | +6.0 dB |
| 2500 Hz | 0.0 dB | +4.0 dB | +8.0 dB |
| 3150 Hz | 0.0 dB | +5.0 dB | +10.0 dB |
| 4000 Hz | 0.0 dB | +6.0 dB | +12.0 dB |
| 5000 Hz | 0.0 dB | +7.0 dB | +14.0 dB |
| 6300 Hz | 0.0 dB | +8.0 dB | +16.0 dB |
| 8000 Hz | 0.0 dB | +9.0 dB | +18.1 dB |
| 10000 Hz | 0.0 dB | +10.0 dB | +20.0 dB |
| 12500 Hz | 0.0 dB | +11.0 dB | +21.9 dB |
| 16000 Hz | 0.0 dB | +12.0 dB | +24.1 dB |
| 20000 Hz | 0.0 dB | +13.0 dB | +26.0 dB |
- 三列都是「单位赫兹功率」的相对电平,所以白噪音一列恒为 0.0 dB:这正是白噪音的定义。粉红与棕的数值按
−3.0103 × log2(f/1000)与−6.0206 × log2(f/1000)得出,例如 25 Hz 相对 1 kHz 是 5.32 个倍频程,粉红得 −16.0 dB、棕得 −32.0 dB。 - 20 Hz 到 20 kHz 共
log2(20000/20) = 9.966个倍频程,所以粉红噪音从 20 Hz 到 20 kHz 的密度总落差是3.0103 × 9.966 = 30.0 dB,棕噪音是6.0206 × 9.966 = 60.0 dB。 - 换成频谱仪上按三分之一倍频程读到的带级时,每一列都要加上
3.0103 × log2(f/1000):白噪音变成 +3.01 dB/oct 的斜线,粉红噪音变成一条 0 dB 的水平线,棕噪音变成 −3.01 dB/oct 的斜线。 - 相邻两个三分之一倍频程中心频率之比是
2^(1/3) = 1.2599,所以每行之间的落差恒为3.0103 / 3 = 1.0034 dB(粉红)与 2.0069 dB(棕)。表里数值按 0.1 dB 取整,因此会出现 −21.9 这样的尾数。
输入范围、边界与取整说明
- 时长 1~600 秒的整数。0、负数、小数、字母和空值都会被拒绝并给出具体提示。上限取 600 秒(10 分钟)是因为 10 分钟的 44.1 kHz 16 位单声道 PCM 已经要 52.9 MiB,再长会让浏览器编码时的内存占用明显升高、下载也变慢;需要更长请分段导出后用音频软件拼接。
- 音量 −60~0 dB。−60 dB 以下是数字域里接近静音的区域,再低没有实际意义;0 dB 是上限。归一化后的峰值在示例条件(−18 dB)下只有 0.3778,留了约 2.6 倍余量,所以即使把音量拉到 0 dB 也不会削顶——但粉红噪音波峰因数是 4.363、棕噪音 4.321,在 0 dB 下峰值会逼近 1.0,建议不要长期拉到顶。
- 淡入淡出各 0~10 秒,且淡入加淡出不能超过时长。例如时长填 5 秒、淡入 4 秒、淡出 4 秒时,两者相加 8 秒大于 5 秒,程序会明确提示而不是悄悄截短。
- 采样率只支持 44100 与 48000 Hz。这两个值覆盖了绝大多数播放设备;8000 Hz 之类的电话语音采样率最高只能表达 4000 Hz,用在噪声上会明显发闷,所以不在选项里。
- 归一化后不保证三种噪声「响度完全一致」。RMS 相同只代表平均功率相同,实际主观响度还受频谱加权影响:同样 RMS 下,高频占比大的白噪音听起来会比棕噪音更响。要凭听感对齐,请手动微调「音量」。
- 淡变不改变文件长度。淡入淡出是乘在采样点上的振幅包络,采样个数、WAV 体积都不变。设成 0 会保留缓冲首尾的波形断点,循环播放时可以听到周期性的「咔哒」。
- 循环点是可听出来的。把缓冲首尾相接时,如果末尾采样与开头采样不连续,就会在接缝处产生台阶。白噪音因为相邻采样本就独立,接缝几乎听不出来;棕噪音有明显的低频漂移,实测 4 秒缓冲首尾差 0.00306,所以更依赖淡入淡出来掩盖接缝。
常见问题
白噪音、粉红噪音、棕噪音到底该选哪个?
按你要模仿的声音选。想盖住说话声、键盘声这类中高频干扰,选白噪音,它每个赫兹功率相同,高频成分最多,掩蔽中高频最直接。想接近雨声、溪流、风扇这类自然声,选粉红噪音,因为它的三分之一倍频程带级是平的,能量分布最接近人耳的「等响」感觉。想接近远处车流、雷声、飞机舱压这类低频轰鸣,选棕噪音,它低频最重。三者没有优劣,只有匹配与否。
为什么别人说「粉红噪音是 −3 dB/oct」,我按倍频程量却是平的?
因为两句话说的是两个不同的量。−3 dB/oct 描述的是功率谱密度——每赫兹的功率随频率下降 3 dB。而频谱仪按三分之一倍频程或倍频程读数得到的是带级——带内总功率。带宽本身随频率翻倍,功率等于密度乘带宽,所以带级要把密度的斜率加上 +3.01 dB/oct,粉红噪音的带级斜率就变成 −3.01 + 3.01 = 0,是一条水平线。两者都没有错,只是口径不同。
为什么白噪音听起来比粉红噪音「尖」、比棕噪音「吵」?
因为在相同 RMS 下,白噪音的能量更多落在人耳最敏感的高频区。人耳在 2 到 5 kHz 附近灵敏度最高,而白噪音在 20 kHz 处的三分之一倍频程带级比 1 kHz 高出 +13.0 dB,粉红噪音只高出 +4.3 dB,棕噪音反而低 −13.0 dB。高频越多,听感就越「尖」、越「沙」。这也是为什么很多「助眠白噪音」实际上用的是粉红噪音。
下载的 WAV 为什么是 44 字节头加 PCM,而不是 MP3?
因为 WAV 是无损的容器,写起来只是「44 字节定长头加原始采样」,不依赖任何编码库,浏览器里用 DataView 就能逐字节写出来,几毫秒完成。MP3 需要完整的编码器,体积虽小,但会引入有损压缩的量化噪声,对本来就是噪声的信号没有意义的收益。如果要更小的文件,下完可以用任意音频软件转成 Opus 或 FLAC。
为什么第一次点「播放」没有声音?
这是浏览器的自动播放策略,不是工具故障。Chrome、Edge、Safari 都要求音频上下文必须由一次真实的用户手势启动,否则 AudioContext 会停在 suspended 状态。本页在检测到该状态时会自动调用 resume(),所以只要你是「点按钮」而不是用脚本触发,就能正常出声。若仍无声,请检查系统音量、浏览器标签页是否被静音、输出设备是否选对。
这个工具会把音频或我的操作上传吗?
不会。噪声合成用 crypto.getRandomValues 取随机数,归一化、淡变、WAV 编码全部在当前页面的 Float32Array 与 DataView 上完成,下载走 Blob 与 URL.createObjectURL,整个流程没有任何网络请求,也不写入本地存储或 Cookie。想自己验证,可以在开发者工具的 Network 面板里边点播放边观察,不会出现新的请求。
用它当助眠或专注的背景音,科学上站得住吗?
噪声掩蔽是真实存在的现象——用平稳的声音盖住环境里的突发噪声,确实能让部分人更容易忽略干扰,这属于基础的声学掩蔽。但个体差异很大:有人觉得噪声帮助集中注意力,也有人觉得持续的背景声反而更累。本页只提供声音合成工具,不承诺改善睡眠、不承诺提升专注力、不构成任何医疗建议;如果存在耳鸣、听力下降或睡眠障碍,请咨询医生。
把音量拉到 0 dB 长期听会伤听力吗?
0 dB 是数字域满量程,不等于任何固定的声压级,实际声压由耳机灵敏度和设备输出决定,可能远超 85 dB(A)。NIOSH 的建议是 85 dB(A) 累计不超过 8 小时,且每加 3 dB 允许时长减半。稳妥的做法是:从 −30 dB 左右开始,调到「能盖住环境噪声但不需要刻意去听」的程度,连续聆听每隔一小时休息几分钟,绝不调到耳朵出现嗡鸣或闷胀感。