From cbc454ebf71c9531baa516b5926e37cf3e1d9c16 Mon Sep 17 00:00:00 2001 From: wataru Date: Tue, 25 Apr 2023 16:15:13 +0900 Subject: [PATCH] improve gui --- client/demo/dist/index.js | 2 +- .../demo/components/204_ModelSwitchRow.tsx | 18 ++++- server/voice_changer/RVC/ModelWrapper.py | 10 +++ server/voice_changer/RVC/RVC.py | 73 +++++++++++++------ server/voice_changer/RVC/export2onnx.py | 8 +- 5 files changed, 80 insertions(+), 31 deletions(-) diff --git a/client/demo/dist/index.js b/client/demo/dist/index.js index f3242851..8656d3b4 100644 --- a/client/demo/dist/index.js +++ b/client/demo/dist/index.js @@ -356,7 +356,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ModelSwitchRow\": () => (/* binding */ ModelSwitchRow)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _001_provider_001_AppStateProvider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../001_provider/001_AppStateProvider */ \"./src/001_provider/001_AppStateProvider.tsx\");\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\n\nvar ModelSwitchRow = function ModelSwitchRow(_props) {\n var appState = (0,_001_provider_001_AppStateProvider__WEBPACK_IMPORTED_MODULE_4__.useAppState)();\n var modelSwitchRow = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(function () {\n var slot = appState.serverSetting.serverSetting.modelSlotIndex;\n var onSwitchModelClicked = /*#__PURE__*/function () {\n var _ref = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default().mark(function _callee(index, filename) {\n var framework, dummyModelSlotIndex;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n framework = filename.endsWith(\".onnx\") ? \"ONNX\" : \"PyTorch\";\n console.log(\"Framework:::\", filename, framework);\n\n // Quick hack for same slot is selected. 下3桁が実際のSlotID\n dummyModelSlotIndex = Math.floor(Date.now() / 1000) * 1000 + index;\n _context.next = 5;\n return appState.serverSetting.updateServerSettings(_objectSpread(_objectSpread({}, appState.serverSetting.serverSetting), {}, {\n modelSlotIndex: dummyModelSlotIndex,\n framework: framework\n }));\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function onSwitchModelClicked(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }();\n var modelOptions = appState.serverSetting.serverSetting.modelSlots.map(function (x, index) {\n var className = index == slot ? \"body-button-active left-margin-1\" : \"body-button left-margin-1\";\n var filename = \"\";\n if (x.pyTorchModelFile && x.pyTorchModelFile.length > 0) {\n filename = x.pyTorchModelFile.replace(/^.*[\\\\\\/]/, '');\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n key: index,\n className: className,\n onClick: function onClick() {\n onSwitchModelClicked(index, filename);\n }\n }, filename);\n } else if (x.onnxModelFile && x.onnxModelFile.length > 0) {\n filename = x.onnxModelFile.replace(/^.*[\\\\\\/]/, '');\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n key: index,\n className: className,\n onClick: function onClick() {\n onSwitchModelClicked(index, filename);\n }\n }, filename);\n } else {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n key: index\n });\n }\n });\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement((react__WEBPACK_IMPORTED_MODULE_3___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"body-row split-3-7 left-padding-1 guided\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"body-item-title left-padding-1\"\n }, \"Swicth Model\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"body-button-container\"\n }, modelOptions)));\n }, [appState.getInfo, appState.serverSetting.serverSetting]);\n return modelSwitchRow;\n};\n\n//# sourceURL=webpack://demo/./src/components/demo/components/204_ModelSwitchRow.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ModelSwitchRow\": () => (/* binding */ ModelSwitchRow)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _001_provider_001_AppStateProvider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../001_provider/001_AppStateProvider */ \"./src/001_provider/001_AppStateProvider.tsx\");\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\n\nvar ModelSwitchRow = function ModelSwitchRow(_props) {\n var appState = (0,_001_provider_001_AppStateProvider__WEBPACK_IMPORTED_MODULE_4__.useAppState)();\n var modelSwitchRow = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(function () {\n var slot = appState.serverSetting.serverSetting.modelSlotIndex;\n var onSwitchModelClicked = /*#__PURE__*/function () {\n var _ref = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__[\"default\"])( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default().mark(function _callee(index, filename) {\n var framework, dummyModelSlotIndex;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n framework = filename.endsWith(\".onnx\") ? \"ONNX\" : \"PyTorch\"; // Quick hack for same slot is selected. 下3桁が実際のSlotID\n dummyModelSlotIndex = Math.floor(Date.now() / 1000) * 1000 + index;\n _context.next = 4;\n return appState.serverSetting.updateServerSettings(_objectSpread(_objectSpread({}, appState.serverSetting.serverSetting), {}, {\n modelSlotIndex: dummyModelSlotIndex,\n framework: framework\n }));\n case 4:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function onSwitchModelClicked(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }();\n var modelOptions = appState.serverSetting.serverSetting.modelSlots.map(function (x, index) {\n var className = index == slot ? \"body-button-active left-margin-1\" : \"body-button left-margin-1\";\n var filename = \"\";\n if (x.pyTorchModelFile && x.pyTorchModelFile.length > 0) {\n filename = x.pyTorchModelFile.replace(/^.*[\\\\\\/]/, '');\n } else if (x.onnxModelFile && x.onnxModelFile.length > 0) {\n filename = x.onnxModelFile.replace(/^.*[\\\\\\/]/, '');\n } else {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n key: index\n });\n }\n var f0str = x.f0 == true ? \"f0\" : \"nof0\";\n var srstr = Math.floor(x.samplingRate / 1000) + \"K\";\n var embedstr = x.embChannels;\n var typestr = x.modelType == 0 ? \"org\" : \"webui\";\n var metadata = x.deprecated ? \"[deprecated version]\" : \"[\".concat(f0str, \",\").concat(srstr, \",\").concat(embedstr, \",\").concat(typestr, \"]\");\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n key: index,\n className: className,\n onClick: function onClick() {\n onSwitchModelClicked(index, filename);\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", null, filename), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", null, metadata));\n });\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement((react__WEBPACK_IMPORTED_MODULE_3___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"body-row split-3-7 left-padding-1 guided\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"body-item-title left-padding-1\"\n }, \"Swicth Model\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"body-button-container\"\n }, modelOptions)));\n }, [appState.getInfo, appState.serverSetting.serverSetting]);\n return modelSwitchRow;\n};\n\n//# sourceURL=webpack://demo/./src/components/demo/components/204_ModelSwitchRow.tsx?"); /***/ }), diff --git a/client/demo/src/components/demo/components/204_ModelSwitchRow.tsx b/client/demo/src/components/demo/components/204_ModelSwitchRow.tsx index 66c16f19..5e240a8c 100644 --- a/client/demo/src/components/demo/components/204_ModelSwitchRow.tsx +++ b/client/demo/src/components/demo/components/204_ModelSwitchRow.tsx @@ -14,7 +14,6 @@ export const ModelSwitchRow = (_props: ModelSwitchRowProps) => { const onSwitchModelClicked = async (index: number, filename: string) => { const framework: Framework = filename.endsWith(".onnx") ? "ONNX" : "PyTorch" - console.log("Framework:::", filename, framework) // Quick hack for same slot is selected. 下3桁が実際のSlotID const dummyModelSlotIndex = (Math.floor(Date.now() / 1000)) * 1000 + index @@ -25,13 +24,26 @@ export const ModelSwitchRow = (_props: ModelSwitchRowProps) => { let filename = "" if (x.pyTorchModelFile && x.pyTorchModelFile.length > 0) { filename = x.pyTorchModelFile.replace(/^.*[\\\/]/, '') - return
{ onSwitchModelClicked(index, filename) }}>{filename}
} else if (x.onnxModelFile && x.onnxModelFile.length > 0) { filename = x.onnxModelFile.replace(/^.*[\\\/]/, '') - return
{ onSwitchModelClicked(index, filename) }}>{filename}
} else { return
} + const f0str = x.f0 == true ? "f0" : "nof0" + const srstr = Math.floor(x.samplingRate / 1000) + "K" + const embedstr = x.embChannels + const typestr = x.modelType == 0 ? "org" : "webui" + const metadata = x.deprecated ? "[deprecated version]" : `[${f0str},${srstr},${embedstr},${typestr}]` + + + return ( +
{ onSwitchModelClicked(index, filename) }}> +
+ {filename} +
+
{metadata}
+
+ ) }) diff --git a/server/voice_changer/RVC/ModelWrapper.py b/server/voice_changer/RVC/ModelWrapper.py index 1c05188c..9513b2b1 100644 --- a/server/voice_changer/RVC/ModelWrapper.py +++ b/server/voice_changer/RVC/ModelWrapper.py @@ -28,11 +28,15 @@ class ModelWrapper: self.samplingRate = metadata["samplingRate"] self.f0 = metadata["f0"] self.embChannels = metadata["embChannels"] + self.modelType = metadata["modelType"] + self.deprecated = False print(f"[Voice Changer] Onnx metadata: sr:{self.samplingRate}, f0:{self.f0}") except: self.samplingRate = 48000 self.f0 = True self.embChannels = 256 + self.modelType = 0 + self.deprecated = True print(f"[Voice Changer] ############## !!!! CAUTION !!!! ####################") print(f"[Voice Changer] This onnx's version is depricated. Please regenerate onnxfile. Fallback to default") print(f"[Voice Changer] Onnx metadata: sr:{self.samplingRate}, f0:{self.f0}") @@ -47,6 +51,12 @@ class ModelWrapper: def getEmbChannels(self): return self.embChannels + def getModelType(self): + return self.modelType + + def getDeprecated(self): + return self.deprecated + def set_providers(self, providers, provider_options=[{}]): self.onnx_session.set_providers(providers=providers, provider_options=provider_options) diff --git a/server/voice_changer/RVC/RVC.py b/server/voice_changer/RVC/RVC.py index 6fac0b0a..1f06f9f3 100644 --- a/server/voice_changer/RVC/RVC.py +++ b/server/voice_changer/RVC/RVC.py @@ -50,9 +50,10 @@ class ModelSlot(): samplingRate: int = -1 f0: bool = True embChannels: int = 256 - samplingRateOnnx: int = -1 - f0Onnx: bool = True - embChannelsOnnx: int = 256 + deprecated: bool = False + # samplingRateOnnx: int = -1 + # f0Onnx: bool = True + # embChannelsOnnx: int = 256 @dataclass @@ -130,6 +131,12 @@ class RVC: print("[Voice Changer] RVC loading... slot:", tmp_slot) + # Load metadata + if self.settings.modelSlots[tmp_slot].pyTorchModelFile != None and self.settings.modelSlots[tmp_slot].pyTorchModelFile != "": + self._setInfoByPytorch(tmp_slot, self.settings.modelSlots[tmp_slot].pyTorchModelFile) + if self.settings.modelSlots[tmp_slot].onnxModelFile != None and self.settings.modelSlots[tmp_slot].onnxModelFile != "": + self._setInfoByONNX(tmp_slot, self.settings.modelSlots[tmp_slot].onnxModelFile) + try: hubert_path = self.params["hubert_base"] models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task([hubert_path], suffix="",) @@ -151,6 +158,28 @@ class RVC: return self.get_info() + def _setInfoByPytorch(self, slot, file): + cpt = torch.load(file, map_location="cpu") + config_len = len(cpt["config"]) + if config_len == 18: + self.settings.modelSlots[slot].modelType = RVC_MODEL_TYPE_RVC + self.settings.modelSlots[slot].embChannels = 256 + else: + self.settings.modelSlots[slot].modelType = RVC_MODEL_TYPE_WEBUI + self.settings.modelSlots[slot].embChannels = cpt["config"][17] + self.settings.modelSlots[slot].f0 = True if cpt["f0"] == 1 else False + self.settings.modelSlots[slot].samplingRate = cpt["config"][-1] + + self.settings.modelSamplingRate = cpt["config"][-1] + + def _setInfoByONNX(self, slot, file): + tmp_onnx_session = ModelWrapper(file) + self.settings.modelSlots[slot].modelType = tmp_onnx_session.getModelType() + self.settings.modelSlots[slot].embChannelsOnnx = tmp_onnx_session.getEmbChannels() + self.settings.modelSlots[slot].f0 = tmp_onnx_session.getF0() + self.settings.modelSlots[slot].samplingRate = tmp_onnx_session.getSamplingRate() + self.settings.modelSlots[slot].deprecated = tmp_onnx_session.getDeprecated() + def prepareModel(self, slot: int): print("[Voice Changer] Prepare Model of slot:", slot) pyTorchModelFile = self.settings.modelSlots[slot].pyTorchModelFile @@ -172,17 +201,17 @@ class RVC: (2-2) rvc-webuiの、(256 or 768) x (ノーマルor pitchレス)判定 ⇒ 256, or 768 は17番目の要素で判定。, ノーマルor pitchレスはckp["f0"]で判定 ''' - config_len = len(cpt["config"]) - if config_len == 18: - self.settings.modelSlots[slot].modelType = RVC_MODEL_TYPE_RVC - self.settings.modelSlots[slot].embChannels = 256 - else: - self.settings.modelSlots[slot].modelType = RVC_MODEL_TYPE_WEBUI - self.settings.modelSlots[slot].embChannels = cpt["config"][17] - self.settings.modelSlots[slot].f0 = True if cpt["f0"] == 1 else False - self.settings.modelSlots[slot].samplingRate = cpt["config"][-1] + # config_len = len(cpt["config"]) + # if config_len == 18: + # self.settings.modelSlots[slot].modelType = RVC_MODEL_TYPE_RVC + # self.settings.modelSlots[slot].embChannels = 256 + # else: + # self.settings.modelSlots[slot].modelType = RVC_MODEL_TYPE_WEBUI + # self.settings.modelSlots[slot].embChannels = cpt["config"][17] + # self.settings.modelSlots[slot].f0 = True if cpt["f0"] == 1 else False + # self.settings.modelSlots[slot].samplingRate = cpt["config"][-1] - self.settings.modelSamplingRate = cpt["config"][-1] + # self.settings.modelSamplingRate = cpt["config"][-1] if self.settings.modelSlots[slot].modelType == RVC_MODEL_TYPE_RVC and self.settings.modelSlots[slot].f0 == True: net_g = SynthesizerTrnMs256NSFsid(*cpt["config"], is_half=self.is_half) @@ -213,16 +242,14 @@ class RVC: if onnxModelFile != None and onnxModelFile != "": print("[Voice Changer] Loading ONNX Model...") self.next_onnx_session = ModelWrapper(onnxModelFile) - self.settings.modelSlots[slot].samplingRateOnnx = self.next_onnx_session.getSamplingRate() - self.settings.modelSlots[slot].f0Onnx = self.next_onnx_session.getF0() - # if self.settings.modelSlots[slot].samplingRate == -1: # ONNXにsampling rateが入っていない - # self.settings.modelSlots[slot].samplingRate = self.settings.modelSamplingRate - self.settings.modelSlots[slot].embChannelsOnnx = self.next_onnx_session.getEmbChannels() + # self.settings.modelSlots[slot].samplingRateOnnx = self.next_onnx_session.getSamplingRate() + # self.settings.modelSlots[slot].f0Onnx = self.next_onnx_session.getF0() + # self.settings.modelSlots[slot].embChannelsOnnx = self.next_onnx_session.getEmbChannels() - # ONNXがある場合は、ONNXの設定を優先 - self.settings.modelSlots[slot].samplingRate = self.settings.modelSlots[slot].samplingRateOnnx - self.settings.modelSlots[slot].f0 = self.settings.modelSlots[slot].f0Onnx - self.settings.modelSlots[slot].embChannels = self.settings.modelSlots[slot].embChannelsOnnx + # # ONNXがある場合は、ONNXの設定を優先 + # self.settings.modelSlots[slot].samplingRate = self.settings.modelSlots[slot].samplingRateOnnx + # self.settings.modelSlots[slot].f0 = self.settings.modelSlots[slot].f0Onnx + # self.settings.modelSlots[slot].embChannels = self.settings.modelSlots[slot].embChannelsOnnx else: print("[Voice Changer] Skip Loading ONNX Model...") self.next_onnx_session = None @@ -469,7 +496,7 @@ class RVC: metadata = { "application": "VC_CLIENT", "version": "1", - "ModelType": self.settings.modelSlots[self.settings.modelSlotIndex].modelType, + "modelType": self.settings.modelSlots[self.settings.modelSlotIndex].modelType, "samplingRate": self.settings.modelSlots[self.settings.modelSlotIndex].samplingRate, "f0": self.settings.modelSlots[self.settings.modelSlotIndex].f0, "embChannels": self.settings.modelSlots[self.settings.modelSlotIndex].embChannels, diff --git a/server/voice_changer/RVC/export2onnx.py b/server/voice_changer/RVC/export2onnx.py index 07a6a60a..69a53ff7 100644 --- a/server/voice_changer/RVC/export2onnx.py +++ b/server/voice_changer/RVC/export2onnx.py @@ -371,13 +371,13 @@ def export2onnx(input_model, output_model, output_model_simple, is_half, metadat else: dev = torch.device("cpu") - if metadata["f0"] == True and metadata["ModelType"] == RVC_MODEL_TYPE_RVC: + if metadata["f0"] == True and metadata["modelType"] == RVC_MODEL_TYPE_RVC: net_g_onnx = SynthesizerTrnMs256NSFsid_ONNX(*cpt["config"], is_half=is_half) - elif metadata["f0"] == True and metadata["ModelType"] == RVC_MODEL_TYPE_WEBUI: + elif metadata["f0"] == True and metadata["modelType"] == RVC_MODEL_TYPE_WEBUI: net_g_onnx = SynthesizerTrnMsNSFsid_webui_ONNX(**cpt["params"], is_half=is_half) - elif metadata["f0"] == False and metadata["ModelType"] == RVC_MODEL_TYPE_RVC: + elif metadata["f0"] == False and metadata["modelType"] == RVC_MODEL_TYPE_RVC: net_g_onnx = SynthesizerTrnMs256NSFsid_nono_ONNX(*cpt["config"]) - elif metadata["f0"] == False and metadata["ModelType"] == RVC_MODEL_TYPE_WEBUI: + elif metadata["f0"] == False and metadata["modelType"] == RVC_MODEL_TYPE_WEBUI: net_g_onnx = SynthesizerTrnMsNSFsidNono_webui_ONNX(**cpt["params"]) net_g_onnx.eval().to(dev)