From 8758151dcdb0f89e362dd297405a384d3a034380 Mon Sep 17 00:00:00 2001
From: chenlh <2008get@163.com>
Date: 星期三, 28 一月 2026 20:21:37 +0800
Subject: [PATCH] 天宫输入源模块设置时爆音及参数拷贝更新

---
 src/tg/tg_param_convert.cpp |  198 +++++++++++++++++++++++--------------------------
 1 files changed, 93 insertions(+), 105 deletions(-)

diff --git a/src/tg/tg_param_convert.cpp b/src/tg/tg_param_convert.cpp
index 4f3c400..0ce3246 100644
--- a/src/tg/tg_param_convert.cpp
+++ b/src/tg/tg_param_convert.cpp
@@ -57,19 +57,23 @@
 
 u32 tg_param_convert::InputParamCtrl(IModule* m, void* handle, int &plen)
 {
-	enum GainID {
+	enum Input_ID{
 		GAIN = 0x1,
 		MUTE,
 		SENSI,
 		PHANTOM,
+		TYPE,
 
-		PHASE = 9,
-		STEP,//-500~+500
-	};
+		FREQ,
+		LEVEL,
+		NAME,
+		PHASE,
+		STEP,
+		LINK,
+		CHANNEL_LEVEL,
 
-	enum PitchID {
-		PITCH_BYPASS = 0x1,//
-		PITCH_SEMITONES,//
+		INPUT_MIN,
+		INPUT_MAX,
 	};
 
 	if(handle == NULL) return 1;
@@ -84,9 +88,14 @@
 
 		val[1] = RESSIGNBIT(pInput->input[i].gain);  m->Ctrl(GAIN, val, 2);
 		val[1] = RESSIGNBIT(pInput->input[i].mute);  m->Ctrl(MUTE, val, 2);
+		val[1] = RESSIGNBIT(pInput->input[i].level);  m->Ctrl(LEVEL, val, 2);
 		val[1] = RESSIGNBIT(pInput->input[i].sensitivity);  m->Ctrl(SENSI, val, 2);
 		val[1] = RESSIGNBIT(pInput->input[i].phant);  m->Ctrl(PHANTOM, val, 2);
 		val[1] = RESSIGNBIT(pInput->input[i].phase);  m->Ctrl(PHASE, val, 2);
+
+		val[1] = RESSIGNBIT(pInput->input[i].type);  m->Ctrl(TYPE, val, 2);
+		val[1] = RESSIGNBIT(pInput->input[i].freq);  m->Ctrl(FREQ, val, 2);
+		val[1] = RESSIGNBIT(pInput->input[i].level);  m->Ctrl(LEVEL, val, 2);
 	}
 
 	return 0;
@@ -291,7 +300,7 @@
 
 		for (i =0 ;i < input_num_channels; i++) {
 			val[0] = i; val[1] = 0;
-			val[2] = (pducker->mask[i/15]>>(i&15))&0x1;  m->Ctrl(MIXER_SWITCH, val, 3);
+			val[2] = (pducker->mask[i/16]>>(i&15))&0x1;  m->Ctrl(MIXER_SWITCH, val, 3);
 
 		}
 	}
@@ -303,8 +312,9 @@
 
 		for(i=0 ;i < pmixer->output_num ;i ++) {
 			for(j =0 ;j < pmixer->input_num ;j++) {
-				val[0] = j;  val[1] = i ; val[2] = (pmixer->input_mask[i][j/15]>>(j&15))&0x1;  m->Ctrl(MIXER_SWITCH, val, 3);
-				val[0] = j;  val[1] = i ; val[2] = RESSIGNBIT(pmixer->input_gain[i][j]);  m->Ctrl(MIXER_GAIN, val, 3);
+				val[0] = j;  val[1] = i; val[2] = (pmixer->input_mask[i][j/16]>>(j&15))&0x1;  m->Ctrl(MIXER_SWITCH, val, 3);
+//				dbg_printf("oich %d %d= %x %x %x\n", i,j, val[0],val[1],val[2]);
+				val[0] = j;  val[1] = i; val[2] = RESSIGNBIT(pmixer->input_gain[i][j]);  m->Ctrl(MIXER_GAIN, val, 3);
 			}
 		}
 	}
@@ -364,23 +374,6 @@
 
 u32 tg_param_convert::FeedbackParamCtrl(IModule* m, void* handle, int &plen)
 {
-//	enum NHSID{
-//		FB_BYPASS = 0x1,
-//		FB_PANIC,
-//		FB_THRS,
-//		FB_FLT_DEPTH,
-//		FB_STEP,
-//		FB_FLT_Q,
-//		FB_RECYCLETIME,
-//
-//		FB_FLT_FREQ,
-//		FB_FLT_GAIN,
-//		FB_FLT_TYPE,
-//
-//		FB_CLEAR, //
-//		FB_CLEAR_DYNAMIC,//
-//	};
-
 	enum NHSID{
 		FB_BYPASS= 0x1,
 		FB_FLT_FREQ,
@@ -389,7 +382,6 @@
 		FB_FLT_TYPE,
 
 		FB_STEP,
-
 		FB_CLEAR,
 		FB_PANIC,
 		FB_FLT_DEPTH,
@@ -502,12 +494,13 @@
 
 	if(handle == NULL) return 1;
 
-	short val[4];
+	short val[4] = {0,0,0,0};
 	ptag_aec paec = (ptag_aec)handle;
 	plen = sizeof(tag_aec);
 
-	val[0] = paec->bypass;  m->Ctrl(BYPASS, val, 1);
-	val[0] = paec->mode;  m->Ctrl(NLPLEVEL, val, 1);
+	val[1] = paec->bypass;  m->Ctrl(BYPASS, val, 2);
+	val[1] = paec->mode;  m->Ctrl(NLPLEVEL, val, 2);
+	val[1] = 2; m->Ctrl(NSMODE, val, 2);
 
 	return 0;
 }
@@ -627,40 +620,41 @@
 
 u32 tg_param_convert::DuckerParamCtrl(IModule* m, void* handle, int &plen)
 {
-	enum DuckerID {
-		DUCKER_BYPASS = 0x1,
-		DUCKER_THRESHOLD,
-		DUCKER_DEPTH,
-		DUCKER_ATTACK,
-		DUCKER_HOLD,
-		DUCKER_RELEASE,
-		DUCKER_SIDE_GAIN,
-		DUCKER_SIDE_MUTE,
-	};
-
-	enum MixerID {
-		MIXER_SWITCH = 0x1,
-		MIXER_GAIN,
-		MIXER_DELAY,
-		MIXER_INPUT_MUTE,
-		MIXER_OUTPUT_MUTE,
+	enum DuckerWithMixID {
+		DUCKER_BYPASS = 0x1, //val[0]:0-取消bypass,1-使能bypass
+		DUCKER_THRESHOLD,//val[0]:阈值,乘以100,范围:-6000~0
+		DUCKER_DEPTH,//val[0]:深度,乘以100,范围:-7200~0
+		DUCKER_ATTACK,//val[0]:建立时间,范围:1~2000ms
+		DUCKER_HOLD,//val[0]:保持时间,范围:1~10000ms
+		DUCKER_RELEASE,//val[0]:释放时间,范围:1~60000ms
+		DUCKER_SIDE_GAIN,//val[0]:侧链增益,乘以100,范围:-7200~1200
+		DUCKER_SIDE_MUTE,//val[0]:侧链静音,0-取消静音,1-静音
+		DUCKER_SIDE_MIX,//val[0]:侧链混音,0-取消混音,1-混音
 	};
 
 	if(handle == NULL) return 1;
 
-	int i;
+	u16 input_num_channels, output_num_channels;
+	VarState var = VarState::GetInstance();
+	hw_adapter_t* adpater = var.get_hw_adapter();
+	adpater->get_channel_num(&input_num_channels, &output_num_channels);
 	short val[4];
-	ptag_ducker pducker = (ptag_ducker)handle;
+	ptag_ducker pduck = (ptag_ducker)handle;
 	plen = sizeof(tag_ducker);
 
-	val[0] = RESSIGNBIT(pducker->bypass);  m->Ctrl(DUCKER_BYPASS, val, 1);
-	val[0] = RESSIGNBIT(pducker->threshold);  m->Ctrl(DUCKER_THRESHOLD, val, 1);
-	val[0] = RESSIGNBIT(pducker->depth);  m->Ctrl(DUCKER_DEPTH, val, 1);
-	val[0] = RESSIGNBIT(pducker->attacktime);  m->Ctrl(DUCKER_ATTACK, val, 1);
-	val[0] = RESSIGNBIT(pducker->holdtime);  m->Ctrl(DUCKER_HOLD, val, 1);
-	val[0] = RESSIGNBIT(pducker->releasetime);  m->Ctrl(DUCKER_RELEASE, val, 1);
-	val[0] = RESSIGNBIT(pducker->side_gain);  m->Ctrl(DUCKER_SIDE_GAIN, val, 1);
-	val[0] = RESSIGNBIT(pducker->mute);  m->Ctrl(DUCKER_SIDE_MUTE, val, 1);
+	val[0] = RESSIGNBIT(pduck->bypass);  m->Ctrl(DUCKER_BYPASS, val, 1);
+	val[0] = RESSIGNBIT(pduck->threshold);  m->Ctrl(DUCKER_THRESHOLD, val, 1);
+	val[0] = RESSIGNBIT(pduck->depth);  m->Ctrl(DUCKER_DEPTH, val, 1);
+	val[0] = RESSIGNBIT(pduck->attacktime);  m->Ctrl(DUCKER_ATTACK, val, 1);
+	val[0] = RESSIGNBIT(pduck->holdtime);  m->Ctrl(DUCKER_HOLD, val, 1);
+	val[0] = RESSIGNBIT(pduck->releasetime);  m->Ctrl(DUCKER_RELEASE, val, 1);
+	val[0] = RESSIGNBIT(pduck->side_gain);  m->Ctrl(DUCKER_SIDE_GAIN, val, 1);
+	val[0] = RESSIGNBIT(pduck->mute);  m->Ctrl(DUCKER_SIDE_MUTE, val, 1);
+
+	for (s16 i =0 ;i < input_num_channels; i++) {
+		val[0] = i;
+		val[1] = (pduck->mask[i/16]>>(i&15))&0x1;  m->Ctrl(DUCKER_SIDE_MIX, val, 2);
+	}
 
 	return 0;
 }
@@ -694,24 +688,16 @@
 
 u32 tg_param_convert::SplParamCtrl(IModule* m, void* handle, int &plen)
 {
-	enum ContinousSPLID {
-		SPL_BYPASS = 0x1,
+	enum ContSplWithMixID {
+		SPLMIX_BYPASS = 0x1, //val[0]:0-取消bypass,1-bypass
 		SPL_MAX_GAIN,
 		SPL_MIN_GAIN,
 		SPL_SENSE_RATIO,
-		SPL_UPSPEED,
-		SPL_DOWNSPEED,
+		SPL_SPEED,
 		SPL_TRIM,
 		SPL_THR,
 		SPL_DISTANCE,
-	};
-
-	enum MixerID {
-		MIXER_SWITCH = 0x1,
-		MIXER_GAIN,
-		MIXER_DELAY,
-		MIXER_INPUT_MUTE,
-		MIXER_OUTPUT_MUTE,
+		SPL_MIX,
 	};
 
 	if(handle == NULL) return 1;
@@ -719,7 +705,6 @@
 	u16 input_num_channels, output_num_channels ;
 	VarState var = VarState::GetInstance();
 	hw_adapter_t* adpater = var.get_hw_adapter();
-
 	adpater->get_channel_num(&input_num_channels, &output_num_channels);
 
 	int i ,j;
@@ -731,15 +716,14 @@
 	val[0] = RESSIGNBIT(pspl->maxgain);  m->Ctrl(SPL_MAX_GAIN, val, 1);
 	val[0] = RESSIGNBIT(pspl->mingain);  m->Ctrl(SPL_MIN_GAIN, val, 1);
 	val[0] = RESSIGNBIT(pspl->sense_ratio);  m->Ctrl(SPL_SENSE_RATIO, val, 1);
-	val[0] = RESSIGNBIT(pspl->speed);  m->Ctrl(SPL_UPSPEED, val, 1);
-	val[0] = RESSIGNBIT(pspl->speed);  m->Ctrl(SPL_DOWNSPEED, val, 1);
+	val[0] = RESSIGNBIT(pspl->speed);  m->Ctrl(SPL_SPEED, val, 1);
 	val[0] = RESSIGNBIT(pspl->trim);  m->Ctrl(SPL_TRIM, val, 1);
 	val[0] = RESSIGNBIT(pspl->noise_thr);  m->Ctrl(SPL_THR, val, 1);
 	val[0] = RESSIGNBIT(pspl->distance);  m->Ctrl(SPL_DISTANCE, val, 1);
 
 	for (i =0 ;i < input_num_channels; i++) {
-		val[0] = i; val[1] = 0;
-		val[2] = (pspl->mask[i/15]>>(i&15))&0x1 ;  m->Ctrl(MIXER_SWITCH, val, 3);
+		val[0] = i;
+		val[1] = (pspl->mask[i/16]>>(i&15))&0x1 ;  m->Ctrl(SPL_MIX, val, 2);
 	}
 
 	return 0;
@@ -748,45 +732,25 @@
 
 u32 tg_param_convert::GeqParamCtrl(IModule* m, void* handle, int &plen)
 {
-	const s16 fc_10[]={31, 63, 125, 250, 500, 1000, 2000, 4000, 8000, 16000 };
-	const s16 fc_15[]={25, 40, 63, 100, 160, 250, 400, 630, 1000, 1600, 2500, 4000, 6300, 10000, 16000};
-	const s16 fc_31[]={20, 25,31, 40, 50, 63, 80, 100, 125, 160, 200,250, 315, 400, 500, 630, 800, 1000, 1250, 1600,2000,2500, 3150, 4000, 5000, 6300, 8000, 10000,12500, 16000,20000};
-
-	enum EQID{
-		EQ_BYPASS_ALL = 0x1,
-		EQ_BYPASS,
-		EQ_FREQ,
-		EQ_GAIN,
-		EQ_QVALUE,
-		EQ_TYPE,
+	enum GEQID{
+		GEQ_BYPASS_ALL = 0x1,//val[0]: 0-取消bypass, 1- 使能bypass
+		GEQ_QVALUE,//val[0]: 1-narrow, 2-normal, 3-wide
+		GEQ_GAIN,//val[0]: 段序号,val[1] : 增益,乘以100,范围:-4800~2400
+		GEQ_CLEAR,//val[0]: 复位EQ参数
 	};
 
 	if(handle == NULL) return 1;
 
 	int i;
 	short val[4];
-	ptag_geq pgeq = (ptag_geq)handle ;
+	ptag_geq geq = (ptag_geq)handle;
 	plen = sizeof(tag_geq);
-	const s16 *pfc = fc_31;
 
-	switch(pgeq->nsections){
-	case 10:
-	  pfc = fc_10;
-	  break;
-	case 15:
-	  pfc = fc_15;
-	  break;
-	default:
-	  pfc = fc_31;
-	  break;
-	}
+	val[0] = geq->bypass;  m->Ctrl(EQ_BYPASS_ALL, val, 1);
+	val[0] = geq->q_index;  m->Ctrl(GEQ_QVALUE, val, 1);
 
-	val[0] = pgeq->bypass;  m->Ctrl(EQ_BYPASS_ALL, val, 1);
-	val[0] = pgeq->q;  m->Ctrl(EQ_QVALUE, val, 1);
-
-	for(i=0 ;i < pgeq->nsections ;i++) {
-		val[0] = i; val[1] = RESSIGNBIT(pgeq->eq_attr[i].gain);  m->Ctrl(EQ_GAIN, val, 2);
-		val[0] = i; val[1] = pfc[i];  m->Ctrl(EQ_FREQ, val, 2);
+	for(i=0 ;i < geq->nsections ;i++) {
+		val[0] = i; val[1] = RESSIGNBIT(geq->eq_attr[i].gain);  m->Ctrl(GEQ_GAIN, val, 2);
 	}
 
 	return 0;
@@ -848,6 +812,30 @@
 	return 0;
 }
 
+u32 tg_param_convert::FirParamCtrl(IModule* m, void* handle, int &plen)
+{
+	enum FIRID {
+		FIR_BYPASS = 0x1,  ////val[0]: 0-取消bypass, 1- 使能bypass
+		FIR_NAME, //无用
+		FIR_TAPS, //无用
+		FIR_COEFFS, //val: 分包,最大长度1024 float. 无转换直接拷贝float.
+	};
+	if(NULL == handle)	return 1;
+
+	ptag_fir pfir = (ptag_fir)handle;
+
+	plen = sizeof(tag_fir);
+	short val[4] = {0};
+	val[0] = pfir->bypass;
+	int taps = pfir->taps;
+	const short *pcoeffs = (const short *)pfir->coeffs;
+
+	m->Ctrl(FIR_BYPASS, val, 1);
+	m->Ctrl(FIR_COEFFS, pcoeffs, taps * 2);
+
+	return 0;
+}
+
 u32 tg_param_convert::EmptyParamCtrl(IModule* m, void* handle, int &plen)
 {
 	if(handle == NULL) return 1;

--
Gitblit v1.9.3