我的Android应用程序会定期从扬声器中捕获原始pcm音频数据。数据包大小为128字节。
当没有音频时,数据包中的所有字节都包含-128的值。当有音频时,一个字节的最大值是+127。
这是我的伪代码,用于计算幅度(介于0.0和1.0之间)。
long sum = 0;
for(int i=0;i<wave.length;i++) {
sum += ((int) wave[i] + 128);
}
float amp = ((float) sum)/((float) 256 * wave.length);
使用这种算法,无论我是轻声还是大声地说,振幅都不会发生太大变化。让我觉得这个算法不对。
我想知道我对振幅计算的理解是否正确。如果有人能给我一个更好的算法,我将不胜感激。
对于Android人员,我通过Visualizer.OnDataCaptureListener接口及其onWaveFormData方法接收数据。
提前感谢您的帮助。