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



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

-โครงการ 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;
#สิ้นสุด
-





