[bugfix] 修复channel_id引起的混乱

This commit is contained in:
Sam 2025-02-24 10:54:09 +08:00
parent 59dbf276b8
commit 3f57b1461f
8 changed files with 49 additions and 34 deletions

13
app.py
View File

@ -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):

View File

@ -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中的所有数据"""

View File

@ -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)

View File

@ -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

View File

@ -0,0 +1,6 @@
关于最近一次需要重构记录:
1.关于数据的操作全部移入model中controller中只保留对model的调用
2.关于ui的更新统一封装到updateUI方法中在controller中调用
3.关于信号的连接统一封装到setup_connections方法中在controller中调用
4.所有可以互斥的操作都需要成对出现逻辑上也必须完整。set/get
5.