Android 如何从原始pcm数据计算幅值?
我的Android应用程序定期从扬声器捕获原始pcm音频数据。数据包大小为128字节Android 如何从原始pcm数据计算幅值?,android,pcm,waveform,Android,Pcm,Waveform,我的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.leng
当没有音频时,数据包中的所有字节都包含-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方法接收数据
提前感谢您的帮助。当没有音频时,数据包中的所有字节都包含-128的值。有音频时,字节的最大值为+127。听起来很错误,好像您误译了数据格式。谢谢您的帮助。克里斯。我也怀疑我没有正确解释数据格式。我有一种感觉,我可能必须对数据进行FFT。我建议您在播放中频正弦波时捕获一些数据,并将其绘制成图形,以查看这些值是否真的如您所相信的那样。