Leave Your Message

【Código aberto】Control de reverberación e eco para micrófono de consola de mesturas baseado en T5L

2025-01-08

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

10.png

11.png

13.png

[Deseño de proxectos de GUI]

12.png

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

}