#define ABS(x) (x > 0 ? x : (-x))
int audio_output_data_db_calc_simple(short *data, unsigned short len,unsigned char channels)
{
//长度转换,如果长度是u8 需要/2
unsigned short points = len / 2;
unsigned short user_sample_rate = 16000;
signed int calc_point = user_sample_rate/50;
static signed int data_cnt = 0;
static signed int sum[4] = {0,0,0,0};
static int average_value;
int index = 0; for(index = 0; index < points; index+=channels) { //计算数值总和 switch (channels) { case 4: sum[3] += ABS(data[index+3]); case 3: sum[2] += ABS(data[index+2]); case 2: sum[1] += ABS(data[index+1]); case 1: sum[0] += ABS(data[index]); break; default: sum[0] += ABS(data[index]); break; } data_cnt++; if(data_cnt>=calc_point) { //计算各通道取平均 average_value= (sum[0]+sum[1]+sum[2]+sum[3])/(channels*calc_point); //printf("average_value:%d\n",average_value); sum[0] = 0; sum[1] = 0; sum[2] = 0; sum[3] = 0; data_cnt = 0; } } return average_value;}