110,533
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 计算音量 适用16bit单通/8bit双通
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static double getVolume(byte[] buffer)
{
try
{
double sumVolume = 0.0;
double avgVolume = 0.0;
double volume = 0.0;
int length = buffer.Length;
for (int i = 0; i < length; i += 2)
{
int v1 = buffer[i] & 0xFF;
int v2 = buffer[i + 1] & 0xFF;
int temp = v1 + (v2 << 8);// 小端
if (temp >= 0x8000)
{
temp = 0xffff - temp;
}
sumVolume += Math.Abs(temp);
}
avgVolume = sumVolume / length / 2;
volume = Math.Log((1 + avgVolume), 10) * 10;
return volume;
}
catch (Exception ex)
{
// logger.Error(ex);
return 0;
}
}