我想确定音频信号的音量。
我找到了两个选项:
使用#1或#2是否有优势?
以下是我要做的事情: 我希望我的Android能够分析麦克风的音频。我希望设备检测到很大的噪音。输入是短[]。
答案 0 :(得分:2)
如果您使用最大幅度(2),那么您的音量水平将由单个样本(您甚至可能听不到)确定。在计算与您对声音响度的印象相关的值时,例如声压级或声功率级,您需要使用RMS(1)。
由于您的耳朵对所有频率都不是同样敏感,因此可以通过在信号上使用A-weighting来更好地关联您的感知。以八度音阶分割(滤波)信号,计算每个频段的RMS并应用A加权。
答案 1 :(得分:1)
如果你想检查音量,只需计算其dB值(我假设信号是标准化的,即1 ==最大电平):
level[n] = - 20 x log(1/signal[n]);
但是,检测音频噪音并非易事。最常见和最简单的技术是使用称为NoiseGate的算法,它基本上将信号电平与某个dB阈值进行比较 - 如果信号电平高于阈值,则输出归零。但它在实践中无法使用;平滑阈值必须有一些攻击和释放时间,否则它也会影响真实信号(音乐,语音)并产生某种削波。
检查Google,它会为您提供有关NoiseGate算法和噪音消除技术的大量资源:
http://en.wikipedia.org/wiki/Noise_gate
http://www.developer.com/java/other/article.php/3599661/Adaptive-Noise-Cancellation-using-Java.htm