Leave Your Message
หมวดข่าว
ข่าวเด่น

【โอเพ่นซอร์ส】การควบคุมเสียงสะท้อนและเสียงสะท้อนสำหรับไมโครโฟนคอนโซลมิกซ์ที่ใช้ T5L

8 มกราคม 2568

--จาก ดวิน ฟอรั่มนักพัฒนา

วันนี้เรามีความยินดีที่จะนำเสนอเคสโอเพนซอร์สที่ได้รับรางวัลจาก DWIN Developer Forum: ระบบควบคุมเสียงสะท้อนและเสียงสะท้อนสำหรับไมโครโฟนคอนโซลมิกซ์ที่ใช้ชิป T5L วิศวกรของเราใช้จอแสดงผลความละเอียด 800x480 เพื่อโต้ตอบกับบอร์ดพัฒนาเสียงสะท้อนผ่าน UART 4 ​​ของ T5L ทำให้สามารถปรับพารามิเตอร์เสียงที่สำคัญต่างๆ ได้อย่างแม่นยำ เช่น เสียงสะท้อน เสียงสะท้อน เสียงเปียก เสียงแห้ง เสียงอะคูสติก เสียงสลาย และความล่าช้า เพื่อเอฟเฟกต์เสียงที่เหนือกว่า

[วัสดุ UI]

10.png

11.png

13.png

[การออกแบบโครงการ GUI]

12.png

-โครงการ C51-

(1) โปรแกรมหลักสำหรับหน้าจอมีดังนี้:

ว่างเปล่า main(){

INIT_CPU();//การเริ่มต้นระบบ

PORT_Init();//เริ่มต้นพอร์ต IO

T0_Init();//เริ่มต้นตัวจับเวลา 0

T2_Init();//เริ่มต้นตัวจับเวลา 2

my_UART4_Init(115200);

uart_init();//เริ่มต้นพอร์ตซีเรียล

ws2812_writ_byte(8);//เริ่มต้นไฟ LED

RetMicSet();

ความล่าช้า_ms(1000);

เปลี่ยนหน้า(1);

ขณะที่(1){

Uart_Handle_all()

OneMsHandle();//1Ms แต่ละครั้ง

ด้ามจับ TenMs();

Read_0xF00();//อัปโหลดข้อมูลอัตโนมัติ

-

-

void TenMsHandle(void)

-

ถ้า(!TenmsFlag)

กลับ;

TenmsFlag=0;

ฮันเอ็กซ์_ลอว์();

ฮันเอ็กซ์_ดราย();

ฮุนเอ็กซ์_เว่ยอิง();

HunX_ShuaiJian();

HunX_สวิตช์();

เอคโค่_เปียก();

เอคโค่_แห้ง();

เอคโค่_ดีเลย์();

Echo_ShuaiJian();

สวิตช์เอคโค่();

-

void HunX_Wet(void)

-

u16readst=0;

readst=Read_Dgus(0x1200);

ถ้า(readst==Mic_Set.MicWetNum)

กลับ;

Mic_Set.MicWetNum=ครั้งที่อ่าน;

ส่งเอฟเฟกต์ไมค์(Mic_Set.MicWetNum*10,

Mic_Set.MicDryNum*10,

Mic_Set.MicDiffNum*5,

Mic_Set.MicDecayNum*5,

Mic_Set.HunXiangSW);

 

(2) พารามิเตอร์ที่เกี่ยวข้องกับเสียงสะท้อนมีดังนี้

#ถ้า 1

intreverb_parameter_val (u16 เปียก, u16 แห้ง, การแพร่กระจาย u8, u8 การสลายตัวของปัจจัย,

u8 is_bypass, u8 idmode)

-

#ถ้ากำหนด (TCFG_MIC_EFFECT_ENABLE)&& TCFG_MIC_EFFECT_ENABLE

#ถ้า 1

u8 mode_id = idโหมด+5;

Plate_reverb_TOOL_SET *parmt = &eff_mode[mode_id - mic_mode_seq0].plate_reverb_parm;

parmt->parm.wet=เปียก;

parmt->parm.dry=แห้ง;

parmt->parm.diffusion=การแพร่กระจาย;

parmt->parm.decayfactor=decayfactor;

พารามิเตอร์->is_bypass=is_bypass;

plate_reverb_update_parm(&parmt->parm, parmt->is_bypass);

#เอลิฟ 1

u8 mode_id = idโหมด+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=delay_ms;

echo_updata_parm(&parmt->parm, parmt->is_bypass);

#elif 0//PARM_DEBUG

ECHO_PARM_SET *parm = &parmt->parm;

log_debug("ความล่าช้า%d, การสลายตัว%d, เปิดใช้งานการกรอง%d, การตัด lpf%d, การเพิ่มความชื้น%d, การเพิ่มความชื้น%d\n",

พาร์ม->ดีเลย์, พาร์ม->ดีแควัล, พาร์ม->ฟิลท์_เอนเบิล, พาร์ม->lpf_cutoff, พาร์ม->เว็ตเกน, พาร์ม->ดรายเกน);

#สิ้นสุด

#สิ้นสุด

กลับ 0;

-

 

(3) พารามิเตอร์ที่เกี่ยวข้องกับเสียงสะท้อนมีดังต่อไปนี้:

int Echo_parameter_val(u16 เปียก, u16 แห้ง, u16 หน่วงเวลา, u16 ปัจจัยการสลายตัว,

u16 is_bypass, u16 idmode)

-

#ถ้ากำหนด (TCFG_MIC_EFFECT_ENABLE) และ TCFG_MIC_EFFECT_ENABLE

#ถ้าTCFG_MIC_EFFECT_SEL==MIC_EFFECT_REVERB_ECHO

u8 mode_id = idโหมด+5;

EF_ECHO_TOOL_SET*parmt = &eff_mode[mode_id - mic_mode_seq0].echo_parm;

parmt->parm.wetgain=เปียก;

parmt->parm.sixty=แห้ง;

parmt->parm.delay=ความล่าช้า;

parmt->parm.decayval=decayfactor;

พารามิเตอร์->is_bypass=is_bypass;

echo_updata_parm(&parmt->parm, parmt->is_bypass);

#สิ้นสุด

กลับ 0;

#สิ้นสุด

-