Audio 录制音频-响度差异太小

Audio 录制音频-响度差异太小,audio,microphone,speech,recording,Audio,Microphone,Speech,Recording,当有什么事情发生时,我试着用麦克风录下声音(无论是有人说话还是只是移动物体——基本上不是随机噪音) 到目前为止,我的方法是录制1-2秒,检查录制是否通过了“任何事情发生”的测试,如果是,我可以录制新的1-2秒录制没有通过测试的时间 现在我的问题是测试。我现在做的基本上是设置一个阈值,所以基本上看起来是这样的: for(uint32_t i = 0; i < SAMPLE_RATE * NUM_SECONDS; i++) { if(buffer[i] > threshold)

当有什么事情发生时,我试着用麦克风录下声音(无论是有人说话还是只是移动物体——基本上不是随机噪音)

到目前为止,我的方法是录制1-2秒,检查录制是否通过了“任何事情发生”的测试,如果是,我可以录制新的1-2秒录制没有通过测试的时间

现在我的问题是测试。我现在做的基本上是设置一个阈值,所以基本上看起来是这样的:

for(uint32_t i = 0; i < SAMPLE_RATE * NUM_SECONDS; i++) {
    if(buffer[i] > threshold)
        return true;
}
return false;
for(uint32\u t i=0;i阈值)
返回true;
}
返回false;
在我用一个非常弱的麦克风在笔记本电脑上测试应用程序之前,一切都很好。问题是,在一个像样的内置麦克风上,背景噪音(基本上没有发生任何事情)的“响度”(或更像是采样值)等于130,而当你说话时,取决于你离麦克风的距离,该值会上升到160-135(近-远)。但有一点不同,你可以跨过门槛

问题是,使用弱麦克风时,值似乎不会改变。它保持在130(尽管它可能时不时地移动一点)

现在,我的猜测是我缺乏精确性。但我用16位录音。甚至可以记录超过16位的数据吗?(例如,浮动或双精度) 例如,当弱麦克风用户在skype上讲话时,您可以听到他说话的声音,因此我认为这是一个精度问题(弱麦克风很难检测声音,因此我假设默认噪声值为130,当有人讲话时,它会上升到130.2左右)


有什么建议吗?

您的样本值是什么类型的(130对我们意味着什么)?你可能会也可能不会观察到正常的行为。便宜的话筒动态范围差/信噪比差,而且无法硬编码门阈值。它必须由用户手动校准或通过分析检测。我以16位记录,因此样本为16位整数(int16)。我不是硬编码的大门-它是由用户调整。尽管如此,即使数值几乎相同(130-131),你还是可以听到讲话。我想这与声音的工作原理有关,而且它不容易被察觉?(与设置阈值不同,也许我应该查找偏移量很大的值?(130131130131)用于录制声音(130130130…)如果没有声音可录制?除非麦克风增益设置非常低,否则您应该检测到更大的值。16位是
-32768
+32767
。即使是较差的麦克风在放大时也应该具有更高的信噪比。可以通过高噪声听到安静的信号,但您描述的信噪比会异常差。您应该uld也会检查错误,因为您检测到的数字可能不正确。我的电脑上的值范围为140到190(内置麦克风)。不太确定我是否可能做错了什么。毕竟,一切都正常,说话时值也会改变。这里不太确定,但我想这段代码可以吗?它使我能够重用缓冲区,并在每次录制2秒后再次开始录制。除此之外,不太确定可能是什么问题。我想我应该这样做试着通过噪音水平来检测声音。可能是麦克风只需要提升(采样前)。有些麦克风就是这样。一般来说,你不需要为这种不寻常的情况准备软件。麦克风不好的人需要禁用此功能。如果这是你唯一的测试麦克风,它将阻碍开发。如果麦克风是问题所在,就没有优雅的编程方法。