diff --git a/ERNCTuningTool/communication/param_manager.py b/ERNCTuningTool/communication/param_manager.py index 421df12..f53e11e 100644 --- a/ERNCTuningTool/communication/param_manager.py +++ b/ERNCTuningTool/communication/param_manager.py @@ -37,7 +37,6 @@ class ParamManager: int(row_data[2])) self.dict.commit() - # for itm_param in self.dict.items(): _param: Param = itm_param[1] _param.list_val = _param.list_set_val diff --git a/ERNCTuningTool/test/param.yml b/ERNCTuningTool/test/param.yml new file mode 100644 index 0000000..9f7768b --- /dev/null +++ b/ERNCTuningTool/test/param.yml @@ -0,0 +1,42 @@ +- addr: 0 + len: 1 + name: audio_mode + set_val: + - 0 + val: + - 0.0 +- addr: 1 + len: 1 + name: send_action + set_val: + - 0 + val: + - 0.0 +- addr: 2 + len: 3 + name: mix_left_right_data + set_val: + - 0 + val: + - 0.0 +- addr: 20 + len: 4 + name: filter_data + set_val: + - 0 + val: + - 0.0 +- addr: 620 + len: 2 + name: delay_data + set_val: + - 0 + val: + - 0.0 +- addr: 633 + len: 2 + name: vol_data + set_val: + - 0 + val: + - 0.0 diff --git a/communication/com_cmd.py b/communication/com_cmd.py new file mode 100644 index 0000000..01fe79a --- /dev/null +++ b/communication/com_cmd.py @@ -0,0 +1,42 @@ +from communication import convert +from communication.convert import float_to_int16_n + + +class ComCmd: + + class OperationType: + READ = 0 + WRITE = 1 + + def __init__(self, op_type: OperationType, p_name, addr, length, write_vals=None): + self.op = op_type + self.param_name = p_name + self.addr = int(addr) + self.len = int(length) + if op_type == self.OperationType.WRITE: + self.write_vals = float_to_int16_n(write_vals) + + def resolve_read_response(self, reg_data): + res_data = [] + for i in range(0, self.len, 2): + res_data.append(convert.int16_to_float(reg_data[i], reg_data[i + 1])) + return res_data + + def resolve_write_response(self, reg_data): + """ + 解析write命令的响应数据 + :param reg_data: + :return: + """ + # 对于写入操作,只用反馈成功或者失败 + return None + + def modbus_write_vals(self): + if self.write_vals is None: + return + + _int16_write_vals = convert.float_to_int16_n(self.write_vals) + return _int16_write_vals + + + diff --git a/communication/convert.py b/communication/convert.py new file mode 100644 index 0000000..070679e --- /dev/null +++ b/communication/convert.py @@ -0,0 +1,61 @@ +import struct + +from select import select + + +def int16_to_float(high, low): + # 将两个 16 位整数合并为一个 32 位整数 + combined = (high << 16) | (low & 0xFFFF) + # 将 32 位整数解释为浮点数 + float_value = struct.unpack('>f', struct.pack('>I', combined))[0] + return float_value + + +def float_to_int16(value): + # 将浮点数打包为 32 位整数字节 + packed = struct.pack('>f', value) + # 解包成 32 位整数 + combined = struct.unpack('>I', packed)[0] + # 分离出高 16 位和低 16 位 + high = (combined >> 16) & 0xFFFF + low = combined & 0xFFFF + return high, low + + +def int16_to_float_n(vals): + # 给出的vals是一个数的列表,其长度必须是2的整数倍 + _val_num = int(len(vals) / 2) + _float_vals = [] + for i in range(_val_num): + _float_vals.append(int16_to_float(vals[i * 2], vals[i * 2 + 1])) + + return _float_vals + + +def float_to_int16_n(vals): + """ + 将多个float类型数转换为一个int16类型数的list + :param vals: float类型数的list + :return: int16类型数的list + """ + _val_num = len(vals) + _int_vals = [] + for i in range(_val_num): + _int_vals = _int_vals + [*float_to_int16(vals[i])] + return _int_vals + + +if __name__ == '__main__': + # 示例 + high = 0x3f80 # 16 位高位 + low = 0x0000 # 16 位低位 + result = int16_to_float(high, low) + print(result) + high, low = float_to_int16(result) + print(high, low) + float_val_1 = 0.1 + print(float_to_int16(float_val_1)) + + float_vals = [0.1, 0.2] + print(float_to_int16_n(float_vals)) + diff --git a/communication/param.py b/communication/param.py index 91f9082..f6e394d 100644 --- a/communication/param.py +++ b/communication/param.py @@ -13,10 +13,10 @@ class ParamType(Enum): class FilterParam: enabled: bool = False filter_type: str = "PEAK" # PEAK, LOWPASS, HIGHPASS, ALLPASS - freq: float = 1000.0 - q: float = 0.707 - gain: float = 0.0 - slope: float = 12.0 + freq: float = 1.0 + q: float = 1.0 + gain: float = 1.0 + slope: float = 1.0 @dataclass class Param: @@ -41,7 +41,7 @@ class Param: def __post_init__(self): """初始化后处理""" if self.param_type == ParamType.FILTER: - # 初始化8个滤波器 + # 初始化8个滤波器 待定 self.filters = [FilterParam() for _ in range(8)] def addr(self) -> int: diff --git a/communication/param.yml b/communication/param.yml new file mode 100644 index 0000000..9f7768b --- /dev/null +++ b/communication/param.yml @@ -0,0 +1,42 @@ +- addr: 0 + len: 1 + name: audio_mode + set_val: + - 0 + val: + - 0.0 +- addr: 1 + len: 1 + name: send_action + set_val: + - 0 + val: + - 0.0 +- addr: 2 + len: 3 + name: mix_left_right_data + set_val: + - 0 + val: + - 0.0 +- addr: 20 + len: 4 + name: filter_data + set_val: + - 0 + val: + - 0.0 +- addr: 620 + len: 2 + name: delay_data + set_val: + - 0 + val: + - 0.0 +- addr: 633 + len: 2 + name: vol_data + set_val: + - 0 + val: + - 0.0 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 2e3bddd..88b4017 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__/checkbox_header.cpython-313.pyc b/component/widget_filter/__pycache__/checkbox_header.cpython-313.pyc index e899c48..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/audio_filter_config.py b/component/widget_filter/audio_filter_config.py new file mode 100644 index 0000000..385c1cf --- /dev/null +++ b/component/widget_filter/audio_filter_config.py @@ -0,0 +1,63 @@ +import yaml +from dataclasses import dataclass +from typing import List, Dict, Any, Optional +from pathlib import Path + +@dataclass +class FilterPreset: + filter_name: str + filter_type: str + freq: float + q: float + gain: float + slope: float + enabled: bool = True + +class AudioFilterConfig: + def __init__(self, config_path: str = None): + self._config_path = config_path or str(Path(__file__).parent / "audio_filter_config.yaml") + self._config = self._load_config() + + def _load_config(self) -> Dict[str, Any]: + """加载配置文件""" + with open(self._config_path, 'r', encoding='utf-8') as f: + config = yaml.safe_load(f) + + # 处理配置中的引用 + self._resolve_references(config) + return config + + def _resolve_references(self, config: Dict[str, Any]): + """解析配置中的引用""" + for col in config['table_config']['columns']: + if 'options' in col and isinstance(col['options'], str): + if col['options'].startswith('@'): + ref_key = col['options'][1:] + col['options'] = config.get(ref_key, []) + + @property + def filter_types(self) -> List[str]: + return self._config['filter_types'] + + @property + def table_config(self) -> Dict[str, Any]: + return self._config['table_config'] + + @property + def default_filter_presets(self) -> List[FilterPreset]: + return [FilterPreset(**preset) for preset in self._config['default_filter_presets']] + + @property + def param_input_config(self) -> Dict[str, Dict[str, Any]]: + return self._config['param_input_config'] + + @property + def styles(self) -> Dict[str, str]: + return self._config['styles'] + + def get_param_config(self, param_id: str) -> Optional[Dict[str, Any]]: + """获取参数配置""" + for col in self.table_config['columns']: + if col['id'] == param_id: + return col + return None \ No newline at end of file diff --git a/config/audio_filter_config.yaml b/config/audio_filter_config.yaml new file mode 100644 index 0000000..90cef6d --- /dev/null +++ b/config/audio_filter_config.yaml @@ -0,0 +1,240 @@ +# 滤波器基础配置 +filter: + # 支持的滤波器类型 + types: + - id: "PEAK" + name: "Peak Filter" + description: "Parametric EQ filter" + - id: "LOWPASS" + name: "Low Pass" + description: "Low pass filter" + - id: "HIGHPASS" + name: "High Pass" + description: "High pass filter" + - id: "ALLPASS" + name: "All Pass" + description: "All pass filter" + + # 滤波器参数定义 + parameters: + freq: + name: "Freq(Hz)" + type: "number" + min: 0 + max: 20000 + default: 1000 + step: 1 + suffix: "Hz" + description: "Filter frequency" + + q: + name: "Q" + type: "number" + min: 0 + max: 10 + default: 1.0 + step: 0.1 + suffix: "" + description: "Quality factor" + + gain: + name: "Gain" + type: "number" + min: -12 + max: 12 + default: 0 + step: 0.5 + suffix: "" + description: "Gain adjustment" + + slope: + name: "Slope" + type: "number" + min: 0 + max: 48 + default: 12 + step: 6 + suffix: "" + description: "Filter slope" + + # 预设配置 - 添加多行数据 + presets: + # 第一行数据 + - name: "Peak EQ 1" + type: "PEAK" + parameters: + freq: 1000 + q: 1.0 + gain: 0.0 + slope: 12 + enabled: true + row: 0 # 指定行号 + + # 第二行数据 + - name: "Low Pass 1" + type: "LOWPASS" + parameters: + freq: 2000 + q: 0.7 + gain: 0.0 + slope: 12 + enabled: true + row: 1 + + # 第三行数据 + - name: "High Pass 1" + type: "HIGHPASS" + parameters: + freq: 500 + q: 0.7 + gain: 0.0 + slope: 12 + enabled: true + row: 2 + + # 第四行数据 + - name: "Peak EQ 2" + type: "PEAK" + parameters: + freq: 3000 + q: 2.0 + gain: 3.0 + slope: 12 + enabled: true + row: 3 + +# 表格UI配置 +table: + # 表格列配置 + columns: + - id: "enabled" + name: "Enable" + width: 60 + type: "checkbox" + editable: true + order: 1 + + - id: "filter_name" + name: "Name" + width: 120 + type: "text" + editable: true + order: 2 + + - id: "filter_type" + name: "Type" + width: 100 + type: "combo" + editable: true + options_ref: "filter.types" + order: 3 + + # 参数列配置 - 引用自filter.parameters + - id: "freq" + ref: "filter.parameters.freq" + width: 80 + order: 4 + + - id: "q" + ref: "filter.parameters.q" + width: 80 + order: 5 + + - id: "gain" + ref: "filter.parameters.gain" + width: 80 + order: 6 + + - id: "slope" + ref: "filter.parameters.slope" + width: 100 + order: 7 + + # 表格通用设置 + settings: + default_row_height: 30 + selection_mode: "single_row" + alternating_row_colors: true + +# 其他参数配置 +parameters: + delay: + id: "delay_data1" + name: "Delay" + type: "number" + min: 0 + max: 1000 + default: 0 + suffix: "ms" + step: 0.1 + decimals: 1 + + volume: + id: "ENT_volume_data1" + name: "Volume" + type: "number" + min: -60 + max: 12 + default: 0 + suffix: "dB" + step: 0.5 + decimals: 1 + + mix: + right: + id: "ENT_mx_right_data" + name: "Mix Right" + type: "number" + min: -100 + max: 100 + default: 0 + suffix: "%" + step: 1 + decimals: 0 + + left: + id: "ENT_mix_left_data" + name: "Mix Left" + type: "number" + min: -100 + max: 100 + default: 0 + suffix: "%" + step: 1 + decimals: 0 + +# UI样式配置 +styles: + checkbox: | + QCheckBox { + background-color: transparent; + spacing: 0px; + } + QCheckBox::indicator { + width: 24px; + height: 24px; + border: none; + background: transparent; + } + QCheckBox::indicator:checked { + background-color: #346792; + image: url(:/images/checkbox_checked.png); + } + QCheckBox::indicator:unchecked { + border-color: #FFFFFF; + image: url(:/images/checkbox_unchecked.png); + } + + table: | + QTableWidget { + background-color: #2B2B2B; + gridline-color: #3C3C3C; + color: #FFFFFF; + border: none; + } + QTableWidget::item { + padding: 5px; + } + QTableWidget::item:selected { + background-color: #346792; + } \ No newline at end of file diff --git a/config/param_address.yml b/config/param_address.yml new file mode 100644 index 0000000..9f7768b --- /dev/null +++ b/config/param_address.yml @@ -0,0 +1,42 @@ +- addr: 0 + len: 1 + name: audio_mode + set_val: + - 0 + val: + - 0.0 +- addr: 1 + len: 1 + name: send_action + set_val: + - 0 + val: + - 0.0 +- addr: 2 + len: 3 + name: mix_left_right_data + set_val: + - 0 + val: + - 0.0 +- addr: 20 + len: 4 + name: filter_data + set_val: + - 0 + val: + - 0.0 +- addr: 620 + len: 2 + name: delay_data + set_val: + - 0 + val: + - 0.0 +- addr: 633 + len: 2 + name: vol_data + set_val: + - 0 + val: + - 0.0 diff --git a/config/五菱上位机参数-工作表1.csv b/config/五菱上位机参数-工作表1.csv new file mode 100644 index 0000000..ad68de2 --- /dev/null +++ b/config/五菱上位机参数-工作表1.csv @@ -0,0 +1,651 @@ +id,params,type,描述, +0,audio_mode,int16_t,测试使用默认给0, +1,send_action,int16_t,取值范围0或1,每次下发数据需要设置当前值为1, +2,ch1,int32_t,, +3,mix_left_data1,float,取值范围[0-1], +4,mix_right_data1,float,取值范围[0-1], +5,ch2,int32_t,, +6,mix_left_data2,float,, +7,mix_right_data2,float,, +8,ch3,int32_t,, +9,mix_left_data3,float,, +10,mix_right_data3,float,, +11,ch4,int32_t,, +12,mix_left_data4,float,, +13,mix_right_data4,float,, +14,ch5,int32_t,, +15,mix_left_data5,float,, +16,mix_right_data5,float,, +17,ch6,int32_t,, +18,mix_left_data6,float,, +19,mix_right_data6,float,, +20,fc1_1,float,中心频率,"具体的,①PEAK滤波器需要设置Freq、Gain以及Q。 +②LOWPASS滤波器需要设置Freq和slope(当slope=12时需要设置Q)。 +③HIGHPASS滤波器需要设置Freq和slope(当slope=12时需要设置Q)。 +④LOWSHELF滤波器需要设置Freq、Gain以及Q。 +⑤HIGHSHELF滤波器需要设置Freq、Gain以及Q。 +⑥ALL_PASS滤波器需要设置Freq、Q +其中,Freq表示所设置滤波器的中心频率,取值范围【20到20000】;Gain表示所设置滤波器的增益,取值范围【-24到24】;Q表示所设置滤波器的品质系数,取值范围【0.1到20】;Slope表示所设置滤波器的斜率(即低通滤波器或高通滤波器的阶次),取值范围【6(一阶)、12(二阶)、18(三阶)、24(四阶)、30(五阶)、36(六阶)】。" +21,q1_1,float,品质系数, +22,gain1_1,float,增益, +23,slope1_1,int32_t,低通和高通滤波器的阶次, +24,filterType1_1,int32_t,"滤波器类型:1 PEAK,2 LOWPASS,3 HIGHPASS,4 LOWSHELF,5 HIGHSHELF,6 ALL_PASS", +25,fc1_2,float,, +26,q1_2,float,, +27,gain1_2,float,, +28,slope1_2,int32_t,, +29,filterType1_2,int32_t,, +30,fc1_3,float,, +31,q1_3,float,, +32,gain1_3,float,, +33,slope1_3,int32_t,, +34,filterType1_3,int32_t,, +35,fc1_4,float,, +36,q1_4,float,, +37,gain1_4,float,, +38,slope1_4,int32_t,, +39,filterType1_4,int32_t,, +40,fc1_5,float,, +41,q1_5,float,, +42,gain1_5,float,, +43,slope1_5,int32_t,, +44,filterType1_5,int32_t,, +45,fc1_6,float,, +46,q1_6,float,, +47,gain1_6,float,, +48,slope1_6,int32_t,, +49,filterType1_6,int32_t,, +50,fc1_7,float,, +51,q1_7,float,, +52,gain1_7,float,, +53,slope1_7,int32_t,, +54,filterType1_7,int32_t,, +55,fc1_8,float,, +56,q1_8,float,, +57,gain1_8,float,, +58,slope1_8,int32_t,, +59,filterType1_8,int32_t,, +60,fc1_9,float,, +61,q1_9,float,, +62,gain1_9,float,, +63,slope1_9,int32_t,, +64,filterType1_9,int32_t,, +65,fc1_10,float,, +66,q1_10,float,, +67,gain1_10,float,, +68,slope1_10,int32_t,, +69,filterType1_10,int32_t,, +70,fc1_11,float,, +71,q1_11,float,, +72,gain1_11,float,, +73,slope1_11,int32_t,, +74,filterType1_11,int32_t,, +75,fc1_12,float,, +76,q1_12,float,, +77,gain1_12,float,, +78,slope1_12,int32_t,, +79,filterType1_12,int32_t,, +80,fc1_13,float,, +81,q1_13,float,, +82,gain1_13,float,, +83,slope1_13,int32_t,, +84,filterType1_13,int32_t,, +85,fc1_14,float,, +86,q1_14,float,, +87,gain1_14,float,, +88,slope1_14,int32_t,, +89,filterType1_14,int32_t,, +90,fc1_15,float,, +91,q1_15,float,, +92,gain1_15,float,, +93,slope1_15,int32_t,, +94,filterType1_15,int32_t,, +95,fc1_16,float,, +96,q1_16,float,, +97,gain1_16,float,, +98,slope1_16,int32_t,, +99,filterType1_16,int32_t,, +100,fc1_17,float,, +101,q1_17,float,, +102,gain1_17,float,, +103,slope1_17,int32_t,, +104,filterType1_17,int32_t,, +105,fc1_18,float,, +106,q1_18,float,, +107,gain1_18,float,, +108,slope1_18,int32_t,, +109,filterType1_18,int32_t,, +110,fc1_19,float,, +111,q1_19,float,, +112,gain1_19,float,, +113,slope1_19,int32_t,, +114,filterType1_19,int32_t,, +115,fc1_20,float,, +116,q1_20,float,, +117,gain1_20,float,, +118,slope1_20,int32_t,, +119,filterType1_20,int32_t,, +120,fc2_1,float,, +121,q2_1,float,, +122,gain2_1,float,, +123,slope2_1,int32_t,, +124,filterType2_1,int32_t,, +125,fc2_2,float,, +126,q2_2,float,, +127,gain2_2,float,, +128,slope2_2,int32_t,, +129,filterType2_2,int32_t,, +130,fc2_3,float,, +131,q2_3,float,, +132,gain2_3,float,, +133,slope2_3,int32_t,, +134,filterType2_3,int32_t,, +135,fc2_4,float,, +136,q2_4,float,, +137,gain2_4,float,, +138,slope2_4,int32_t,, +139,filterType2_4,int32_t,, +140,fc2_5,float,, +141,q2_5,float,, +142,gain2_5,float,, +143,slope2_5,int32_t,, +144,filterType2_5,int32_t,, +145,fc2_6,float,, +146,q2_6,float,, +147,gain2_6,float,, +148,slope2_6,int32_t,, +149,filterType2_6,int32_t,, +150,fc2_7,float,, +151,q2_7,float,, +152,gain2_7,float,, +153,slope2_7,int32_t,, +154,filterType2_7,int32_t,, +155,fc2_8,float,, +156,q2_8,float,, +157,gain2_8,float,, +158,slope2_8,int32_t,, +159,filterType2_8,int32_t,, +160,fc2_9,float,, +161,q2_9,float,, +162,gain2_9,float,, +163,slope2_9,int32_t,, +164,filterType2_9,int32_t,, +165,fc2_10,float,, +166,q2_10,float,, +167,gain2_10,float,, +168,slope2_10,int32_t,, +169,filterType2_10,int32_t,, +170,fc2_11,float,, +171,q2_11,float,, +172,gain2_11,float,, +173,slope2_11,int32_t,, +174,filterType2_11,int32_t,, +175,fc2_12,float,, +176,q2_12,float,, +177,gain2_12,float,, +178,slope2_12,int32_t,, +179,filterType2_12,int32_t,, +180,fc2_13,float,, +181,q2_13,float,, +182,gain2_13,float,, +183,slope2_13,int32_t,, +184,filterType2_13,int32_t,, +185,fc2_14,float,, +186,q2_14,float,, +187,gain2_14,float,, +188,slope2_14,int32_t,, +189,filterType2_14,int32_t,, +190,fc2_15,float,, +191,q2_15,float,, +192,gain2_15,float,, +193,slope2_15,int32_t,, +194,filterType2_15,int32_t,, +195,fc2_16,float,, +196,q2_16,float,, +197,gain2_16,float,, +198,slope2_16,int32_t,, +199,filterType2_16,int32_t,, +200,fc2_17,float,, +201,q2_17,float,, +202,gain2_17,float,, +203,slope2_17,int32_t,, +204,filterType2_17,int32_t,, +205,fc2_18,float,, +206,q2_18,float,, +207,gain2_18,float,, +208,slope2_18,int32_t,, +209,filterType2_18,int32_t,, +210,fc2_19,float,, +211,q2_19,float,, +212,gain2_19,float,, +213,slope2_19,int32_t,, +214,filterType2_19,int32_t,, +215,fc2_20,float,, +216,q2_20,float,, +217,gain2_20,float,, +218,slope2_20,int32_t,, +219,filterType2_20,int32_t,, +220,fc3_1,float,, +221,q3_1,float,, +222,gain3_1,float,, +223,slope3_1,int32_t,, +224,filterType3_1,int32_t,, +225,fc3_2,float,, +226,q3_2,float,, +227,gain3_2,float,, +228,slope3_2,int32_t,, +229,filterType3_2,int32_t,, +230,fc3_3,float,, +231,q3_3,float,, +232,gain3_3,float,, +233,slope3_3,int32_t,, +234,filterType3_3,int32_t,, +235,fc3_4,float,, +236,q3_4,float,, +237,gain3_4,float,, +238,slope3_4,int32_t,, +239,filterType3_4,int32_t,, +240,fc3_5,float,, +241,q3_5,float,, +242,gain3_5,float,, +243,slope3_5,int32_t,, +244,filterType3_5,int32_t,, +245,fc3_6,float,, +246,q3_6,float,, +247,gain3_6,float,, +248,slope3_6,int32_t,, +249,filterType3_6,int32_t,, +250,fc3_7,float,, +251,q3_7,float,, +252,gain3_7,float,, +253,slope3_7,int32_t,, +254,filterType3_7,int32_t,, +255,fc3_8,float,, +256,q3_8,float,, +257,gain3_8,float,, +258,slope3_8,int32_t,, +259,filterType3_8,int32_t,, +260,fc3_9,float,, +261,q3_9,float,, +262,gain3_9,float,, +263,slope3_9,int32_t,, +264,filterType3_9,int32_t,, +265,fc3_10,float,, +266,q3_10,float,, +267,gain3_10,float,, +268,slope3_10,int32_t,, +269,filterType3_10,int32_t,, +270,fc3_11,float,, +271,q3_11,float,, +272,gain3_11,float,, +273,slope3_11,int32_t,, +274,filterType3_11,int32_t,, +275,fc3_12,float,, +276,q3_12,float,, +277,gain3_12,float,, +278,slope3_12,int32_t,, +279,filterType3_12,int32_t,, +280,fc3_13,float,, +281,q3_13,float,, +282,gain3_13,float,, +283,slope3_13,int32_t,, +284,filterType3_13,int32_t,, +285,fc3_14,float,, +286,q3_14,float,, +287,gain3_14,float,, +288,slope3_14,int32_t,, +289,filterType3_14,int32_t,, +290,fc3_15,float,, +291,q3_15,float,, +292,gain3_15,float,, +293,slope3_15,int32_t,, +294,filterType3_15,int32_t,, +295,fc3_16,float,, +296,q3_16,float,, +297,gain3_16,float,, +298,slope3_16,int32_t,, +299,filterType3_16,int32_t,, +300,fc3_17,float,, +301,q3_17,float,, +302,gain3_17,float,, +303,slope3_17,int32_t,, +304,filterType3_17,int32_t,, +305,fc3_18,float,, +306,q3_18,float,, +307,gain3_18,float,, +308,slope3_18,int32_t,, +309,filterType3_18,int32_t,, +310,fc3_19,float,, +311,q3_19,float,, +312,gain3_19,float,, +313,slope3_19,int32_t,, +314,filterType3_19,int32_t,, +315,fc3_20,float,, +316,q3_20,float,, +317,gain3_20,float,, +318,slope3_20,int32_t,, +319,filterType3_20,int32_t,, +320,fc4_1,float,, +321,q4_1,float,, +322,gain4_1,float,, +323,slope4_1,int32_t,, +324,filterType4_1,int32_t,, +325,fc4_2,float,, +326,q4_2,float,, +327,gain4_2,float,, +328,slope4_2,int32_t,, +329,filterType4_2,int32_t,, +330,fc4_3,float,, +331,q4_3,float,, +332,gain4_3,float,, +333,slope4_3,int32_t,, +334,filterType4_3,int32_t,, +335,fc4_4,float,, +336,q4_4,float,, +337,gain4_4,float,, +338,slope4_4,int32_t,, +339,filterType4_4,int32_t,, +340,fc4_5,float,, +341,q4_5,float,, +342,gain4_5,float,, +343,slope4_5,int32_t,, +344,filterType4_5,int32_t,, +345,fc4_6,float,, +346,q4_6,float,, +347,gain4_6,float,, +348,slope4_6,int32_t,, +349,filterType4_6,int32_t,, +350,fc4_7,float,, +351,q4_7,float,, +352,gain4_7,float,, +353,slope4_7,int32_t,, +354,filterType4_7,int32_t,, +355,fc4_8,float,, +356,q4_8,float,, +357,gain4_8,float,, +358,slope4_8,int32_t,, +359,filterType4_8,int32_t,, +360,fc4_9,float,, +361,q4_9,float,, +362,gain4_9,float,, +363,slope4_9,int32_t,, +364,filterType4_9,int32_t,, +365,fc4_10,float,, +366,q4_10,float,, +367,gain4_10,float,, +368,slope4_10,int32_t,, +369,filterType4_10,int32_t,, +370,fc4_11,float,, +371,q4_11,float,, +372,gain4_11,float,, +373,slope4_11,int32_t,, +374,filterType4_11,int32_t,, +375,fc4_12,float,, +376,q4_12,float,, +377,gain4_12,float,, +378,slope4_12,int32_t,, +379,filterType4_12,int32_t,, +380,fc4_13,float,, +381,q4_13,float,, +382,gain4_13,float,, +383,slope4_13,int32_t,, +384,filterType4_13,int32_t,, +385,fc4_14,float,, +386,q4_14,float,, +387,gain4_14,float,, +388,slope4_14,int32_t,, +389,filterType4_14,int32_t,, +390,fc4_15,float,, +391,q4_15,float,, +392,gain4_15,float,, +393,slope4_15,int32_t,, +394,filterType4_15,int32_t,, +395,fc4_16,float,, +396,q4_16,float,, +397,gain4_16,float,, +398,slope4_16,int32_t,, +399,filterType4_16,int32_t,, +400,fc4_17,float,, +401,q4_17,float,, +402,gain4_17,float,, +403,slope4_17,int32_t,, +404,filterType4_17,int32_t,, +405,fc4_18,float,, +406,q4_18,float,, +407,gain4_18,float,, +408,slope4_18,int32_t,, +409,filterType4_18,int32_t,, +410,fc4_19,float,, +411,q4_19,float,, +412,gain4_19,float,, +413,slope4_19,int32_t,, +414,filterType4_19,int32_t,, +415,fc4_20,float,, +416,q4_20,float,, +417,gain4_20,float,, +418,slope4_20,int32_t,, +419,filterType4_20,int32_t,, +420,fc5_1,float,, +421,q5_1,float,, +422,gain5_1,float,, +423,slope5_1,int32_t,, +424,filterType5_1,int32_t,, +425,fc5_2,float,, +426,q5_2,float,, +427,gain5_2,float,, +428,slope5_2,int32_t,, +429,filterType5_2,int32_t,, +430,fc5_3,float,, +431,q5_3,float,, +432,gain5_3,float,, +433,slope5_3,int32_t,, +434,filterType5_3,int32_t,, +435,fc5_4,float,, +436,q5_4,float,, +437,gain5_4,float,, +438,slope5_4,int32_t,, +439,filterType5_4,int32_t,, +440,fc5_5,float,, +441,q5_5,float,, +442,gain5_5,float,, +443,slope5_5,int32_t,, +444,filterType5_5,int32_t,, +445,fc5_6,float,, +446,q5_6,float,, +447,gain5_6,float,, +448,slope5_6,int32_t,, +449,filterType5_6,int32_t,, +450,fc5_7,float,, +451,q5_7,float,, +452,gain5_7,float,, +453,slope5_7,int32_t,, +454,filterType5_7,int32_t,, +455,fc5_8,float,, +456,q5_8,float,, +457,gain5_8,float,, +458,slope5_8,int32_t,, +459,filterType5_8,int32_t,, +460,fc5_9,float,, +461,q5_9,float,, +462,gain5_9,float,, +463,slope5_9,int32_t,, +464,filterType5_9,int32_t,, +465,fc5_10,float,, +466,q5_10,float,, +467,gain5_10,float,, +468,slope5_10,int32_t,, +469,filterType5_10,int32_t,, +470,fc5_11,float,, +471,q5_11,float,, +472,gain5_11,float,, +473,slope5_11,int32_t,, +474,filterType5_11,int32_t,, +475,fc5_12,float,, +476,q5_12,float,, +477,gain5_12,float,, +478,slope5_12,int32_t,, +479,filterType5_12,int32_t,, +480,fc5_13,float,, +481,q5_13,float,, +482,gain5_13,float,, +483,slope5_13,int32_t,, +484,filterType5_13,int32_t,, +485,fc5_14,float,, +486,q5_14,float,, +487,gain5_14,float,, +488,slope5_14,int32_t,, +489,filterType5_14,int32_t,, +490,fc5_15,float,, +491,q5_15,float,, +492,gain5_15,float,, +493,slope5_15,int32_t,, +494,filterType5_15,int32_t,, +495,fc5_16,float,, +496,q5_16,float,, +497,gain5_16,float,, +498,slope5_16,int32_t,, +499,filterType5_16,int32_t,, +500,fc5_17,float,, +501,q5_17,float,, +502,gain5_17,float,, +503,slope5_17,int32_t,, +504,filterType5_17,int32_t,, +505,fc5_18,float,, +506,q5_18,float,, +507,gain5_18,float,, +508,slope5_18,int32_t,, +509,filterType5_18,int32_t,, +510,fc5_19,float,, +511,q5_19,float,, +512,gain5_19,float,, +513,slope5_19,int32_t,, +514,filterType5_19,int32_t,, +515,fc5_20,float,, +516,q5_20,float,, +517,gain5_20,float,, +518,slope5_20,int32_t,, +519,filterType5_20,int32_t,, +520,fc6_1,float,, +521,q6_1,float,, +522,gain6_1,float,, +523,slope6_1,int32_t,, +524,filterType6_1,int32_t,, +525,fc6_2,float,, +526,q6_2,float,, +527,gain6_2,float,, +528,slope6_2,int32_t,, +529,filterType6_2,int32_t,, +530,fc6_3,float,, +531,q6_3,float,, +532,gain6_3,float,, +533,slope6_3,int32_t,, +534,filterType6_3,int32_t,, +535,fc6_4,float,, +536,q6_4,float,, +537,gain6_4,float,, +538,slope6_4,int32_t,, +539,filterType6_4,int32_t,, +540,fc6_5,float,, +541,q6_5,float,, +542,gain6_5,float,, +543,slope6_5,int32_t,, +544,filterType6_5,int32_t,, +545,fc6_6,float,, +546,q6_6,float,, +547,gain6_6,float,, +548,slope6_6,int32_t,, +549,filterType6_6,int32_t,, +550,fc6_7,float,, +551,q6_7,float,, +552,gain6_7,float,, +553,slope6_7,int32_t,, +554,filterType6_7,int32_t,, +555,fc6_8,float,, +556,q6_8,float,, +557,gain6_8,float,, +558,slope6_8,int32_t,, +559,filterType6_8,int32_t,, +560,fc6_9,float,, +561,q6_9,float,, +562,gain6_9,float,, +563,slope6_9,int32_t,, +564,filterType6_9,int32_t,, +565,fc6_10,float,, +566,q6_10,float,, +567,gain6_10,float,, +568,slope6_10,int32_t,, +569,filterType6_10,int32_t,, +570,fc6_11,float,, +571,q6_11,float,, +572,gain6_11,float,, +573,slope6_11,int32_t,, +574,filterType6_11,int32_t,, +575,fc6_12,float,, +576,q6_12,float,, +577,gain6_12,float,, +578,slope6_12,int32_t,, +579,filterType6_12,int32_t,, +580,fc6_13,float,, +581,q6_13,float,, +582,gain6_13,float,, +583,slope6_13,int32_t,, +584,filterType6_13,int32_t,, +585,fc6_14,float,, +586,q6_14,float,, +587,gain6_14,float,, +588,slope6_14,int32_t,, +589,filterType6_14,int32_t,, +590,fc6_15,float,, +591,q6_15,float,, +592,gain6_15,float,, +593,slope6_15,int32_t,, +594,filterType6_15,int32_t,, +595,fc6_16,float,, +596,q6_16,float,, +597,gain6_16,float,, +598,slope6_16,int32_t,, +599,filterType6_16,int32_t,, +600,fc6_17,float,, +601,q6_17,float,, +602,gain6_17,float,, +603,slope6_17,int32_t,, +604,filterType6_17,int32_t,, +605,fc6_18,float,, +606,q6_18,float,, +607,gain6_18,float,, +608,slope6_18,int32_t,, +609,filterType6_18,int32_t,, +610,fc6_19,float,, +611,q6_19,float,, +612,gain6_19,float,, +613,slope6_19,int32_t,, +614,filterType6_19,int32_t,, +615,fc6_20,float,, +616,q6_20,float,, +617,gain6_20,float,, +618,slope6_20,int32_t,, +619,filterType6_20,int32_t,, +620,ch1,int32_t,, +621,delay_data1,float,【0,20】说明0-20ms, +622,ch2,int32_t,, +623,delay_data2,float,, +624,ch3,int32_t,, +625,delay_data3,float,, +626,ch4,int32_t,, +627,delay_data4,float,, +628,ch5,int32_t,, +629,delay_data5,float,, +630,ch6,int32_t,, +631,delay_data6,float,, +632,ch1,int32_t,, +633,vol_data1,float,【-99,12】说明-99db到12db, +634,ch2,int32_t,, +635,vol_data2,float,, +636,ch3,int32_t,, +637,vol_data3,float,, +638,ch4,int32_t,, +639,vol_data4,float,, +640,ch5,int32_t,, +641,vol_data5,float,, +642,ch6,int32_t,, +643,vol_data6,float,,