From 7fb0a76018188615b3cde4f83ce07935a5290834 Mon Sep 17 00:00:00 2001
From: chenlh <2008get@163.com>
Date: 星期五, 13 三月 2026 18:00:39 +0800
Subject: [PATCH] 适配调音台的混响参数接口

---
 cbb_RoomReverb/reverb_wrapper.c |  147 +++++++++++++++++++++++++++++++++---
 cbb_RoomReverb/reverb_wrapper.h |   38 +++------
 2 files changed, 144 insertions(+), 41 deletions(-)

diff --git a/cbb_RoomReverb/reverb_wrapper.c b/cbb_RoomReverb/reverb_wrapper.c
index a184c54..3a42a65 100644
--- a/cbb_RoomReverb/reverb_wrapper.c
+++ b/cbb_RoomReverb/reverb_wrapper.c
@@ -1,17 +1,130 @@
 #include "reverb.h"
-//#include "reverb_wrapper.h"
+#include "reverb_wrapper.h"
 #include <stdio.h>
 
 
 static int ch,n,L;
 static float *x[32], *y[32];
 
+#if (GUI == UI_XYK)
+
+	Reverb_common c_t;
+	Reverb_taps t_t;
+	Reverb_early e_t;
+	Reverb_late l_t;
+	Reverb_eq eq_t;
+
+
+	void params_chg(Reverb_common *com, Reverb_taps *tap, Reverb_early *ear, Reverb_late *lat, Reverb_eq *eq, ReverbUI *ui)
+	{
+		com->dry = 1 - ui->wetdry_ratio / 100;
+		com->early = ui->wetdry_ratio / 100;
+		com->late = ui->wetdry_ratio / 100;
+		com->input_mix_on = 0;
+		com->input_mix = 0;
+		com->high_cut_on = 0;
+		com->high_cut = 0;
+		com->low_cut_on = 0;
+		com->low_cut = 0;
+		com->cross_seed = 0;
+
+		tap->multi_taps_on = 1;
+		tap->taps_count = ui->density / 10.0f;
+		tap->taps_delay = ui->pre_delay / 200.0f;
+		tap->taps_decay = ui->reverb_time / 20.0f;
+		tap->taps_length = ui->reverb_time / 20.0f;
+
+		ear->early_difus_on = 1;
+		ear->early_count = ui->density / 10.0f;
+		ear->early_delay = ui->pre_delay / 200.0f;
+		ear->early_feedback = 0.5;
+		ear->early_mod_amt = ui->diffusion / 10.0f;
+		ear->early_mod_rate = ui->diffusion / 10.0f;
+
+		lat->late_mode = 1;
+		lat->late_reflect_on = 1;
+		lat->line_count = ui->density / 10.0f;
+		lat->line_size = ui->reverb_time / 20.0f;
+		lat->line_mod_amt = ui->diffusion / 10.0f;
+		lat->line_mod_rate = ui->reverb_time / 20.0f;
+		lat->difus_count = ui->density / 10.0f;
+		lat->difus_delay = ui->pre_delay / 200.0f;
+		lat->difus_feedback = ui->reverb_time / 20.0f;
+		lat->difus_mod_amt = ui->diffusion / 10.0f;
+		lat->difus_mod_rate = ui->diffusion / 10.0f;
+		
+		eq->low_shelf_on = 0;
+		eq->high_shelf_on = 0;
+		eq->low_pass_on = 0;
+		eq->low_shelf_freq = 0;
+		eq->low_shelf_gain = 0;
+		eq->high_shelf_freq = 0;
+		eq->high_shelf_gain = 0;
+		eq->low_pass_freq = 0;
+
+
+	}
+
+	void reverb_wrapper_init(void **p, int channels, int frame_size, int sample_rate, double room_size, double wetdry_ratio, double reverb_time, double pre_delay, 
+								  double high_damp_freq, double high_ratio, double diffusion, double density, double hpf, double lpf
+								  )
+	{
+		ReverbUI ui = {room_size, wetdry_ratio, reverb_time, pre_delay, high_damp_freq, high_ratio, diffusion, density, hpf, lpf};
+		c_t.sample_rate = sample_rate;
+		
+		params_chg(&c_t, &t_t, &e_t, &l_t, &eq_t, &ui);
+		*(Reverb **)p = reverb_new(channels, frame_size, &c_t, &t_t, &e_t, &l_t, &eq_t);
+		ch = channels;
+		n = frame_size;
+
+//		FILE *file = fopen("debug.txt", "w");
+//		if (NULL == file) return;
+//
+//		fprintf(file, "GUI params:\n");
+//		fprintf(file, "late_refl_on:%d.\n", l_t.late_reflect_on);
+//		fprintf(file, "FS:%d  dry:%2.2f  early:%2.2f  late:%2.2f  inp_on:%d  h_c_on:%d  l_c_on:%d  in_mix:%2.2f  h_c:%2.2f  l_c:%2.2f  c_s:%2.2f.\n",
+//					   c_t.sample_rate, c_t.dry, c_t.early, c_t.late, c_t.input_mix_on, c_t.high_cut_on, \
+//					   c_t.low_cut_on, c_t.input_mix, c_t.high_cut, c_t.low_cut, c_t.cross_seed);
+//		fclose(file);
+	}
+
+
+	void reverb_wrapper_process(void *p, int sample_rate, double room_size, double wetdry_ratio, double reverb_time, double pre_delay,
+								  double high_damp_freq, double high_ratio, double diffusion, double density, double hpf, double lpf,
+								  float *src, float *dst)
+	{
+		int i;
+
+		for(i = 0; i < ch; i ++)
+			x[i] = src + i * n;
+
+		for(i = 0; i < ch; i ++)
+			y[i] = dst + i * n;
+
+
+		reverb_process(p, x, y);
+
+		ReverbUI uip = {room_size, wetdry_ratio, reverb_time, pre_delay, high_damp_freq, high_ratio, diffusion, density, hpf, lpf};
+		params_chg(&c_t, &t_t, &e_t, &l_t, &eq_t, &uip);
+
+		Reverb params = {ch, n, {sample_rate, c_t.dry, c_t.early, c_t.late, c_t.input_mix_on, c_t.high_cut_on, c_t.low_cut_on, c_t.input_mix, c_t.high_cut, c_t.low_cut, c_t.cross_seed},
+					 {t_t.multi_taps_on, t_t.taps_count, t_t.taps_delay, t_t.taps_decay, t_t.taps_length},
+			  		 {e_t.early_difus_on, e_t.early_count, e_t.early_delay, e_t.early_feedback, e_t.early_mod_amt, e_t.early_mod_rate},
+					 {l_t.late_mode, l_t.late_reflect_on, l_t.line_count, l_t.line_size, l_t.line_mod_amt, l_t.line_mod_rate},
+					 {eq_t.low_shelf_on, eq_t.high_shelf_on, eq_t.low_pass_on, eq_t.low_shelf_freq, eq_t.low_shelf_gain, eq_t.high_shelf_freq, eq_t.high_shelf_gain, eq_t.low_pass_freq},
+					};
+
+		reverb_params_set(&params);
+		
+	}
+
+#else
 
 void reverb_wrapper_init(void **p, int channels, int frame_size, int sample_rate, double dry, double early, double late, int input_mix_on, int hight_cut_on,	// 6
-	int low_cut_on, double input_mix, double high_cut_freq, double low_cut_freq, double cross_seed, int taps_on, double  taps_count, double taps_pre_delay, double taps_decay, double taps_length, int early_difus_on, double early_difus_count, double early_difus_delay,	// 13
-	double early_difus_feedback, double early_difus_mod_amt, double early_difus_mod_rate, int late_mode, int late_reflect_on, double late_line_count, double late_line_size, double late_line_mod_amt, double late_line_decay, double late_line_mod_rate, double late_difus_count, double late_difus_delay,	// 12
-	double late_difus_feedback, double late_difus_mod_amt, double late_difus_mod_rate, int eq_low_shelf_on, int eq_high_shelf_on, int eq_low_pass_on, double eq_low_shelf_freq, double eq_low_shelf_gain, double eq_high_shelf_freq, double eq_high_shelf_gain, double eq_low_pass_freq		// 11
-    )
+		int low_cut_on, double input_mix, double high_cut_freq, double low_cut_freq, double cross_seed, int taps_on, double  taps_count, double taps_pre_delay, double taps_decay, double taps_length, int early_difus_on, double early_difus_count, double early_difus_delay,	// 13
+		double early_difus_feedback, double early_difus_mod_amt, double early_difus_mod_rate, int late_mode, int late_reflect_on, double late_line_count, double late_line_size, double late_line_mod_amt, double late_line_decay, double late_line_mod_rate, double late_difus_count, double late_difus_delay,	// 12
+		double late_difus_feedback, double late_difus_mod_amt, double late_difus_mod_rate, int eq_low_shelf_on, int eq_high_shelf_on, int eq_low_pass_on, double eq_low_shelf_freq, double eq_low_shelf_gain, double eq_high_shelf_freq, double eq_high_shelf_gain, double eq_low_pass_freq		// 11
+	    )
 {
 	Reverb_common c_t = {sample_rate, dry, early, late, input_mix_on, hight_cut_on, low_cut_on, input_mix, high_cut_freq, low_cut_freq, cross_seed};
 	Reverb_taps t_t = {taps_on, taps_count, taps_pre_delay, taps_decay, taps_length};
@@ -23,23 +136,21 @@
 	ch = channels;
 	n = frame_size;
 
-//	FILE *file = fopen("debug.txt", "w");
+//	FILE *file = fopen("second.txt", "w");
 //	if (NULL == file) return;
-
+//
 //	fprintf(file, "GUI params:\n");
-//	fprintf(file, "late_refl_on:%d.\n", l_t.late_reflect_on);
-//	fprintf(file, "FS:%d  dry:%2.2f  early:%2.2f  late:%2.2f  inp_on:%d  h_c_on:%d  l_c_on:%d  in_mix:%2.2f  h_c:%2.2f  l_c:%2.2f  c_s:%2.2f.\n",
-//				   c_t.sample_rate, c_t.dry, c_t.early, c_t.late, c_t.input_mix_on, c_t.high_cut_on, \
-//				   c_t.low_cut_on, c_t.input_mix, c_t.high_cut, c_t.low_cut, c_t.cross_seed);
+//	fprintf(file, "difus_on:%d  count:%2.4f  delay:%2.4f  feedback:%2.4f  mod_amt:%2.4f  mod_rate:%2.4f .\n",
+//				   e_t.early_difus_on, e_t.early_count, e_t.early_delay, e_t.early_feedback, e_t.early_mod_amt, e_t.early_mod_rate);
 //	fclose(file);
 }
 
 
-void reverb_wrapper_process(void *p, /*int sample_rate, double dry, double early, double late, int input_mix_on, int hight_cut_on,	// 6
+void reverb_wrapper_process(void *p, int sample_rate, double dry, double early, double late, int input_mix_on, int hight_cut_on,	// 6
 	int low_cut_on, double input_mix, double high_cut_freq, double low_cut_freq, double cross_seed, int taps_on, double  taps_count, double taps_pre_delay, double taps_decay, double taps_length, int early_difus_on, double early_difus_count, double early_difus_delay,	// 13
 	double early_difus_feedback, double early_difus_mod_amt, double early_difus_mod_rate, int late_mode, int late_reflect_on, double late_line_count, double late_line_size, double late_line_mod_amt, double late_line_decay, double late_line_mod_rate, double late_difus_count, double late_difus_delay,	// 12
 	double late_difus_feedback, double late_difus_mod_amt, double late_difus_mod_rate, int eq_low_shelf_on, int eq_high_shelf_on, int eq_low_pass_on, double eq_low_shelf_freq, double eq_low_shelf_gain, double eq_high_shelf_freq, double eq_high_shelf_gain, double eq_low_pass_freq,
-								  */float *src, float *dst)
+	float *src, float *dst)
 {
 	int i;
 
@@ -52,17 +163,23 @@
 
 	reverb_process(p, x, y);
 
-	/*Reverb params = {ch, n, {sample_rate, dry, early, late, input_mix_on, hight_cut_on, low_cut_on, input_mix, high_cut_freq, low_cut_freq, cross_seed},
+	Reverb params = {ch, n, {sample_rate, dry, early, late, input_mix_on, hight_cut_on, low_cut_on, input_mix, high_cut_freq, low_cut_freq, cross_seed},
 					 {taps_on, taps_count, taps_pre_delay, taps_decay, taps_length},
 			  		 {early_difus_on, early_difus_count, early_difus_delay, early_difus_feedback, early_difus_mod_amt, early_difus_mod_rate},
 					 {late_mode, late_reflect_on, late_line_count, late_line_size, late_line_mod_amt, late_line_mod_rate},
 					 {eq_low_shelf_on, eq_high_shelf_on, eq_low_pass_on, eq_low_shelf_freq, eq_low_shelf_gain, eq_high_shelf_freq, eq_high_shelf_gain, eq_low_pass_freq},
 					};
-	reverb_params_set(&params);*/
+	reverb_params_set(&params);
 	
 }
 
 
+
+
+
+#endif
+
+
 void reverb_wrapper_delete(void *p)
 {
 	 reverb_delete(p);
diff --git a/cbb_RoomReverb/reverb_wrapper.h b/cbb_RoomReverb/reverb_wrapper.h
index f58ef7e..054a781 100644
--- a/cbb_RoomReverb/reverb_wrapper.h
+++ b/cbb_RoomReverb/reverb_wrapper.h
@@ -3,16 +3,21 @@
 
 
 #define UI_FULL 0
-#define UI_XYK	1
-#define  GUI	 UI_FULL
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
+#define UI_XYK	1	//xinyingke(jiangmen)
+#define GUI	UI_XYK
 
 
 #if (GUI == UI_XYK)
+
+	void reverb_wrapper_init(void **p, int channels, int frame_size, int sample_rate, double room_size, double drywet_ratio, double reverb_time, double pre_delay, 
+								  double high_damp_freq, double high_ratio, double diffusion, double density, double hpf, double lpf
+								  );
+
+	void reverb_wrapper_process(void *p, int sample_rate, double room_size, double drywet_ratio, double reverb_time, double pre_delay,
+								  double high_damp_freq, double high_ratio, double diffusion, double density, double hpf, double lpf,
+								  float *src, float *dst);
+
+#else
 
 	void reverb_wrapper_init(void **p, int channels, int frame_size, int sample_rate, double dry, double early, double late, int input_mix_on, int hight_cut_on,	// 1~6
 		int low_cut_on, double in_mix, double high_cut_freq, double low_cut_freq, double cross_seed, int taps_on, double  taps_count, double taps_pre_delay, double taps_decay, double taps_length, int early_difus_on, double early_difus_count, double early_difus_delay,	// 7~19
@@ -26,20 +31,6 @@
 		double late_difus_feedback, double late_difus_mod_amt, double late_difus_mod_rate, int eq_low_shelf_on, int eq_high_shelf_on, int eq_low_pass_on, double eq_low_shelf_freq, double eq_low_shelf_gain, double eq_high_shelf_freq, double eq_high_shelf_gain, double eq_low_pass_freq,
 									  float *src, float *dst);
 
-#else
-
-	void reverb_wrapper_init(void **p, int channels, int frame_size, int sample_rate, double dry, double early, double late, int input_mix_on, int hight_cut_on,	// 1~6
-		int low_cut_on, double in_mix, double high_cut_freq, double low_cut_freq, double cross_seed, int taps_on, double  taps_count, double taps_pre_delay, double taps_decay, double taps_length, int early_difus_on, double early_difus_count, double early_difus_delay,	// 7~19
-		double early_difus_feedback, double early_difus_mod_amt, double early_difus_mod_rate, int late_mode, int late_reflect_on, double late_line_count, double late_line_size, double late_line_mod_amt, double late_line_decay, double late_line_mod_rate, double late_difus_count, double late_difus_delay,	// 20~31
-		double late_difus_feedback, double late_difus_mod_amt, double late_difus_mod_rate, int eq_low_shelf_on, int eq_high_shelf_on, int eq_low_pass_on, double eq_low_shelf_freq, double eq_low_shelf_gain, double eq_high_shelf_freq, double eq_high_shelf_gain, double eq_low_pass_freq	//32~42
-	    );
-
-	void reverb_wrapper_process(void *p, /*int sample_rate, double dry, double early, double late, int input_mix_on, int hight_cut_on,	// 6
-		int low_cut_on, double input_mix, double high_cut_freq, double low_cut_freq, double cross_seed, int taps_on, double  taps_count, double taps_pre_delay, double taps_decay, double taps_length, int early_difus_on, double early_difus_count, double early_difus_delay,	// 13
-		double early_difus_feedback, double early_difus_mod_amt, double early_difus_mod_rate, int late_mode, int late_reflect_on, double late_line_count, double late_line_size, double late_line_mod_amt, double late_line_decay, double late_line_mod_rate, double late_difus_count, double late_difus_delay,	// 12
-		double late_difus_feedback, double late_difus_mod_amt, double late_difus_mod_rate, int eq_low_shelf_on, int eq_high_shelf_on, int eq_low_pass_on, double eq_low_shelf_freq, double eq_low_shelf_gain, double eq_high_shelf_freq, double eq_high_shelf_gain, double eq_low_pass_freq,
-									  */float *src, float *dst);
-
 #endif
 
 void reverb_wrapper_delete(void *p);
@@ -50,8 +41,3 @@
 #endif
 
 
-
-
-#ifdef __cplusplus
-}
-#endif
\ No newline at end of file

--
Gitblit v1.9.3