Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从原始pcm数据计算幅值?_Android_Pcm_Waveform - Fatal编程技术网

Android 如何从原始pcm数据计算幅值?

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

我的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方法接收数据


提前感谢您的帮助。

当没有音频时,数据包中的所有字节都包含-128的值。有音频时,字节的最大值为+127。听起来很错误,好像您误译了数据格式。谢谢您的帮助。克里斯。我也怀疑我没有正确解释数据格式。我有一种感觉,我可能必须对数据进行FFT。我建议您在播放中频正弦波时捕获一些数据,并将其绘制成图形,以查看这些值是否真的如您所相信的那样。