Leave Your Message

【Código abierto】Control de reverberación y eco para micrófono de consola de mezclas basado en T5L

08-01-2025

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

10.png

11.png

13.png

[Diseño de proyecto GUI]

12.png

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

}