杰里之播正玄波声连续调音量有杂音篇

1.固定模拟音量,音量键调数字音量。
set_sys_vol 初始化的时候用这个函数设置最大等级。
屏 蔽 调 音 量 处 理 里 面 的 set_sys_vol 这 个 设 置 模 拟 音 量 的 函 数 , 直 接 设 置 音 量 数 字 等 级
sound.digital_fade_vol_l。
2.如下代码,替换 void digital_vol_ctrl(void *buffer, u32 len, u8 analog_vol)函数里面的内容
volatile u16 last_val_temp = 16000;
AT_AUDIO
void digital_vol_ctrl(void *buffer, u32 len, u8 analog_vol)
{
s32 valuetemp;
u16 data_temp = 0;
u32 i;
u8 flag;
u16 curtabvol;
u16 curtabvor;
u16 fade_vol = sound.vol.digital_vol_l;
static u16 cnt;
s16 *buf = buffer;
len >>= 1;
if (sound.digital_fade == D_FADE_IN) {
sound.digital_fade_vol_l++;
if (sound.digital_fade_vol_l >= sound.vol.digital_vol_l) {
sound.digital_fade_vol_l = sound.vol.digital_vol_l;
sound.digital_fade = D_FADE_NULL;
}
} else if (sound.digital_fade == D_FADE_OUT) {
if (sound.digital_fade_vol_l) {
sound.digital_fade_vol_l–;
if (sound.digital_fade_vol_l == 0) {
sound.digital_fade = D_FADE_NULL;
}
}
}
sound.digital_fade_vol_l = analog_vol;
sound.digital_fade_vol_r = sound.digital_fade_vol_l;
if (analog_vol) {
// putchar(’.’);
curtabvol = digital_vol_tab[sound.digital_fade_vol_l];
curtabvor = digital_vol_tab[sound.digital_fade_vol_r];
} else {
// putchar(‘x’);
curtabvol = 0;
curtabvor = 0;
}
for (i = 0; i < len; i += 2) {
///left channel
valuetemp = buf[i];
valuetemp = (valuetemp * last_val_temp) >> 14 ;
// valuetemp = (valuetemp * curtabvol) >> 14 ;
if (valuetemp < -32768) {
valuetemp = -32768;
} else if (valuetemp > 32767) {
valuetemp = 32767;
}
buf[i] = (s16)valuetemp;
///right channel
valuetemp = buf[i + 1];
valuetemp = (valuetemp * last_val_temp) >> 14 ;
// valuetemp = (valuetemp * curtabvor) >> 14 ;
if (valuetemp < -32768) {
valuetemp = -32768;
} else if (valuetemp > 32767) {
valuetemp = 32767;
}
buf[i + 1] = (s16)valuetemp;
}
cnt++;
if(last_val_temp < digital_vol_tab[sound.digital_fade_vol_r])
{
if(sound.digital_fade_vol_r < 5)
{
if(cnt%2 == 0)
last_val_temp += 1;
}
else if(sound.digital_fade_vol_r < 10)
{
last_val_temp += 1;
}
else if(sound.digital_fade_vol_r < 15)
{
last_val_temp += 2;
}
else if(sound.digital_fade_vol_r < 20)
{
last_val_temp += 4;
}
else if(sound.digital_fade_vol_r < 25)
{
last_val_temp += 7;
}
else
{
last_val_temp += 10;
}
}
else if(last_val_temp > digital_vol_tab[sound.digital_fade_vol_r])
{
valuetemp = last_val_temp-digital_vol_tab[sound.digital_fade_vol_r];
if((sound.digital_fade_vol_r > 25) || (valuetemp > 1500))
{
last_val_temp -= 10;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 750))
{
last_val_temp -= 7;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 300))
{
last_val_temp -= 4;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 100))
{
last_val_temp -= 2;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 50))
{
last_val_temp -= 1;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 20))
{
if(cnt%2 == 0)
last_val_temp -= 1;
}
}
}

你可能感兴趣的:(杰里之播正玄波声连续调音量有杂音篇)