【Código abierto】Control de reverberación y eco para micrófono de consola de mezclas basado en T5L
--De DWIN Foro de desarrolladores
Nos complace presentar hoy un caso de código abierto galardonado del Foro de Desarrolladores DWIN: control de reverberación y eco para un micrófono de mesa de mezclas basado en el chip T5L. Nuestro ingeniero utiliza una pantalla con una resolución de 800x480 para interactuar con la placa de desarrollo de reverberación a través del UART 4 del T5L, lo que permite un ajuste preciso de parámetros de audio críticos como reverberación, eco, sonido húmedo, sonido seco, acústica, decaimiento y retardo para obtener efectos de audio superiores.
[Materiales de interfaz de usuario]



[Diseño de proyecto GUI]

【Proyecto C51】
(1) El programa principal de la pantalla es el siguiente:
vacío principal(){
INIT_CPU();//Inicialización del sistema
PORT_Init();//Inicializar el puerto de E/S
T0_Init();//Inicializar el temporizador 0
T2_Init();//Inicializar el temporizador 2
mi_UART4_Init(115200);
uart_init();//Inicializar puerto serie
ws2812_writ_byte(8);//Inicializar luz LED
RetMicSet();
retraso_ms(1000);
CambiarPágina(1);
mientras(1){
Uart_Manejar_todos();
OneMsHandle();//1Ms cada vez
DiezMsHandle();
Read_0xF00();//Carga automática de datos
}
}
void TenMsHandle(vacío)
{
si(!TenmsFlag)
devolver;
TenmsFlag=0;
Ley HunX();
HunX_Seco();
HunX_WeiYing();
HunX_ShuaiJian();
HunX_Switch();
Eco_Mojado();
Eco_Seco();
Retraso de eco();
Echo_ShuaiJian();
Interruptor de eco();
}
vacío HunX_Wet(vacío)
{
u16readst=0;
readst=Leer_Dgus(0x1200);
si(readst==Mic_Set.MicWetNum)
devolver;
Mic_Set.MicWetNum=lectura;
MicEffectSend(Mic_Set.MicWetNum*10,
Conjunto de micrófono.MicDryNum*10,
Mic_Set.MicDiffNum*5,
Mic_Set.MicDecayNum*5,
Conjunto de micrófonos.HunXiangSW);
(2) Los parámetros relacionados con la reverberación son los siguientes
#si 1
intreverb_parameter_val(u16 húmedo,u16 seco,u8 difusión,u8 factor de descomposición,
u8 es_bypass,u8 idmode)
{
#si está definido(TCFG_MIC_EFFECT_ENABLE)&& TCFG_MIC_EFFECT_ENABLE
#si 1
u8 modo_id = idmodo+5;
Conjunto de herramientas de reverberación de placa *parmt = &eff_mode[id_modo - seq0_modo_mic].parámetro_de_reverberación_de_placa;
parmt->parm.wet=mojado;
parmt->parm.dry=seco;
parmt->parm.diffusion=difusión;
parmt->parm.decayfactor=factor de decaimiento;
parmt->is_bypass=es_bypass;
plate_reverb_update_parm(&parmt->parm, parmt->is_bypass);
#elif 1
u8 modo_id = idmodo+5;
//memcpy(&eff_mode[mode_id - mic_mode_seq0].echo_parm,&packet->data[1], sizeof(EF_ECHO_TOOL_SET));
EF_ECHO_TOOL_SET *parmt = &eff_mode[mode_id -mic_mode_seq0].echo_parm;
parmt->parm.delay=retraso_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 decaimiento %d, habilitación de filtro %d, corte lpf %d, ganancia húmeda %d, ganancia seca %d\n",
parm->delay, parm->decayval, parm->filt_enable, parm->lpf_cutoff, parm->wetgain, parm->drygain);
#finsi
#finsi
devuelve 0;
}
(3) Los parámetros relacionados con el eco son los siguientes:
int Echo_parameter_val(u16 húmedo,u16 seco,u16 retardo,u16 factor de decaimiento,
u16 is_bypass,u16 idmode)
{
#ifdefined(TCFG_EFECTO_MICROONDAS_HABILITAR) &&TCFG_EFECTO_MICROONDAS_HABILITAR
#ifTCFG_MIC_EFFECT_SEL==MIC_EFFECT_REVERB_ECHO
u8 modo_id = idmodo+5;
EF_ECHO_TOOL_SET*parmt = &eff_mode[id_modo - mic_mode_seq0].echo_parm;
parmt->parm.wetgain=mojado;
parmt->parm.sixty=seco;
parmt->parm.delay=retraso;
parmt->parm.decayval=factor de decaimiento;
parmt->is_bypass=es_bypass;
echo_updata_parm(&parmt->parm, parmt->is_bypass);
#finsi
devuelve 0;
#finsi
}





