麦克风检测
按下开始,对着麦克风说话,看波形动不动。这一页能回答的是"它有没有在收音、会不会断",不能回答"它有多灵敏" —— 原因写在下面那一节,和读数并排。
—
为什么读数不是声压级
getUserMedia 默认打开三项处理:自动增益(AGC)会把小声音拉大、大声音压小;降噪(NS)会把持续的背景音抹掉;回声消除(AEC)会把你自己的声音从信号里减掉一部分。三者合起来,输进分析器的已经不是麦克风收到的原始信号了。所以这里的数字只能回答"有没有声音、会不会中断",不能回答"麦克风灵敏度够不够"或"房间有多吵"。
dBFS 是什么
满刻度分贝(decibels relative to full scale):0 dBFS 是数字信号能表示的最大值,安静的数字静音是 −∞。它是一个相对量,没有物理单位 —— 同一个房间、同一句话,换一台电脑的麦克风,读出来的数完全可能不一样。要和别人比,得用真正的声级计。
什么时候这一页最有用
(1) 刚买了一个麦克风/耳麦,想知道它到底有没有在收;(2) 开会时对方说听不见你;(3) 想验证"我这边静音了吗";(4) 看线材接触不良时波形是不是会突然断掉。这四件事它都能给一个明确的答案,而且是当场给。
常见问题
先看浏览器问到权限没有(地址栏左边那枚图标)。其次检查系统设置里默认输入设备是不是选错了 —— 浏览器拿到的是系统给的默认设备。再其次:有些耳麦的麦克风是静音键控制硬件静音的,那种静音在软件里看不出来。
不会。 音频流只进到浏览器的分析器(AnalyserNode),拿到的是一帧一帧的采样值,没有保存、没有上传、也没有任何地方能回放。停止之后麦克风立刻被释放。
这一页用系统默认输入 —— 也就是浏览器拿到的第一个。要切换设备请改系统设置,或者在浏览器的站点权限里换。刻意不做设备下拉:多设备的枚举在没拿到权限之前拿不到名字,做出来会是一列空白选项。
getUserMedia 属于"需要安全上下文"的接口 —— 非 HTTPS 页面上浏览器会直接拒绝,不给任何弹窗。这是浏览器的规定。本站在线上是 HTTPS,本地 localhost 也算安全上下文,所以开发时不受影响。
