diff --git a/app.py b/app.py index 2c66308..4338934 100644 --- a/app.py +++ b/app.py @@ -84,11 +84,11 @@ class MainWindow(QWidget): for i in range(channel_count): # 创建widget filter_widget = AudioFilterWidget() - filter_widget.set_channel_id(i) - filter_widget.set_channel_name(f"Channel {i+1}") + # filter_widget.set_channel_id(i) + # filter_widget.set_channel_name(f"Channel {i+1}") # 创建model和controller - model = AudioFilterModel(channel_id=i, channel_name=f"Channel {i+1}") + model = AudioFilterModel(channel_id = i, channel_name=f"Channel {i+1}") controller = AudioFilterController(model) controller.set_widget(filter_widget) @@ -111,18 +111,17 @@ class MainWindow(QWidget): def test_communication(self): """测试通信功能""" - print("Testing communication...") - + # 测试第一个控制器的通信 if self.filter_controllers: controller = self.filter_controllers[0] # 测试从服务器加载数据 - print("Testing load from server...") + logger.info("load from server...") controller.load_from_server() # 测试同步数据到服务器 - print("Testing sync to server...") + logger.info("sync to server...") controller.sync_to_server() def Get_All(self): diff --git a/component/widget_filter/__pycache__/audio_filter_componet.cpython-313.pyc b/component/widget_filter/__pycache__/audio_filter_componet.cpython-313.pyc index 03acdf0..75edd73 100644 Binary files a/component/widget_filter/__pycache__/audio_filter_componet.cpython-313.pyc and b/component/widget_filter/__pycache__/audio_filter_componet.cpython-313.pyc differ diff --git a/component/widget_filter/__pycache__/audio_filter_controller.cpython-313.pyc b/component/widget_filter/__pycache__/audio_filter_controller.cpython-313.pyc index 2e936c3..ba4ffe0 100644 Binary files a/component/widget_filter/__pycache__/audio_filter_controller.cpython-313.pyc and b/component/widget_filter/__pycache__/audio_filter_controller.cpython-313.pyc differ diff --git a/component/widget_filter/__pycache__/audio_filter_model.cpython-313.pyc b/component/widget_filter/__pycache__/audio_filter_model.cpython-313.pyc index dae53d9..e0c990b 100644 Binary files a/component/widget_filter/__pycache__/audio_filter_model.cpython-313.pyc and b/component/widget_filter/__pycache__/audio_filter_model.cpython-313.pyc differ diff --git a/component/widget_filter/audio_filter_componet.py b/component/widget_filter/audio_filter_componet.py index 020e31a..6d75bb8 100644 --- a/component/widget_filter/audio_filter_componet.py +++ b/component/widget_filter/audio_filter_componet.py @@ -362,7 +362,7 @@ class AudioFilterWidget(QWidget): def set_all_params(self, params: Dict[str, Any]): """设置所有参数""" - if not self.channel_id: + if self.channel_id == -1: return # 设置基础参数 @@ -370,7 +370,7 @@ class AudioFilterWidget(QWidget): vol_key = f'vol_data{self.channel_id}' mix_right_key = f'mix_right_data{self.channel_id}' mix_left_key = f'mix_left_data{self.channel_id}' - print(f"params:{params}") + print(f"set_all_params params:{params}") # 更新基础参数 self._update_basic_params(params, delay_key, vol_key, mix_right_key, mix_left_key) @@ -1003,6 +1003,7 @@ class AudioFilterWidget(QWidget): finally: # 确保信号总是被重新连接,即使发生异常 self.connect_param_signals() + def clear_ui_data(self): """清空UI中的所有数据""" diff --git a/component/widget_filter/audio_filter_controller.py b/component/widget_filter/audio_filter_controller.py index 887ed7a..a1a6a8c 100644 --- a/component/widget_filter/audio_filter_controller.py +++ b/component/widget_filter/audio_filter_controller.py @@ -94,11 +94,14 @@ class AudioFilterController(QObject): # 设置model(不触发更新) self.widget.model = self.model - # 建立信号连接 - self._setup_widget_connections() + # # 建立信号连接 + # self._setup_widget_connections() - # 手动更新一次UI - self.widget.set_all_params(self.model.to_widget_params()) + # # 手动更新一次UI + # self.widget.set_all_params(self.model.to_widget_params()) + + # 手动更新一次UI 关于ui的更新,统一封装到updateUI方法中 + self.widget.updateUI() def _setup_widget_connections(self): """设置widget信号连接""" @@ -117,14 +120,14 @@ class AudioFilterController(QObject): def _convert_struct_data_to_model(self, struct_data: Dict[str, Any]) -> Dict[str, Any]: """将结构体格式数据转换为模型数据""" channel_params = ChannelParams( - delay=struct_data.get(f'tuning_parameters.delay_parameters[{self.model.channel_id-1}].delay_data', 0.0), - volume=struct_data.get(f'tuning_parameters.volume_parameters[{self.model.channel_id-1}].vol_data', 0.0), - mix_right=struct_data.get(f'tuning_parameters.mix_parameters[{self.model.channel_id-1}].mix_right_data', 0.0), - mix_left=struct_data.get(f'tuning_parameters.mix_parameters[{self.model.channel_id-1}].mix_left_data', 0.0) + delay=struct_data.get(f'tuning_parameters.delay_parameters[{self.model.channel_id}].delay_data', 0.0), + volume=struct_data.get(f'tuning_parameters.volume_parameters[{self.model.channel_id}].vol_data', 0.0), + mix_right=struct_data.get(f'tuning_parameters.mix_parameters[{self.model.channel_id}].mix_right_data', 0.0), + mix_left=struct_data.get(f'tuning_parameters.mix_parameters[{self.model.channel_id}].mix_left_data', 0.0) ) filters = [] - base_idx = (self.model.channel_id - 1) * 20 # 当前通道的均衡器起始索引 + base_idx = (self.model.channel_id) * 20 # 当前通道的均衡器起始索引 print("channel_id:", self.model.channel_id) # 遍历当前通道的20个均衡器单元 for i in range(20): @@ -264,16 +267,18 @@ class AudioFilterController(QObject): struct_params = self._convert_model_data_to_struct(params) # 基础参数批次 - channel_id = self.model.channel_id - 1 # 调整为0基索引 + channel_id = self.model.channel_id # 调整为0基索引 base_params = { - f'tuning_parameters.mix_parameters[{channel_id}].ch_n': channel_id, + f'tuning_parameters.mix_parameters[{channel_id}].ch_n': channel_id + 1, f'tuning_parameters.mix_parameters[{channel_id}].mix_left_data': struct_params[f'tuning_parameters.mix_parameters[{channel_id}].mix_left_data'], f'tuning_parameters.mix_parameters[{channel_id}].mix_right_data': struct_params[f'tuning_parameters.mix_parameters[{channel_id}].mix_right_data'], - f'tuning_parameters.delay_parameters[{channel_id}].ch_n': channel_id, + f'tuning_parameters.delay_parameters[{channel_id}].ch_n': channel_id + 1, f'tuning_parameters.delay_parameters[{channel_id}].delay_data': struct_params[f'tuning_parameters.delay_parameters[{channel_id}].delay_data'], - f'tuning_parameters.volume_parameters[{channel_id}].ch_n': channel_id, + f'tuning_parameters.volume_parameters[{channel_id}].ch_n': channel_id + 1, f'tuning_parameters.volume_parameters[{channel_id}].vol_data': struct_params[f'tuning_parameters.volume_parameters[{channel_id}].vol_data'] } + + print("sync_to_server base_params:", base_params) # 发送基础参数 ServiceManager.instance().params_service.set_params(self.widget, base_params) @@ -315,19 +320,20 @@ class AudioFilterController(QObject): # 基础参数请求 - 使用实际通道ID base_params = [ - f'tuning_parameters.mix_parameters[{channel_id-1}].ch_n', - f'tuning_parameters.mix_parameters[{channel_id-1}].mix_left_data', - f'tuning_parameters.mix_parameters[{channel_id-1}].mix_right_data', - f'tuning_parameters.delay_parameters[{channel_id-1}].ch_n', - f'tuning_parameters.delay_parameters[{channel_id-1}].delay_data', - f'tuning_parameters.volume_parameters[{channel_id-1}].ch_n', - f'tuning_parameters.volume_parameters[{channel_id-1}].vol_data' + f'tuning_parameters.mix_parameters[{channel_id}].ch_n', + f'tuning_parameters.mix_parameters[{channel_id}].mix_left_data', + f'tuning_parameters.mix_parameters[{channel_id}].mix_right_data', + f'tuning_parameters.delay_parameters[{channel_id}].ch_n', + f'tuning_parameters.delay_parameters[{channel_id}].delay_data', + f'tuning_parameters.volume_parameters[{channel_id}].ch_n', + f'tuning_parameters.volume_parameters[{channel_id}].vol_data' ] + print("load_from_server base_params:", base_params) # 分批请求滤波器参数 BATCH_SIZE = 5 # 每批请求5个滤波器的参数 - base_idx = (channel_id - 1) * 20 # 修正滤波器起始索引计算:通道1从0开始,通道2从20开始 - + base_idx = (channel_id) * 20 # 修正滤波器起始索引计算:通道1从0开始,通道2从20开始 + print(f"base_idx: {base_idx}") def request_batch(start_idx, end_idx): batch_params = [] for i in range(start_idx, end_idx): @@ -365,7 +371,7 @@ class AudioFilterController(QObject): ServiceManager.instance().params_service.get_params( self.widget, base_params, - callback=lambda r: all_responses.update(r.data) + callback = lambda r: all_responses.update(r.data) ) # 发送分批的滤波器参数请求 @@ -375,7 +381,7 @@ class AudioFilterController(QObject): ServiceManager.instance().params_service.get_params( self.widget, batch_params, - callback=batch_callback + callback = batch_callback ) except Exception as e: @@ -634,7 +640,7 @@ def main(): app = QApplication(sys.argv) # 创建控制器和相关组件 - model = AudioFilterModel(channel_id=1, channel_name="测试通道") + model = AudioFilterModel(channel_id=0, channel_name="测试通道") controller = AudioFilterController(model) widget = AudioFilterWidget() controller.set_widget(widget) diff --git a/component/widget_filter/audio_filter_model.py b/component/widget_filter/audio_filter_model.py index 253d146..667da1a 100644 --- a/component/widget_filter/audio_filter_model.py +++ b/component/widget_filter/audio_filter_model.py @@ -115,8 +115,11 @@ class AudioFilterModel(QObject): """转换为AudioFilterWidget兼容的参数格式""" print(f"self.channel_params:{self.channel_params}") params = self.channel_params.to_dict(self.channel_id) + print(f"filters:{self.filters}") for i, filter_param in enumerate(self.filters, 1): params.update(filter_param.to_dict(self.channel_id, i)) + + print(f"params:{params}") return params diff --git a/doc/Reconstruction direction.txt b/doc/Reconstruction direction.txt new file mode 100644 index 0000000..711bfb4 --- /dev/null +++ b/doc/Reconstruction direction.txt @@ -0,0 +1,6 @@ +关于最近一次需要重构记录: + 1.关于数据的操作全部移入model中,controller中只保留对model的调用 + 2.关于ui的更新,统一封装到updateUI方法中,在controller中调用 + 3.关于信号的连接,统一封装到setup_connections方法中,在controller中调用 + 4.所有可以互斥的操作,都需要成对出现,逻辑上也必须完整。(set/get) + 5.