diff --git a/.idea/misc.xml b/.idea/misc.xml
index 23231ce..1d3ce46 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 35eb1dd..a2f9cd7 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,5 +2,6 @@
+
\ No newline at end of file
diff --git a/app.py b/app.py
index 5cf30e8..36d95b9 100644
--- a/app.py
+++ b/app.py
@@ -1,3 +1,5 @@
+import time
+
from component.widget_main.widget_main import Widget_Main
from component.widget_channel.widget_channel import Widget_Channel
from component.widget_card.widget_card import Widget_Card
@@ -13,49 +15,49 @@ from PySide6.QtWidgets import QMainWindow, QPushButton, QVBoxLayout
from PySide6.QtWidgets import QWidget
from PySide6.QtCore import QObject
+
class MainWindow(QWidget):
def __init__(self):
super().__init__()
# 初始化服务
- ServiceManager.instance().init_services("127.0.0.1", 1234)
+ ServiceManager.instance().init_services("192.168.5.4", 12345)
# 初始化应用控制器
self.app_controller = ApplicationController.instance()
-
+
self.widget_main = Widget_Main()
self.widget_channel = Widget_Channel()
self.widget_card = Widget_Card()
- # self.widget_main.ui.ListWidget_vLayout.addWidget(self.widget_card)
+ # 添加测试按钮
+ self.test_button = QPushButton("Get_All")
+ self.test_button.clicked.connect(self.Get_All)
+ self.widget_main.ui.ListWidget_vLayout.addWidget(self.test_button)
+ self.widget_main.ui.ListWidget_vLayout.addWidget(self.widget_card)
self.widget_main.ui.Channel_hLayout.addWidget(self.widget_channel)
-
+
self.widget_filter_list = []
self.filter_controllers = [] # 存储控制器实例
- # 添加测试按钮
- self.test_button = QPushButton("Test Communication")
- self.test_button.clicked.connect(self.test_communication)
- self.widget_main.ui.ListWidget_vLayout.addWidget(self.test_button)
-
self.create_filter_widget()
self.setup_connections()
-
+
def create_filter_widget(self):
- for i in range(24):
+ for i in range(1, 7):
# 创建widget
filter_widget = AudioFilterWidget()
filter_widget.set_channel_id(i)
- filter_widget.set_channel_name(f"Channel {i+1}")
-
+ filter_widget.set_channel_name(f"Channel {i}")
+
# 创建model和controller
- model = AudioFilterModel(channel_id=i, channel_name=f"Channel {i+1}")
+ model = AudioFilterModel(channel_id=i, channel_name=f"Channel {i}")
controller = AudioFilterController(model)
controller.set_widget(filter_widget)
-
+
# 连接控制器信号
controller.error_occurred.connect(lambda msg: print(f"Error: {msg}"))
controller.state_changed.connect(lambda state: print(f"State changed: {state}"))
controller.params_synced.connect(lambda: print("Params synced"))
-
+
# 存储实例
self.widget_filter_list.append(filter_widget)
self.filter_controllers.append(controller)
@@ -71,18 +73,29 @@ class MainWindow(QWidget):
def test_communication(self):
"""测试通信功能"""
print("Testing communication...")
-
+
# 测试第一个控制器的通信
if self.filter_controllers:
controller = self.filter_controllers[0]
-
+
# 测试从服务器加载数据
print("Testing load from server...")
controller.load_from_server()
-
+
# 测试同步数据到服务器
print("Testing sync to server...")
- # controller.sync_to_server()
+ controller.sync_to_server()
+
+ def Get_All(self):
+ try:
+ for controller in self.filter_controllers:
+ controller.load_from_server()
+ break
+ time.sleep(1)
+ print("Successfully loaded all filter data")
+ except Exception as e:
+ print(f"Error loading filter data: {e}")
+
if __name__ == '__main__':
import sys
@@ -90,7 +103,7 @@ if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
-
+
# # 添加测试卡片
# for i in range(1, 11):
# data = CardData(
@@ -99,6 +112,6 @@ if __name__ == '__main__':
# description=f"这是项目 {i} 的详细描述信息,可以包含多行文本内容。这是一个较长的描述,用于测试换行效果。"
# )
# main_window.widget_card.add_card_item(data)
-
+
main_window.widget_main.show()
sys.exit(app.exec())
\ No newline at end of file
diff --git a/application/__pycache__/application_controller.cpython-313.pyc b/application/__pycache__/application_controller.cpython-313.pyc
index 7e1b7f2..5a18b96 100644
Binary files a/application/__pycache__/application_controller.cpython-313.pyc and b/application/__pycache__/application_controller.cpython-313.pyc differ
diff --git a/application/app.py b/application/app.py
index c1f103c..83b943d 100644
--- a/application/app.py
+++ b/application/app.py
@@ -17,7 +17,7 @@ class MainWindow(QWidget):
def __init__(self):
super().__init__()
# 初始化服务
- ServiceManager.instance().init_services("127.0.0.1", 1234)
+ ServiceManager.instance().init_services("192.168.5.4", 12345)
# 初始化应用控制器
self.app_controller = ApplicationController.instance()
@@ -33,7 +33,7 @@ class MainWindow(QWidget):
# 添加测试按钮
self.test_button = QPushButton("Test Communication")
- self.test_button.clicked.connect(self.test_communication)
+ self.test_button.clicked.connect(self.Get_All)
self.widget_main.ui.ListWidget_vLayout.addWidget(self.test_button)
self.create_filter_widget()
@@ -84,6 +84,14 @@ class MainWindow(QWidget):
print("Testing sync to server...")
controller.sync_to_server()
+ def Get_All(self):
+ try:
+ for controller in self.filter_controllers:
+ controller.load_from_server()
+ print("Successfully loaded all filter data")
+ except Exception as e:
+ print(f"Error loading filter data: {e}")
+
if __name__ == '__main__':
import sys
from PySide6.QtWidgets import QApplication
diff --git a/application/application_controller.py b/application/application_controller.py
index 32df8e3..ba64014 100644
--- a/application/application_controller.py
+++ b/application/application_controller.py
@@ -52,18 +52,22 @@ class ApplicationController(QObject):
def _on_service_request_complete(self, signal_proxy: SignalProxy):
"""服务请求完成的槽函数"""
# 找到对应的controller_id
- print("CCCCCC:signal_proxy.data:", signal_proxy.data)
- controller_id = self._get_controller_id_for_widget(signal_proxy.widget)
+
+ # to do:这个槽函数要实现对信号的分发,但是不执行具体的业务,
+ # 每个具体的控制器只用注册对应的信号,然后执行具体的业务
+ # print("CCCCCC:signal_proxy.data:", signal_proxy.data)
+ # controller_id = self._get_controller_id_for_widget(signal_proxy.widget)
- # 测试用 返回值类似这种格式 用来标机控件
- controller_id = "audio_filter"
- if controller_id:
- # 转发信号
- self.signal_params_updated.emit(ControllerSignalData(
- controller_id=controller_id,
- widget=signal_proxy.widget,
- data=signal_proxy.data
- ))
+ # # 测试用 返回值类似这种格式 用来标记控件
+ # controller_id = "audio_filter"
+ # if controller_id:
+ # # 转发信号
+ # self.signal_params_updated.emit(ControllerSignalData(
+ # controller_id=controller_id,
+ # widget=signal_proxy.widget,
+ # data=signal_proxy.data
+ # ))
+ pass
def _get_controller_id_for_widget(self, widget: QObject) -> Optional[str]:
"""根据widget查找对应的controller_id"""
diff --git a/component/__pycache__/__init__.cpython-313.pyc b/component/__pycache__/__init__.cpython-313.pyc
index e4bbba2..9df0975 100644
Binary files a/component/__pycache__/__init__.cpython-313.pyc and b/component/__pycache__/__init__.cpython-313.pyc differ
diff --git a/component/widget_card/__pycache__/__init__.cpython-313.pyc b/component/widget_card/__pycache__/__init__.cpython-313.pyc
index e25210c..2fdf8bb 100644
Binary files a/component/widget_card/__pycache__/__init__.cpython-313.pyc and b/component/widget_card/__pycache__/__init__.cpython-313.pyc differ
diff --git a/component/widget_card/__pycache__/ui_widget_card.cpython-313.pyc b/component/widget_card/__pycache__/ui_widget_card.cpython-313.pyc
index 48edafa..ab88145 100644
Binary files a/component/widget_card/__pycache__/ui_widget_card.cpython-313.pyc and b/component/widget_card/__pycache__/ui_widget_card.cpython-313.pyc differ
diff --git a/component/widget_card/__pycache__/widget_card.cpython-313.pyc b/component/widget_card/__pycache__/widget_card.cpython-313.pyc
index a6552c6..dd75518 100644
Binary files a/component/widget_card/__pycache__/widget_card.cpython-313.pyc and b/component/widget_card/__pycache__/widget_card.cpython-313.pyc differ
diff --git a/component/widget_channel/__pycache__/__init__.cpython-313.pyc b/component/widget_channel/__pycache__/__init__.cpython-313.pyc
index 0197430..5afb715 100644
Binary files a/component/widget_channel/__pycache__/__init__.cpython-313.pyc and b/component/widget_channel/__pycache__/__init__.cpython-313.pyc differ
diff --git a/component/widget_channel/__pycache__/ui_widget_channel.cpython-313.pyc b/component/widget_channel/__pycache__/ui_widget_channel.cpython-313.pyc
index 1c6bc04..04439ab 100644
Binary files a/component/widget_channel/__pycache__/ui_widget_channel.cpython-313.pyc and b/component/widget_channel/__pycache__/ui_widget_channel.cpython-313.pyc differ
diff --git a/component/widget_channel/__pycache__/widget_channel.cpython-313.pyc b/component/widget_channel/__pycache__/widget_channel.cpython-313.pyc
index 16e1436..db37820 100644
Binary files a/component/widget_channel/__pycache__/widget_channel.cpython-313.pyc and b/component/widget_channel/__pycache__/widget_channel.cpython-313.pyc differ
diff --git a/component/widget_filter/__pycache__/Ui_widget.cpython-313.pyc b/component/widget_filter/__pycache__/Ui_widget.cpython-313.pyc
index 55a44f6..f41c12b 100644
Binary files a/component/widget_filter/__pycache__/Ui_widget.cpython-313.pyc and b/component/widget_filter/__pycache__/Ui_widget.cpython-313.pyc differ
diff --git a/component/widget_filter/__pycache__/__init__.cpython-313.pyc b/component/widget_filter/__pycache__/__init__.cpython-313.pyc
index e4f8884..a3637de 100644
Binary files a/component/widget_filter/__pycache__/__init__.cpython-313.pyc and b/component/widget_filter/__pycache__/__init__.cpython-313.pyc differ
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 82ee817..b47a619 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 de67961..b3869ac 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 0364d19..6ef247a 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/__pycache__/checkbox_header.cpython-313.pyc b/component/widget_filter/__pycache__/checkbox_header.cpython-313.pyc
index d176b66..b09ea10 100644
Binary files a/component/widget_filter/__pycache__/checkbox_header.cpython-313.pyc and b/component/widget_filter/__pycache__/checkbox_header.cpython-313.pyc differ
diff --git a/component/widget_filter/__pycache__/resources.cpython-313.pyc b/component/widget_filter/__pycache__/resources.cpython-313.pyc
index 760073e..835b1ae 100644
Binary files a/component/widget_filter/__pycache__/resources.cpython-313.pyc and b/component/widget_filter/__pycache__/resources.cpython-313.pyc differ
diff --git a/component/widget_filter/audio_filter_componet.py b/component/widget_filter/audio_filter_componet.py
index e145b53..9c9172b 100644
--- a/component/widget_filter/audio_filter_componet.py
+++ b/component/widget_filter/audio_filter_componet.py
@@ -16,9 +16,8 @@ from typing import List, Dict, Optional, Any
from component.widget_filter.Ui_widget import Ui_Widget
from component.widget_filter.checkbox_header import SCheckBoxHeaderView
-from component.widget_filter.audio_filter_model import AudioFilterModel
+from component.widget_filter.audio_filter_model import AudioFilterModel, FilterParams, FilterType
from component.widget_filter.Ui_widget import Ui_Widget
-
import component.widget_filter.resources
@@ -463,17 +462,17 @@ class AudioFilterWidget(QWidget):
"""处理参数值变化"""
if hasattr(self, 'model'):
try:
- float_value = float(value)
+ # float_value = float(value)
# 更新model中的通道参数
channel_params = self.model.channel_params
if param == 'delay':
- channel_params.delay = float_value
+ channel_params.delay = value
elif param == 'volume':
- channel_params.volume = float_value
+ channel_params.volume = value
elif param == 'mix_right':
- channel_params.mix_right = float_value
+ channel_params.mix_right = value
elif param == 'mix_left':
- channel_params.mix_left = float_value
+ channel_params.mix_left = value
self.model.set_channel_params(channel_params)
except ValueError:
@@ -529,7 +528,7 @@ class AudioFilterWidget(QWidget):
self.ui.tableWidget.setCellWidget(row, 2, combo)
# 创建新的滤波器项,使用唯一的默认名称
- self._update_table_row(row, {
+ filter_data = {
'filter_name': f"Filter_{row}", # 使用行号创建唯一名称
'filter_type': self.filter_types[0],
'enabled': True,
@@ -537,7 +536,22 @@ class AudioFilterWidget(QWidget):
'q': 0,
'gain': 0,
'slope': 0
- })
+ }
+
+ # 更新表格
+ self._update_table_row(row, filter_data)
+
+ # 更新model数据
+ if hasattr(self, 'model'):
+ filter_params = FilterParams(
+ filter_type=FilterType[self.filter_types[0]],
+ frequency=float(filter_data['freq']),
+ q_value=float(filter_data['q']),
+ gain=float(filter_data['gain']),
+ slope=float(filter_data['slope']),
+ enabled=filter_data['enabled']
+ )
+ self.model.add_filter(filter_params)
# 发送信号
self.filter_added.emit(self.filter_types[0])
@@ -713,10 +727,10 @@ class AudioFilterWidget(QWidget):
# 连接模型信号到视图更新方法
self.model.dataChanged.connect(self._updateFromModel)
- self.model.filterAdded.connect(self._handleFilterAdded)
- self.model.filterRemoved.connect(self._handleFilterRemoved)
- self.model.filterUpdated.connect(self._handleFilterUpdated)
- self.model.channelParamsChanged.connect(self._handleChannelParamsChanged)
+ # self.model.filterAdded.connect(self._handleFilterAdded)
+ # self.model.filterRemoved.connect(self._handleFilterRemoved)
+ # self.model.filterUpdated.connect(self._handleFilterUpdated)
+ # self.model.channelParamsChanged.connect(self._handleChannelParamsChanged)
# 设置初始数据
self.set_channel_id(model.channel_id)
diff --git a/component/widget_filter/audio_filter_controller.py b/component/widget_filter/audio_filter_controller.py
index 981a5e5..e54a0d6 100644
--- a/component/widget_filter/audio_filter_controller.py
+++ b/component/widget_filter/audio_filter_controller.py
@@ -8,6 +8,7 @@ from param_struct_test.params_service import ParamsService
from component.widget_filter.audio_filter_model import AudioFilterModel
from component.widget_filter.audio_filter_componet import AudioFilterWidget
from component.widget_filter.audio_filter_model import FilterParams, FilterType, ChannelParams
+from param_struct_test.params_service import Response
class AudioControllerState(Enum):
"""音频控制器状态"""
@@ -78,6 +79,44 @@ class AudioFilterController(QObject):
# self.widget.filter_added.connect(self._on_widget_filter_added)
# self.widget.filter_deleted.connect(self._on_widget_filter_deleted)
# self.widget.filter_enabled_changed.connect(self._on_widget_filter_enabled_changed)
+ self.widget.send_params_clicked.connect(self.sync_to_server)
+
+ 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)
+ )
+
+ filters = []
+ base_idx = (self.model.channel_id - 1) * 20 # 当前通道的均衡器起始索引
+ print("channel_id:", self.model.channel_id)
+ # 遍历当前通道的20个均衡器单元
+ for i in range(20):
+ idx = base_idx + i
+ fc_key = f'tuning_parameters.eq_parameters[{idx}].fc'
+
+ # 如果找不到该索引的频率参数,说明没有更多的均衡器数据了
+ if fc_key not in struct_data:
+ break
+
+ filter_params = FilterParams(
+ filter_type=FilterType(struct_data.get(f'tuning_parameters.eq_parameters[{idx}].filterType', 0)),
+ frequency=struct_data.get(f'tuning_parameters.eq_parameters[{idx}].fc', 0.0),
+ q_value=struct_data.get(f'tuning_parameters.eq_parameters[{idx}].q', 0.0),
+ gain=struct_data.get(f'tuning_parameters.eq_parameters[{idx}].gain', 0.0),
+ slope=struct_data.get(f'tuning_parameters.eq_parameters[{idx}].slope', 0.0)
+ )
+ filters.append(filter_params)
+
+ return {
+ 'channel_id': self.model.channel_id,
+ 'channel_name': self.model.channel_name,
+ 'channel_params': channel_params,
+ 'filters': filters
+ }
@Slot(ControllerSignalData)
def _on_params_updated(self, signal_data: ControllerSignalData):
@@ -87,66 +126,143 @@ class AudioFilterController(QObject):
try:
self.state = AudioControllerState.UPDATING
- data = signal_data.data
-
- # 使用ChannelParams类创建实例
- channel_params = ChannelParams(
- delay=data.get('delay_data1', 0.0),
- volume=data.get('vol_data1', 0.0),
- mix_right=data.get('mix_right_data1', 0.0),
- mix_left=data.get('mix_left_data1', 0.0)
- )
+ struct_data = signal_data.data
+ # 将结构体数据转换为模型数据
+ model_data = self._convert_struct_data_to_model(struct_data)
+
# 更新通道参数
- self.model.set_channel_params(channel_params)
-
- # 清除现有滤波器
- self.model.filters.clear() # 使用filters列表的clear方法替代clear_filters
-
- # 解析并添加滤波器参数
- # filter_index = 1
- # while True:
- # filter_type_value = data.get(f'filterType1_{filter_index}')
- # if filter_type_value is None:
- # break
-
- # # 使用FilterParams类创建实例
- # filter_params = FilterParams(
- # filter_type=FilterType(filter_type_value),
- # frequency=data.get(f'fc1_{filter_index}', 0.0),
- # q_value=data.get(f'q1_{filter_index}', 0.0),
- # gain=data.get(f'gain1_{filter_index}', 0.0),
- # slope=data.get(f'slope1_{filter_index}', 0.0)
- # )
- # self.model.add_filter(filter_params)
- # filter_index += 1
-
+ self.model.set_channel_params(model_data['channel_params'])
+ print("model_filters:", self.model.filters)
+ # 清除现有滤波器并添加新的滤波器
+ self.model.filters.clear()
+ if model_data['channel_id'] == self.model.channel_id:
+ for filter_param in model_data['filters']:
+ # self.model.add_filter(filter_param)
+ self.model.filters.append(filter_param)
+
self.params_synced.emit()
self.state = AudioControllerState.IDLE
except Exception as e:
self.state = AudioControllerState.ERROR
- self.error_occurred.emit(f"Error updating params: {str(e)}")
+ self.error_occurred.emit(f"更新参数时发生错误: {str(e)}")
+
+ def _on_params_updated_new(self, res: Response):
+ """处理来自ApplicationController的参数更新信号"""
+ try:
+ self.state = AudioControllerState.UPDATING
+ struct_data = res.data
+
+ # 将结构体数据转换为模型数据
+ model_data = self._convert_struct_data_to_model(struct_data)
+
+ # 更新通道参数
+ self.model.set_channel_params(model_data['channel_params'])
+ # 清除现有滤波器
+ self.model.filters.clear()
+
+ if model_data['channel_id'] == self.model.channel_id:
+ for filter_param in model_data['filters']:
+ # 检查滤波器的关键参数是否都为0
+ if not (filter_param.frequency == 0 and
+ filter_param.q_value == 0 and
+ filter_param.gain == 0 and
+ filter_param.slope == 0):
+ self.model.filters.append(filter_param)
+
+ self.widget.setModel(self.model)
+ print("有效的滤波器数量:", len(self.model.filters))
+
+ except Exception as e:
+ self.state = AudioControllerState.ERROR
+ self.error_occurred.emit(f"更新参数时发生错误: {str(e)}")
+
+ def _convert_model_data_to_struct(self, model_data: Dict[str, Any]) -> Dict[str, Any]:
+ """将模型数据转换为结构体格式"""
+ result = {}
+ channel_id = model_data['channel_id']
+
+ # 添加通道参数
+ channel_params = model_data['channel_params']
+
+ # 混音参数
+ result[f'tuning_parameters.mix_parameters[{channel_id}].ch_n'] = channel_id
+ result[f'tuning_parameters.mix_parameters[{channel_id}].mix_left_data'] = channel_params['mix_left']
+ result[f'tuning_parameters.mix_parameters[{channel_id}].mix_right_data'] = channel_params['mix_right']
+
+ # 延迟参数
+ result[f'tuning_parameters.delay_parameters[{channel_id}].ch_n'] = channel_id
+ result[f'tuning_parameters.delay_parameters[{channel_id}].delay_data'] = channel_params['delay']
+
+ # 音量参数
+ result[f'tuning_parameters.volume_parameters[{channel_id}].ch_n'] = channel_id
+ result[f'tuning_parameters.volume_parameters[{channel_id}].vol_data'] = channel_params['volume']
+
+ # 均衡器参数
+ for i, filter_param in enumerate(model_data['filters']):
+ base_idx = (channel_id) * 20 + i # 每个通道20个均衡器单元
+ result[f'tuning_parameters.eq_parameters[{base_idx}].fc'] = filter_param['frequency']
+ result[f'tuning_parameters.eq_parameters[{base_idx}].q'] = filter_param['q_value']
+ result[f'tuning_parameters.eq_parameters[{base_idx}].gain'] = filter_param['gain']
+ result[f'tuning_parameters.eq_parameters[{base_idx}].slope'] = filter_param['slope']
+ result[f'tuning_parameters.eq_parameters[{base_idx}].filterType'] = filter_param['filter_type'].value
+
+ return result
def sync_to_server(self):
"""同步数据到服务器"""
try:
self.state = AudioControllerState.UPDATING
params = self.model.get_all_data()
- ServiceManager.instance().params_service.set_params(params)
+ # 转换数据格式
+ struct_params = self._convert_model_data_to_struct(params)
+ print("sync_to_server:", struct_params)
+ ServiceManager.instance().params_service.set_params(self.widget, struct_params)
except Exception as e:
self.state = AudioControllerState.ERROR
self.error_occurred.emit(f"Error syncing to server: {str(e)}")
-
+
def load_from_server(self):
"""从服务器加载数据"""
try:
- print("BBBBBB:load_from_server")
self.state = AudioControllerState.UPDATING
- ServiceManager.instance().params_service.get_params(self.widget)
+ channel_id = self.model.channel_id
+
+ # 构建需要获取的参数键列表
+ param_keys = []
+
+ # 添加通道基本参数的键
+ param_keys.extend([
+ 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'
+ ])
+
+ # 添加当前通道的20个滤波器的所有参数键
+ base_idx = (channel_id) * 20
+ for i in range(20): # 固定生成20个滤波器的参数键
+ idx = base_idx + i
+ param_keys.extend([
+ f'tuning_parameters.eq_parameters[{idx}].fc',
+ f'tuning_parameters.eq_parameters[{idx}].q',
+ f'tuning_parameters.eq_parameters[{idx}].gain',
+ f'tuning_parameters.eq_parameters[{idx}].slope',
+ f'tuning_parameters.eq_parameters[{idx}].filterType'
+ ])
+ print(f"aa param_keys:",param_keys)
+ ServiceManager.instance().params_service.get_params(
+ self.widget,
+ param_keys,
+ callback=self._on_params_updated_new
+ )
except Exception as e:
self.state = AudioControllerState.ERROR
- self.error_occurred.emit(f"Error loading from server: {str(e)}")
+ self.error_occurred.emit(f"从服务器加载数据时发生错误: {str(e)}")
# 模型信号处理器
def _on_model_data_changed(self):
diff --git a/component/widget_filter/audio_filter_model.py b/component/widget_filter/audio_filter_model.py
index d3ed556..1c769c4 100644
--- a/component/widget_filter/audio_filter_model.py
+++ b/component/widget_filter/audio_filter_model.py
@@ -88,7 +88,7 @@ class AudioFilterModel(QObject):
def add_filter(self, filter_params: FilterParams):
"""添加新的滤波器"""
self.filters.append(filter_params)
- self.filterAdded.emit(len(self.filters) - 1)
+ # self.filterAdded.emit(len(self.filters) - 1)
self.updateData()
def remove_filter(self, index: int):
diff --git a/component/widget_main/__pycache__/__init__.cpython-313.pyc b/component/widget_main/__pycache__/__init__.cpython-313.pyc
index 806555a..65cf329 100644
Binary files a/component/widget_main/__pycache__/__init__.cpython-313.pyc and b/component/widget_main/__pycache__/__init__.cpython-313.pyc differ
diff --git a/component/widget_main/__pycache__/ui_widget_main.cpython-313.pyc b/component/widget_main/__pycache__/ui_widget_main.cpython-313.pyc
index 4c57ef7..8061edf 100644
Binary files a/component/widget_main/__pycache__/ui_widget_main.cpython-313.pyc and b/component/widget_main/__pycache__/ui_widget_main.cpython-313.pyc differ
diff --git a/component/widget_main/__pycache__/widget_main.cpython-313.pyc b/component/widget_main/__pycache__/widget_main.cpython-313.pyc
index b1dd7b8..f6c4131 100644
Binary files a/component/widget_main/__pycache__/widget_main.cpython-313.pyc and b/component/widget_main/__pycache__/widget_main.cpython-313.pyc differ
diff --git a/doc/struct_members.txt b/doc/struct_members.txt
new file mode 100644
index 0000000..2a09246
--- /dev/null
+++ b/doc/struct_members.txt
@@ -0,0 +1,644 @@
+dataset.audio_mode: offset 0 (int32_t)
+dataset.send_action: offset 4 (int32_t)
+dataset.tuning_parameters.mix_parameters[0].ch_n: offset 8 (int32_t)
+dataset.tuning_parameters.mix_parameters[1].ch_n: offset 20 (int32_t)
+dataset.tuning_parameters.mix_parameters[2].ch_n: offset 32 (int32_t)
+dataset.tuning_parameters.mix_parameters[3].ch_n: offset 44 (int32_t)
+dataset.tuning_parameters.mix_parameters[4].ch_n: offset 56 (int32_t)
+dataset.tuning_parameters.mix_parameters[5].ch_n: offset 68 (int32_t)
+dataset.tuning_parameters.mix_parameters[0].mix_left_data: offset 12 (float)
+dataset.tuning_parameters.mix_parameters[1].mix_left_data: offset 24 (float)
+dataset.tuning_parameters.mix_parameters[2].mix_left_data: offset 36 (float)
+dataset.tuning_parameters.mix_parameters[3].mix_left_data: offset 48 (float)
+dataset.tuning_parameters.mix_parameters[4].mix_left_data: offset 60 (float)
+dataset.tuning_parameters.mix_parameters[5].mix_left_data: offset 72 (float)
+dataset.tuning_parameters.mix_parameters[0].mix_right_data: offset 16 (float)
+dataset.tuning_parameters.mix_parameters[1].mix_right_data: offset 28 (float)
+dataset.tuning_parameters.mix_parameters[2].mix_right_data: offset 40 (float)
+dataset.tuning_parameters.mix_parameters[3].mix_right_data: offset 52 (float)
+dataset.tuning_parameters.mix_parameters[4].mix_right_data: offset 64 (float)
+dataset.tuning_parameters.mix_parameters[5].mix_right_data: offset 76 (float)
+dataset.tuning_parameters.eq_parameters[0].fc: offset 80 (float)
+dataset.tuning_parameters.eq_parameters[1].fc: offset 100 (float)
+dataset.tuning_parameters.eq_parameters[2].fc: offset 120 (float)
+dataset.tuning_parameters.eq_parameters[3].fc: offset 140 (float)
+dataset.tuning_parameters.eq_parameters[4].fc: offset 160 (float)
+dataset.tuning_parameters.eq_parameters[5].fc: offset 180 (float)
+dataset.tuning_parameters.eq_parameters[6].fc: offset 200 (float)
+dataset.tuning_parameters.eq_parameters[7].fc: offset 220 (float)
+dataset.tuning_parameters.eq_parameters[8].fc: offset 240 (float)
+dataset.tuning_parameters.eq_parameters[9].fc: offset 260 (float)
+dataset.tuning_parameters.eq_parameters[10].fc: offset 280 (float)
+dataset.tuning_parameters.eq_parameters[11].fc: offset 300 (float)
+dataset.tuning_parameters.eq_parameters[12].fc: offset 320 (float)
+dataset.tuning_parameters.eq_parameters[13].fc: offset 340 (float)
+dataset.tuning_parameters.eq_parameters[14].fc: offset 360 (float)
+dataset.tuning_parameters.eq_parameters[15].fc: offset 380 (float)
+dataset.tuning_parameters.eq_parameters[16].fc: offset 400 (float)
+dataset.tuning_parameters.eq_parameters[17].fc: offset 420 (float)
+dataset.tuning_parameters.eq_parameters[18].fc: offset 440 (float)
+dataset.tuning_parameters.eq_parameters[19].fc: offset 460 (float)
+dataset.tuning_parameters.eq_parameters[20].fc: offset 480 (float)
+dataset.tuning_parameters.eq_parameters[21].fc: offset 500 (float)
+dataset.tuning_parameters.eq_parameters[22].fc: offset 520 (float)
+dataset.tuning_parameters.eq_parameters[23].fc: offset 540 (float)
+dataset.tuning_parameters.eq_parameters[24].fc: offset 560 (float)
+dataset.tuning_parameters.eq_parameters[25].fc: offset 580 (float)
+dataset.tuning_parameters.eq_parameters[26].fc: offset 600 (float)
+dataset.tuning_parameters.eq_parameters[27].fc: offset 620 (float)
+dataset.tuning_parameters.eq_parameters[28].fc: offset 640 (float)
+dataset.tuning_parameters.eq_parameters[29].fc: offset 660 (float)
+dataset.tuning_parameters.eq_parameters[30].fc: offset 680 (float)
+dataset.tuning_parameters.eq_parameters[31].fc: offset 700 (float)
+dataset.tuning_parameters.eq_parameters[32].fc: offset 720 (float)
+dataset.tuning_parameters.eq_parameters[33].fc: offset 740 (float)
+dataset.tuning_parameters.eq_parameters[34].fc: offset 760 (float)
+dataset.tuning_parameters.eq_parameters[35].fc: offset 780 (float)
+dataset.tuning_parameters.eq_parameters[36].fc: offset 800 (float)
+dataset.tuning_parameters.eq_parameters[37].fc: offset 820 (float)
+dataset.tuning_parameters.eq_parameters[38].fc: offset 840 (float)
+dataset.tuning_parameters.eq_parameters[39].fc: offset 860 (float)
+dataset.tuning_parameters.eq_parameters[40].fc: offset 880 (float)
+dataset.tuning_parameters.eq_parameters[41].fc: offset 900 (float)
+dataset.tuning_parameters.eq_parameters[42].fc: offset 920 (float)
+dataset.tuning_parameters.eq_parameters[43].fc: offset 940 (float)
+dataset.tuning_parameters.eq_parameters[44].fc: offset 960 (float)
+dataset.tuning_parameters.eq_parameters[45].fc: offset 980 (float)
+dataset.tuning_parameters.eq_parameters[46].fc: offset 1000 (float)
+dataset.tuning_parameters.eq_parameters[47].fc: offset 1020 (float)
+dataset.tuning_parameters.eq_parameters[48].fc: offset 1040 (float)
+dataset.tuning_parameters.eq_parameters[49].fc: offset 1060 (float)
+dataset.tuning_parameters.eq_parameters[50].fc: offset 1080 (float)
+dataset.tuning_parameters.eq_parameters[51].fc: offset 1100 (float)
+dataset.tuning_parameters.eq_parameters[52].fc: offset 1120 (float)
+dataset.tuning_parameters.eq_parameters[53].fc: offset 1140 (float)
+dataset.tuning_parameters.eq_parameters[54].fc: offset 1160 (float)
+dataset.tuning_parameters.eq_parameters[55].fc: offset 1180 (float)
+dataset.tuning_parameters.eq_parameters[56].fc: offset 1200 (float)
+dataset.tuning_parameters.eq_parameters[57].fc: offset 1220 (float)
+dataset.tuning_parameters.eq_parameters[58].fc: offset 1240 (float)
+dataset.tuning_parameters.eq_parameters[59].fc: offset 1260 (float)
+dataset.tuning_parameters.eq_parameters[60].fc: offset 1280 (float)
+dataset.tuning_parameters.eq_parameters[61].fc: offset 1300 (float)
+dataset.tuning_parameters.eq_parameters[62].fc: offset 1320 (float)
+dataset.tuning_parameters.eq_parameters[63].fc: offset 1340 (float)
+dataset.tuning_parameters.eq_parameters[64].fc: offset 1360 (float)
+dataset.tuning_parameters.eq_parameters[65].fc: offset 1380 (float)
+dataset.tuning_parameters.eq_parameters[66].fc: offset 1400 (float)
+dataset.tuning_parameters.eq_parameters[67].fc: offset 1420 (float)
+dataset.tuning_parameters.eq_parameters[68].fc: offset 1440 (float)
+dataset.tuning_parameters.eq_parameters[69].fc: offset 1460 (float)
+dataset.tuning_parameters.eq_parameters[70].fc: offset 1480 (float)
+dataset.tuning_parameters.eq_parameters[71].fc: offset 1500 (float)
+dataset.tuning_parameters.eq_parameters[72].fc: offset 1520 (float)
+dataset.tuning_parameters.eq_parameters[73].fc: offset 1540 (float)
+dataset.tuning_parameters.eq_parameters[74].fc: offset 1560 (float)
+dataset.tuning_parameters.eq_parameters[75].fc: offset 1580 (float)
+dataset.tuning_parameters.eq_parameters[76].fc: offset 1600 (float)
+dataset.tuning_parameters.eq_parameters[77].fc: offset 1620 (float)
+dataset.tuning_parameters.eq_parameters[78].fc: offset 1640 (float)
+dataset.tuning_parameters.eq_parameters[79].fc: offset 1660 (float)
+dataset.tuning_parameters.eq_parameters[80].fc: offset 1680 (float)
+dataset.tuning_parameters.eq_parameters[81].fc: offset 1700 (float)
+dataset.tuning_parameters.eq_parameters[82].fc: offset 1720 (float)
+dataset.tuning_parameters.eq_parameters[83].fc: offset 1740 (float)
+dataset.tuning_parameters.eq_parameters[84].fc: offset 1760 (float)
+dataset.tuning_parameters.eq_parameters[85].fc: offset 1780 (float)
+dataset.tuning_parameters.eq_parameters[86].fc: offset 1800 (float)
+dataset.tuning_parameters.eq_parameters[87].fc: offset 1820 (float)
+dataset.tuning_parameters.eq_parameters[88].fc: offset 1840 (float)
+dataset.tuning_parameters.eq_parameters[89].fc: offset 1860 (float)
+dataset.tuning_parameters.eq_parameters[90].fc: offset 1880 (float)
+dataset.tuning_parameters.eq_parameters[91].fc: offset 1900 (float)
+dataset.tuning_parameters.eq_parameters[92].fc: offset 1920 (float)
+dataset.tuning_parameters.eq_parameters[93].fc: offset 1940 (float)
+dataset.tuning_parameters.eq_parameters[94].fc: offset 1960 (float)
+dataset.tuning_parameters.eq_parameters[95].fc: offset 1980 (float)
+dataset.tuning_parameters.eq_parameters[96].fc: offset 2000 (float)
+dataset.tuning_parameters.eq_parameters[97].fc: offset 2020 (float)
+dataset.tuning_parameters.eq_parameters[98].fc: offset 2040 (float)
+dataset.tuning_parameters.eq_parameters[99].fc: offset 2060 (float)
+dataset.tuning_parameters.eq_parameters[100].fc: offset 2080 (float)
+dataset.tuning_parameters.eq_parameters[101].fc: offset 2100 (float)
+dataset.tuning_parameters.eq_parameters[102].fc: offset 2120 (float)
+dataset.tuning_parameters.eq_parameters[103].fc: offset 2140 (float)
+dataset.tuning_parameters.eq_parameters[104].fc: offset 2160 (float)
+dataset.tuning_parameters.eq_parameters[105].fc: offset 2180 (float)
+dataset.tuning_parameters.eq_parameters[106].fc: offset 2200 (float)
+dataset.tuning_parameters.eq_parameters[107].fc: offset 2220 (float)
+dataset.tuning_parameters.eq_parameters[108].fc: offset 2240 (float)
+dataset.tuning_parameters.eq_parameters[109].fc: offset 2260 (float)
+dataset.tuning_parameters.eq_parameters[110].fc: offset 2280 (float)
+dataset.tuning_parameters.eq_parameters[111].fc: offset 2300 (float)
+dataset.tuning_parameters.eq_parameters[112].fc: offset 2320 (float)
+dataset.tuning_parameters.eq_parameters[113].fc: offset 2340 (float)
+dataset.tuning_parameters.eq_parameters[114].fc: offset 2360 (float)
+dataset.tuning_parameters.eq_parameters[115].fc: offset 2380 (float)
+dataset.tuning_parameters.eq_parameters[116].fc: offset 2400 (float)
+dataset.tuning_parameters.eq_parameters[117].fc: offset 2420 (float)
+dataset.tuning_parameters.eq_parameters[118].fc: offset 2440 (float)
+dataset.tuning_parameters.eq_parameters[119].fc: offset 2460 (float)
+dataset.tuning_parameters.eq_parameters[0].q: offset 84 (float)
+dataset.tuning_parameters.eq_parameters[1].q: offset 104 (float)
+dataset.tuning_parameters.eq_parameters[2].q: offset 124 (float)
+dataset.tuning_parameters.eq_parameters[3].q: offset 144 (float)
+dataset.tuning_parameters.eq_parameters[4].q: offset 164 (float)
+dataset.tuning_parameters.eq_parameters[5].q: offset 184 (float)
+dataset.tuning_parameters.eq_parameters[6].q: offset 204 (float)
+dataset.tuning_parameters.eq_parameters[7].q: offset 224 (float)
+dataset.tuning_parameters.eq_parameters[8].q: offset 244 (float)
+dataset.tuning_parameters.eq_parameters[9].q: offset 264 (float)
+dataset.tuning_parameters.eq_parameters[10].q: offset 284 (float)
+dataset.tuning_parameters.eq_parameters[11].q: offset 304 (float)
+dataset.tuning_parameters.eq_parameters[12].q: offset 324 (float)
+dataset.tuning_parameters.eq_parameters[13].q: offset 344 (float)
+dataset.tuning_parameters.eq_parameters[14].q: offset 364 (float)
+dataset.tuning_parameters.eq_parameters[15].q: offset 384 (float)
+dataset.tuning_parameters.eq_parameters[16].q: offset 404 (float)
+dataset.tuning_parameters.eq_parameters[17].q: offset 424 (float)
+dataset.tuning_parameters.eq_parameters[18].q: offset 444 (float)
+dataset.tuning_parameters.eq_parameters[19].q: offset 464 (float)
+dataset.tuning_parameters.eq_parameters[20].q: offset 484 (float)
+dataset.tuning_parameters.eq_parameters[21].q: offset 504 (float)
+dataset.tuning_parameters.eq_parameters[22].q: offset 524 (float)
+dataset.tuning_parameters.eq_parameters[23].q: offset 544 (float)
+dataset.tuning_parameters.eq_parameters[24].q: offset 564 (float)
+dataset.tuning_parameters.eq_parameters[25].q: offset 584 (float)
+dataset.tuning_parameters.eq_parameters[26].q: offset 604 (float)
+dataset.tuning_parameters.eq_parameters[27].q: offset 624 (float)
+dataset.tuning_parameters.eq_parameters[28].q: offset 644 (float)
+dataset.tuning_parameters.eq_parameters[29].q: offset 664 (float)
+dataset.tuning_parameters.eq_parameters[30].q: offset 684 (float)
+dataset.tuning_parameters.eq_parameters[31].q: offset 704 (float)
+dataset.tuning_parameters.eq_parameters[32].q: offset 724 (float)
+dataset.tuning_parameters.eq_parameters[33].q: offset 744 (float)
+dataset.tuning_parameters.eq_parameters[34].q: offset 764 (float)
+dataset.tuning_parameters.eq_parameters[35].q: offset 784 (float)
+dataset.tuning_parameters.eq_parameters[36].q: offset 804 (float)
+dataset.tuning_parameters.eq_parameters[37].q: offset 824 (float)
+dataset.tuning_parameters.eq_parameters[38].q: offset 844 (float)
+dataset.tuning_parameters.eq_parameters[39].q: offset 864 (float)
+dataset.tuning_parameters.eq_parameters[40].q: offset 884 (float)
+dataset.tuning_parameters.eq_parameters[41].q: offset 904 (float)
+dataset.tuning_parameters.eq_parameters[42].q: offset 924 (float)
+dataset.tuning_parameters.eq_parameters[43].q: offset 944 (float)
+dataset.tuning_parameters.eq_parameters[44].q: offset 964 (float)
+dataset.tuning_parameters.eq_parameters[45].q: offset 984 (float)
+dataset.tuning_parameters.eq_parameters[46].q: offset 1004 (float)
+dataset.tuning_parameters.eq_parameters[47].q: offset 1024 (float)
+dataset.tuning_parameters.eq_parameters[48].q: offset 1044 (float)
+dataset.tuning_parameters.eq_parameters[49].q: offset 1064 (float)
+dataset.tuning_parameters.eq_parameters[50].q: offset 1084 (float)
+dataset.tuning_parameters.eq_parameters[51].q: offset 1104 (float)
+dataset.tuning_parameters.eq_parameters[52].q: offset 1124 (float)
+dataset.tuning_parameters.eq_parameters[53].q: offset 1144 (float)
+dataset.tuning_parameters.eq_parameters[54].q: offset 1164 (float)
+dataset.tuning_parameters.eq_parameters[55].q: offset 1184 (float)
+dataset.tuning_parameters.eq_parameters[56].q: offset 1204 (float)
+dataset.tuning_parameters.eq_parameters[57].q: offset 1224 (float)
+dataset.tuning_parameters.eq_parameters[58].q: offset 1244 (float)
+dataset.tuning_parameters.eq_parameters[59].q: offset 1264 (float)
+dataset.tuning_parameters.eq_parameters[60].q: offset 1284 (float)
+dataset.tuning_parameters.eq_parameters[61].q: offset 1304 (float)
+dataset.tuning_parameters.eq_parameters[62].q: offset 1324 (float)
+dataset.tuning_parameters.eq_parameters[63].q: offset 1344 (float)
+dataset.tuning_parameters.eq_parameters[64].q: offset 1364 (float)
+dataset.tuning_parameters.eq_parameters[65].q: offset 1384 (float)
+dataset.tuning_parameters.eq_parameters[66].q: offset 1404 (float)
+dataset.tuning_parameters.eq_parameters[67].q: offset 1424 (float)
+dataset.tuning_parameters.eq_parameters[68].q: offset 1444 (float)
+dataset.tuning_parameters.eq_parameters[69].q: offset 1464 (float)
+dataset.tuning_parameters.eq_parameters[70].q: offset 1484 (float)
+dataset.tuning_parameters.eq_parameters[71].q: offset 1504 (float)
+dataset.tuning_parameters.eq_parameters[72].q: offset 1524 (float)
+dataset.tuning_parameters.eq_parameters[73].q: offset 1544 (float)
+dataset.tuning_parameters.eq_parameters[74].q: offset 1564 (float)
+dataset.tuning_parameters.eq_parameters[75].q: offset 1584 (float)
+dataset.tuning_parameters.eq_parameters[76].q: offset 1604 (float)
+dataset.tuning_parameters.eq_parameters[77].q: offset 1624 (float)
+dataset.tuning_parameters.eq_parameters[78].q: offset 1644 (float)
+dataset.tuning_parameters.eq_parameters[79].q: offset 1664 (float)
+dataset.tuning_parameters.eq_parameters[80].q: offset 1684 (float)
+dataset.tuning_parameters.eq_parameters[81].q: offset 1704 (float)
+dataset.tuning_parameters.eq_parameters[82].q: offset 1724 (float)
+dataset.tuning_parameters.eq_parameters[83].q: offset 1744 (float)
+dataset.tuning_parameters.eq_parameters[84].q: offset 1764 (float)
+dataset.tuning_parameters.eq_parameters[85].q: offset 1784 (float)
+dataset.tuning_parameters.eq_parameters[86].q: offset 1804 (float)
+dataset.tuning_parameters.eq_parameters[87].q: offset 1824 (float)
+dataset.tuning_parameters.eq_parameters[88].q: offset 1844 (float)
+dataset.tuning_parameters.eq_parameters[89].q: offset 1864 (float)
+dataset.tuning_parameters.eq_parameters[90].q: offset 1884 (float)
+dataset.tuning_parameters.eq_parameters[91].q: offset 1904 (float)
+dataset.tuning_parameters.eq_parameters[92].q: offset 1924 (float)
+dataset.tuning_parameters.eq_parameters[93].q: offset 1944 (float)
+dataset.tuning_parameters.eq_parameters[94].q: offset 1964 (float)
+dataset.tuning_parameters.eq_parameters[95].q: offset 1984 (float)
+dataset.tuning_parameters.eq_parameters[96].q: offset 2004 (float)
+dataset.tuning_parameters.eq_parameters[97].q: offset 2024 (float)
+dataset.tuning_parameters.eq_parameters[98].q: offset 2044 (float)
+dataset.tuning_parameters.eq_parameters[99].q: offset 2064 (float)
+dataset.tuning_parameters.eq_parameters[100].q: offset 2084 (float)
+dataset.tuning_parameters.eq_parameters[101].q: offset 2104 (float)
+dataset.tuning_parameters.eq_parameters[102].q: offset 2124 (float)
+dataset.tuning_parameters.eq_parameters[103].q: offset 2144 (float)
+dataset.tuning_parameters.eq_parameters[104].q: offset 2164 (float)
+dataset.tuning_parameters.eq_parameters[105].q: offset 2184 (float)
+dataset.tuning_parameters.eq_parameters[106].q: offset 2204 (float)
+dataset.tuning_parameters.eq_parameters[107].q: offset 2224 (float)
+dataset.tuning_parameters.eq_parameters[108].q: offset 2244 (float)
+dataset.tuning_parameters.eq_parameters[109].q: offset 2264 (float)
+dataset.tuning_parameters.eq_parameters[110].q: offset 2284 (float)
+dataset.tuning_parameters.eq_parameters[111].q: offset 2304 (float)
+dataset.tuning_parameters.eq_parameters[112].q: offset 2324 (float)
+dataset.tuning_parameters.eq_parameters[113].q: offset 2344 (float)
+dataset.tuning_parameters.eq_parameters[114].q: offset 2364 (float)
+dataset.tuning_parameters.eq_parameters[115].q: offset 2384 (float)
+dataset.tuning_parameters.eq_parameters[116].q: offset 2404 (float)
+dataset.tuning_parameters.eq_parameters[117].q: offset 2424 (float)
+dataset.tuning_parameters.eq_parameters[118].q: offset 2444 (float)
+dataset.tuning_parameters.eq_parameters[119].q: offset 2464 (float)
+dataset.tuning_parameters.eq_parameters[0].gain: offset 88 (float)
+dataset.tuning_parameters.eq_parameters[1].gain: offset 108 (float)
+dataset.tuning_parameters.eq_parameters[2].gain: offset 128 (float)
+dataset.tuning_parameters.eq_parameters[3].gain: offset 148 (float)
+dataset.tuning_parameters.eq_parameters[4].gain: offset 168 (float)
+dataset.tuning_parameters.eq_parameters[5].gain: offset 188 (float)
+dataset.tuning_parameters.eq_parameters[6].gain: offset 208 (float)
+dataset.tuning_parameters.eq_parameters[7].gain: offset 228 (float)
+dataset.tuning_parameters.eq_parameters[8].gain: offset 248 (float)
+dataset.tuning_parameters.eq_parameters[9].gain: offset 268 (float)
+dataset.tuning_parameters.eq_parameters[10].gain: offset 288 (float)
+dataset.tuning_parameters.eq_parameters[11].gain: offset 308 (float)
+dataset.tuning_parameters.eq_parameters[12].gain: offset 328 (float)
+dataset.tuning_parameters.eq_parameters[13].gain: offset 348 (float)
+dataset.tuning_parameters.eq_parameters[14].gain: offset 368 (float)
+dataset.tuning_parameters.eq_parameters[15].gain: offset 388 (float)
+dataset.tuning_parameters.eq_parameters[16].gain: offset 408 (float)
+dataset.tuning_parameters.eq_parameters[17].gain: offset 428 (float)
+dataset.tuning_parameters.eq_parameters[18].gain: offset 448 (float)
+dataset.tuning_parameters.eq_parameters[19].gain: offset 468 (float)
+dataset.tuning_parameters.eq_parameters[20].gain: offset 488 (float)
+dataset.tuning_parameters.eq_parameters[21].gain: offset 508 (float)
+dataset.tuning_parameters.eq_parameters[22].gain: offset 528 (float)
+dataset.tuning_parameters.eq_parameters[23].gain: offset 548 (float)
+dataset.tuning_parameters.eq_parameters[24].gain: offset 568 (float)
+dataset.tuning_parameters.eq_parameters[25].gain: offset 588 (float)
+dataset.tuning_parameters.eq_parameters[26].gain: offset 608 (float)
+dataset.tuning_parameters.eq_parameters[27].gain: offset 628 (float)
+dataset.tuning_parameters.eq_parameters[28].gain: offset 648 (float)
+dataset.tuning_parameters.eq_parameters[29].gain: offset 668 (float)
+dataset.tuning_parameters.eq_parameters[30].gain: offset 688 (float)
+dataset.tuning_parameters.eq_parameters[31].gain: offset 708 (float)
+dataset.tuning_parameters.eq_parameters[32].gain: offset 728 (float)
+dataset.tuning_parameters.eq_parameters[33].gain: offset 748 (float)
+dataset.tuning_parameters.eq_parameters[34].gain: offset 768 (float)
+dataset.tuning_parameters.eq_parameters[35].gain: offset 788 (float)
+dataset.tuning_parameters.eq_parameters[36].gain: offset 808 (float)
+dataset.tuning_parameters.eq_parameters[37].gain: offset 828 (float)
+dataset.tuning_parameters.eq_parameters[38].gain: offset 848 (float)
+dataset.tuning_parameters.eq_parameters[39].gain: offset 868 (float)
+dataset.tuning_parameters.eq_parameters[40].gain: offset 888 (float)
+dataset.tuning_parameters.eq_parameters[41].gain: offset 908 (float)
+dataset.tuning_parameters.eq_parameters[42].gain: offset 928 (float)
+dataset.tuning_parameters.eq_parameters[43].gain: offset 948 (float)
+dataset.tuning_parameters.eq_parameters[44].gain: offset 968 (float)
+dataset.tuning_parameters.eq_parameters[45].gain: offset 988 (float)
+dataset.tuning_parameters.eq_parameters[46].gain: offset 1008 (float)
+dataset.tuning_parameters.eq_parameters[47].gain: offset 1028 (float)
+dataset.tuning_parameters.eq_parameters[48].gain: offset 1048 (float)
+dataset.tuning_parameters.eq_parameters[49].gain: offset 1068 (float)
+dataset.tuning_parameters.eq_parameters[50].gain: offset 1088 (float)
+dataset.tuning_parameters.eq_parameters[51].gain: offset 1108 (float)
+dataset.tuning_parameters.eq_parameters[52].gain: offset 1128 (float)
+dataset.tuning_parameters.eq_parameters[53].gain: offset 1148 (float)
+dataset.tuning_parameters.eq_parameters[54].gain: offset 1168 (float)
+dataset.tuning_parameters.eq_parameters[55].gain: offset 1188 (float)
+dataset.tuning_parameters.eq_parameters[56].gain: offset 1208 (float)
+dataset.tuning_parameters.eq_parameters[57].gain: offset 1228 (float)
+dataset.tuning_parameters.eq_parameters[58].gain: offset 1248 (float)
+dataset.tuning_parameters.eq_parameters[59].gain: offset 1268 (float)
+dataset.tuning_parameters.eq_parameters[60].gain: offset 1288 (float)
+dataset.tuning_parameters.eq_parameters[61].gain: offset 1308 (float)
+dataset.tuning_parameters.eq_parameters[62].gain: offset 1328 (float)
+dataset.tuning_parameters.eq_parameters[63].gain: offset 1348 (float)
+dataset.tuning_parameters.eq_parameters[64].gain: offset 1368 (float)
+dataset.tuning_parameters.eq_parameters[65].gain: offset 1388 (float)
+dataset.tuning_parameters.eq_parameters[66].gain: offset 1408 (float)
+dataset.tuning_parameters.eq_parameters[67].gain: offset 1428 (float)
+dataset.tuning_parameters.eq_parameters[68].gain: offset 1448 (float)
+dataset.tuning_parameters.eq_parameters[69].gain: offset 1468 (float)
+dataset.tuning_parameters.eq_parameters[70].gain: offset 1488 (float)
+dataset.tuning_parameters.eq_parameters[71].gain: offset 1508 (float)
+dataset.tuning_parameters.eq_parameters[72].gain: offset 1528 (float)
+dataset.tuning_parameters.eq_parameters[73].gain: offset 1548 (float)
+dataset.tuning_parameters.eq_parameters[74].gain: offset 1568 (float)
+dataset.tuning_parameters.eq_parameters[75].gain: offset 1588 (float)
+dataset.tuning_parameters.eq_parameters[76].gain: offset 1608 (float)
+dataset.tuning_parameters.eq_parameters[77].gain: offset 1628 (float)
+dataset.tuning_parameters.eq_parameters[78].gain: offset 1648 (float)
+dataset.tuning_parameters.eq_parameters[79].gain: offset 1668 (float)
+dataset.tuning_parameters.eq_parameters[80].gain: offset 1688 (float)
+dataset.tuning_parameters.eq_parameters[81].gain: offset 1708 (float)
+dataset.tuning_parameters.eq_parameters[82].gain: offset 1728 (float)
+dataset.tuning_parameters.eq_parameters[83].gain: offset 1748 (float)
+dataset.tuning_parameters.eq_parameters[84].gain: offset 1768 (float)
+dataset.tuning_parameters.eq_parameters[85].gain: offset 1788 (float)
+dataset.tuning_parameters.eq_parameters[86].gain: offset 1808 (float)
+dataset.tuning_parameters.eq_parameters[87].gain: offset 1828 (float)
+dataset.tuning_parameters.eq_parameters[88].gain: offset 1848 (float)
+dataset.tuning_parameters.eq_parameters[89].gain: offset 1868 (float)
+dataset.tuning_parameters.eq_parameters[90].gain: offset 1888 (float)
+dataset.tuning_parameters.eq_parameters[91].gain: offset 1908 (float)
+dataset.tuning_parameters.eq_parameters[92].gain: offset 1928 (float)
+dataset.tuning_parameters.eq_parameters[93].gain: offset 1948 (float)
+dataset.tuning_parameters.eq_parameters[94].gain: offset 1968 (float)
+dataset.tuning_parameters.eq_parameters[95].gain: offset 1988 (float)
+dataset.tuning_parameters.eq_parameters[96].gain: offset 2008 (float)
+dataset.tuning_parameters.eq_parameters[97].gain: offset 2028 (float)
+dataset.tuning_parameters.eq_parameters[98].gain: offset 2048 (float)
+dataset.tuning_parameters.eq_parameters[99].gain: offset 2068 (float)
+dataset.tuning_parameters.eq_parameters[100].gain: offset 2088 (float)
+dataset.tuning_parameters.eq_parameters[101].gain: offset 2108 (float)
+dataset.tuning_parameters.eq_parameters[102].gain: offset 2128 (float)
+dataset.tuning_parameters.eq_parameters[103].gain: offset 2148 (float)
+dataset.tuning_parameters.eq_parameters[104].gain: offset 2168 (float)
+dataset.tuning_parameters.eq_parameters[105].gain: offset 2188 (float)
+dataset.tuning_parameters.eq_parameters[106].gain: offset 2208 (float)
+dataset.tuning_parameters.eq_parameters[107].gain: offset 2228 (float)
+dataset.tuning_parameters.eq_parameters[108].gain: offset 2248 (float)
+dataset.tuning_parameters.eq_parameters[109].gain: offset 2268 (float)
+dataset.tuning_parameters.eq_parameters[110].gain: offset 2288 (float)
+dataset.tuning_parameters.eq_parameters[111].gain: offset 2308 (float)
+dataset.tuning_parameters.eq_parameters[112].gain: offset 2328 (float)
+dataset.tuning_parameters.eq_parameters[113].gain: offset 2348 (float)
+dataset.tuning_parameters.eq_parameters[114].gain: offset 2368 (float)
+dataset.tuning_parameters.eq_parameters[115].gain: offset 2388 (float)
+dataset.tuning_parameters.eq_parameters[116].gain: offset 2408 (float)
+dataset.tuning_parameters.eq_parameters[117].gain: offset 2428 (float)
+dataset.tuning_parameters.eq_parameters[118].gain: offset 2448 (float)
+dataset.tuning_parameters.eq_parameters[119].gain: offset 2468 (float)
+dataset.tuning_parameters.eq_parameters[0].slope: offset 92 (int32_t)
+dataset.tuning_parameters.eq_parameters[1].slope: offset 112 (int32_t)
+dataset.tuning_parameters.eq_parameters[2].slope: offset 132 (int32_t)
+dataset.tuning_parameters.eq_parameters[3].slope: offset 152 (int32_t)
+dataset.tuning_parameters.eq_parameters[4].slope: offset 172 (int32_t)
+dataset.tuning_parameters.eq_parameters[5].slope: offset 192 (int32_t)
+dataset.tuning_parameters.eq_parameters[6].slope: offset 212 (int32_t)
+dataset.tuning_parameters.eq_parameters[7].slope: offset 232 (int32_t)
+dataset.tuning_parameters.eq_parameters[8].slope: offset 252 (int32_t)
+dataset.tuning_parameters.eq_parameters[9].slope: offset 272 (int32_t)
+dataset.tuning_parameters.eq_parameters[10].slope: offset 292 (int32_t)
+dataset.tuning_parameters.eq_parameters[11].slope: offset 312 (int32_t)
+dataset.tuning_parameters.eq_parameters[12].slope: offset 332 (int32_t)
+dataset.tuning_parameters.eq_parameters[13].slope: offset 352 (int32_t)
+dataset.tuning_parameters.eq_parameters[14].slope: offset 372 (int32_t)
+dataset.tuning_parameters.eq_parameters[15].slope: offset 392 (int32_t)
+dataset.tuning_parameters.eq_parameters[16].slope: offset 412 (int32_t)
+dataset.tuning_parameters.eq_parameters[17].slope: offset 432 (int32_t)
+dataset.tuning_parameters.eq_parameters[18].slope: offset 452 (int32_t)
+dataset.tuning_parameters.eq_parameters[19].slope: offset 472 (int32_t)
+dataset.tuning_parameters.eq_parameters[20].slope: offset 492 (int32_t)
+dataset.tuning_parameters.eq_parameters[21].slope: offset 512 (int32_t)
+dataset.tuning_parameters.eq_parameters[22].slope: offset 532 (int32_t)
+dataset.tuning_parameters.eq_parameters[23].slope: offset 552 (int32_t)
+dataset.tuning_parameters.eq_parameters[24].slope: offset 572 (int32_t)
+dataset.tuning_parameters.eq_parameters[25].slope: offset 592 (int32_t)
+dataset.tuning_parameters.eq_parameters[26].slope: offset 612 (int32_t)
+dataset.tuning_parameters.eq_parameters[27].slope: offset 632 (int32_t)
+dataset.tuning_parameters.eq_parameters[28].slope: offset 652 (int32_t)
+dataset.tuning_parameters.eq_parameters[29].slope: offset 672 (int32_t)
+dataset.tuning_parameters.eq_parameters[30].slope: offset 692 (int32_t)
+dataset.tuning_parameters.eq_parameters[31].slope: offset 712 (int32_t)
+dataset.tuning_parameters.eq_parameters[32].slope: offset 732 (int32_t)
+dataset.tuning_parameters.eq_parameters[33].slope: offset 752 (int32_t)
+dataset.tuning_parameters.eq_parameters[34].slope: offset 772 (int32_t)
+dataset.tuning_parameters.eq_parameters[35].slope: offset 792 (int32_t)
+dataset.tuning_parameters.eq_parameters[36].slope: offset 812 (int32_t)
+dataset.tuning_parameters.eq_parameters[37].slope: offset 832 (int32_t)
+dataset.tuning_parameters.eq_parameters[38].slope: offset 852 (int32_t)
+dataset.tuning_parameters.eq_parameters[39].slope: offset 872 (int32_t)
+dataset.tuning_parameters.eq_parameters[40].slope: offset 892 (int32_t)
+dataset.tuning_parameters.eq_parameters[41].slope: offset 912 (int32_t)
+dataset.tuning_parameters.eq_parameters[42].slope: offset 932 (int32_t)
+dataset.tuning_parameters.eq_parameters[43].slope: offset 952 (int32_t)
+dataset.tuning_parameters.eq_parameters[44].slope: offset 972 (int32_t)
+dataset.tuning_parameters.eq_parameters[45].slope: offset 992 (int32_t)
+dataset.tuning_parameters.eq_parameters[46].slope: offset 1012 (int32_t)
+dataset.tuning_parameters.eq_parameters[47].slope: offset 1032 (int32_t)
+dataset.tuning_parameters.eq_parameters[48].slope: offset 1052 (int32_t)
+dataset.tuning_parameters.eq_parameters[49].slope: offset 1072 (int32_t)
+dataset.tuning_parameters.eq_parameters[50].slope: offset 1092 (int32_t)
+dataset.tuning_parameters.eq_parameters[51].slope: offset 1112 (int32_t)
+dataset.tuning_parameters.eq_parameters[52].slope: offset 1132 (int32_t)
+dataset.tuning_parameters.eq_parameters[53].slope: offset 1152 (int32_t)
+dataset.tuning_parameters.eq_parameters[54].slope: offset 1172 (int32_t)
+dataset.tuning_parameters.eq_parameters[55].slope: offset 1192 (int32_t)
+dataset.tuning_parameters.eq_parameters[56].slope: offset 1212 (int32_t)
+dataset.tuning_parameters.eq_parameters[57].slope: offset 1232 (int32_t)
+dataset.tuning_parameters.eq_parameters[58].slope: offset 1252 (int32_t)
+dataset.tuning_parameters.eq_parameters[59].slope: offset 1272 (int32_t)
+dataset.tuning_parameters.eq_parameters[60].slope: offset 1292 (int32_t)
+dataset.tuning_parameters.eq_parameters[61].slope: offset 1312 (int32_t)
+dataset.tuning_parameters.eq_parameters[62].slope: offset 1332 (int32_t)
+dataset.tuning_parameters.eq_parameters[63].slope: offset 1352 (int32_t)
+dataset.tuning_parameters.eq_parameters[64].slope: offset 1372 (int32_t)
+dataset.tuning_parameters.eq_parameters[65].slope: offset 1392 (int32_t)
+dataset.tuning_parameters.eq_parameters[66].slope: offset 1412 (int32_t)
+dataset.tuning_parameters.eq_parameters[67].slope: offset 1432 (int32_t)
+dataset.tuning_parameters.eq_parameters[68].slope: offset 1452 (int32_t)
+dataset.tuning_parameters.eq_parameters[69].slope: offset 1472 (int32_t)
+dataset.tuning_parameters.eq_parameters[70].slope: offset 1492 (int32_t)
+dataset.tuning_parameters.eq_parameters[71].slope: offset 1512 (int32_t)
+dataset.tuning_parameters.eq_parameters[72].slope: offset 1532 (int32_t)
+dataset.tuning_parameters.eq_parameters[73].slope: offset 1552 (int32_t)
+dataset.tuning_parameters.eq_parameters[74].slope: offset 1572 (int32_t)
+dataset.tuning_parameters.eq_parameters[75].slope: offset 1592 (int32_t)
+dataset.tuning_parameters.eq_parameters[76].slope: offset 1612 (int32_t)
+dataset.tuning_parameters.eq_parameters[77].slope: offset 1632 (int32_t)
+dataset.tuning_parameters.eq_parameters[78].slope: offset 1652 (int32_t)
+dataset.tuning_parameters.eq_parameters[79].slope: offset 1672 (int32_t)
+dataset.tuning_parameters.eq_parameters[80].slope: offset 1692 (int32_t)
+dataset.tuning_parameters.eq_parameters[81].slope: offset 1712 (int32_t)
+dataset.tuning_parameters.eq_parameters[82].slope: offset 1732 (int32_t)
+dataset.tuning_parameters.eq_parameters[83].slope: offset 1752 (int32_t)
+dataset.tuning_parameters.eq_parameters[84].slope: offset 1772 (int32_t)
+dataset.tuning_parameters.eq_parameters[85].slope: offset 1792 (int32_t)
+dataset.tuning_parameters.eq_parameters[86].slope: offset 1812 (int32_t)
+dataset.tuning_parameters.eq_parameters[87].slope: offset 1832 (int32_t)
+dataset.tuning_parameters.eq_parameters[88].slope: offset 1852 (int32_t)
+dataset.tuning_parameters.eq_parameters[89].slope: offset 1872 (int32_t)
+dataset.tuning_parameters.eq_parameters[90].slope: offset 1892 (int32_t)
+dataset.tuning_parameters.eq_parameters[91].slope: offset 1912 (int32_t)
+dataset.tuning_parameters.eq_parameters[92].slope: offset 1932 (int32_t)
+dataset.tuning_parameters.eq_parameters[93].slope: offset 1952 (int32_t)
+dataset.tuning_parameters.eq_parameters[94].slope: offset 1972 (int32_t)
+dataset.tuning_parameters.eq_parameters[95].slope: offset 1992 (int32_t)
+dataset.tuning_parameters.eq_parameters[96].slope: offset 2012 (int32_t)
+dataset.tuning_parameters.eq_parameters[97].slope: offset 2032 (int32_t)
+dataset.tuning_parameters.eq_parameters[98].slope: offset 2052 (int32_t)
+dataset.tuning_parameters.eq_parameters[99].slope: offset 2072 (int32_t)
+dataset.tuning_parameters.eq_parameters[100].slope: offset 2092 (int32_t)
+dataset.tuning_parameters.eq_parameters[101].slope: offset 2112 (int32_t)
+dataset.tuning_parameters.eq_parameters[102].slope: offset 2132 (int32_t)
+dataset.tuning_parameters.eq_parameters[103].slope: offset 2152 (int32_t)
+dataset.tuning_parameters.eq_parameters[104].slope: offset 2172 (int32_t)
+dataset.tuning_parameters.eq_parameters[105].slope: offset 2192 (int32_t)
+dataset.tuning_parameters.eq_parameters[106].slope: offset 2212 (int32_t)
+dataset.tuning_parameters.eq_parameters[107].slope: offset 2232 (int32_t)
+dataset.tuning_parameters.eq_parameters[108].slope: offset 2252 (int32_t)
+dataset.tuning_parameters.eq_parameters[109].slope: offset 2272 (int32_t)
+dataset.tuning_parameters.eq_parameters[110].slope: offset 2292 (int32_t)
+dataset.tuning_parameters.eq_parameters[111].slope: offset 2312 (int32_t)
+dataset.tuning_parameters.eq_parameters[112].slope: offset 2332 (int32_t)
+dataset.tuning_parameters.eq_parameters[113].slope: offset 2352 (int32_t)
+dataset.tuning_parameters.eq_parameters[114].slope: offset 2372 (int32_t)
+dataset.tuning_parameters.eq_parameters[115].slope: offset 2392 (int32_t)
+dataset.tuning_parameters.eq_parameters[116].slope: offset 2412 (int32_t)
+dataset.tuning_parameters.eq_parameters[117].slope: offset 2432 (int32_t)
+dataset.tuning_parameters.eq_parameters[118].slope: offset 2452 (int32_t)
+dataset.tuning_parameters.eq_parameters[119].slope: offset 2472 (int32_t)
+dataset.tuning_parameters.eq_parameters[0].filterType: offset 96 (int32_t)
+dataset.tuning_parameters.eq_parameters[1].filterType: offset 116 (int32_t)
+dataset.tuning_parameters.eq_parameters[2].filterType: offset 136 (int32_t)
+dataset.tuning_parameters.eq_parameters[3].filterType: offset 156 (int32_t)
+dataset.tuning_parameters.eq_parameters[4].filterType: offset 176 (int32_t)
+dataset.tuning_parameters.eq_parameters[5].filterType: offset 196 (int32_t)
+dataset.tuning_parameters.eq_parameters[6].filterType: offset 216 (int32_t)
+dataset.tuning_parameters.eq_parameters[7].filterType: offset 236 (int32_t)
+dataset.tuning_parameters.eq_parameters[8].filterType: offset 256 (int32_t)
+dataset.tuning_parameters.eq_parameters[9].filterType: offset 276 (int32_t)
+dataset.tuning_parameters.eq_parameters[10].filterType: offset 296 (int32_t)
+dataset.tuning_parameters.eq_parameters[11].filterType: offset 316 (int32_t)
+dataset.tuning_parameters.eq_parameters[12].filterType: offset 336 (int32_t)
+dataset.tuning_parameters.eq_parameters[13].filterType: offset 356 (int32_t)
+dataset.tuning_parameters.eq_parameters[14].filterType: offset 376 (int32_t)
+dataset.tuning_parameters.eq_parameters[15].filterType: offset 396 (int32_t)
+dataset.tuning_parameters.eq_parameters[16].filterType: offset 416 (int32_t)
+dataset.tuning_parameters.eq_parameters[17].filterType: offset 436 (int32_t)
+dataset.tuning_parameters.eq_parameters[18].filterType: offset 456 (int32_t)
+dataset.tuning_parameters.eq_parameters[19].filterType: offset 476 (int32_t)
+dataset.tuning_parameters.eq_parameters[20].filterType: offset 496 (int32_t)
+dataset.tuning_parameters.eq_parameters[21].filterType: offset 516 (int32_t)
+dataset.tuning_parameters.eq_parameters[22].filterType: offset 536 (int32_t)
+dataset.tuning_parameters.eq_parameters[23].filterType: offset 556 (int32_t)
+dataset.tuning_parameters.eq_parameters[24].filterType: offset 576 (int32_t)
+dataset.tuning_parameters.eq_parameters[25].filterType: offset 596 (int32_t)
+dataset.tuning_parameters.eq_parameters[26].filterType: offset 616 (int32_t)
+dataset.tuning_parameters.eq_parameters[27].filterType: offset 636 (int32_t)
+dataset.tuning_parameters.eq_parameters[28].filterType: offset 656 (int32_t)
+dataset.tuning_parameters.eq_parameters[29].filterType: offset 676 (int32_t)
+dataset.tuning_parameters.eq_parameters[30].filterType: offset 696 (int32_t)
+dataset.tuning_parameters.eq_parameters[31].filterType: offset 716 (int32_t)
+dataset.tuning_parameters.eq_parameters[32].filterType: offset 736 (int32_t)
+dataset.tuning_parameters.eq_parameters[33].filterType: offset 756 (int32_t)
+dataset.tuning_parameters.eq_parameters[34].filterType: offset 776 (int32_t)
+dataset.tuning_parameters.eq_parameters[35].filterType: offset 796 (int32_t)
+dataset.tuning_parameters.eq_parameters[36].filterType: offset 816 (int32_t)
+dataset.tuning_parameters.eq_parameters[37].filterType: offset 836 (int32_t)
+dataset.tuning_parameters.eq_parameters[38].filterType: offset 856 (int32_t)
+dataset.tuning_parameters.eq_parameters[39].filterType: offset 876 (int32_t)
+dataset.tuning_parameters.eq_parameters[40].filterType: offset 896 (int32_t)
+dataset.tuning_parameters.eq_parameters[41].filterType: offset 916 (int32_t)
+dataset.tuning_parameters.eq_parameters[42].filterType: offset 936 (int32_t)
+dataset.tuning_parameters.eq_parameters[43].filterType: offset 956 (int32_t)
+dataset.tuning_parameters.eq_parameters[44].filterType: offset 976 (int32_t)
+dataset.tuning_parameters.eq_parameters[45].filterType: offset 996 (int32_t)
+dataset.tuning_parameters.eq_parameters[46].filterType: offset 1016 (int32_t)
+dataset.tuning_parameters.eq_parameters[47].filterType: offset 1036 (int32_t)
+dataset.tuning_parameters.eq_parameters[48].filterType: offset 1056 (int32_t)
+dataset.tuning_parameters.eq_parameters[49].filterType: offset 1076 (int32_t)
+dataset.tuning_parameters.eq_parameters[50].filterType: offset 1096 (int32_t)
+dataset.tuning_parameters.eq_parameters[51].filterType: offset 1116 (int32_t)
+dataset.tuning_parameters.eq_parameters[52].filterType: offset 1136 (int32_t)
+dataset.tuning_parameters.eq_parameters[53].filterType: offset 1156 (int32_t)
+dataset.tuning_parameters.eq_parameters[54].filterType: offset 1176 (int32_t)
+dataset.tuning_parameters.eq_parameters[55].filterType: offset 1196 (int32_t)
+dataset.tuning_parameters.eq_parameters[56].filterType: offset 1216 (int32_t)
+dataset.tuning_parameters.eq_parameters[57].filterType: offset 1236 (int32_t)
+dataset.tuning_parameters.eq_parameters[58].filterType: offset 1256 (int32_t)
+dataset.tuning_parameters.eq_parameters[59].filterType: offset 1276 (int32_t)
+dataset.tuning_parameters.eq_parameters[60].filterType: offset 1296 (int32_t)
+dataset.tuning_parameters.eq_parameters[61].filterType: offset 1316 (int32_t)
+dataset.tuning_parameters.eq_parameters[62].filterType: offset 1336 (int32_t)
+dataset.tuning_parameters.eq_parameters[63].filterType: offset 1356 (int32_t)
+dataset.tuning_parameters.eq_parameters[64].filterType: offset 1376 (int32_t)
+dataset.tuning_parameters.eq_parameters[65].filterType: offset 1396 (int32_t)
+dataset.tuning_parameters.eq_parameters[66].filterType: offset 1416 (int32_t)
+dataset.tuning_parameters.eq_parameters[67].filterType: offset 1436 (int32_t)
+dataset.tuning_parameters.eq_parameters[68].filterType: offset 1456 (int32_t)
+dataset.tuning_parameters.eq_parameters[69].filterType: offset 1476 (int32_t)
+dataset.tuning_parameters.eq_parameters[70].filterType: offset 1496 (int32_t)
+dataset.tuning_parameters.eq_parameters[71].filterType: offset 1516 (int32_t)
+dataset.tuning_parameters.eq_parameters[72].filterType: offset 1536 (int32_t)
+dataset.tuning_parameters.eq_parameters[73].filterType: offset 1556 (int32_t)
+dataset.tuning_parameters.eq_parameters[74].filterType: offset 1576 (int32_t)
+dataset.tuning_parameters.eq_parameters[75].filterType: offset 1596 (int32_t)
+dataset.tuning_parameters.eq_parameters[76].filterType: offset 1616 (int32_t)
+dataset.tuning_parameters.eq_parameters[77].filterType: offset 1636 (int32_t)
+dataset.tuning_parameters.eq_parameters[78].filterType: offset 1656 (int32_t)
+dataset.tuning_parameters.eq_parameters[79].filterType: offset 1676 (int32_t)
+dataset.tuning_parameters.eq_parameters[80].filterType: offset 1696 (int32_t)
+dataset.tuning_parameters.eq_parameters[81].filterType: offset 1716 (int32_t)
+dataset.tuning_parameters.eq_parameters[82].filterType: offset 1736 (int32_t)
+dataset.tuning_parameters.eq_parameters[83].filterType: offset 1756 (int32_t)
+dataset.tuning_parameters.eq_parameters[84].filterType: offset 1776 (int32_t)
+dataset.tuning_parameters.eq_parameters[85].filterType: offset 1796 (int32_t)
+dataset.tuning_parameters.eq_parameters[86].filterType: offset 1816 (int32_t)
+dataset.tuning_parameters.eq_parameters[87].filterType: offset 1836 (int32_t)
+dataset.tuning_parameters.eq_parameters[88].filterType: offset 1856 (int32_t)
+dataset.tuning_parameters.eq_parameters[89].filterType: offset 1876 (int32_t)
+dataset.tuning_parameters.eq_parameters[90].filterType: offset 1896 (int32_t)
+dataset.tuning_parameters.eq_parameters[91].filterType: offset 1916 (int32_t)
+dataset.tuning_parameters.eq_parameters[92].filterType: offset 1936 (int32_t)
+dataset.tuning_parameters.eq_parameters[93].filterType: offset 1956 (int32_t)
+dataset.tuning_parameters.eq_parameters[94].filterType: offset 1976 (int32_t)
+dataset.tuning_parameters.eq_parameters[95].filterType: offset 1996 (int32_t)
+dataset.tuning_parameters.eq_parameters[96].filterType: offset 2016 (int32_t)
+dataset.tuning_parameters.eq_parameters[97].filterType: offset 2036 (int32_t)
+dataset.tuning_parameters.eq_parameters[98].filterType: offset 2056 (int32_t)
+dataset.tuning_parameters.eq_parameters[99].filterType: offset 2076 (int32_t)
+dataset.tuning_parameters.eq_parameters[100].filterType: offset 2096 (int32_t)
+dataset.tuning_parameters.eq_parameters[101].filterType: offset 2116 (int32_t)
+dataset.tuning_parameters.eq_parameters[102].filterType: offset 2136 (int32_t)
+dataset.tuning_parameters.eq_parameters[103].filterType: offset 2156 (int32_t)
+dataset.tuning_parameters.eq_parameters[104].filterType: offset 2176 (int32_t)
+dataset.tuning_parameters.eq_parameters[105].filterType: offset 2196 (int32_t)
+dataset.tuning_parameters.eq_parameters[106].filterType: offset 2216 (int32_t)
+dataset.tuning_parameters.eq_parameters[107].filterType: offset 2236 (int32_t)
+dataset.tuning_parameters.eq_parameters[108].filterType: offset 2256 (int32_t)
+dataset.tuning_parameters.eq_parameters[109].filterType: offset 2276 (int32_t)
+dataset.tuning_parameters.eq_parameters[110].filterType: offset 2296 (int32_t)
+dataset.tuning_parameters.eq_parameters[111].filterType: offset 2316 (int32_t)
+dataset.tuning_parameters.eq_parameters[112].filterType: offset 2336 (int32_t)
+dataset.tuning_parameters.eq_parameters[113].filterType: offset 2356 (int32_t)
+dataset.tuning_parameters.eq_parameters[114].filterType: offset 2376 (int32_t)
+dataset.tuning_parameters.eq_parameters[115].filterType: offset 2396 (int32_t)
+dataset.tuning_parameters.eq_parameters[116].filterType: offset 2416 (int32_t)
+dataset.tuning_parameters.eq_parameters[117].filterType: offset 2436 (int32_t)
+dataset.tuning_parameters.eq_parameters[118].filterType: offset 2456 (int32_t)
+dataset.tuning_parameters.eq_parameters[119].filterType: offset 2476 (int32_t)
+dataset.tuning_parameters.delay_parameters[0].ch_n: offset 2500 (int32_t)
+dataset.tuning_parameters.delay_parameters[1].ch_n: offset 2508 (int32_t)
+dataset.tuning_parameters.delay_parameters[2].ch_n: offset 2516 (int32_t)
+dataset.tuning_parameters.delay_parameters[3].ch_n: offset 2524 (int32_t)
+dataset.tuning_parameters.delay_parameters[4].ch_n: offset 2532 (int32_t)
+dataset.tuning_parameters.delay_parameters[5].ch_n: offset 2540 (int32_t)
+dataset.tuning_parameters.delay_parameters[0].delay_data: offset 2504 (float)
+dataset.tuning_parameters.delay_parameters[1].delay_data: offset 2512 (float)
+dataset.tuning_parameters.delay_parameters[2].delay_data: offset 2520 (float)
+dataset.tuning_parameters.delay_parameters[3].delay_data: offset 2528 (float)
+dataset.tuning_parameters.delay_parameters[4].delay_data: offset 2536 (float)
+dataset.tuning_parameters.delay_parameters[5].delay_data: offset 2544 (float)
+dataset.tuning_parameters.volume_parameters[0].ch_n: offset 2548 (int32_t)
+dataset.tuning_parameters.volume_parameters[1].ch_n: offset 2556 (int32_t)
+dataset.tuning_parameters.volume_parameters[2].ch_n: offset 2564 (int32_t)
+dataset.tuning_parameters.volume_parameters[3].ch_n: offset 2572 (int32_t)
+dataset.tuning_parameters.volume_parameters[4].ch_n: offset 2580 (int32_t)
+dataset.tuning_parameters.volume_parameters[5].ch_n: offset 2588 (int32_t)
+dataset.tuning_parameters.volume_parameters[0].vol_data: offset 2552 (float)
+dataset.tuning_parameters.volume_parameters[1].vol_data: offset 2560 (float)
+dataset.tuning_parameters.volume_parameters[2].vol_data: offset 2568 (float)
+dataset.tuning_parameters.volume_parameters[3].vol_data: offset 2576 (float)
+dataset.tuning_parameters.volume_parameters[4].vol_data: offset 2584 (float)
+dataset.tuning_parameters.volume_parameters[5].vol_data: offset 2592 (float)
diff --git a/param_struct_test b/param_struct_test
index 032f99b..5d3fc10 160000
--- a/param_struct_test
+++ b/param_struct_test
@@ -1 +1 @@
-Subproject commit 032f99bc1eea81ba0f2c6608114940f31510a3fc
+Subproject commit 5d3fc10c5ddbadfb5b8cd4825355fbabc9a42438
diff --git a/音效控件UI/plugins/FilterButton.exe b/音效控件UI/plugins/FilterButton.exe
new file mode 100644
index 0000000..f6f03cc
Binary files /dev/null and b/音效控件UI/plugins/FilterButton.exe differ