標題: 控制不同EQ的增益,達到控制不同場景的效果 [打印本頁]
作者: 怪盜kid 時間: 2025-8-6 16:00
標題: 控制不同EQ的增益,達到控制不同場景的效果
通過控制不同EQ的增益,達到控制不同場景的效果
效果視頻如下:
https://v.youku.com/v_show/id_XNjQ4NTc2NjQzMg==.html
界面如下:
界面代碼如下:
void main(){
INIT_CPU(); //系統(tǒng)初始化
PORT_Init();//IO口初始化
T0_Init();//定時器0初始化
T2_Init();//定時器2初始化 my_UART4_Init(115200);
uart_init();//串口初始化
ws2812_writ_byte(8); //LED初始化
resetEQValue();
delay_ms(1000);
ChangePage(1);
delay_ms(1000);
updateScreenEQPage(Nature_screen);
while(1){
Uart_Handle_all();
OneMsHandle();//1Ms一次
TenMsHandle();
Read_0xF00();//數(shù)據(jù)自動上傳
// data_change_sava();//數(shù)據(jù)改變自動保存
}
}
void updateScreenEQPage(EQ_Screen_e screen)
{
u8send[10*2][2];
u8i=0;
if(screen>=EQ_MaxScreen)
return;
for(i=0;i<10;i++)
{
EQv.Gain=ScreenGain[screen]+8;
UserReadEQ[1]=ScreenGain[screen]+8;
}
//更改上面顯示的增益
memset(send,0,sizeof(send));
for(i=0;i<10;i++)
{
sprintf(send[i*2],"%d",ScreenGain[screen]);
}
write_dgusii_vp(0x1300,send,20);
//更改滑條內容顯示
memset(send,0,sizeof(send));
for(i=0;i<10;i++)
{
send[1]=EQv.Gain;
}
write_dgusii_vp(0x1000,send,10);
//更改顯示場景文本
memset(send,0,sizeof(send));
switch(screen)
{
case Nature_screen:
sprintf(send,"自然");
break;
case YaoGun_screen:
sprintf(send,"搖滾");
break;
case LiuXing_screen:
sprintf(send,"流行");
break;
case JingDian_screen:
sprintf(send,"經典");
break;
}
write_dgusii_vp(0x1500,send,3);
//更新從機的增益
updateAllEQGain();
}
void EQChangeSend(void)
{
u8Read[10][2];
u8send[10][2];
u8i=0;
intgain=0;
memset(Read,0,sizeof(Read));
Read_Dgusii_Vp(0x1000,Read,10);
for(i=0;i<10;i++)
{
if(UserReadEQ[1]!=Read[1])
{
UserReadEQ[1]=Read[1];
//更改上面顯示的增益
gain=Read[1]-8;
memset(send,0,sizeof(send));
sprintf(send,"%d",gain);
write_dgusii_vp(0x1300+2*i,send,2);
EQSenddata(i,Read[1]);
break;
}
}
}
解碼板子代碼如下:
voidUserUartRecHandle(const uart_bus_t *uart_bus,u8 *data,u16 len)
{
u8 retdata[30];
u8 i=0;
struct eq_seg_info*tar_seg1;
u32 eq_name = 7;
if(data[0]!=DwinLocal_addr)
return;
switch(data[1])
{
case 1://設置音量
app_audio_direct_set_volume(data[2]);
retdata[i++]=0x15;
memcpy(&retdata[1],&data[1],len-1);
UserUartRetRec(uart_bus,retdata,len);
break;
case 0x0b://更新EQ值
if(data[2]>9)
break;
tar_seg1=&music_mode.eq_parm.seg[data[2]];
u16 fre1=data[3]<<8|data[4];
float gain1=((data[5]&0x7f)*100+data[6]);
gain1/=100;
if(data[5]>=0X80)
gain1=-gain1;
float Q1=(data[7]*100+data[8]);
Q1/=100;
tar_seg1->freq=fre1;
tar_seg1->gain=gain1;
tar_seg1->q=Q1;
cur_eq_set_update(eq_name, tar_seg1,get_eq_nsection(eq_name), 0);
#if 1
int gain=tar_seg1->gain*100;
int q=tar_seg1->q*100;
log_info("fre:%d,gain:%d.%d,Q/S:%d.%d",tar_seg1->freq,
gain/100,gain%100,
q/100,q%100);
#endif
break;
case 0x1b://更新指定增益
if(data[2]>9)
break;
tar_seg1=&music_mode.eq_parm.seg[data[2]];
tar_seg1->gain=data[3]-8;
cur_eq_set_update(eq_name, tar_seg1,get_eq_nsection(eq_name), 0);
#if 1
gain=tar_seg1->gain*100;
q=tar_seg1->q*100;
log_info("fre:%d,gain:%d.%d,Q/S:%d.%d",tar_seg1->freq,
gain/100,gain%100,
q/100,q%100);
#endif
break;
case 0x1C://更新指定增益
int k=0;
for(k=0;k<10;k++)
{
tar_seg1=&music_mode.eq_parm.seg[k];
tar_seg1->gain=data[2+k]-8;
cur_eq_set_update(eq_name, tar_seg1,get_eq_nsection(eq_name), 0);
#if 1
gain=tar_seg1->gain*100;
q=tar_seg1->q*100;
log_info("fre:%d,gain:%d.%d,Q/S:%d.%d",tar_seg1->freq,
gain/100,gain%100,
q/100,q%100);
#endif
}
break;
}
}
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |