WIP: multi model
This commit is contained in:
parent
695152e138
commit
f8b589cc1d
@ -51,7 +51,7 @@
|
||||
"defaultEnablePyTorch": true,
|
||||
|
||||
"showOnnxExportButton": true,
|
||||
"showDescription": true
|
||||
"showDefaultTune": true
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -109,9 +109,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tune",
|
||||
"options": {
|
||||
"showSetDefault": true
|
||||
}
|
||||
"options": {}
|
||||
},
|
||||
{
|
||||
"name": "indexRatio",
|
||||
|
2
client/demo/dist/index.js
vendored
2
client/demo/dist/index.js
vendored
File diff suppressed because one or more lines are too long
73
client/demo/package-lock.json
generated
73
client/demo/package-lock.json
generated
@ -9,7 +9,7 @@
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@dannadori/voice-changer-client-js": "^1.0.112",
|
||||
"@dannadori/voice-changer-client-js": "^1.0.113",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.4.0",
|
||||
"@fortawesome/free-brands-svg-icons": "^6.4.0",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.4.0",
|
||||
@ -24,7 +24,7 @@
|
||||
"@babel/preset-react": "^7.18.6",
|
||||
"@babel/preset-typescript": "^7.21.4",
|
||||
"@types/node": "^18.15.13",
|
||||
"@types/react": "^18.0.37",
|
||||
"@types/react": "^18.0.38",
|
||||
"@types/react-dom": "^18.0.11",
|
||||
"autoprefixer": "^10.4.14",
|
||||
"babel-loader": "^9.1.2",
|
||||
@ -47,7 +47,7 @@
|
||||
"tsconfig-paths": "^4.2.0",
|
||||
"typescript": "^5.0.4",
|
||||
"webpack": "^5.80.0",
|
||||
"webpack-cli": "^5.0.1",
|
||||
"webpack-cli": "^5.0.2",
|
||||
"webpack-dev-server": "^4.13.3"
|
||||
}
|
||||
},
|
||||
@ -3097,9 +3097,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@dannadori/voice-changer-client-js": {
|
||||
"version": "1.0.112",
|
||||
"resolved": "https://registry.npmjs.org/@dannadori/voice-changer-client-js/-/voice-changer-client-js-1.0.112.tgz",
|
||||
"integrity": "sha512-ydEur3juxY2dNJe7xsqhref61J2JrB/l0oZVV4VLyh4Gu3OR/uhoBAWBtG5qNO0MVIBznbH/xyZ6jHA4JuwaAg==",
|
||||
"version": "1.0.113",
|
||||
"resolved": "https://registry.npmjs.org/@dannadori/voice-changer-client-js/-/voice-changer-client-js-1.0.113.tgz",
|
||||
"integrity": "sha512-UGm1KrgEiPlh/7x+/1I9SRAjUbbVA9XgXDayNQyWRVtFLmcfzpkGwJjIcoTH0t8TLzw17D1HWYtGWLES7+tc+w==",
|
||||
"dependencies": {
|
||||
"@types/readable-stream": "^2.3.15",
|
||||
"amazon-chime-sdk-js": "^3.13.0",
|
||||
@ -3711,9 +3711,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/react": {
|
||||
"version": "18.0.37",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.37.tgz",
|
||||
"integrity": "sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==",
|
||||
"version": "18.0.38",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.38.tgz",
|
||||
"integrity": "sha512-ExsidLLSzYj4cvaQjGnQCk4HFfVT9+EZ9XZsQ8Hsrcn8QNgXtpZ3m9vSIC2MWtx7jHictK6wYhQgGh6ic58oOw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/prop-types": "*",
|
||||
@ -3969,9 +3969,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@webpack-cli/serve": {
|
||||
"version": "2.0.1",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.2.tgz",
|
||||
"integrity": "sha512-S9h3GmOmzUseyeFW3tYNnWS7gNUuwxZ3mmMq0JyW78Vx1SGKPSkt5bT4pB0rUnVfHjP0EL9gW2bOzmtiTfQt0A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.15.0"
|
||||
},
|
||||
@ -10170,16 +10171,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-cli": {
|
||||
"version": "5.0.1",
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.2.tgz",
|
||||
"integrity": "sha512-4y3W5Dawri5+8dXm3+diW6Mn1Ya+Dei6eEVAdIduAmYNLzv1koKVAqsfgrrc9P2mhrYHQphx5htnGkcNwtubyQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@discoveryjs/json-ext": "^0.5.0",
|
||||
"@webpack-cli/configtest": "^2.0.1",
|
||||
"@webpack-cli/info": "^2.0.1",
|
||||
"@webpack-cli/serve": "^2.0.1",
|
||||
"@webpack-cli/serve": "^2.0.2",
|
||||
"colorette": "^2.0.14",
|
||||
"commander": "^9.4.1",
|
||||
"commander": "^10.0.1",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"envinfo": "^7.7.3",
|
||||
"fastest-levenshtein": "^1.0.12",
|
||||
@ -10213,6 +10215,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-cli/node_modules/commander": {
|
||||
"version": "10.0.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
|
||||
"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-dev-middleware": {
|
||||
"version": "5.3.3",
|
||||
"dev": true,
|
||||
@ -12902,9 +12913,9 @@
|
||||
}
|
||||
},
|
||||
"@dannadori/voice-changer-client-js": {
|
||||
"version": "1.0.112",
|
||||
"resolved": "https://registry.npmjs.org/@dannadori/voice-changer-client-js/-/voice-changer-client-js-1.0.112.tgz",
|
||||
"integrity": "sha512-ydEur3juxY2dNJe7xsqhref61J2JrB/l0oZVV4VLyh4Gu3OR/uhoBAWBtG5qNO0MVIBznbH/xyZ6jHA4JuwaAg==",
|
||||
"version": "1.0.113",
|
||||
"resolved": "https://registry.npmjs.org/@dannadori/voice-changer-client-js/-/voice-changer-client-js-1.0.113.tgz",
|
||||
"integrity": "sha512-UGm1KrgEiPlh/7x+/1I9SRAjUbbVA9XgXDayNQyWRVtFLmcfzpkGwJjIcoTH0t8TLzw17D1HWYtGWLES7+tc+w==",
|
||||
"requires": {
|
||||
"@types/readable-stream": "^2.3.15",
|
||||
"amazon-chime-sdk-js": "^3.13.0",
|
||||
@ -13360,9 +13371,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/react": {
|
||||
"version": "18.0.37",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.37.tgz",
|
||||
"integrity": "sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==",
|
||||
"version": "18.0.38",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.38.tgz",
|
||||
"integrity": "sha512-ExsidLLSzYj4cvaQjGnQCk4HFfVT9+EZ9XZsQ8Hsrcn8QNgXtpZ3m9vSIC2MWtx7jHictK6wYhQgGh6ic58oOw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/prop-types": "*",
|
||||
@ -13594,7 +13605,9 @@
|
||||
"requires": {}
|
||||
},
|
||||
"@webpack-cli/serve": {
|
||||
"version": "2.0.1",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.2.tgz",
|
||||
"integrity": "sha512-S9h3GmOmzUseyeFW3tYNnWS7gNUuwxZ3mmMq0JyW78Vx1SGKPSkt5bT4pB0rUnVfHjP0EL9gW2bOzmtiTfQt0A==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
},
|
||||
@ -17482,15 +17495,17 @@
|
||||
}
|
||||
},
|
||||
"webpack-cli": {
|
||||
"version": "5.0.1",
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.2.tgz",
|
||||
"integrity": "sha512-4y3W5Dawri5+8dXm3+diW6Mn1Ya+Dei6eEVAdIduAmYNLzv1koKVAqsfgrrc9P2mhrYHQphx5htnGkcNwtubyQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@discoveryjs/json-ext": "^0.5.0",
|
||||
"@webpack-cli/configtest": "^2.0.1",
|
||||
"@webpack-cli/info": "^2.0.1",
|
||||
"@webpack-cli/serve": "^2.0.1",
|
||||
"@webpack-cli/serve": "^2.0.2",
|
||||
"colorette": "^2.0.14",
|
||||
"commander": "^9.4.1",
|
||||
"commander": "^10.0.1",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"envinfo": "^7.7.3",
|
||||
"fastest-levenshtein": "^1.0.12",
|
||||
@ -17498,6 +17513,14 @@
|
||||
"interpret": "^3.1.1",
|
||||
"rechoir": "^0.8.0",
|
||||
"webpack-merge": "^5.7.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"commander": {
|
||||
"version": "10.0.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
|
||||
"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"webpack-dev-middleware": {
|
||||
|
@ -24,7 +24,7 @@
|
||||
"@babel/preset-react": "^7.18.6",
|
||||
"@babel/preset-typescript": "^7.21.4",
|
||||
"@types/node": "^18.15.13",
|
||||
"@types/react": "^18.0.37",
|
||||
"@types/react": "^18.0.38",
|
||||
"@types/react-dom": "^18.0.11",
|
||||
"autoprefixer": "^10.4.14",
|
||||
"babel-loader": "^9.1.2",
|
||||
@ -47,11 +47,11 @@
|
||||
"tsconfig-paths": "^4.2.0",
|
||||
"typescript": "^5.0.4",
|
||||
"webpack": "^5.80.0",
|
||||
"webpack-cli": "^5.0.1",
|
||||
"webpack-cli": "^5.0.2",
|
||||
"webpack-dev-server": "^4.13.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@dannadori/voice-changer-client-js": "^1.0.112",
|
||||
"@dannadori/voice-changer-client-js": "^1.0.113",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.4.0",
|
||||
"@fortawesome/free-brands-svg-icons": "^6.4.0",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.4.0",
|
||||
|
@ -51,7 +51,7 @@
|
||||
"defaultEnablePyTorch": true,
|
||||
|
||||
"showOnnxExportButton": true,
|
||||
"showDescription": true
|
||||
"showDefaultTune": true
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -109,9 +109,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tune",
|
||||
"options": {
|
||||
"showSetDefault": true
|
||||
}
|
||||
"options": {}
|
||||
},
|
||||
{
|
||||
"name": "indexRatio",
|
||||
|
@ -11,9 +11,8 @@ export const ModelSwitchRow = (_props: ModelSwitchRowProps) => {
|
||||
const modelSwitchRow = useMemo(() => {
|
||||
|
||||
const onSwitchModelClicked = (index: number) => {
|
||||
const fileUploadSetting = appState.serverSetting.fileUploadSettings[index]
|
||||
|
||||
appState.serverSetting.updateServerSettings({ ...appState.serverSetting.serverSetting, modelSlotIndex: index, tran: fileUploadSetting.defaultTune })
|
||||
appState.serverSetting.updateServerSettings({ ...appState.serverSetting.serverSetting, modelSlotIndex: index })
|
||||
|
||||
}
|
||||
let filename = ""
|
||||
|
@ -0,0 +1,38 @@
|
||||
import React, { useMemo } from "react"
|
||||
import { useAppState } from "../../../001_provider/001_AppStateProvider"
|
||||
import { useGuiState } from "../001_GuiStateProvider"
|
||||
|
||||
export const DefaultTuneRow = () => {
|
||||
const appState = useAppState()
|
||||
const guiState = useGuiState()
|
||||
const defaultTuneRow = useMemo(() => {
|
||||
const slot = guiState.modelSlotNum
|
||||
const fileUploadSetting = appState.serverSetting.fileUploadSettings[slot]
|
||||
|
||||
const onDefaultTuneChanged = (val: number) => {
|
||||
appState.serverSetting.setFileUploadSetting(slot, {
|
||||
...appState.serverSetting.fileUploadSettings[slot],
|
||||
defaultTune: val
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="body-row split-3-2-1-4 left-padding-1 guided">
|
||||
<div className="body-item-title left-padding-2 ">Default Tune</div>
|
||||
<div>
|
||||
<input type="range" className="body-item-input-slider" min="-50" max="50" step="1" value={fileUploadSetting?.defaultTune || 0} onChange={(e) => {
|
||||
onDefaultTuneChanged(Number(e.target.value))
|
||||
}}></input>
|
||||
<span className="body-item-input-slider-val">{fileUploadSetting?.defaultTune || 0}</span>
|
||||
</div>
|
||||
<div>
|
||||
</div>
|
||||
<div className="body-button-container">
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
}, [appState.serverSetting.fileUploadSettings, guiState.modelSlotNum])
|
||||
|
||||
return defaultTuneRow
|
||||
}
|
@ -10,7 +10,7 @@ import { IndexSelectRow } from "./301-7_IndexSelectRow"
|
||||
import { HalfPrecisionRow } from "./301-8_HalfPrescisionRow"
|
||||
import { ModelUploadButtonRow } from "./301-9_ModelUploadButtonRow"
|
||||
import { ModelSlotRow } from "./301-a_ModelSlotRow"
|
||||
import { DescriptionRow } from "./301-b_DescriptionRow"
|
||||
import { DefaultTuneRow } from "./301-c_DefaultTuneRow"
|
||||
|
||||
export type ModelUploaderRowProps = {
|
||||
showModelSlot: boolean
|
||||
@ -24,6 +24,7 @@ export type ModelUploaderRowProps = {
|
||||
showIndex: boolean
|
||||
showHalfPrecision: boolean
|
||||
showDescription: boolean
|
||||
showDefaultTune: boolean
|
||||
|
||||
defaultEnablePyTorch: boolean
|
||||
|
||||
@ -61,7 +62,7 @@ export const ModelUploaderRow = (props: ModelUploaderRowProps) => {
|
||||
{props.showFeature ? <FeatureSelectRow /> : <></>}
|
||||
{props.showIndex ? <IndexSelectRow /> : <></>}
|
||||
{props.showHalfPrecision ? <HalfPrecisionRow /> : <></>}
|
||||
{props.showDescription ? <DescriptionRow /> : <></>}
|
||||
{props.showDefaultTune ? <DefaultTuneRow /> : <></>}
|
||||
|
||||
<ModelUploadButtonRow />
|
||||
</>
|
||||
|
@ -21,7 +21,7 @@ export const F0FactorRow = (_props: F0FactorRowProps) => {
|
||||
<div className="body-row split-3-2-1-4 left-padding-1 guided">
|
||||
<div className="body-item-title left-padding-1">F0 Factor</div>
|
||||
<div className="body-input-container">
|
||||
<input type="range" className="body-item-input-slider" min="0.1" max="5.0" step="0.1" value={appState.serverSetting.serverSetting.f0Factor || 0} onChange={(e) => {
|
||||
<input type="range" className="body-item-input-slider" min="0.1" max="5.0" step="0.01" value={appState.serverSetting.serverSetting.f0Factor || 0} onChange={(e) => {
|
||||
appState.serverSetting.updateServerSettings({ ...appState.serverSetting.serverSetting, f0Factor: Number(e.target.value) })
|
||||
}}></input>
|
||||
<span className="body-item-input-slider-val">{appState.serverSetting.serverSetting.f0Factor?.toFixed(1) || 0}</span>
|
||||
|
@ -4,13 +4,11 @@ import { useGuiState } from "../001_GuiStateProvider"
|
||||
|
||||
export type TuneRowProps = {
|
||||
showPredictF0: boolean
|
||||
showSetDefault: boolean
|
||||
}
|
||||
export const TuneRow = (props: TuneRowProps) => {
|
||||
const appState = useAppState()
|
||||
const guiState = useGuiState()
|
||||
const tuneRow = useMemo(() => {
|
||||
const slot = guiState.modelSlotNum
|
||||
const predictF0 = props.showPredictF0 ?
|
||||
<>
|
||||
<input type="checkbox" checked={appState.serverSetting.serverSetting.predictF0 == 1} onChange={(e) => {
|
||||
@ -19,13 +17,6 @@ export const TuneRow = (props: TuneRowProps) => {
|
||||
</> :
|
||||
<></>
|
||||
|
||||
const showSetDefault = props.showSetDefault ?
|
||||
<>
|
||||
<div className="body-button" onClick={() => {
|
||||
appState.serverSetting.updateDefaultTune(slot, appState.serverSetting.serverSetting.tran)
|
||||
}}>set model default</div>
|
||||
</> :
|
||||
<></>
|
||||
|
||||
return (
|
||||
<div className="body-row split-3-2-1-4 left-padding-1 guided">
|
||||
@ -40,7 +31,6 @@ export const TuneRow = (props: TuneRowProps) => {
|
||||
{predictF0}
|
||||
</div>
|
||||
<div className="body-button-container">
|
||||
{showSetDefault}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
66
client/lib/package-lock.json
generated
66
client/lib/package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@dannadori/voice-changer-client-js",
|
||||
"version": "1.0.112",
|
||||
"version": "1.0.113",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@dannadori/voice-changer-client-js",
|
||||
"version": "1.0.112",
|
||||
"version": "1.0.113",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@types/readable-stream": "^2.3.15",
|
||||
@ -20,7 +20,7 @@
|
||||
"devDependencies": {
|
||||
"@types/audioworklet": "^0.0.41",
|
||||
"@types/node": "^18.15.13",
|
||||
"@types/react": "18.0.37",
|
||||
"@types/react": "18.0.38",
|
||||
"@types/react-dom": "18.0.11",
|
||||
"eslint": "^8.38.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
@ -34,7 +34,7 @@
|
||||
"ts-loader": "^9.4.2",
|
||||
"typescript": "^5.0.4",
|
||||
"webpack": "^5.80.0",
|
||||
"webpack-cli": "^5.0.1",
|
||||
"webpack-cli": "^5.0.2",
|
||||
"webpack-dev-server": "^4.13.3"
|
||||
}
|
||||
},
|
||||
@ -1852,9 +1852,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/react": {
|
||||
"version": "18.0.37",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.37.tgz",
|
||||
"integrity": "sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==",
|
||||
"version": "18.0.38",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.38.tgz",
|
||||
"integrity": "sha512-ExsidLLSzYj4cvaQjGnQCk4HFfVT9+EZ9XZsQ8Hsrcn8QNgXtpZ3m9vSIC2MWtx7jHictK6wYhQgGh6ic58oOw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/prop-types": "*",
|
||||
@ -2122,9 +2122,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@webpack-cli/serve": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz",
|
||||
"integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.2.tgz",
|
||||
"integrity": "sha512-S9h3GmOmzUseyeFW3tYNnWS7gNUuwxZ3mmMq0JyW78Vx1SGKPSkt5bT4pB0rUnVfHjP0EL9gW2bOzmtiTfQt0A==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=14.15.0"
|
||||
@ -7393,17 +7393,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-cli": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.1.tgz",
|
||||
"integrity": "sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==",
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.2.tgz",
|
||||
"integrity": "sha512-4y3W5Dawri5+8dXm3+diW6Mn1Ya+Dei6eEVAdIduAmYNLzv1koKVAqsfgrrc9P2mhrYHQphx5htnGkcNwtubyQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@discoveryjs/json-ext": "^0.5.0",
|
||||
"@webpack-cli/configtest": "^2.0.1",
|
||||
"@webpack-cli/info": "^2.0.1",
|
||||
"@webpack-cli/serve": "^2.0.1",
|
||||
"@webpack-cli/serve": "^2.0.2",
|
||||
"colorette": "^2.0.14",
|
||||
"commander": "^9.4.1",
|
||||
"commander": "^10.0.1",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"envinfo": "^7.7.3",
|
||||
"fastest-levenshtein": "^1.0.12",
|
||||
@ -7438,12 +7438,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-cli/node_modules/commander": {
|
||||
"version": "9.5.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
|
||||
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
|
||||
"version": "10.0.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
|
||||
"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.20.0 || >=14"
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-dev-middleware": {
|
||||
@ -9496,9 +9496,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/react": {
|
||||
"version": "18.0.37",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.37.tgz",
|
||||
"integrity": "sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==",
|
||||
"version": "18.0.38",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.38.tgz",
|
||||
"integrity": "sha512-ExsidLLSzYj4cvaQjGnQCk4HFfVT9+EZ9XZsQ8Hsrcn8QNgXtpZ3m9vSIC2MWtx7jHictK6wYhQgGh6ic58oOw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/prop-types": "*",
|
||||
@ -9754,9 +9754,9 @@
|
||||
"requires": {}
|
||||
},
|
||||
"@webpack-cli/serve": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz",
|
||||
"integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.2.tgz",
|
||||
"integrity": "sha512-S9h3GmOmzUseyeFW3tYNnWS7gNUuwxZ3mmMq0JyW78Vx1SGKPSkt5bT4pB0rUnVfHjP0EL9gW2bOzmtiTfQt0A==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
},
|
||||
@ -13647,17 +13647,17 @@
|
||||
}
|
||||
},
|
||||
"webpack-cli": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.1.tgz",
|
||||
"integrity": "sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==",
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.2.tgz",
|
||||
"integrity": "sha512-4y3W5Dawri5+8dXm3+diW6Mn1Ya+Dei6eEVAdIduAmYNLzv1koKVAqsfgrrc9P2mhrYHQphx5htnGkcNwtubyQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@discoveryjs/json-ext": "^0.5.0",
|
||||
"@webpack-cli/configtest": "^2.0.1",
|
||||
"@webpack-cli/info": "^2.0.1",
|
||||
"@webpack-cli/serve": "^2.0.1",
|
||||
"@webpack-cli/serve": "^2.0.2",
|
||||
"colorette": "^2.0.14",
|
||||
"commander": "^9.4.1",
|
||||
"commander": "^10.0.1",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"envinfo": "^7.7.3",
|
||||
"fastest-levenshtein": "^1.0.12",
|
||||
@ -13668,9 +13668,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"commander": {
|
||||
"version": "9.5.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
|
||||
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
|
||||
"version": "10.0.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
|
||||
"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@dannadori/voice-changer-client-js",
|
||||
"version": "1.0.112",
|
||||
"version": "1.0.113",
|
||||
"description": "",
|
||||
"main": "dist/index.js",
|
||||
"directories": {
|
||||
@ -28,7 +28,7 @@
|
||||
"devDependencies": {
|
||||
"@types/audioworklet": "^0.0.41",
|
||||
"@types/node": "^18.15.13",
|
||||
"@types/react": "18.0.37",
|
||||
"@types/react": "18.0.38",
|
||||
"@types/react-dom": "18.0.11",
|
||||
"eslint": "^8.38.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
@ -42,7 +42,7 @@
|
||||
"ts-loader": "^9.4.2",
|
||||
"typescript": "^5.0.4",
|
||||
"webpack": "^5.80.0",
|
||||
"webpack-cli": "^5.0.1",
|
||||
"webpack-cli": "^5.0.2",
|
||||
"webpack-dev-server": "^4.13.3"
|
||||
},
|
||||
"dependencies": {
|
||||
|
@ -109,8 +109,7 @@ export class ServerConfigurator {
|
||||
})
|
||||
}
|
||||
|
||||
// !! 注意!! hubertTorchModelは固定値で上書きされるため、設定しても効果ない。
|
||||
loadModel = async (slot: number, configFilename: string, pyTorchModelFilename: string | null, onnxModelFilename: string | null, clusterTorchModelFilename: string | null, featureFilename: string | null, indexFilename: string | null, isHalf: boolean) => {
|
||||
loadModel = async (slot: number, configFilename: string, pyTorchModelFilename: string | null, onnxModelFilename: string | null, clusterTorchModelFilename: string | null, featureFilename: string | null, indexFilename: string | null, isHalf: boolean, params: string = "{}") => {
|
||||
const url = this.serverUrl + "/load_model"
|
||||
const info = new Promise<ServerInfo>(async (resolve) => {
|
||||
const formData = new FormData();
|
||||
@ -123,6 +122,7 @@ export class ServerConfigurator {
|
||||
formData.append("featureFilename", featureFilename || "-");
|
||||
formData.append("indexFilename", indexFilename || "-");
|
||||
formData.append("isHalf", "" + isHalf);
|
||||
formData.append("params", params);
|
||||
|
||||
const request = new Request(url, {
|
||||
method: 'POST',
|
||||
|
@ -292,10 +292,10 @@ export class VoiceChangerClient {
|
||||
clusterTorchModelFilename: string | null,
|
||||
featureFilename: string | null,
|
||||
indexFilename: string | null,
|
||||
isHalf: boolean
|
||||
isHalf: boolean,
|
||||
params: string,
|
||||
) => {
|
||||
// !! 注意!! hubertTorchModelは固定値で上書きされるため、設定しても効果ない。
|
||||
return this.configurator.loadModel(slot, configFilename, pyTorchModelFilename, onnxModelFilename, clusterTorchModelFilename, featureFilename, indexFilename, isHalf)
|
||||
return this.configurator.loadModel(slot, configFilename, pyTorchModelFilename, onnxModelFilename, clusterTorchModelFilename, featureFilename, indexFilename, isHalf, params)
|
||||
}
|
||||
|
||||
//## Worklet ##//
|
||||
|
@ -22,6 +22,7 @@ export type FileUploadSetting = {
|
||||
isHalf: boolean
|
||||
uploaded: boolean
|
||||
defaultTune: number
|
||||
params: string
|
||||
|
||||
}
|
||||
|
||||
@ -36,7 +37,8 @@ const InitialFileUploadSetting: FileUploadSetting = {
|
||||
|
||||
isHalf: true,
|
||||
uploaded: false,
|
||||
defaultTune: 0
|
||||
defaultTune: 0,
|
||||
params: "{}"
|
||||
}
|
||||
|
||||
export type UseServerSettingProps = {
|
||||
@ -57,7 +59,7 @@ export type ServerSettingState = {
|
||||
isUploading: boolean
|
||||
|
||||
getOnnx: () => Promise<OnnxExporterInfo>
|
||||
updateDefaultTune: (slot: number, tune: number) => void
|
||||
// updateDefaultTune: (slot: number, tune: number) => void
|
||||
|
||||
}
|
||||
|
||||
@ -264,6 +266,9 @@ export const useServerSetting = (props: UseServerSettingProps): ServerSettingSta
|
||||
}
|
||||
|
||||
const configFileName = fileUploadSetting.configFile ? fileUploadSetting.configFile.filename || "-" : "-"
|
||||
const params = JSON.stringify({
|
||||
trans: fileUploadSetting.defaultTune
|
||||
})
|
||||
const loadPromise = props.voiceChangerClient.loadModel(
|
||||
slot,
|
||||
configFileName,
|
||||
@ -272,7 +277,8 @@ export const useServerSetting = (props: UseServerSettingProps): ServerSettingSta
|
||||
fileUploadSetting.clusterTorchModel?.filename || null,
|
||||
fileUploadSetting.feature?.filename || null,
|
||||
fileUploadSetting.index?.filename || null,
|
||||
fileUploadSetting.isHalf
|
||||
fileUploadSetting.isHalf,
|
||||
params,
|
||||
|
||||
)
|
||||
|
||||
@ -292,11 +298,11 @@ export const useServerSetting = (props: UseServerSettingProps): ServerSettingSta
|
||||
}, [fileUploadSettings, props.voiceChangerClient, props.clientType])
|
||||
|
||||
|
||||
const updateDefaultTune = (slot: number, tune: number) => {
|
||||
fileUploadSettings[slot].defaultTune = tune
|
||||
storeToCache(slot, fileUploadSettings[slot])
|
||||
setFileUploadSettings([...fileUploadSettings])
|
||||
}
|
||||
// const updateDefaultTune = (slot: number, tune: number) => {
|
||||
// fileUploadSettings[slot].defaultTune = tune
|
||||
// storeToCache(slot, fileUploadSettings[slot])
|
||||
// setFileUploadSettings([...fileUploadSettings])
|
||||
// }
|
||||
|
||||
const storeToCache = (slot: number, fileUploadSetting: FileUploadSetting) => {
|
||||
try {
|
||||
@ -315,7 +321,8 @@ export const useServerSetting = (props: UseServerSettingProps): ServerSettingSta
|
||||
} : null,
|
||||
isHalf: fileUploadSetting.isHalf, // キャッシュとしては不使用。guiで上書きされる。
|
||||
uploaded: false, // キャッシュから読み込まれるときには、まだuploadされていないから。
|
||||
defaultTune: fileUploadSetting.defaultTune
|
||||
defaultTune: fileUploadSetting.defaultTune,
|
||||
params: fileUploadSetting.params
|
||||
}
|
||||
setItem(`${INDEXEDDB_KEY_MODEL_DATA}_${slot}`, saveData)
|
||||
} catch (e) {
|
||||
@ -364,6 +371,6 @@ export const useServerSetting = (props: UseServerSettingProps): ServerSettingSta
|
||||
uploadProgress,
|
||||
isUploading,
|
||||
getOnnx,
|
||||
updateDefaultTune,
|
||||
// updateDefaultTune,
|
||||
}
|
||||
}
|
@ -61,6 +61,7 @@ class MMVC_Rest_Fileuploader:
|
||||
featureFilename: str = Form(...),
|
||||
indexFilename: str = Form(...),
|
||||
isHalf: bool = Form(...),
|
||||
params: str = Form(...),
|
||||
):
|
||||
|
||||
props = {
|
||||
@ -73,7 +74,8 @@ class MMVC_Rest_Fileuploader:
|
||||
"clusterTorchModelFilename": clusterTorchModelFilename,
|
||||
"featureFilename": featureFilename,
|
||||
"indexFilename": indexFilename
|
||||
}
|
||||
},
|
||||
"params": params
|
||||
}
|
||||
# Change Filepath
|
||||
for key, val in props["files"].items():
|
||||
|
@ -1,5 +1,6 @@
|
||||
import sys
|
||||
import os
|
||||
import json
|
||||
import resampy
|
||||
from voice_changer.RVC.ModelWrapper import ModelWrapper
|
||||
from Exceptions import NoModeLoadedException
|
||||
@ -40,6 +41,7 @@ class ModelSlot():
|
||||
onnxModelFile: str = ""
|
||||
featureFile: str = ""
|
||||
indexFile: str = ""
|
||||
defaultTrans: int = ""
|
||||
|
||||
|
||||
@dataclass
|
||||
@ -82,16 +84,13 @@ class RVC:
|
||||
def __init__(self, params):
|
||||
self.settings = RVCSettings()
|
||||
|
||||
self.inferenceing: bool = False
|
||||
|
||||
self.net_g = None
|
||||
self.onnx_session = None
|
||||
self.feature_file = None
|
||||
self.index_file = None
|
||||
|
||||
# self.net_g1 = None
|
||||
# self.onnx_session1 = None
|
||||
# self.feature_file1 = None
|
||||
# self.index_file1 = None
|
||||
|
||||
# self.net_g2 = None
|
||||
# self.onnx_session2 = None
|
||||
# self.feature_file2 = None
|
||||
@ -108,12 +107,15 @@ class RVC:
|
||||
def loadModel(self, props):
|
||||
self.is_half = props["isHalf"]
|
||||
self.tmp_slot = props["slot"]
|
||||
params_str = props["params"]
|
||||
params = json.loads(params_str)
|
||||
|
||||
self.settings.modelSlots[self.tmp_slot] = ModelSlot(
|
||||
pyTorchModelFile=props["files"]["pyTorchModelFilename"],
|
||||
onnxModelFile=props["files"]["onnxModelFilename"],
|
||||
featureFile=props["files"]["featureFilename"],
|
||||
indexFile=props["files"]["indexFilename"]
|
||||
indexFile=props["files"]["indexFilename"],
|
||||
defaultTrans=params["trans"]
|
||||
)
|
||||
|
||||
print("[Voice Changer] RVC loading... slot:", self.tmp_slot)
|
||||
@ -161,16 +163,18 @@ class RVC:
|
||||
|
||||
self.next_feature_file = self.settings.modelSlots[slot].featureFile
|
||||
self.next_index_file = self.settings.modelSlots[slot].indexFile
|
||||
self.next_trans = self.settings.modelSlots[slot].defaultTrans
|
||||
|
||||
return self.get_info()
|
||||
|
||||
def switchModel(self):
|
||||
del self.net_g
|
||||
del self.onnx_session
|
||||
# del self.net_g
|
||||
# del self.onnx_session
|
||||
self.net_g = self.next_net_g
|
||||
self.onnx_session = self.next_onnx_session
|
||||
self.feature_file = self.next_feature_file
|
||||
self.index_file = self.next_index_file
|
||||
self.settings.tran = self.next_trans
|
||||
self.next_net_g = None
|
||||
self.next_onnx_session = None
|
||||
|
||||
@ -304,10 +308,9 @@ class RVC:
|
||||
dev = torch.device("cuda", index=self.settings.gpu)
|
||||
|
||||
# print("device:", dev)
|
||||
net_g = self.net_g.to(dev)
|
||||
|
||||
self.hubert_model = self.hubert_model.to(dev)
|
||||
# self.net_g = self.net_g.to(dev)
|
||||
self.net_g = self.net_g.to(dev)
|
||||
|
||||
audio = data[0]
|
||||
convertSize = data[1]
|
||||
@ -332,10 +335,10 @@ class RVC:
|
||||
f0_file = None
|
||||
|
||||
if self.settings.silenceFront == 0:
|
||||
audio_out = vc.pipeline(self.hubert_model, net_g, sid, audio, times, f0_up_key, f0_method,
|
||||
audio_out = vc.pipeline(self.hubert_model, self.net_g, sid, audio, times, f0_up_key, f0_method,
|
||||
file_index, file_big_npy, index_rate, if_f0, f0_file=f0_file, silence_front=0)
|
||||
else:
|
||||
audio_out = vc.pipeline(self.hubert_model, net_g, sid, audio, times, f0_up_key, f0_method,
|
||||
audio_out = vc.pipeline(self.hubert_model, self.net_g, sid, audio, times, f0_up_key, f0_method,
|
||||
file_index, file_big_npy, index_rate, if_f0, f0_file=f0_file, silence_front=self.settings.extraConvertSize / self.settings.modelSamplingRate)
|
||||
|
||||
result = audio_out * np.sqrt(vol)
|
||||
@ -343,16 +346,31 @@ class RVC:
|
||||
return result
|
||||
|
||||
def inference(self, data):
|
||||
if self.currentSlot != self.slot:
|
||||
self.currentSlot = self.slot
|
||||
self.switchModel()
|
||||
if self.inferenceing == True:
|
||||
raise NoModeLoadedException("---------------------------------- tmp")
|
||||
|
||||
if self.settings.framework == "ONNX":
|
||||
audio = self._onnx_inference(data)
|
||||
else:
|
||||
audio = self._pyTorch_inference(data)
|
||||
self.inferenceing = True
|
||||
|
||||
return audio
|
||||
try:
|
||||
if self.currentSlot != self.slot:
|
||||
import time
|
||||
# time.sleep(1)
|
||||
self.currentSlot = self.slot
|
||||
# self.prepareModel(self.currentSlot)
|
||||
self.switchModel()
|
||||
# time.sleep(1)
|
||||
|
||||
if self.settings.framework == "ONNX":
|
||||
audio = self._onnx_inference(data)
|
||||
else:
|
||||
audio = self._pyTorch_inference(data)
|
||||
|
||||
self.inferenceing = False
|
||||
|
||||
return audio
|
||||
except Exception as e:
|
||||
self.inferenceing = False
|
||||
raise e
|
||||
|
||||
def __del__(self):
|
||||
del self.net_g
|
||||
|
Loading…
x
Reference in New Issue
Block a user