/单/双声道数字音量处理
// vol:0~16384(大于16384会把数据放大,有可能出现失真)
int user_audio_digital_vol_run(void *data, u32 len, u32 l_vol,u32 r_vol)
{
s32 valuetemp;
s16 *buf;
buf = data; //数据
len >>= 1; //byte to point //
for (u32 i = 0; i < len; i += 2) {
///left channel
valuetemp = buf[i];
if (valuetemp < 0) {
valuetemp = -valuetemp;
valuetemp = (valuetemp * l_vol) >> 14 ; //除以16384
valuetemp = -valuetemp;
} else {
valuetemp = (valuetemp * l_vol) >> 14 ;
}
if (valuetemp < -32768) {
valuetemp = -32768;
} else if (valuetemp > 32767) {
valuetemp = 32767;
}
buf[i] = (s16)valuetemp;
///right channel
valuetemp = buf[i + 1];
if (valuetemp < 0) {
valuetemp = -valuetemp;
valuetemp = (valuetemp * r_vol) >> 14 ;
valuetemp = -valuetemp;
} else {
valuetemp = (valuetemp * r_vol) >> 14 ;
}
if (valuetemp < -32768) {
valuetemp = -32768;
} else if (valuetemp > 32767) {
valuetemp = 32767;
}
buf[i + 1] = (s16)valuetemp;
}
return 0;
}