chenlh
2025-10-09 e0f29d5815a7dd4d45733ce1d661f1df263913d4
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,
      PHASE = 9,
      STEP,//-500~+500
   };
      TYPE,
      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);
//            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;
@@ -848,6 +832,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;