voice-changer/client/lib/src/hooks/useServerSetting.ts

508 lines
23 KiB
TypeScript
Raw Normal View History

import { useState, useMemo, useEffect } from "react"
2023-05-01 02:34:01 +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 } 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-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-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
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
soVitsSvc40Config: ModelData | null
soVitsSvc40Model: ModelData | null
soVitsSvc40Cluster: ModelData | null
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-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-01-12 16:38:45 +09:00
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,
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,
soVitsSvc40Config: null,
soVitsSvc40Model: null,
soVitsSvc40Cluster: null,
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-08 18:02:15 +09:00
ddspSvcModel: null,
ddspSvcModelConfig: null,
ddspSvcDiffusion: null,
ddspSvcDiffusionConfig: null,
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 = {
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-04-21 15:48:12 +09:00
fileUploadSettings: FileUploadSetting[]
setFileUploadSetting: (slot: number, val: FileUploadSetting) => void
loadModel: (slot: number) => Promise<void>
2023-01-12 16:38:45 +09:00
uploadProgress: number
isUploading: boolean
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-04-22 05:42:24 +09:00
// updateDefaultTune: (slot: number, tune: number) => void
2023-04-13 08:00:28 +09:00
2023-01-12 16:38:45 +09:00
}
export const useServerSetting = (props: UseServerSettingProps): ServerSettingState => {
// 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-04-11 00:21:17 +09:00
}, [props.voiceChangerClient, props.clientType])
2023-01-12 16:38:45 +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"
}
setServerSetting(res)
2023-02-20 07:46:33 +09:00
const storeData = { ...res }
storeData.recordIO = 0
setItem(INDEXEDDB_KEY_SERVER, storeData)
}
2023-01-29 09:42:45 +09:00
}
2023-01-12 16:38:45 +09:00
}
}, [props.voiceChangerClient, serverSetting])
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-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]
if (fileUploadSetting.isSampleMode == false) {
if (props.clientType == "MMVCv13") {
if (!fileUploadSetting.mmvcv13Config) {
alert("Configファイルを指定する必要があります。")
return
}
if (!fileUploadSetting.mmvcv13Model) {
alert("モデルファイルを指定する必要があります。")
return
}
} else if (props.clientType == "MMVCv15") {
if (!fileUploadSetting.mmvcv15Config) {
alert("Configファイルを指定する必要があります。")
return
}
if (!fileUploadSetting.mmvcv15Model) {
alert("モデルファイルを指定する必要があります。")
return
}
} else if (props.clientType == "so-vits-svc-40") {
if (!fileUploadSetting.soVitsSvc40Config) {
alert("Configファイルを指定する必要があります。")
return
}
if (!fileUploadSetting.soVitsSvc40Model) {
alert("モデルファイルを指定する必要があります。")
return
}
} else if (props.clientType == "so-vits-svc-40v2") {
if (!fileUploadSetting.soVitsSvc40v2Config) {
alert("Configファイルを指定する必要があります。")
return
}
if (!fileUploadSetting.soVitsSvc40v2Model) {
alert("モデルファイルを指定する必要があります。")
return
}
} else if (props.clientType == "RVC") {
if (!fileUploadSetting.rvcModel) {
alert("モデルファイルを指定する必要があります。")
return
}
} else if (props.clientType == "DDSP-SVC") {
if (!fileUploadSetting.ddspSvcModel) {
alert("DDSPモデルを指定する必要があります。")
return
}
if (!fileUploadSetting.ddspSvcModelConfig) {
alert("DDSP Configファイルを指定する必要があります。")
return
}
if (!fileUploadSetting.ddspSvcDiffusion) {
alert("Diffusionモデルを指定する必要があります。")
return
}
if (!fileUploadSetting.ddspSvcDiffusionConfig) {
alert("Diffusion Configファイルを指定する必要があります。")
return
}
} else {
2023-05-08 05:51:24 +09:00
}
2023-05-16 10:38:23 +09:00
} else {//Sampleモード
if (!fileUploadSetting.sampleId) {
alert("Sample IDを指定する必要があります。")
2023-05-08 05:51:24 +09:00
return
}
2023-05-16 10:38:23 +09:00
2023-01-12 16:38:45 +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-05-16 10:38:23 +09:00
2023-01-12 16:38:45 +09:00
2023-05-08 18:02:15 +09:00
// MMVCv13
2023-05-08 18:58:51 +09:00
const normalModels = [
fileUploadSetting.mmvcv13Config,
fileUploadSetting.mmvcv13Model,
fileUploadSetting.mmvcv15Config,
fileUploadSetting.mmvcv15Model,
fileUploadSetting.soVitsSvc40Config,
fileUploadSetting.soVitsSvc40Model,
fileUploadSetting.soVitsSvc40Cluster,
fileUploadSetting.soVitsSvc40v2Config,
fileUploadSetting.soVitsSvc40v2Model,
2023-05-09 01:01:20 +09:00
fileUploadSetting.soVitsSvc40v2Cluster,
fileUploadSetting.rvcModel,
fileUploadSetting.rvcIndex,
fileUploadSetting.rvcFeature,
2023-05-08 18:58:51 +09:00
].filter(x => { return x != null }) as ModelData[]
for (let i = 0; i < normalModels.length; i++) {
if (!normalModels[i].data) {
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
await _uploadFile(normalModels[i], (progress: number, _end: boolean) => {
setUploadProgress(progress * progRate + progOffset)
})
}
2023-05-08 18:02:15 +09:00
}
2023-05-08 05:51:24 +09:00
// DDSP-SVC
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-08 05:51:24 +09:00
trans: fileUploadSetting.defaultTune || 0,
2023-05-16 10:38:23 +09:00
sampleId: fileUploadSetting.isSampleMode ? fileUploadSetting.sampleId || "" : "",
files: fileUploadSetting.isSampleMode ? {} : {
2023-05-08 18:02:15 +09:00
mmvcv13Config: fileUploadSetting.mmvcv13Config?.filename || "",
mmvcv13Model: fileUploadSetting.mmvcv13Model?.filename || "",
2023-05-08 18:58:51 +09:00
mmvcv15Config: fileUploadSetting.mmvcv15Config?.filename || "",
mmvcv15Model: fileUploadSetting.mmvcv15Model?.filename || "",
soVitsSvc40Config: fileUploadSetting.soVitsSvc40Config?.filename || "",
soVitsSvc40Model: fileUploadSetting.soVitsSvc40Model?.filename || "",
soVitsSvc40Cluster: fileUploadSetting.soVitsSvc40Cluster?.filename || "",
soVitsSvc40v2Config: fileUploadSetting.soVitsSvc40v2Config?.filename || "",
soVitsSvc40v2Model: fileUploadSetting.soVitsSvc40v2Model?.filename || "",
soVitsSvc40v2Cluster: fileUploadSetting.soVitsSvc40v2Cluster?.filename || "",
2023-05-09 01:01:20 +09:00
rvcModel: fileUploadSetting.rvcModel?.filename || "",
rvcIndex: fileUploadSetting.rvcIndex?.filename || "",
rvcFeature: fileUploadSetting.rvcFeature?.filename || "",
2023-05-08 05:51:24 +09:00
ddspSvcModel: fileUploadSetting.ddspSvcModel?.filename ? "ddsp_mod/" + fileUploadSetting.ddspSvcModel?.filename : "",
ddspSvcModelConfig: fileUploadSetting.ddspSvcModelConfig?.filename ? "ddsp_mod/" + fileUploadSetting.ddspSvcModelConfig?.filename : "",
ddspSvcDiffusion: fileUploadSetting.ddspSvcDiffusion?.filename ? "ddsp_diff/" + fileUploadSetting.ddspSvcDiffusion?.filename : "",
ddspSvcDiffusionConfig: fileUploadSetting.ddspSvcDiffusionConfig?.filename ? "ddsp_diff/" + fileUploadSetting.ddspSvcDiffusionConfig.filename : "",
}
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,
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,
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,
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-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
const reloadServerInfo = useMemo(() => {
return async () => {
console.log("reload server info")
2023-01-12 16:38:45 +09:00
if (!props.voiceChangerClient) return
const res = await props.voiceChangerClient.getServerSettings()
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-01-12 16:38:45 +09:00
return {
serverSetting,
updateServerSettings,
2023-01-29 09:42:45 +09:00
clearSetting,
2023-01-12 16:38:45 +09:00
reloadServerInfo,
2023-04-21 15:48:12 +09:00
fileUploadSettings,
2023-01-12 16:38:45 +09:00
setFileUploadSetting,
loadModel,
uploadProgress,
isUploading,
2023-04-13 08:00:28 +09:00
getOnnx,
2023-05-01 02:34:01 +09:00
mergeModel,
2023-04-22 05:42:24 +09:00
// updateDefaultTune,
2023-01-12 16:38:45 +09:00
}
}