Soluklan

幕后

麦克风怎么听你的呼吸

既然不录音,应用怎么测你的呼吸?底噪、随房间移动的阈值,以及呼气的起点和终点是怎么找到的。

阅读约 6 分钟

应用不录音。麦克风来的音频流从不写入磁盘;每二十毫秒算出那一瞬间的声音强度,只留下这个数字。所以应用手里的不是音频文件,而是一串数字:一条起起伏伏的线。

所有的测量都从那条线上来。

先测安静

练习开头有三秒的聆听。这段时间里,房间的底噪被测出来:冰箱的嗡嗡声、外面的车流、设备自身的电子噪声。

它不是取平均——它看的是那三秒里最安静的时刻。原因是:校准时把手机往桌上一放,或者有人咳了一声,都会把平均值拉高,让阈值整场都是错的。在一份真实录音里,这造成了十四分贝的误差。

底噪在练习过程中也会更新。房间变安静,阈值就下来;噪声变大,它就上去——但只在一定范围内,否则应用会在吵闹的房间里把自己变聋。

阈值不是绝对的,而是相对底噪的

一个声音要算作“呼气”,不必超过某个特定的分贝值。它要比底噪高出一定的量。安静的房间里那个阈值低,吵闹的咖啡馆里则高。

高出多少取决于呼吸法。从嘴呼气(长呼气、缩唇呼吸)声音大。从鼻子安静地呼气(共振、箱式)要低得多。单鼻孔的呼吸是最低的。每种呼吸法都用自己的阈值来听;用同一把尺子量,鼻腔那几种就会变得听不见。

呼气的起点和终点

原始的声音强度抖动太大,不能直接用。它先被平滑处理——每个新的测量和前一个混合,这样一声咔哒不会变成一次呼气。

平滑后的线越过阈值时,呼气开始。要判定它结束,两个条件之一就够:线掉到阈值以下并在那里停留三分之一秒,或者从这次呼气自身的峰值回落一定的量。没有第二个条件,一次听得见的吸气会把呼气延长,两次呼吸会被测成一次。

非常短的事件会被丢掉。判断这个用的是原始测量而不是平滑后的线:平滑会把一声短促的咔哒拉长,让它看起来比实际久。

安静的房间和平板的问题

阈值相对底噪,在多数情况下管用,但它有个陷阱:如果底噪真的非常低,相对阈值会变得过于灵敏,房间里任何一声吱呀都可能算成呼气。所以底噪能低到多少,有一个下限。

那个下限曾经定得太高。在一份平板录音里,真实的底噪测出来低得多;因为下限假定底噪比实际更高,呼气的余量就被吃光了,什么都听不到。一个在离平板一掌远的地方呼气的人,被告知“把设备拿近些”。

我们在二十一份真实录音上重新扫了一遍,把下限调低:捕捉到的呼气次数上升,误判的次数没有变化。这样的决定来自我们手上的录音,不是猜的——这正是声音样本分享唯一的用途。

快速呼吸是另一回事

这个方法有个限制:判断一次呼气结束,需要之后有一小段安静。在一种呼气快于每秒一次的呼吸法里,那段安静根本不会出现。

所以圣光调息用另一种方式来测。应用不去逐个分离呼气,而是数声音曲线出现波峰的时刻,再看间隔有多规律。计数器会等波峰收住之后线掉到阈值以下——没有这个条件,它会把每次呼气数成两次。

← 幕后