2023-02-19 10:12:25 +09:00
|
|
|
|
import { useState, useMemo, useEffect } from "react"
|
2023-06-19 11:40:16 +09:00
|
|
|
|
import { VoiceChangerServerSetting, ServerInfo, ServerSettingKey, INDEXEDDB_KEY_SERVER, INDEXEDDB_KEY_MODEL_DATA, ClientType, DefaultServerSetting_MMVCv13, DefaultServerSetting_MMVCv15, DefaultServerSetting_so_vits_svc_40v2, DefaultServerSetting_so_vits_svc_40, DefaultServerSetting_so_vits_svc_40_c, DefaultServerSetting_RVC, OnnxExporterInfo, DefaultServerSetting_DDSP_SVC, MAX_MODEL_SLOT_NUM, Framework, MergeModelRequest, VoiceChangerType } from "../const"
|
2023-01-12 23:01:45 +09:00
|
|
|
|
import { VoiceChangerClient } from "../VoiceChangerClient"
|
2023-01-29 09:42:45 +09:00
|
|
|
|
import { useIndexedDB } from "./useIndexedDB"
|
2023-06-11 10:55:26 +09:00
|
|
|
|
import { ModelLoadException } from "../exceptions"
|
2023-01-12 16:38:45 +09:00
|
|
|
|
|
|
|
|
|
|
2023-01-29 14:41:44 +09:00
|
|
|
|
type ModelData = {
|
2023-01-29 15:25:44 +09:00
|
|
|
|
file?: File
|
|
|
|
|
data?: ArrayBuffer
|
|
|
|
|
filename?: string
|
2023-01-29 14:41:44 +09:00
|
|
|
|
}
|
|
|
|
|
|
2023-06-08 03:08:59 +09:00
|
|
|
|
export const ModelAssetName = {
|
|
|
|
|
iconFile: "iconFile"
|
|
|
|
|
} as const
|
|
|
|
|
export type ModelAssetName = typeof ModelAssetName[keyof typeof ModelAssetName]
|
|
|
|
|
|
|
|
|
|
|
2023-06-19 11:40:16 +09:00
|
|
|
|
export const ModelFileKind = {
|
|
|
|
|
"mmvcv13Config": "mmvcv13Config",
|
|
|
|
|
"mmvcv13Model": "mmvcv13Model",
|
|
|
|
|
"mmvcv15Config": "mmvcv15Config",
|
|
|
|
|
"mmvcv15Model": "mmvcv15Model",
|
|
|
|
|
|
|
|
|
|
"soVitsSvc40Config": "soVitsSvc40Config",
|
|
|
|
|
"soVitsSvc40Model": "soVitsSvc40Model",
|
|
|
|
|
"soVitsSvc40Cluster": "soVitsSvc40Cluster",
|
|
|
|
|
|
|
|
|
|
"rvcModel": "rvcModel",
|
|
|
|
|
"rvcIndex": "rvcIndex",
|
|
|
|
|
|
|
|
|
|
"ddspSvcModel": "ddspSvcModel",
|
|
|
|
|
"ddspSvcModelConfig": "ddspSvcModelConfig",
|
|
|
|
|
"ddspSvcDiffusion": "ddspSvcDiffusion",
|
|
|
|
|
"ddspSvcDiffusionConfig": "ddspSvcDiffusionConfig",
|
|
|
|
|
|
|
|
|
|
} as const
|
|
|
|
|
export type ModelFileKind = typeof ModelFileKind[keyof typeof ModelFileKind]
|
|
|
|
|
|
|
|
|
|
export type ModelFile = {
|
|
|
|
|
file: File,
|
|
|
|
|
kind: ModelFileKind
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export type ModelUploadSetting = {
|
|
|
|
|
voiceChangerType: VoiceChangerType,
|
|
|
|
|
slot: number
|
|
|
|
|
isSampleMode: boolean
|
|
|
|
|
sampleId: string | null
|
|
|
|
|
|
|
|
|
|
files: ModelFile[]
|
|
|
|
|
}
|
|
|
|
|
export type ModelFileForServer = Omit<ModelFile, "file"> & {
|
|
|
|
|
name: string,
|
|
|
|
|
kind: ModelFileKind
|
|
|
|
|
}
|
|
|
|
|
export type ModelUploadSettingForServer = Omit<ModelUploadSetting, "files"> & {
|
|
|
|
|
files: ModelFileForServer[]
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
export type FileUploadSetting = {
|
2023-04-08 03:56:40 +09:00
|
|
|
|
isHalf: boolean
|
2023-04-21 15:48:12 +09:00
|
|
|
|
uploaded: boolean
|
|
|
|
|
defaultTune: number
|
2023-05-17 12:37:35 +09:00
|
|
|
|
defaultIndexRatio: number
|
2023-06-01 13:28:45 +09:00
|
|
|
|
defaultProtect: number
|
2023-04-24 16:43:51 +09:00
|
|
|
|
framework: Framework
|
2023-04-22 05:42:24 +09:00
|
|
|
|
params: string
|
2023-04-08 03:56:40 +09:00
|
|
|
|
|
2023-05-08 18:02:15 +09:00
|
|
|
|
mmvcv13Config: ModelData | null
|
|
|
|
|
mmvcv13Model: ModelData | null
|
2023-05-08 18:58:51 +09:00
|
|
|
|
mmvcv15Config: ModelData | null
|
|
|
|
|
mmvcv15Model: ModelData | null
|
2023-05-08 19:35:39 +09:00
|
|
|
|
soVitsSvc40Config: ModelData | null
|
|
|
|
|
soVitsSvc40Model: ModelData | null
|
|
|
|
|
soVitsSvc40Cluster: ModelData | null
|
2023-05-08 20:06:25 +09:00
|
|
|
|
soVitsSvc40v2Config: ModelData | null
|
|
|
|
|
soVitsSvc40v2Model: ModelData | null
|
|
|
|
|
soVitsSvc40v2Cluster: ModelData | null
|
2023-05-09 01:01:20 +09:00
|
|
|
|
rvcModel: ModelData | null
|
|
|
|
|
rvcFeature: ModelData | null
|
|
|
|
|
rvcIndex: ModelData | null
|
2023-05-08 18:02:15 +09:00
|
|
|
|
|
2023-05-16 10:38:23 +09:00
|
|
|
|
isSampleMode: boolean
|
|
|
|
|
sampleId: string | null
|
2023-05-25 11:40:37 +09:00
|
|
|
|
rvcIndexDownload: boolean
|
2023-05-16 10:38:23 +09:00
|
|
|
|
|
2023-05-08 05:51:24 +09:00
|
|
|
|
ddspSvcModel: ModelData | null
|
|
|
|
|
ddspSvcModelConfig: ModelData | null
|
|
|
|
|
ddspSvcDiffusion: ModelData | null
|
|
|
|
|
ddspSvcDiffusionConfig: ModelData | null
|
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
}
|
2023-01-29 14:41:44 +09:00
|
|
|
|
|
2023-06-07 07:30:09 +09:00
|
|
|
|
export const InitialFileUploadSetting: FileUploadSetting = {
|
2023-04-21 15:48:12 +09:00
|
|
|
|
isHalf: true,
|
|
|
|
|
uploaded: false,
|
2023-04-22 05:42:24 +09:00
|
|
|
|
defaultTune: 0,
|
2023-05-17 12:37:35 +09:00
|
|
|
|
defaultIndexRatio: 1,
|
2023-06-01 13:28:45 +09:00
|
|
|
|
defaultProtect: 0.5,
|
2023-04-24 16:43:51 +09:00
|
|
|
|
framework: Framework.PyTorch,
|
2023-05-08 05:51:24 +09:00
|
|
|
|
params: "{}",
|
|
|
|
|
|
2023-05-08 18:02:15 +09:00
|
|
|
|
mmvcv13Config: null,
|
|
|
|
|
mmvcv13Model: null,
|
2023-05-08 18:58:51 +09:00
|
|
|
|
mmvcv15Config: null,
|
|
|
|
|
mmvcv15Model: null,
|
2023-05-08 19:35:39 +09:00
|
|
|
|
soVitsSvc40Config: null,
|
|
|
|
|
soVitsSvc40Model: null,
|
|
|
|
|
soVitsSvc40Cluster: null,
|
2023-05-08 20:06:25 +09:00
|
|
|
|
soVitsSvc40v2Config: null,
|
|
|
|
|
soVitsSvc40v2Model: null,
|
|
|
|
|
soVitsSvc40v2Cluster: null,
|
2023-05-09 01:01:20 +09:00
|
|
|
|
rvcModel: null,
|
|
|
|
|
rvcFeature: null,
|
|
|
|
|
rvcIndex: null,
|
2023-05-08 18:02:15 +09:00
|
|
|
|
|
2023-05-16 10:38:23 +09:00
|
|
|
|
isSampleMode: false,
|
|
|
|
|
sampleId: null,
|
2023-05-25 11:40:37 +09:00
|
|
|
|
rvcIndexDownload: true,
|
|
|
|
|
|
2023-05-16 10:38:23 +09:00
|
|
|
|
|
2023-05-08 18:02:15 +09:00
|
|
|
|
ddspSvcModel: null,
|
|
|
|
|
ddspSvcModelConfig: null,
|
|
|
|
|
ddspSvcDiffusion: null,
|
|
|
|
|
ddspSvcDiffusionConfig: null,
|
2023-06-08 03:08:59 +09:00
|
|
|
|
}
|
2023-05-08 18:02:15 +09:00
|
|
|
|
|
2023-06-08 03:08:59 +09:00
|
|
|
|
type AssetUploadSetting = {
|
|
|
|
|
slot: number
|
|
|
|
|
name: ModelAssetName
|
|
|
|
|
file: string
|
2023-01-12 16:38:45 +09:00
|
|
|
|
}
|
2023-01-29 14:41:44 +09:00
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
export type UseServerSettingProps = {
|
2023-04-11 00:21:17 +09:00
|
|
|
|
clientType: ClientType | null
|
2023-01-12 16:38:45 +09:00
|
|
|
|
voiceChangerClient: VoiceChangerClient | null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export type ServerSettingState = {
|
2023-02-19 10:12:25 +09:00
|
|
|
|
serverSetting: ServerInfo
|
|
|
|
|
updateServerSettings: (setting: ServerInfo) => Promise<void>
|
2023-01-29 09:42:45 +09:00
|
|
|
|
clearSetting: () => Promise<void>
|
2023-01-12 16:38:45 +09:00
|
|
|
|
reloadServerInfo: () => Promise<void>;
|
2023-02-19 10:12:25 +09:00
|
|
|
|
|
2023-04-21 15:48:12 +09:00
|
|
|
|
fileUploadSettings: FileUploadSetting[]
|
|
|
|
|
setFileUploadSetting: (slot: number, val: FileUploadSetting) => void
|
|
|
|
|
loadModel: (slot: number) => Promise<void>
|
2023-06-19 11:40:16 +09:00
|
|
|
|
uploadModel: (setting: ModelUploadSetting) => Promise<void>
|
2023-01-12 16:38:45 +09:00
|
|
|
|
uploadProgress: number
|
|
|
|
|
isUploading: boolean
|
2023-02-19 10:12:25 +09:00
|
|
|
|
|
2023-04-13 08:00:28 +09:00
|
|
|
|
getOnnx: () => Promise<OnnxExporterInfo>
|
2023-05-01 02:34:01 +09:00
|
|
|
|
mergeModel: (request: MergeModelRequest) => Promise<ServerInfo>
|
2023-05-21 04:21:54 +09:00
|
|
|
|
updateModelDefault: () => Promise<ServerInfo>
|
2023-06-08 03:08:59 +09:00
|
|
|
|
updateModelInfo: (slot: number, key: string, val: string) => Promise<ServerInfo>
|
|
|
|
|
uploadAssets: (slot: number, name: ModelAssetName, file: File) => Promise<void>
|
2023-01-12 16:38:45 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const useServerSetting = (props: UseServerSettingProps): ServerSettingState => {
|
2023-02-19 10:12:25 +09:00
|
|
|
|
// const settingRef = useRef<VoiceChangerServerSetting>(DefaultVoiceChangerServerSetting)
|
2023-04-11 00:21:17 +09:00
|
|
|
|
const getDefaultServerSetting = () => {
|
2023-03-09 06:55:57 +09:00
|
|
|
|
if (props.clientType == "MMVCv13") {
|
|
|
|
|
return DefaultServerSetting_MMVCv13
|
|
|
|
|
} else if (props.clientType == "MMVCv15") {
|
|
|
|
|
return DefaultServerSetting_MMVCv15
|
2023-04-05 18:08:06 +09:00
|
|
|
|
} else if (props.clientType == "so-vits-svc-40") {
|
2023-03-19 01:43:36 +09:00
|
|
|
|
return DefaultServerSetting_so_vits_svc_40
|
2023-04-05 18:08:06 +09:00
|
|
|
|
} else if (props.clientType == "so-vits-svc-40_c") {
|
|
|
|
|
console.log("default so_vits_svc_40_c")
|
|
|
|
|
return DefaultServerSetting_so_vits_svc_40_c
|
|
|
|
|
} else if (props.clientType == "so-vits-svc-40v2") {
|
2023-03-11 08:37:41 +09:00
|
|
|
|
return DefaultServerSetting_so_vits_svc_40v2
|
2023-04-16 21:34:00 +09:00
|
|
|
|
} else if (props.clientType == "DDSP-SVC") {
|
|
|
|
|
return DefaultServerSetting_DDSP_SVC
|
2023-04-06 04:03:09 +09:00
|
|
|
|
} else if (props.clientType == "RVC") {
|
|
|
|
|
return DefaultServerSetting_RVC
|
2023-03-09 06:55:57 +09:00
|
|
|
|
} else {
|
|
|
|
|
return DefaultServerSetting_MMVCv15
|
|
|
|
|
}
|
2023-04-11 00:21:17 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const [serverSetting, setServerSetting] = useState<ServerInfo>(getDefaultServerSetting())
|
2023-04-21 15:48:12 +09:00
|
|
|
|
const [fileUploadSettings, setFileUploadSettings] = useState<FileUploadSetting[]>([])
|
2023-03-09 06:47:11 +09:00
|
|
|
|
const { setItem, getItem, removeItem } = useIndexedDB({ clientType: props.clientType })
|
2023-01-29 09:42:45 +09:00
|
|
|
|
|
|
|
|
|
|
2023-04-11 00:21:17 +09:00
|
|
|
|
// clientTypeが新しく設定されたときに、serverのmodelType動作を変更+設定反映
|
2023-01-29 09:42:45 +09:00
|
|
|
|
useEffect(() => {
|
2023-04-11 00:21:17 +09:00
|
|
|
|
if (!props.voiceChangerClient) return
|
|
|
|
|
if (!props.clientType) return
|
|
|
|
|
const setInitialSetting = async () => {
|
|
|
|
|
// Set Model Type
|
|
|
|
|
await props.voiceChangerClient!.switchModelType(props.clientType!)
|
|
|
|
|
|
|
|
|
|
// Load Default (and Cache) and set
|
|
|
|
|
const defaultServerSetting = getDefaultServerSetting()
|
|
|
|
|
const cachedServerSetting = await getItem(INDEXEDDB_KEY_SERVER)
|
|
|
|
|
let initialSetting: ServerInfo
|
|
|
|
|
if (cachedServerSetting) {
|
2023-05-07 04:18:18 +09:00
|
|
|
|
initialSetting = {
|
|
|
|
|
...defaultServerSetting, ...cachedServerSetting as ServerInfo,
|
|
|
|
|
serverAudioStated: 0,
|
|
|
|
|
inputSampleRate: 48000
|
|
|
|
|
}// sample rateは時限措置
|
2023-01-29 09:42:45 +09:00
|
|
|
|
} else {
|
2023-04-11 00:21:17 +09:00
|
|
|
|
initialSetting = { ...defaultServerSetting }
|
|
|
|
|
}
|
|
|
|
|
setServerSetting(initialSetting)
|
|
|
|
|
|
|
|
|
|
// upload setting
|
|
|
|
|
for (let i = 0; i < Object.values(ServerSettingKey).length; i++) {
|
|
|
|
|
const k = Object.values(ServerSettingKey)[i] as keyof VoiceChangerServerSetting
|
|
|
|
|
const v = initialSetting[k]
|
|
|
|
|
if (v) {
|
|
|
|
|
props.voiceChangerClient!.updateServerSettings(k, "" + v)
|
|
|
|
|
}
|
2023-01-29 09:42:45 +09:00
|
|
|
|
}
|
2023-01-29 15:25:44 +09:00
|
|
|
|
|
2023-04-21 15:48:12 +09:00
|
|
|
|
// Load file upload cache
|
|
|
|
|
const loadedFileUploadSettings: FileUploadSetting[] = []
|
|
|
|
|
for (let i = 0; i < MAX_MODEL_SLOT_NUM; i++) {
|
|
|
|
|
const modleKey = `${INDEXEDDB_KEY_MODEL_DATA}_${i}`
|
|
|
|
|
const fileuploadSetting = await getItem(modleKey)
|
|
|
|
|
if (!fileuploadSetting) {
|
|
|
|
|
loadedFileUploadSettings.push(InitialFileUploadSetting)
|
|
|
|
|
} else {
|
|
|
|
|
loadedFileUploadSettings.push(fileuploadSetting as FileUploadSetting)
|
|
|
|
|
}
|
2023-01-29 15:25:44 +09:00
|
|
|
|
}
|
2023-04-21 15:48:12 +09:00
|
|
|
|
setFileUploadSettings(loadedFileUploadSettings)
|
|
|
|
|
|
2023-04-11 00:21:17 +09:00
|
|
|
|
|
|
|
|
|
reloadServerInfo()
|
2023-01-29 09:42:45 +09:00
|
|
|
|
}
|
|
|
|
|
|
2023-04-11 00:21:17 +09:00
|
|
|
|
setInitialSetting()
|
2023-02-19 06:25:22 +09:00
|
|
|
|
|
2023-04-11 00:21:17 +09:00
|
|
|
|
}, [props.voiceChangerClient, props.clientType])
|
2023-01-12 16:38:45 +09:00
|
|
|
|
|
|
|
|
|
//////////////
|
|
|
|
|
// 設定
|
|
|
|
|
/////////////
|
2023-02-19 10:12:25 +09:00
|
|
|
|
const updateServerSettings = useMemo(() => {
|
|
|
|
|
return async (setting: ServerInfo) => {
|
|
|
|
|
if (!props.voiceChangerClient) return
|
|
|
|
|
for (let i = 0; i < Object.values(ServerSettingKey).length; i++) {
|
|
|
|
|
const k = Object.values(ServerSettingKey)[i] as keyof VoiceChangerServerSetting
|
|
|
|
|
const cur_v = serverSetting[k]
|
|
|
|
|
const new_v = setting[k]
|
|
|
|
|
if (cur_v != new_v) {
|
|
|
|
|
const res = await props.voiceChangerClient.updateServerSettings(k, "" + new_v)
|
2023-04-11 00:21:17 +09:00
|
|
|
|
if (res.onnxExecutionProviders && res.onnxExecutionProviders.length > 0) {
|
2023-02-21 17:54:02 +09:00
|
|
|
|
res.onnxExecutionProvider = res.onnxExecutionProviders[0]
|
|
|
|
|
} else {
|
|
|
|
|
res.onnxExecutionProvider = "CPUExecutionProvider"
|
|
|
|
|
}
|
2023-02-19 10:12:25 +09:00
|
|
|
|
|
|
|
|
|
setServerSetting(res)
|
2023-02-20 07:46:33 +09:00
|
|
|
|
const storeData = { ...res }
|
|
|
|
|
storeData.recordIO = 0
|
|
|
|
|
setItem(INDEXEDDB_KEY_SERVER, storeData)
|
2023-02-19 10:12:25 +09:00
|
|
|
|
}
|
2023-01-29 09:42:45 +09:00
|
|
|
|
}
|
2023-01-12 16:38:45 +09:00
|
|
|
|
}
|
2023-02-19 10:12:25 +09:00
|
|
|
|
}, [props.voiceChangerClient, serverSetting])
|
2023-02-19 06:25:22 +09:00
|
|
|
|
|
2023-04-21 15:48:12 +09:00
|
|
|
|
const setFileUploadSetting = useMemo(() => {
|
|
|
|
|
return async (slot: number, fileUploadSetting: FileUploadSetting) => {
|
|
|
|
|
fileUploadSetting.uploaded = false
|
|
|
|
|
fileUploadSettings[slot] = fileUploadSetting
|
|
|
|
|
setFileUploadSettings([...fileUploadSettings])
|
|
|
|
|
}
|
|
|
|
|
}, [fileUploadSettings])
|
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
|
|
|
|
|
//////////////
|
|
|
|
|
// 操作
|
|
|
|
|
/////////////
|
|
|
|
|
const [uploadProgress, setUploadProgress] = useState<number>(0)
|
|
|
|
|
const [isUploading, setIsUploading] = useState<boolean>(false)
|
|
|
|
|
|
|
|
|
|
// (e) モデルアップロード
|
|
|
|
|
const _uploadFile = useMemo(() => {
|
2023-05-08 05:51:24 +09:00
|
|
|
|
return async (modelData: ModelData, onprogress: (progress: number, end: boolean) => void, dir: string = "") => {
|
2023-01-12 16:38:45 +09:00
|
|
|
|
if (!props.voiceChangerClient) return
|
2023-05-08 05:51:24 +09:00
|
|
|
|
const num = await props.voiceChangerClient.uploadFile(modelData.data!, dir + modelData.filename!, onprogress)
|
|
|
|
|
const res = await props.voiceChangerClient.concatUploadedFile(dir + modelData.filename!, num)
|
2023-01-12 16:38:45 +09:00
|
|
|
|
console.log("uploaded", num, res)
|
|
|
|
|
}
|
|
|
|
|
}, [props.voiceChangerClient])
|
2023-05-08 05:51:24 +09:00
|
|
|
|
|
2023-06-07 07:30:09 +09:00
|
|
|
|
const _uploadFile2 = useMemo(() => {
|
|
|
|
|
return async (file: File, onprogress: (progress: number, end: boolean) => void, dir: string = "") => {
|
|
|
|
|
if (!props.voiceChangerClient) return
|
2023-06-17 15:35:43 +09:00
|
|
|
|
console.log("uploading..1.", file)
|
|
|
|
|
console.log("uploading..2.", file.name)
|
2023-06-07 07:30:09 +09:00
|
|
|
|
const num = await props.voiceChangerClient.uploadFile2(file, onprogress)
|
|
|
|
|
const res = await props.voiceChangerClient.concatUploadedFile(dir + file.name, num)
|
|
|
|
|
console.log("uploaded", num, res)
|
|
|
|
|
}
|
|
|
|
|
}, [props.voiceChangerClient])
|
|
|
|
|
|
2023-06-19 11:40:16 +09:00
|
|
|
|
// 新しいアップローダ
|
|
|
|
|
const uploadModel = useMemo(() => {
|
|
|
|
|
return async (setting: ModelUploadSetting) => {
|
|
|
|
|
if (!props.voiceChangerClient) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setUploadProgress(0)
|
|
|
|
|
setIsUploading(true)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (setting.isSampleMode == false) {
|
|
|
|
|
const progRate = 1 / setting.files.length
|
|
|
|
|
for (let i = 0; i < setting.files.length; i++) {
|
|
|
|
|
const progOffset = 100 * i * progRate
|
|
|
|
|
await _uploadFile2(setting.files[i].file, (progress: number, _end: boolean) => {
|
|
|
|
|
setUploadProgress(progress * progRate + progOffset)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const params: ModelUploadSettingForServer = {
|
|
|
|
|
...setting, files: setting.files.map((f) => { return { name: f.file.name, kind: f.kind } })
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const loadPromise = props.voiceChangerClient.loadModel(
|
|
|
|
|
0,
|
|
|
|
|
false,
|
|
|
|
|
JSON.stringify(params),
|
|
|
|
|
)
|
|
|
|
|
await loadPromise
|
|
|
|
|
|
|
|
|
|
setUploadProgress(0)
|
|
|
|
|
setIsUploading(false)
|
|
|
|
|
reloadServerInfo()
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}, [props.voiceChangerClient])
|
|
|
|
|
|
2023-05-08 05:51:24 +09:00
|
|
|
|
|
2023-06-19 11:40:16 +09:00
|
|
|
|
// 古いアップローダ(新GUIへ以降まで、当分残しておく。)
|
2023-01-12 16:38:45 +09:00
|
|
|
|
const loadModel = useMemo(() => {
|
2023-04-21 15:48:12 +09:00
|
|
|
|
return async (slot: number) => {
|
2023-05-16 10:38:23 +09:00
|
|
|
|
const fileUploadSetting = fileUploadSettings[slot]
|
2023-06-17 15:35:43 +09:00
|
|
|
|
console.log("[loadModel]", fileUploadSetting)
|
|
|
|
|
console.log("[loadModel] model:", props.clientType)
|
2023-05-16 10:38:23 +09:00
|
|
|
|
|
|
|
|
|
if (fileUploadSetting.isSampleMode == false) {
|
|
|
|
|
if (props.clientType == "MMVCv13") {
|
|
|
|
|
if (!fileUploadSetting.mmvcv13Config) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Config")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
if (!fileUploadSetting.mmvcv13Model) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Model")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
} else if (props.clientType == "MMVCv15") {
|
|
|
|
|
if (!fileUploadSetting.mmvcv15Config) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Config")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
if (!fileUploadSetting.mmvcv15Model) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Model")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
} else if (props.clientType == "so-vits-svc-40") {
|
|
|
|
|
if (!fileUploadSetting.soVitsSvc40Config) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Config")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
if (!fileUploadSetting.soVitsSvc40Model) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Model")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
} else if (props.clientType == "so-vits-svc-40v2") {
|
|
|
|
|
if (!fileUploadSetting.soVitsSvc40v2Config) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Config")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
if (!fileUploadSetting.soVitsSvc40v2Model) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Model")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
} else if (props.clientType == "RVC") {
|
|
|
|
|
if (!fileUploadSetting.rvcModel) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Model")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
} else if (props.clientType == "DDSP-SVC") {
|
|
|
|
|
if (!fileUploadSetting.ddspSvcModel) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("DDSP-Model")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
if (!fileUploadSetting.ddspSvcModelConfig) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("DDSP-Config")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
if (!fileUploadSetting.ddspSvcDiffusion) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Diff-Model")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
if (!fileUploadSetting.ddspSvcDiffusionConfig) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("Diff-Config")
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
|
|
|
|
} else {
|
2023-05-08 05:51:24 +09:00
|
|
|
|
}
|
2023-05-16 10:38:23 +09:00
|
|
|
|
} else {//Sampleモード
|
|
|
|
|
if (!fileUploadSetting.sampleId) {
|
2023-06-11 10:55:26 +09:00
|
|
|
|
throw new ModelLoadException("SampleId")
|
2023-05-08 05:51:24 +09:00
|
|
|
|
}
|
2023-01-12 16:38:45 +09:00
|
|
|
|
}
|
2023-03-14 09:57:52 +09:00
|
|
|
|
|
2023-05-16 10:38:23 +09:00
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
if (!props.voiceChangerClient) return
|
2023-01-29 14:41:44 +09:00
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
setUploadProgress(0)
|
|
|
|
|
setIsUploading(true)
|
2023-01-29 14:41:44 +09:00
|
|
|
|
|
2023-06-07 07:30:09 +09:00
|
|
|
|
// normal models(MMVC13,15, so-vits-svc, RVC)
|
2023-05-08 18:58:51 +09:00
|
|
|
|
const normalModels = [
|
|
|
|
|
fileUploadSetting.mmvcv13Config,
|
|
|
|
|
fileUploadSetting.mmvcv13Model,
|
|
|
|
|
fileUploadSetting.mmvcv15Config,
|
2023-05-08 19:35:39 +09:00
|
|
|
|
fileUploadSetting.mmvcv15Model,
|
|
|
|
|
fileUploadSetting.soVitsSvc40Config,
|
|
|
|
|
fileUploadSetting.soVitsSvc40Model,
|
2023-05-08 20:06:25 +09:00
|
|
|
|
fileUploadSetting.soVitsSvc40Cluster,
|
|
|
|
|
fileUploadSetting.soVitsSvc40v2Config,
|
|
|
|
|
fileUploadSetting.soVitsSvc40v2Model,
|
2023-05-09 01:01:20 +09:00
|
|
|
|
fileUploadSetting.soVitsSvc40v2Cluster,
|
|
|
|
|
|
2023-05-08 18:58:51 +09:00
|
|
|
|
].filter(x => { return x != null }) as ModelData[]
|
2023-06-17 15:35:43 +09:00
|
|
|
|
console.log("[SENDING FILE]", normalModels)
|
2023-05-08 18:58:51 +09:00
|
|
|
|
for (let i = 0; i < normalModels.length; i++) {
|
|
|
|
|
if (!normalModels[i].data) {
|
2023-06-07 07:30:09 +09:00
|
|
|
|
// const fileSize = normalModels[i].file!.size / 1024 / 1024
|
2023-05-08 18:58:51 +09:00
|
|
|
|
normalModels[i].data = await normalModels[i].file!.arrayBuffer()
|
|
|
|
|
normalModels[i].filename = await normalModels[i].file!.name
|
2023-05-08 18:02:15 +09:00
|
|
|
|
}
|
|
|
|
|
}
|
2023-05-16 10:38:23 +09:00
|
|
|
|
if (fileUploadSetting.isSampleMode == false) {
|
|
|
|
|
for (let i = 0; i < normalModels.length; i++) {
|
|
|
|
|
const progRate = 1 / normalModels.length
|
|
|
|
|
const progOffset = 100 * i * progRate
|
2023-06-17 15:35:43 +09:00
|
|
|
|
await _uploadFile(normalModels[i], (progress: number, _end: boolean) => {
|
2023-05-16 10:38:23 +09:00
|
|
|
|
setUploadProgress(progress * progRate + progOffset)
|
|
|
|
|
})
|
2023-06-17 15:35:43 +09:00
|
|
|
|
// await _uploadFile2(normalModels[i].file!, (progress: number, _end: boolean) => {
|
|
|
|
|
// setUploadProgress(progress * progRate + progOffset)
|
|
|
|
|
// })
|
2023-05-16 10:38:23 +09:00
|
|
|
|
}
|
2023-05-08 18:02:15 +09:00
|
|
|
|
}
|
|
|
|
|
|
2023-06-07 07:30:09 +09:00
|
|
|
|
// slotModel ローカルキャッシュ無効(RVC)
|
|
|
|
|
const slotModels = [
|
|
|
|
|
fileUploadSetting.rvcModel,
|
|
|
|
|
fileUploadSetting.rvcIndex,
|
|
|
|
|
|
|
|
|
|
].filter(x => { return x != null }) as ModelData[]
|
|
|
|
|
for (let i = 0; i < slotModels.length; i++) {
|
|
|
|
|
if (!slotModels[i].data) {
|
|
|
|
|
slotModels[i].filename = await slotModels[i].file!.name
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (fileUploadSetting.isSampleMode == false) {
|
|
|
|
|
for (let i = 0; i < slotModels.length; i++) {
|
|
|
|
|
const progRate = 1 / slotModels.length
|
|
|
|
|
const progOffset = 100 * i * progRate
|
|
|
|
|
await _uploadFile2(slotModels[i].file!, (progress: number, _end: boolean) => {
|
|
|
|
|
setUploadProgress(progress * progRate + progOffset)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// DDSP-SVC (ファイル名(config)が被る可能性があるため、アップロードフォルダを分ける必要がある)
|
2023-05-08 05:51:24 +09:00
|
|
|
|
const ddspSvcModels = [fileUploadSetting.ddspSvcModel, fileUploadSetting.ddspSvcModelConfig, fileUploadSetting.ddspSvcDiffusion, fileUploadSetting.ddspSvcDiffusionConfig].filter(x => { return x != null }) as ModelData[]
|
|
|
|
|
for (let i = 0; i < ddspSvcModels.length; i++) {
|
|
|
|
|
if (!ddspSvcModels[i].data) {
|
|
|
|
|
ddspSvcModels[i].data = await ddspSvcModels[i].file!.arrayBuffer()
|
|
|
|
|
ddspSvcModels[i].filename = await ddspSvcModels[i].file!.name
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-05-16 10:38:23 +09:00
|
|
|
|
if (fileUploadSetting.isSampleMode == false) {
|
|
|
|
|
for (let i = 0; i < ddspSvcModels.length; i++) {
|
|
|
|
|
const progRate = 1 / ddspSvcModels.length
|
|
|
|
|
const progOffset = 100 * i * progRate
|
|
|
|
|
const dir = i == 0 || i == 1 ? "ddsp_mod/" : "ddsp_diff/"
|
|
|
|
|
await _uploadFile(ddspSvcModels[i], (progress: number, _end: boolean) => {
|
|
|
|
|
setUploadProgress(progress * progRate + progOffset)
|
|
|
|
|
}, dir)
|
|
|
|
|
}
|
2023-05-08 05:51:24 +09:00
|
|
|
|
}
|
|
|
|
|
|
2023-05-09 01:16:13 +09:00
|
|
|
|
// const configFileName = fileUploadSetting.configFile?.filename || "-"
|
2023-04-22 05:42:24 +09:00
|
|
|
|
const params = JSON.stringify({
|
2023-05-17 12:37:35 +09:00
|
|
|
|
defaultTune: fileUploadSetting.defaultTune || 0,
|
|
|
|
|
defaultIndexRatio: fileUploadSetting.defaultIndexRatio || 1,
|
2023-06-01 13:28:45 +09:00
|
|
|
|
defaultProtect: fileUploadSetting.defaultProtect || 0.5,
|
2023-05-16 10:38:23 +09:00
|
|
|
|
sampleId: fileUploadSetting.isSampleMode ? fileUploadSetting.sampleId || "" : "",
|
2023-05-25 11:40:37 +09:00
|
|
|
|
rvcIndexDownload: fileUploadSetting.rvcIndexDownload || false,
|
2023-05-16 10:38:23 +09:00
|
|
|
|
files: fileUploadSetting.isSampleMode ? {} : {
|
2023-06-17 15:35:43 +09:00
|
|
|
|
mmvcv13Config: props.clientType == "MMVCv13" ? fileUploadSetting.mmvcv13Config?.filename || "" : "",
|
|
|
|
|
mmvcv13Model: props.clientType == "MMVCv13" ? fileUploadSetting.mmvcv13Model?.filename || "" : "",
|
|
|
|
|
mmvcv15Config: props.clientType == "MMVCv15" ? fileUploadSetting.mmvcv15Config?.filename || "" : "",
|
|
|
|
|
mmvcv15Model: props.clientType == "MMVCv15" ? fileUploadSetting.mmvcv15Model?.filename || "" : "",
|
|
|
|
|
soVitsSvc40Config: props.clientType == "so-vits-svc-40" ? fileUploadSetting.soVitsSvc40Config?.filename || "" : "",
|
|
|
|
|
soVitsSvc40Model: props.clientType == "so-vits-svc-40" ? fileUploadSetting.soVitsSvc40Model?.filename || "" : "",
|
|
|
|
|
soVitsSvc40Cluster: props.clientType == "so-vits-svc-40" ? fileUploadSetting.soVitsSvc40Cluster?.filename || "" : "",
|
|
|
|
|
rvcModel: props.clientType == "RVC" ? fileUploadSetting.rvcModel?.filename || "" : "",
|
|
|
|
|
rvcIndex: props.clientType == "RVC" ? fileUploadSetting.rvcIndex?.filename || "" : "",
|
|
|
|
|
rvcFeature: props.clientType == "RVC" ? fileUploadSetting.rvcFeature?.filename || "" : "",
|
|
|
|
|
|
|
|
|
|
ddspSvcModel: props.clientType == "DDSP-SVC" ? fileUploadSetting.ddspSvcModel?.filename ? "ddsp_mod/" + fileUploadSetting.ddspSvcModel?.filename : "" : "",
|
|
|
|
|
ddspSvcModelConfig: props.clientType == "DDSP-SVC" ? fileUploadSetting.ddspSvcModelConfig?.filename ? "ddsp_mod/" + fileUploadSetting.ddspSvcModelConfig?.filename : "" : "",
|
|
|
|
|
ddspSvcDiffusion: props.clientType == "DDSP-SVC" ? fileUploadSetting.ddspSvcDiffusion?.filename ? "ddsp_diff/" + fileUploadSetting.ddspSvcDiffusion?.filename : "" : "",
|
|
|
|
|
ddspSvcDiffusionConfig: props.clientType == "DDSP-SVC" ? fileUploadSetting.ddspSvcDiffusionConfig?.filename ? "ddsp_diff/" + fileUploadSetting.ddspSvcDiffusionConfig.filename : "" : "",
|
2023-05-08 05:51:24 +09:00
|
|
|
|
}
|
2023-04-22 05:42:24 +09:00
|
|
|
|
})
|
2023-05-16 10:38:23 +09:00
|
|
|
|
|
2023-04-25 18:53:24 +09:00
|
|
|
|
if (fileUploadSetting.isHalf == undefined) {
|
|
|
|
|
fileUploadSetting.isHalf = false
|
|
|
|
|
}
|
2023-05-08 05:51:24 +09:00
|
|
|
|
|
2023-05-16 10:38:23 +09:00
|
|
|
|
console.log("PARAMS:", params)
|
|
|
|
|
|
2023-04-08 03:11:37 +09:00
|
|
|
|
const loadPromise = props.voiceChangerClient.loadModel(
|
2023-04-21 15:48:12 +09:00
|
|
|
|
slot,
|
2023-04-22 05:42:24 +09:00
|
|
|
|
fileUploadSetting.isHalf,
|
|
|
|
|
params,
|
2023-04-08 03:11:37 +09:00
|
|
|
|
)
|
2023-01-29 15:25:44 +09:00
|
|
|
|
|
2023-05-16 10:38:23 +09:00
|
|
|
|
|
2023-01-29 15:25:44 +09:00
|
|
|
|
// サーバでロード中にキャッシュにセーブ
|
2023-04-21 15:48:12 +09:00
|
|
|
|
storeToCache(slot, fileUploadSetting)
|
2023-01-29 15:25:44 +09:00
|
|
|
|
await loadPromise
|
2023-04-21 15:48:12 +09:00
|
|
|
|
|
|
|
|
|
fileUploadSetting.uploaded = true
|
|
|
|
|
fileUploadSettings[slot] = fileUploadSetting
|
|
|
|
|
setFileUploadSettings([...fileUploadSettings])
|
|
|
|
|
|
2023-05-16 10:38:23 +09:00
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
setUploadProgress(0)
|
|
|
|
|
setIsUploading(false)
|
2023-01-28 15:56:56 +09:00
|
|
|
|
reloadServerInfo()
|
2023-01-12 16:38:45 +09:00
|
|
|
|
}
|
2023-04-21 15:48:12 +09:00
|
|
|
|
}, [fileUploadSettings, props.voiceChangerClient, props.clientType])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const storeToCache = (slot: number, fileUploadSetting: FileUploadSetting) => {
|
|
|
|
|
try {
|
|
|
|
|
const saveData: FileUploadSetting = {
|
|
|
|
|
isHalf: fileUploadSetting.isHalf, // キャッシュとしては不使用。guiで上書きされる。
|
|
|
|
|
uploaded: false, // キャッシュから読み込まれるときには、まだuploadされていないから。
|
2023-04-22 05:42:24 +09:00
|
|
|
|
defaultTune: fileUploadSetting.defaultTune,
|
2023-05-17 12:37:35 +09:00
|
|
|
|
defaultIndexRatio: fileUploadSetting.defaultIndexRatio,
|
2023-06-01 13:28:45 +09:00
|
|
|
|
defaultProtect: fileUploadSetting.defaultProtect,
|
2023-04-24 16:43:51 +09:00
|
|
|
|
framework: fileUploadSetting.framework,
|
2023-05-08 05:51:24 +09:00
|
|
|
|
params: fileUploadSetting.params,
|
2023-05-08 18:02:15 +09:00
|
|
|
|
|
|
|
|
|
mmvcv13Config: fileUploadSetting.mmvcv13Config ? { data: fileUploadSetting.mmvcv13Config.data, filename: fileUploadSetting.mmvcv13Config.filename } : null,
|
|
|
|
|
mmvcv13Model: fileUploadSetting.mmvcv13Model ? { data: fileUploadSetting.mmvcv13Model.data, filename: fileUploadSetting.mmvcv13Model.filename } : null,
|
2023-05-08 18:58:51 +09:00
|
|
|
|
mmvcv15Config: fileUploadSetting.mmvcv15Config ? { data: fileUploadSetting.mmvcv15Config.data, filename: fileUploadSetting.mmvcv15Config.filename } : null,
|
|
|
|
|
mmvcv15Model: fileUploadSetting.mmvcv15Model ? { data: fileUploadSetting.mmvcv15Model.data, filename: fileUploadSetting.mmvcv15Model.filename } : null,
|
2023-05-08 19:35:39 +09:00
|
|
|
|
soVitsSvc40Config: fileUploadSetting.soVitsSvc40Config ? { data: fileUploadSetting.soVitsSvc40Config.data, filename: fileUploadSetting.soVitsSvc40Config.filename } : null,
|
|
|
|
|
soVitsSvc40Model: fileUploadSetting.soVitsSvc40Model ? { data: fileUploadSetting.soVitsSvc40Model.data, filename: fileUploadSetting.soVitsSvc40Model.filename } : null,
|
|
|
|
|
soVitsSvc40Cluster: fileUploadSetting.soVitsSvc40Cluster ? { data: fileUploadSetting.soVitsSvc40Cluster.data, filename: fileUploadSetting.soVitsSvc40Cluster.filename } : null,
|
2023-05-08 20:06:25 +09:00
|
|
|
|
soVitsSvc40v2Config: fileUploadSetting.soVitsSvc40v2Config ? { data: fileUploadSetting.soVitsSvc40v2Config.data, filename: fileUploadSetting.soVitsSvc40v2Config.filename } : null,
|
|
|
|
|
soVitsSvc40v2Model: fileUploadSetting.soVitsSvc40v2Model ? { data: fileUploadSetting.soVitsSvc40v2Model.data, filename: fileUploadSetting.soVitsSvc40v2Model.filename } : null,
|
|
|
|
|
soVitsSvc40v2Cluster: fileUploadSetting.soVitsSvc40v2Cluster ? { data: fileUploadSetting.soVitsSvc40v2Cluster.data, filename: fileUploadSetting.soVitsSvc40v2Cluster.filename } : null,
|
2023-05-09 01:01:20 +09:00
|
|
|
|
rvcModel: fileUploadSetting.rvcModel ? { data: fileUploadSetting.rvcModel.data, filename: fileUploadSetting.rvcModel.filename } : null,
|
|
|
|
|
rvcIndex: fileUploadSetting.rvcIndex ? { data: fileUploadSetting.rvcIndex.data, filename: fileUploadSetting.rvcIndex.filename } : null,
|
|
|
|
|
rvcFeature: fileUploadSetting.rvcFeature ? { data: fileUploadSetting.rvcFeature.data, filename: fileUploadSetting.rvcFeature.filename } : null,
|
2023-05-08 18:02:15 +09:00
|
|
|
|
|
2023-05-08 05:51:24 +09:00
|
|
|
|
ddspSvcModel: fileUploadSetting.ddspSvcModel ? { data: fileUploadSetting.ddspSvcModel.data, filename: fileUploadSetting.ddspSvcModel.filename } : null,
|
|
|
|
|
ddspSvcModelConfig: fileUploadSetting.ddspSvcModelConfig ? { data: fileUploadSetting.ddspSvcModelConfig.data, filename: fileUploadSetting.ddspSvcModelConfig.filename } : null,
|
|
|
|
|
ddspSvcDiffusion: fileUploadSetting.ddspSvcDiffusion ? { data: fileUploadSetting.ddspSvcDiffusion.data, filename: fileUploadSetting.ddspSvcDiffusion.filename } : null,
|
|
|
|
|
ddspSvcDiffusionConfig: fileUploadSetting.ddspSvcDiffusionConfig ? { data: fileUploadSetting.ddspSvcDiffusionConfig.data, filename: fileUploadSetting.ddspSvcDiffusionConfig.filename } : null,
|
2023-05-16 10:38:23 +09:00
|
|
|
|
|
|
|
|
|
isSampleMode: fileUploadSetting.isSampleMode,
|
|
|
|
|
sampleId: fileUploadSetting.sampleId,
|
2023-05-25 11:40:37 +09:00
|
|
|
|
rvcIndexDownload: fileUploadSetting.rvcIndexDownload,
|
2023-04-21 15:48:12 +09:00
|
|
|
|
}
|
|
|
|
|
setItem(`${INDEXEDDB_KEY_MODEL_DATA}_${slot}`, saveData)
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.log("Excpetion:::::::::", e)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
|
2023-06-08 03:08:59 +09:00
|
|
|
|
const uploadAssets = useMemo(() => {
|
|
|
|
|
return async (slot: number, name: ModelAssetName, file: File) => {
|
|
|
|
|
if (!props.voiceChangerClient) return
|
|
|
|
|
|
|
|
|
|
await _uploadFile2(file, (progress: number, _end: boolean) => {
|
|
|
|
|
console.log(progress, _end)
|
|
|
|
|
})
|
|
|
|
|
const assetUploadSetting: AssetUploadSetting = {
|
|
|
|
|
slot,
|
|
|
|
|
name,
|
|
|
|
|
file: file.name
|
|
|
|
|
}
|
|
|
|
|
await props.voiceChangerClient.uploadAssets(JSON.stringify(assetUploadSetting))
|
|
|
|
|
reloadServerInfo()
|
|
|
|
|
}
|
|
|
|
|
}, [fileUploadSettings, props.voiceChangerClient, props.clientType])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
const reloadServerInfo = useMemo(() => {
|
|
|
|
|
return async () => {
|
2023-02-19 10:12:25 +09:00
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
if (!props.voiceChangerClient) return
|
|
|
|
|
const res = await props.voiceChangerClient.getServerSettings()
|
2023-02-19 10:12:25 +09:00
|
|
|
|
setServerSetting(res)
|
2023-02-20 07:46:33 +09:00
|
|
|
|
const storeData = { ...res }
|
|
|
|
|
storeData.recordIO = 0
|
|
|
|
|
setItem(INDEXEDDB_KEY_SERVER, storeData)
|
2023-01-12 16:38:45 +09:00
|
|
|
|
}
|
|
|
|
|
}, [props.voiceChangerClient])
|
|
|
|
|
|
2023-01-29 09:42:45 +09:00
|
|
|
|
const clearSetting = async () => {
|
|
|
|
|
await removeItem(INDEXEDDB_KEY_SERVER)
|
2023-01-29 15:25:44 +09:00
|
|
|
|
await removeItem(INDEXEDDB_KEY_MODEL_DATA)
|
2023-04-21 15:48:12 +09:00
|
|
|
|
for (let i = 0; i < MAX_MODEL_SLOT_NUM; i++) {
|
|
|
|
|
const modleKey = `${INDEXEDDB_KEY_MODEL_DATA}_${i}`
|
|
|
|
|
await removeItem(modleKey)
|
|
|
|
|
}
|
2023-01-29 09:42:45 +09:00
|
|
|
|
}
|
2023-01-12 18:06:15 +09:00
|
|
|
|
|
2023-04-13 08:00:28 +09:00
|
|
|
|
|
|
|
|
|
const getOnnx = async () => {
|
|
|
|
|
return props.voiceChangerClient!.getOnnx()
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-01 02:34:01 +09:00
|
|
|
|
const mergeModel = async (request: MergeModelRequest) => {
|
|
|
|
|
const serverInfo = await props.voiceChangerClient!.mergeModel(request)
|
|
|
|
|
setServerSetting(serverInfo)
|
|
|
|
|
return serverInfo
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-21 04:21:54 +09:00
|
|
|
|
const updateModelDefault = async () => {
|
|
|
|
|
const serverInfo = await props.voiceChangerClient!.updateModelDefault()
|
|
|
|
|
setServerSetting(serverInfo)
|
|
|
|
|
return serverInfo
|
|
|
|
|
}
|
2023-06-08 03:08:59 +09:00
|
|
|
|
const updateModelInfo = async (slot: number, key: string, val: string) => {
|
|
|
|
|
const serverInfo = await props.voiceChangerClient!.updateModelInfo(slot, key, val)
|
|
|
|
|
setServerSetting(serverInfo)
|
|
|
|
|
return serverInfo
|
|
|
|
|
}
|
2023-05-21 04:21:54 +09:00
|
|
|
|
|
2023-01-12 16:38:45 +09:00
|
|
|
|
return {
|
2023-02-19 10:12:25 +09:00
|
|
|
|
serverSetting,
|
|
|
|
|
updateServerSettings,
|
2023-01-29 09:42:45 +09:00
|
|
|
|
clearSetting,
|
2023-01-12 16:38:45 +09:00
|
|
|
|
reloadServerInfo,
|
2023-02-19 10:12:25 +09:00
|
|
|
|
|
2023-04-21 15:48:12 +09:00
|
|
|
|
fileUploadSettings,
|
2023-01-12 16:38:45 +09:00
|
|
|
|
setFileUploadSetting,
|
|
|
|
|
loadModel,
|
2023-06-19 11:40:16 +09:00
|
|
|
|
uploadModel,
|
2023-01-12 16:38:45 +09:00
|
|
|
|
uploadProgress,
|
|
|
|
|
isUploading,
|
2023-04-13 08:00:28 +09:00
|
|
|
|
getOnnx,
|
2023-05-01 02:34:01 +09:00
|
|
|
|
mergeModel,
|
2023-05-21 04:21:54 +09:00
|
|
|
|
updateModelDefault,
|
2023-06-08 03:08:59 +09:00
|
|
|
|
updateModelInfo,
|
|
|
|
|
uploadAssets
|
2023-01-12 16:38:45 +09:00
|
|
|
|
}
|
|
|
|
|
}
|