生成白噪音来安抚宝宝

我有一個三周大的嬰兒。偶爾她會拒絕睡覺。一些人告訴我這就是生活,一些人告訴我需要購買東西來解決。這在育兒遊戲中正變成令人驚心動魄的常態。
無論如何,其中一件“我需要購買”的東西是white noise生成器。白噪聲定義為:
“如果觀察到隨機信號在相關頻率範圍內具有平坦的頻譜,則被認為是’白噪聲‘。例如,對於音頻信號,相關范圍是可聽聲音頻率帶,介於20至20,000 Hz之間。”
有幾件東西可以購買。Android應用程序、專用盒子(我確信只是播放了微小的預先生成的噪聲片段)以及超級昂貴的真隨機白噪聲生成器。

我想生成自己的白噪聲樣本

我知道我可以用youtube-dl从众多视频中下载一个,但是版权问题暂且不提,网上的频率压缩太可怕了,我想要完整的白噪声频率。如果这样的东西真的存在的话。另外,我是个自虐狂,我相信如果一件事情可以通过命令行完成,那就应该用命令行来做。这就是我打算培养这种习惯的方式。
所以我们有像/dev/urandom和paplay这样的东西。有没有一种合理的方法将随机数据传输到可听范围内的白噪声,并通过扬声器播放出来?写入文件的答案也可以接受。重要的是要有一个稳定的范围限制的样本。不要有尖叫声。
注意:生成brown note的答案将不会被欣赏 ☹

29关于技术方面的内容,请参考其他答案。从实际角度来看,我认为有一些可以播放冲浪/雨声/瀑布声的CD,它们可能不是数学上纯粹的白噪音,但很可能更接近你所寻找的舒缓耳朵的甜点(也很可能是白噪音声誉的来源)。 - xenoid
1@xenoid 我会接受那些几乎能够再现瀑布声音的答案 ☺ - Oli
5这个链接(https://gist.github.com/rsvp/1209835)可以用吗? - Mitch
@Mitch 我会把清洗沙发的账单寄给你 :) - Oli
@Oli 我已经付了很多了,再多一个也不会有影响 :) - Mitch
在软件仓库中有一个名为jnoise的软件包,它可以生成白噪声或粉红噪声。但是我无法在我的机器上运行它,因为它需要使用JACK音频。也许对你来说可以运行? - Byte Commander
6@Mitch所指的帖子并不是指涉到“棕色音符”。 “棕色噪声”一词并不是来自颜色,而是源于发现布朗运动的罗伯特·布朗。 - Adrian
2我可以推荐https://mynoise.net/。虽然它不完全符合你提到的音响发烧友的高保真要求,但是像这样的随机噪音对人们的听力来说比白噪音或粉红噪音更好。事实上,在成长的关键时期过多地接触白噪音或粉红噪音实际上与许多心理问题有关,可能是因为他们处于一个没有有意义的小信号可寻找的环境中。 - Cort Ammon
4调整收音机,避开任何频道? - gerrit
@gerrit 但是FM收音机太老派了... ;-) - Byte Commander
我们只是把吸尘器放在房间里,打开它然后离开了。这样做起作用了。 - user559799
13除非你已经教过你的宝宝皮尔逊卡方检验,否则真正的随机性并不是太重要。 - PyRulez
我使用死亡金属和黑金属作为白噪音。 :D - MetalMikester
1如果你对网络没问题的话,我非常喜欢http://asoftmurmur.com/这个网站,可以生成各种白噪音。它有白噪音、海浪声、火焰声,并且可以调节不同类型噪音的音量级别。我个人最喜欢的混合音效是:http://asoftmurmur.com/?v=00001200000000240008。 - daboross
[软件推荐.se]上的相关标签:噪音生成器 - unor
1频率压缩在线上真是糟糕透了,我想要完全的白噪音好处。作为另一个新手父母(11个月大的孩子),你想得太多了。(特别是,正如其中一个答案所指出的那样,根据你所说的帮助宝宝入睡的目标,实际上你并不需要真正的白噪音。) - Kyle Strand
1虽然大多数人通常称之为“白噪音”,但你并不希望真的是白噪音。那样的话,所有的能量都集中在高频上,非常刺耳。你想要的是“粉红噪音”。能量均匀地分布在频谱中。如果你购买了一个“白噪音发生器”,你将会得到更接近粉红噪音而不是白噪音的声音。 - thomasrutter
有很多可以下载的YouTube视频。我们为我们的两个孩子都使用了婴儿白噪音。 - JohnP
13个回答

使用瑞士军刀来进行声音生成,SoX
你可以通过在官方软件库中输入以下命令来安装它:
sudo apt-get install sox

更新的、花哨的答案(令人愉悦的海浪):

在尝试了一些SoX之后,我想出了这个很棒的命令,它模仿了海洋的柔和低语声,带来了夏日阳光下流过平坦沙滩的海浪声...

好了,够诗意了,下面是命令。亲自听听吧。

play -n synth brownnoise synth pinknoise mix synth sine amod 0.3 10
说明:

此命令首先生成并混合棕色噪声和粉色噪声,我发现这是最舒适和自然的噪声。然后它生成一个频率为0.3赫兹、偏移量为10%的正弦波,并使用它来调制我们混合噪声的幅度,以产生海浪声。

修改:

  • 计时器:
    您可以通过在之前指定秒数、分钟和秒数(mm:ss)或小时、分钟和秒数(hh:mm:ss),添加计时器并限制播放持续时间。以下是一个一小时的示例:

    play -n synth 1:0:0 brownnoise synth pinknoise mix synth sine amod 0.3 10
    
  • 波浪频率:
    如果您希望海浪更频繁地击打岸边,只需更改用于振幅调制的正弦波的频率(上述命令中的0.3)。该数字表示每秒波浪的数量,因此0.1 Hz 的频率将导致每秒0.1个波浪,从而使一个波浪持续10秒:

    play -n synth brownnoise synth pinknoise mix synth sine amod 0.1 10
    
  • 最小背景噪音音量:
    用于振幅调制的正弦波被偏移了10%,因此棕红噪声始终以至少10%的音量播放。如果您想要更强或更弱的背景噪音,可以根据需要增加或减少此偏移量。以下是一个包含20%背景噪音的示例:

    play -n synth brownnoise synth pinknoise mix synth sine amod 0.3 20
    

老掉牙、无聊的回答(纯白噪音):

现在,播放无限白噪音的最简单命令(直到你用Ctrl+C中止它)是这样的:

play -n synth whitenoise

如果你喜欢设置时间限制,可以按照格式hh:mm:ss添加。例如,下面的命令会持续一小时半的噪音:
play -n synth 01:30:00 whitenoise

它甚至在“游戏”过程中向您展示一些不错的统计数据:
$ play -n synth 00:00:05 whitenoise 

  Encoding: n/a           
  Channels: 1 @ 32-bit   
Samplerate: 48000Hz      
Replaygain: off         
  Duration: unknown      

In:0.00% 00:00:05.12 [00:00:00.00] Out:240k  [!=====|=====!] Hd:0.0 Clip:0    
Done.

6我编辑了我的回答,并添加了一个花哨但简单的海浪声发生器命令,这将比单调的白噪音更能让宝宝(和爸爸)的耳朵感到愉悦。 - Byte Commander
2我喜欢这个,但是正弦波的音量变化并不像海滩上的海浪声那样明显。它需要在海浪冲击海滩时迅速增大音量,然后缓慢地逐渐减小。有没有办法实现这个效果? - Caesar
7@Caesar,使用这些工具的能力是有限的,但我认为play -n synth brownnoise synth pinknoise mix synth 0 0 0 15 40 80 trapezium amod 0.2 10更接近你所要求的 :) - hobbs
1@hobbs 现在如果重复频率不那么规律... ;-) :-P - Rmano
1@Rmano,我认为在sox中做不到这个。 - hobbs
棕色噪音可能会导致...额外的尿布更换... - Hack-R
1@Hack-R评论中已经提到这是不正确的。 - Mast
+1,在Fedora上也可以运行(请不要嘲笑我)。使用霍布斯版本,让我和我的小家伙都感到非常放松。 - Cem Kalyoncu
作为一个成年人,我发现这个非常令人满足和放松,以至于我立即设置了一个化名,这样我就可以随时听到这个声音。 - Kevin
3这是我的修改版本:play -n synth brownnoise synth pinknoise mix synth 0 0 0 10 10 40 trapezium amod 0.1 30 较长的周期使得很难注意到规律性。数字含义如下:0.1 = 波浪碰撞频率(0.1赫兹 = 每10秒一次波浪);30% = 波浪之间的噪声水平;第一个10% = 波浪上升部分的持续时间(超过10秒);第二个10% = 波浪开始下降的时间(它们都是10%,所以波浪在音量上升完后立即崩溃);40% 是整个波浪的持续时间:这意味着100% - 40% = 60% 的时间是在等待波浪之间度过的。 - Tobia
这只是一些噪音 - 没有波浪 - play -n synth brownnoise synth pinknoise mix synth sine amod 10 100 - valk
播放默认的48kHz和32位采样会比播放44.1kHz 16位CD音质的音乐更快地耗尽设备电池。应用-r44.1k -b8命令行选项-你不太可能注意到48kHz 32位和44.1kHz 8位噪音之间的任何差异,但你会注意到电池的使用时间更长。添加-c2以获得立体声噪音,这样更具沉浸感。 - Maxim Egorushkin

您可以使用sox工具中的播放命令生成粉色噪声:
sudo apt-get install sox
play -t sl -r48000 -c2 -n synth -1 pinknoise .1 60

调整.1和60的值以适应您的需求。粉红噪音对耳朵来说不那么刺耳,希望这是您需要的声音。

我认为speaker-test也可以做到这一点,但我认为粉色噪声不是最佳选择,它确实是噪声,但没有变化可能不是理想的选择? - user508889
4@bc2946088 用play -n synth 12:00:00 whitenoise可以生成12小时纯白噪声。 - Nick Weinberg
6你说我可以调整它们,但是.160这两个参数实际上代表什么意思? - Oli
这里的.1不太相关;60是直流偏移。偏移越小,波形的范围(振幅)就越大,将其设置得更接近100会导致范围变小,因为它接近100%的全范围。 - Colin Ian King
不禁注意到,与从YouTube播放任何内容相比,这个“play”命令会更快地消耗我的蓝牙耳机电池。原来,“play”默认为48kHz 32位的音质,对于噪音来说有些过度 - 数据带宽比44.1kHz 16位CD音质高出2.17倍。为了减少电池消耗(甚至低于您的音乐播放器),请使用“-c2 -r44.1k -b8”命令行选项 - 您很难察觉到48kHz 32位和44.1kHz 8位噪音之间的任何差异。 - Maxim Egorushkin

不确定这是否会产生覆盖整个频谱的真正白噪声,但是一个简单的
pacat /dev/urandom

似乎在我的系统上起作用了(无需安装任何新软件或添加存储库)。

那听起来确实很像sox产生的白噪音。 - Oli
pacat在我的系统中默认没有安装 - 所以没有理由偏爱它 ;-) - linolino
2@linolino 你不是在用Ubuntu吗?如果是的话,它应该已经安装好了(除非你手动删除了)。这个软件是由pulseaudio-utils提供的,在实时系统中也是其中一部分(参见manifest)。如果你没有这个软件,那么可能你的安装有问题。我建议你开一个新的问题,解释一下问题,并寻求帮助以恢复你的安装。 - dadexix86
1除非他们使用的是服务器版本。 - Arronical
1无论如何,你仍然可以使用aplay而不是pacat。似乎alsa-utils已经默认安装了。 - Ruslan
1@dadexix86,实际上我已经安装了Lubuntu。不管怎样,在我这里通过apt-get install的方式无法正常工作。但是ByteDefenders的解决方案很好用;-) - linolino

我是个喜欢自找苦吃的人,所以我会给你提供图形用户界面的方法。看一下ANoise
它默认的声音不好听,但你可以下载其他声音,比如森林雨、喷泉等等。你可以设置它随系统启动,甚至可以设定在一定时间后停止。
sudo add-apt-repository ppa:costales/anoise
sudo apt-get update
sudo apt-get install anoise

ANoise Code,以及额外的河流声音:

sudo apt-get install anoise-community-extension1

+1 我一直都在使用Anoise。但是它在16.04版本中有几个严重的bug。 - user423626

打开Audacity。

进入"生成 > 噪音..."

选择"布朗噪声"(比真实的白噪声要温和得多)。振幅和持续时间并不重要。

使用Shift+播放按钮进行循环。


FFMpeg有一个音频噪声源过滤器。您可以使用ffplay播放它(链接)

ffplay -f lavfi -showmode 0 -i 'anoisesrc=color=brown'

因为使用了-f lavfi,所以-i的参数被解释为lavfi滤镜图。通过-showmode 0可以禁用ffplay的默认音频可视化窗口,该窗口在仅有音频输入时默认显示。

ffmpeg -h filter=anoisesrc的输出中可以看到,您可以选择任意幅度和采样率的棕色/粉色/白噪声,并可选择有限的持续时间。


你还可以使用mpv,一个很好的mplayer分支,或者其他允许使用ffmpeg滤镜图的播放器。例如。
mpv  av://lavfi:anoisesrc=color=brown

这可能会很方便,如果你为你最喜欢的播放器配置了自定义音频输出设置。

默认安装的实用程序speaker-test会生成粉色噪声(正如@nightingale所说,这才是你真正想要的,而不是白噪声)。可以通过运行来无限期地设置它。
speaker-test -l 0

我看到还没有人使用aplay,所以你可以尝试以下方法:
aplay --channels=2 --format=S16_LE --rate=44100 --duration=3600 /dev/urandom

这个并不是特别有创意,所以我加了一个定时器来弥补:)。duration设置的单位是秒,所以它将运行1小时然后关闭,希望到那时宝宝已经安顿下来了...

Tom Swiss of unreasonable.org使用以下代码(使用sox)生成白噪声/粉噪声。您首先需要安装sox(sudo apt install sox),然后创建一个带有以下代码的shell脚本。
#!/bin/sh

len='7:00:00'

if [ "$1" != '' ]; then
  len=$1
fi

play -t sl - synth $len  pinknoise band -n 1200 200 tremolo 20 .1 < /dev/zero

鸣谢http://unreasonable.org/white_noise_generator_with_sox_for_Linux
免责声明:我自己尚未尝试过这个方法。

那个以8kHz采样率输出,所以上面没有超过4kHz的噪音能量。:/ 适当的粉红噪音应该有一些。不过,使用颤音/颤音滤波器处理噪音的建议很有趣。 - Peter Cordes
1更好的解决方案?删除len='7:00:00'if [ "$1" != '' ];thenfi,并添加对无限噪音的支持。 - EKons

白噪声在数学上是频率均匀分布的。您可以使用来自/dev/random/dev/urandom的随机数据来产生它。如果您想改变产生的噪声的“音调”(例如通过去除较低频率使其更轻盈,或通过去除较高频率使其更阻尼),那么您可以使用类似于dd bs=1 if=/dev/urandom of=whitenoise.raw count=1048576的命令生成一些白噪声,然后将其导入到Audacity中,并使用高通和低通滤波器根据您的喜好进行调整(在使用滤波器时,请记住人耳可以听到最高20kHz的频率)。
编辑:Audacity也可以自动生成白噪声。