From fe4d335b54ede7a47fd4bcf5c228fb427cbcc8c9 Mon Sep 17 00:00:00 2001
From: chenlh <2008get@163.com>
Date: 星期二, 20 一月 2026 14:46:01 +0800
Subject: [PATCH] 新增通道参数拷贝功能
---
src/tg/tg_param_convert.cpp | 128 ++++++++++++++++--------------------------
1 files changed, 49 insertions(+), 79 deletions(-)
diff --git a/src/tg/tg_param_convert.cpp b/src/tg/tg_param_convert.cpp
index 26f9e16..0ce3246 100644
--- a/src/tg/tg_param_convert.cpp
+++ b/src/tg/tg_param_convert.cpp
@@ -62,8 +62,8 @@
MUTE,
SENSI,
PHANTOM,
-
TYPE,
+
FREQ,
LEVEL,
NAME,
@@ -300,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);
}
}
@@ -312,8 +312,8 @@
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);
-// printf("oich %d %d= %x %x %x\n", i,j, val[0],val[1],val[2]);
+ 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);
}
}
@@ -382,7 +382,6 @@
FB_FLT_TYPE,
FB_STEP,
-
FB_CLEAR,
FB_PANIC,
FB_FLT_DEPTH,
@@ -621,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;
}
@@ -688,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;
@@ -713,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;
@@ -725,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;
@@ -742,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;
--
Gitblit v1.9.3