diff --git a/Locales/ja.qm b/Locales/ja.qm index b2e8e7c..4d94940 100644 Binary files a/Locales/ja.qm and b/Locales/ja.qm differ diff --git a/Locales/zh.qm b/Locales/zh.qm index 44a7983..751b0f0 100644 Binary files a/Locales/zh.qm and b/Locales/zh.qm differ diff --git a/Locales/zh_TW.qm b/Locales/zh_TW.qm index 70e39f2..f43bac1 100644 Binary files a/Locales/zh_TW.qm and b/Locales/zh_TW.qm differ diff --git a/qml/Common.qml b/qml/Common.qml index d7d5587..326c519 100644 --- a/qml/Common.qml +++ b/qml/Common.qml @@ -123,6 +123,20 @@ Item { return objClone; } + //支持二级嵌套对象的更新操作 + function updateObject(targetObj, sourceObj) { + for (let prop in sourceObj) { + if (sourceObj.hasOwnProperty(prop) && sourceObj[prop] !== undefined) { + if (typeof sourceObj[prop] === 'object') { + Object.assign(targetObj[prop], sourceObj[prop]); + } else { + targetObj[prop] = sourceObj[prop]; + } + } + } + return targetObj; + } + function isObjectValueEqual(a, b) { if (a === b) return true; @@ -175,6 +189,9 @@ Item { onRebootFlagChanged: { rebootServer(); + if (rebootFlag && debug) { + NVG.SystemCall.execute("explorer", NVG.Url.toLocalFile(Qt.resolvedUrl("../bin/ADV_Log.log")).replace(/\//g, '\\')); + } } function parse_resource(resource_list, sort) { @@ -211,7 +228,7 @@ Item { if (ini_data) { ini_data = ini_data.toLowerCase(); let cfg = parseINIString(ini_data); - serverCFG = Object.assign(defaultServerCFG, cfg); + serverCFG = Object.assign(deepClone(defaultServerCFG), cfg); } else { let ini_text = convertINIString(defaultServerCFG); writeFile(iniFile, ini_text); diff --git a/qml/Main.qml b/qml/Main.qml index e347a57..a55db76 100644 --- a/qml/Main.qml +++ b/qml/Main.qml @@ -41,7 +41,7 @@ T.Widget { widget.settings[widget.settings.current_style] = defaultValues; }else if(widget.settings[widget.settings.current_style]["Version"] !== defaultValues["Version"]) { delete widget.settings[widget.settings.current_style]["Version"]; - widget.settings[widget.settings.current_style] = Object.assign(defaultValues, widget.settings[widget.settings.current_style]); + widget.settings[widget.settings.current_style] = Common.updateObject(Common.deepClone(defaultValues), widget.settings[widget.settings.current_style]); } } } diff --git a/qml/ServerPreferences.qml b/qml/ServerPreferences.qml index e7e581d..fe1932c 100644 --- a/qml/ServerPreferences.qml +++ b/qml/ServerPreferences.qml @@ -141,21 +141,23 @@ NVG.Window { P.SpinPreference { name: "attack" - label: qsTr("Increase Speed") + label: qsTr("Increase Factor") + message: qsTr("The larger the value, the slower the data increase.") display: P.TextFieldPreference.ExpandLabel editable: true from: 1 - to: 200 + to: 20000 defaultValue: Common.defaultServerCFG["fft"]["attack"] } P.SpinPreference { name: "decay" - label: qsTr("Reduction Speed") + label: qsTr("Reduction Factor") + message: qsTr("The larger the value, the slower the data reduction.") display: P.TextFieldPreference.ExpandLabel editable: true from: 1 - to: 200 + to: 20000 defaultValue: Common.defaultServerCFG["fft"]["decay"] } diff --git a/readme.md b/readme.md index b1050b1..ac9a2ec 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,5 @@

ADV-Plugin

-
+
Powered By Mashiro_Sorata
--- @@ -16,46 +16,32 @@ * 导入第三方Style类似其他插件,预计支持steam创意工坊下载 * 服务端崩溃后自启动 -## 使用说明 - -安装并启用插件后,默认加载第一种预设Style样式。右键挂件可调出菜单,在挂件菜单的挂件名选单中点击Settings选项,呼出Style设置窗口。点击其中的Styles选项可切换不同的Style风格,若此Style提供可配置项,则在Styles选项下方会出现配置界面的入口。 - -
- -# 进阶设置 - -样式设置可在插件内设置,一般服务端设置采用默认设置即可,但也提供了服务端设置的接口作为高级设置。可通过更改本插件目录`bin`文件夹中的`advConfig.ini`文件来配置插件服务器与数据设置。当配置数据错误或无配置文件时使用默认值,配置值不区分大小写。其参数的具体说明如下。 - -- [Server] - - `ip`:可选,默认值为`local`,指代地址127.0.0.1,可更改为`any`,指代地址0.0.0.0。只支持`any`与默认参数`local`,定义插件提供服务的地址。 - - `port`:可选,默认值为`5050`,定义插件提供服务的端口号。 - - `maxClient`:可选,默认值为`5`,定义WebSocket的最大连接数。 - - `logger`:可选,默认值为`false`。设置为`true`后可在插件所在目录下输出日志文件`ADV_Log.log`。 -- [FFT] - - `attack`:可选,默认值为25。可调节频谱数据增大时的速度,该值越大,增大速度越慢。 - - `decay`:可选,默认值为25。可调节频谱数据减小时的速度,该值越大,减小速度越慢。 - - `norspeed`:可选,默认值为1。动态归一化系数,取值范围从1~99,该值越大,归一化的峰值数据收敛速度越快。 - - `peakthr`:可选,默认值为10。归一化的峰值数据的额外增量。 - - `fps`:可选,默认值为30。每秒钟数据发送的次数,**必须确保该值大于5**。 - - `changeSpeed`:可选,默认值为25。按照`changeSpeed/fps`的比例调节频谱数据变化速度,**一般该值小于fps**。 - - -`advConfig.ini` 文件示例: -```ini -[Server] -ip = local -port = 5050 -maxClient = 5 -logger = true - -[FFT] -attack = 25 -decay = 25 -norspeed = 1 -peakthr = 10 -fps = 35 -changeSpeed = 25 -``` +## 样式设置 + +安装并启用插件后,默认加载第一种预设Style样式。右键点击挂件可调出菜单,在挂件菜单的挂件名选单中点击“样式设置...”选项,呼出样式设置窗口。点击其中的样式选项可切换不同的样式风格,若此样式提供可配置项,则在样式选项下方会出现配置项。 + +
+ +## 服务器设置 + +右键点击挂件后,在菜单项选择“服务器设置...”即可对服务器进行设置与调试。一般采用默认设置即可,也可进一步自定义服务端的参数,调节所有音频可视化挂件的动画效果。此外对于所有音频可视化挂件无法正常显示的用户,提供了调试接口以便更好的帮助定位错误。 +
+ +其参数的具体说明如下。 + +* `调试模式`:因为插件有着错误自启功能,每次自启都会覆盖日志文件,打开调试模式后,会关闭错误自启功能,这时可打开日志文件定位具体错误。 + +* `常规`设置 + * `端口号`:Websocket服务器的端口号。 + * `最大客户端数量`:Websocket服务器的最大连接数,音频可视化挂件均共用同一个连接的数据。 + * `启用日志`:启用后会在插件服务器目录下输出日志文件`ADV_Log.log`以定位错误,进入`调试模式`时必须启用日志。 +* `数据`设置 + * `增大系数`:可调节频谱数据增大时的速度,该值越大,数据增大时的速度越慢。 + * `减小系数`:可调节频谱数据减小时的速度,该值越大,数据减小时的速度越慢。 + * `峰值额外增量`:数据归一化峰值的额外增量,调节频谱的动态范围。 + * `动态归一化系数`:数据归一化峰值的收敛速度,该值越大,归一化的峰值数据收敛速度越快。 + * `传输速率`:数据每秒发送的次数,可理解为挂件刷新率。 + * `变化速度`:按照`变化速度/传输速率`的比例调节频谱数据变化速度,一般该值小于`传输速率`。 # 频谱样式开发