Leave Your Message
Yangiliklar toifalari
Tanlangan yangiliklar

【Ochiq kodli】T5L asosidagi aralashtirish konsoli mikrofonlari uchun reverb va echo boshqaruvi

2025-01-08

——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]

10.png

11.png

13.png

[GUI loyihasini loyihalash]

12.png

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

}