【Ochiq kodli】T5L asosidagi aralashtirish konsoli mikrofonlari uchun reverb va echo boshqaruvi
——Dan DWIN Dasturchilar forumi
Bugun DWIN dasturchilar forumidan mukofotga sazovor bo'lgan ochiq kodli ishni taqdim etishdan mamnunmiz: T5L chipiga asoslangan konsol mikrofonini aralashtirish uchun reverb va echo boshqaruvi. Bizning muhandisimiz T5L ning UART 4 orqali reverb ishlab chiqish platasi bilan o'zaro ishlash uchun 800x480 o'lchamdagi displeydan foydalanadi, bu esa yuqori darajadagi audio effektlar uchun reverb, echo, nam tovush, quruq tovush, akustik, parchalanish va kechikish kabi muhim audio parametrlarini aniq sozlash imkonini beradi.
[UI materiallari]



[GUI loyihasini loyihalash]

【C51 loyihasi】
(1) Ekran uchun asosiy dastur quyidagicha:
void main() {
INIT_CPU(); // Tizimni ishga tushirish
PORT_Init();//I portini ishga tushirish
T0_Init();//0 taymerini ishga tushirish
T2_Init();//2-taymerni ishga tushirish
my_UART4_Init(115200);
uart_init();//Ketma-ket portni ishga tushiring
ws2812_writ_byte(8);//LED chiroqni ishga tushirish
RetMicSet();
kechikish_ms(1000);
Sahifani o'zgartirish(1);
while(1){
Uart_Handle_all();
OneMsHandle();//Har safar 1Ms
TenMsHandle();
Read_0xF00();//Ma'lumotlarni avtomatik yuklash
}
}
void TenMsHandle(void)
{
agar(!TenmsFlag)
qaytish;
TenmsFlag=0;
HunX_Law();
HunX_Dry();
HunX_WeiYing();
HunX_ShuaiJian();
HunX_Switch();
Echo_Wet();
Echo_Dry();
Echo_Delay();
Echo_ShuaiJian();
Echo_Switch();
}
void HunX_Wet(void)
{
u16readst=0;
readst=Read_Dgus(0x1200);
agar(readst==Mic_Set.MicWetNum)
qaytish;
Mic_Set.MicWetNum=o'qish;
MicEffectSend(Mic_Set.MicWetNum*10,
Mic_Set.MicDryNum*10,
Mic_Set.MicDiffNum*5,
Mic_Set.MicDecayNum*5,
Mic_Set.HunXiangSW);
(2) Reverb bilan bog'liq parametrlar quyidagicha
#agar 1 bo'lsa
intreverb_parameter_val(u16 nam, u16 quruq, u8 diffuziya, u8 dekayfaktor,
u8 aylanib o'tish, u8 idmode)
{
#agar aniqlangan bo'lsa(TCFG_MIC_EFFECT_ENABLE)&& TCFG_MIC_EFFECT_ENABLE
#agar 1 bo'lsa
u8 rejim_id = idmode+5;
Plate_reverb_TOOL_SET *parmt = &eff_mode[mode_id - mic_mode_seq0].plate_reverb_parm;
parmt->parm.wet=wet;
parmt->parm.dry=quruq;
parmt->parm.diffusion=diffuziya;
parmt->parm.decayfactor=decayfactor;
parmt->is_bypass=is_bypass;
plate_reverb_update_parm(&parmt->parm, parmt->is_bypass);
#elif 1
u8 rejim_id = idmode+5;
//memcpy(&eff_mode[mode_id - mic_mode_seq0].echo_parm,&packet->ma'lumotlar[1], sizeof(EF_ECHO_TOOL_SET));
EF_ECHO_TOOL_SET *parmt = &eff_mode[mode_id -mic_mode_seq0].echo_parm;
parmt->parm.delay=delay_ms;
echo_updata_parm(&parmt->parm, parmt->is_bypass);
#elif 0//PARM_DEBUG
ECHO_PARM_SET *parm = &parmt->parm;
log_debug("kechikish%d, decayval %d, filtr_enable %d, lpf_cutoff %d, wetgain %d, drygain %d\n",
parm->delay, parm->decayval,parm->filt_enable, parm->lpf_cutoff, parm->wetgain, parm->drygain);
#endif
#endif
0 ni qaytarish;
}
(3) Aks-sado bilan bog'liq parametrlar quyidagicha:
int Echo_parameter_val(u16 wet,u16 dry,u16 delay,u16 decayfactor,
u16 aylanib o'tish, u16 idmode)
{
#ifdefined(TCFG_MIC_EFFECT_ENABLE) &&TCFG_MIC_EFFECT_ENABLE
#ifTCFG_MIC_EFFECT_SEL==MIC_EFFECT_REVERB_ECHO
u8 rejim_id = idmode+5;
EF_ECHO_TOOL_SET*parmt = &eff_rejimi[rejim_id - mic_rejimi_seq0].echo_parm;
parmt->parm.wetgain=wet;
parmt->parm.oltmish=quruq;
parmt->parm.delay=kechikish;
parmt->parm.decayval=decayfactor;
parmt->is_bypass=is_bypass;
echo_updata_parm(&parmt->parm, parmt->is_bypass);
#endif
0 ni qaytarish;
#endif
}







