[bugfix] 修复channel_id引起的混乱
This commit is contained in:
parent
59dbf276b8
commit
3f57b1461f
13
app.py
13
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):
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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中的所有数据"""
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
6
doc/Reconstruction direction.txt
Normal file
6
doc/Reconstruction direction.txt
Normal file
@ -0,0 +1,6 @@
|
||||
关于最近一次需要重构记录:
|
||||
1.关于数据的操作全部移入model中,controller中只保留对model的调用
|
||||
2.关于ui的更新,统一封装到updateUI方法中,在controller中调用
|
||||
3.关于信号的连接,统一封装到setup_connections方法中,在controller中调用
|
||||
4.所有可以互斥的操作,都需要成对出现,逻辑上也必须完整。(set/get)
|
||||
5.
|
Loading…
Reference in New Issue
Block a user