【Código aberto】Control de reverberación e eco para micrófono de consola de mesturas baseado en T5L
——De DWIN Foro de desenvolvedores
É para nós un pracer presentar hoxe un caso de código aberto galardoado do Foro de Desenvolvedores de DWIN: control de reverberación e eco para micrófono de consola de mesturas baseado no chip T5L. O noso enxeñeiro usa unha pantalla de resolución de 800x480 para interactuar coa placa de desenvolvemento de reverberación a través do UART 4 do T5L, o que permite un axuste preciso de parámetros de audio críticos como reverberación, eco, son húmido, son seco, acústica, decaemento e retardo para obter efectos de audio superiores.
[Materiais da IU]



[Deseño de proxectos de GUI]

【Proxecto C51】
(1) O programa principal para a pantalla é o seguinte:
baleiro principal(){
INIT_CPU(); //Inicialización do sistema
PORT_Init();//Inicializar o porto de E/S
T0_Init();//Inicializar o temporizador 0
T2_Init();//Inicializar o temporizador 2
meu_UART4_Init(115200);
uart_init(); // Inicializar o porto serie
ws2812_writ_byte(8);//Inicializar a luz LED
RetMicSet();
atraso_ms(1000);
CambiarPáxina(1);
mentres(1){
Uart_Xestionar_todo();
OneMsHandle();//1Ms cada vez
TenMsHandle();
Read_0xF00();//Carga automática de datos
}
}
baleiro TenMsHandle(baleiro)
{
se(!TenmsFlag)
retorno;
TenmsFlag=0;
HunX_Law();
HunX_Dry();
HunX_WeiYing();
HunX_ShuaiJian();
HunX_Switch();
Eco_Mollado();
Eco_Seco();
Eco_Delay();
Echo_ShuaiJian();
Eco_Interruptor();
}
baleiro HunX_Wet(baleiro)
{
u16readst=0;
ler_cd=Ler_Dgus(0x1200);
se (leerst==Conxunto_Mic.Número_Húmido_Mic)
retorno;
Mic_Set.MicWetNum=readst;
EnvíoEfectoMicrófono(Conxunto_Micrófono.NúmeroHúmidoMicrófono*10,
Conxunto_micrófono.NúmeroSecadoMicrófono*10,
Conxunto_micrófono.Número_diferencial_micrófono*5,
Conxunto_micrófono.NúmeroDecaementoMicrófono*5,
Mic_Set.HunXiangSW);
(2) Os parámetros relacionados coa reverberación son os seguintes
#se 1
intreverb_parameter_val(u16 wet,u16 dry,u8 diffusion,u8 decayfactor,
u8 é_desvío, u8 modo de identificación)
{
#se está definido(TCFG_MIC_EFFECT_ENABLE)&& TCFG_MIC_EFFECT_ENABLE
#se 1
u8 id_modo = idmodo+5;
CONXUNTO_DE_FERRAMENTINAS_DE_REVERBACIÓN_DE_Plata *parmt = &eff_mode[id_modo - secuencia_modo_micro0].plate_reverb_parm;
parmt->parm.wet=mollado;
parmt->parm.dry=seco;
parmt->parm.diffusion=difusión;
parmt->parm.factorDecaemento=factorDecaemento;
parámetro->é_derivada=é_derivada;
actualización_de_reverb_de_plate_parm(&parmt->parm, parmt->is_bypass);
#elif 1
u8 id_modo = idmodo+5;
//memcpy(&eff_mode[id_modo - mic_mode_seq0].echo_parm,&paquete->datos[1], tamaño(EF_ECHO_TOOL_SET));
EF_ECHO_TOOL_SET *parmt = &eff_mode[id_modo -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("retraso%d, valor de decaemento %d, activación_filtro %d, corte_lpf %d, ganancia_humedad %d, ganancia_seca %d\n",
parm->retardo, parm->decaimento, parm->activación_filtro, parm->corte_lpf, parm->ganancia_humedad, parm->ganancia_seca);
#endif
#endif
devolver 0;
}
(3) Os parámetros relacionados co eco son os seguintes:
int valor_do_parámetro_de_eco(u16 húmido,u16 seco,u16 atraso,u16 factor de decaemento,
u16 é_desvío, u16 modo_identificación)
{
#se definido(TCFG_MIC_EFFECT_ENABLE) &&TCFG_MIC_EFFECT_ENABLE
#seTCFG_MIC_EFFECT_SEL==MIC_EFFECT_REVERB_ECHO
u8 id_modo = idmodo+5;
EF_ECHO_TOOL_SET*parmt = &eff_mode[id_modo - secuencia_modo_micro0].echo_parm;
parmt->parm.wetgain=mollado;
parmt->parm.sesenta=seco;
parmt->parm.delay=atraso;
parmt->parm.decayval=factor de decadencia;
parámetro->é_derivada=é_derivada;
echo_updata_parm(&parmt->parm, parmt->is_bypass);
#endif
devolver 0;
#endif
}









