mirror of
https://github.com/w-okada/voice-changer.git
synced 2025-02-02 16:23:58 +03:00
sync status to server
This commit is contained in:
parent
e4b7eaebb4
commit
2b400577d8
@ -16,6 +16,7 @@ export const useMicrophoneOptions = () => {
|
|||||||
audioContext: audioContext,
|
audioContext: audioContext,
|
||||||
audioOutputElementId: AUDIO_ELEMENT_FOR_PLAY_RESULT
|
audioOutputElementId: AUDIO_ELEMENT_FOR_PLAY_RESULT
|
||||||
})
|
})
|
||||||
|
console.log("cs", clientState)
|
||||||
|
|
||||||
const serverSetting = useServerSetting({ clientState })
|
const serverSetting = useServerSetting({ clientState })
|
||||||
const deviceSetting = useDeviceSetting(audioContext, { clientState })
|
const deviceSetting = useDeviceSetting(audioContext, { clientState })
|
||||||
|
@ -57,18 +57,22 @@ export const useServerControl = (props: UseServerControlProps) => {
|
|||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="body-row split-3-1-1-1-4 left-padding-1 guided">
|
<div className="body-row split-3-3-4 left-padding-1 guided">
|
||||||
<div className="body-item-title left-padding-1">Info:</div>
|
<div className="body-item-title left-padding-1">Model Info:</div>
|
||||||
<div className="body-item-text">a</div>
|
<div className="body-item-text">
|
||||||
<div className="body-item-text">b</div>
|
<span className="body-item-text-item">{props.clientState.serverInfo?.configFile || ""}</span>
|
||||||
<div className="body-item-text">c</div>
|
<span className="body-item-text-item">{props.clientState.serverInfo?.pyTorchModelFile || ""}</span>
|
||||||
|
<span className="body-item-text-item">{props.clientState.serverInfo?.onnxModelFile || ""}</span>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
<div className="body-button-container">
|
<div className="body-button-container">
|
||||||
<div className="body-button" onClick={onReloadClicked}>reload</div>
|
<div className="body-button" onClick={onReloadClicked}>reload</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}, [props.clientState.getInfo])
|
}, [props.clientState.getInfo, props.clientState.serverInfo])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -227,6 +227,9 @@ body {
|
|||||||
}
|
}
|
||||||
.body-item-text {
|
.body-item-text {
|
||||||
color: rgb(30, 30, 30);
|
color: rgb(30, 30, 30);
|
||||||
|
.body-item-text-item{
|
||||||
|
padding-left: 1rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.body-item-input {
|
.body-item-input {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { BufferSize, createDummyMediaStream, DefaultVoiceChangerOptions, DefaultVoiceChangerRequestParamas, Framework, OnnxExecutionProvider, Protocol, SampleRate, ServerSettingKey, Speaker, VoiceChangerMode, VoiceChnagerClient } from "@dannadori/voice-changer-client-js"
|
import { ServerInfo, BufferSize, createDummyMediaStream, DefaultVoiceChangerOptions, DefaultVoiceChangerRequestParamas, Framework, OnnxExecutionProvider, Protocol, SampleRate, ServerSettingKey, Speaker, VoiceChangerMode, VoiceChnagerClient } from "@dannadori/voice-changer-client-js"
|
||||||
import { useEffect, useMemo, useRef, useState } from "react"
|
import { useEffect, useMemo, useRef, useState } from "react"
|
||||||
|
|
||||||
export type UseClientProps = {
|
export type UseClientProps = {
|
||||||
@ -38,8 +38,6 @@ export type SettingState = {
|
|||||||
// advanced setting
|
// advanced setting
|
||||||
vfForceDisabled: boolean
|
vfForceDisabled: boolean
|
||||||
voiceChangerMode: VoiceChangerMode
|
voiceChangerMode: VoiceChangerMode
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const InitialSettingState: SettingState = {
|
const InitialSettingState: SettingState = {
|
||||||
@ -80,6 +78,7 @@ export type ClientState = {
|
|||||||
|
|
||||||
// Setting
|
// Setting
|
||||||
settingState: SettingState
|
settingState: SettingState
|
||||||
|
serverInfo: ServerInfo | undefined
|
||||||
setSettingState: (setting: SettingState) => void
|
setSettingState: (setting: SettingState) => void
|
||||||
|
|
||||||
// Client Control
|
// Client Control
|
||||||
@ -143,6 +142,8 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
|
|
||||||
// (2) 設定
|
// (2) 設定
|
||||||
const [settingState, setSettingState] = useState<SettingState>(InitialSettingState)
|
const [settingState, setSettingState] = useState<SettingState>(InitialSettingState)
|
||||||
|
const [displaySettingState, setDisplaySettingState] = useState<SettingState>(InitialSettingState)
|
||||||
|
const [serverInfo, setServerInfo] = useState<ServerInfo>()
|
||||||
const [uploadProgress, setUploadProgress] = useState<number>(0)
|
const [uploadProgress, setUploadProgress] = useState<number>(0)
|
||||||
const [isUploading, setIsUploading] = useState<boolean>(false)
|
const [isUploading, setIsUploading] = useState<boolean>(false)
|
||||||
|
|
||||||
@ -153,6 +154,8 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
await initializedPromise
|
await initializedPromise
|
||||||
voiceChangerClientRef.current!.setServerUrl(settingState.mmvcServerUrl, true)
|
voiceChangerClientRef.current!.setServerUrl(settingState.mmvcServerUrl, true)
|
||||||
voiceChangerClientRef.current!.stop()
|
voiceChangerClientRef.current!.stop()
|
||||||
|
getInfo()
|
||||||
|
|
||||||
})()
|
})()
|
||||||
}, [settingState.mmvcServerUrl])
|
}, [settingState.mmvcServerUrl])
|
||||||
// (b) プロトコル設定
|
// (b) プロトコル設定
|
||||||
@ -167,13 +170,17 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
(async () => {
|
(async () => {
|
||||||
await initializedPromise
|
await initializedPromise
|
||||||
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.framework, "" + settingState.framework)
|
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.framework, "" + settingState.framework)
|
||||||
|
setServerInfo(info)
|
||||||
|
|
||||||
})()
|
})()
|
||||||
}, [settingState.framework])
|
}, [settingState.framework])
|
||||||
// (d) OnnxExecutionProvider設定
|
// (d) OnnxExecutionProvider設定
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
(async () => {
|
(async () => {
|
||||||
await initializedPromise
|
await initializedPromise
|
||||||
const info = voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.onnxExecutionProvider, settingState.onnxExecutionProvider)
|
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.onnxExecutionProvider, settingState.onnxExecutionProvider)
|
||||||
|
setServerInfo(info)
|
||||||
|
|
||||||
})()
|
})()
|
||||||
}, [settingState.onnxExecutionProvider])
|
}, [settingState.onnxExecutionProvider])
|
||||||
|
|
||||||
@ -244,6 +251,8 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
(async () => {
|
(async () => {
|
||||||
await initializedPromise
|
await initializedPromise
|
||||||
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.srcId, "" + settingState.srcId)
|
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.srcId, "" + settingState.srcId)
|
||||||
|
setServerInfo(info)
|
||||||
|
|
||||||
})()
|
})()
|
||||||
}, [settingState.srcId])
|
}, [settingState.srcId])
|
||||||
|
|
||||||
@ -252,6 +261,8 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
(async () => {
|
(async () => {
|
||||||
await initializedPromise
|
await initializedPromise
|
||||||
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.dstId, "" + settingState.dstId)
|
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.dstId, "" + settingState.dstId)
|
||||||
|
setServerInfo(info)
|
||||||
|
|
||||||
})()
|
})()
|
||||||
}, [settingState.dstId])
|
}, [settingState.dstId])
|
||||||
|
|
||||||
@ -270,6 +281,7 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
(async () => {
|
(async () => {
|
||||||
await initializedPromise
|
await initializedPromise
|
||||||
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.convertChunkNum, "" + settingState.convertChunkNum)
|
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.convertChunkNum, "" + settingState.convertChunkNum)
|
||||||
|
setServerInfo(info)
|
||||||
})()
|
})()
|
||||||
}, [settingState.convertChunkNum])
|
}, [settingState.convertChunkNum])
|
||||||
|
|
||||||
@ -278,6 +290,7 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
(async () => {
|
(async () => {
|
||||||
await initializedPromise
|
await initializedPromise
|
||||||
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.gpu, "" + settingState.gpu)
|
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.gpu, "" + settingState.gpu)
|
||||||
|
setServerInfo(info)
|
||||||
})()
|
})()
|
||||||
}, [settingState.gpu])
|
}, [settingState.gpu])
|
||||||
|
|
||||||
@ -286,6 +299,7 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
(async () => {
|
(async () => {
|
||||||
await initializedPromise
|
await initializedPromise
|
||||||
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.crossFadeOffsetRate, "" + settingState.crossFadeOffsetRate)
|
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.crossFadeOffsetRate, "" + settingState.crossFadeOffsetRate)
|
||||||
|
setServerInfo(info)
|
||||||
})()
|
})()
|
||||||
}, [settingState.crossFadeOffsetRate])
|
}, [settingState.crossFadeOffsetRate])
|
||||||
|
|
||||||
@ -294,6 +308,7 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
(async () => {
|
(async () => {
|
||||||
await initializedPromise
|
await initializedPromise
|
||||||
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.crossFadeEndRate, "" + settingState.crossFadeEndRate)
|
const info = await voiceChangerClientRef.current!.updateServerSettings(ServerSettingKey.crossFadeEndRate, "" + settingState.crossFadeEndRate)
|
||||||
|
setServerInfo(info)
|
||||||
})()
|
})()
|
||||||
}, [settingState.crossFadeEndRate])
|
}, [settingState.crossFadeEndRate])
|
||||||
|
|
||||||
@ -331,10 +346,33 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
await initializedPromise
|
await initializedPromise
|
||||||
const serverSettings = await voiceChangerClientRef.current!.getServerSettings()
|
const serverSettings = await voiceChangerClientRef.current!.getServerSettings()
|
||||||
const clientSettings = await voiceChangerClientRef.current!.getClientSettings()
|
const clientSettings = await voiceChangerClientRef.current!.getClientSettings()
|
||||||
|
setServerInfo(serverSettings)
|
||||||
console.log(serverSettings, clientSettings)
|
console.log(serverSettings, clientSettings)
|
||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
// (x)
|
||||||
|
useEffect(() => {
|
||||||
|
if (serverInfo && serverInfo.status == "OK") {
|
||||||
|
setDisplaySettingState({
|
||||||
|
...settingState,
|
||||||
|
convertChunkNum: serverInfo.convertChunkNum,
|
||||||
|
crossFadeOffsetRate: serverInfo.crossFadeOffsetRate,
|
||||||
|
crossFadeEndRate: serverInfo.crossFadeEndRate,
|
||||||
|
gpu: serverInfo.gpu,
|
||||||
|
srcId: serverInfo.srcId,
|
||||||
|
dstId: serverInfo.dstId,
|
||||||
|
framework: serverInfo.framework,
|
||||||
|
onnxExecutionProvider: serverInfo.providers.length > 0 ? serverInfo.providers[0] as OnnxExecutionProvider : "CPUExecutionProvider"
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
setDisplaySettingState({
|
||||||
|
...settingState,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}, [settingState, serverInfo])
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
clientInitialized,
|
clientInitialized,
|
||||||
@ -344,7 +382,8 @@ export const useClient = (props: UseClientProps): ClientState => {
|
|||||||
uploadProgress,
|
uploadProgress,
|
||||||
isUploading,
|
isUploading,
|
||||||
|
|
||||||
settingState,
|
settingState: displaySettingState,
|
||||||
|
serverInfo,
|
||||||
setSettingState,
|
setSettingState,
|
||||||
loadModel,
|
loadModel,
|
||||||
start,
|
start,
|
||||||
|
@ -38,12 +38,24 @@ export type Speaker = {
|
|||||||
|
|
||||||
|
|
||||||
export type ServerInfo = {
|
export type ServerInfo = {
|
||||||
|
status: string
|
||||||
|
configFile: string,
|
||||||
pyTorchModelFile: string,
|
pyTorchModelFile: string,
|
||||||
onnxModelFile: string,
|
onnxModelFile: string,
|
||||||
configFile: string,
|
convertChunkNum: number,
|
||||||
|
crossFadeOffsetRate: number,
|
||||||
|
crossFadeEndRate: number,
|
||||||
|
gpu: number,
|
||||||
|
srcId: number,
|
||||||
|
dstId: number,
|
||||||
|
framework: Framework,
|
||||||
providers: string[]
|
providers: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Consts
|
// Consts
|
||||||
export const Protocol = {
|
export const Protocol = {
|
||||||
"sio": "sio",
|
"sio": "sio",
|
||||||
|
@ -26,9 +26,9 @@ class VocieChangerSettings():
|
|||||||
crossFadeEndRate:float = 0.9
|
crossFadeEndRate:float = 0.9
|
||||||
convertChunkNum:int = 32
|
convertChunkNum:int = 32
|
||||||
framework:str = "PyTorch" # PyTorch or ONNX
|
framework:str = "PyTorch" # PyTorch or ONNX
|
||||||
pyTorch_model_file:str = ""
|
pyTorchModelFile:str = ""
|
||||||
onnx_model_file:str = ""
|
onnxModelFile:str = ""
|
||||||
config_file:str = ""
|
configFile:str = ""
|
||||||
# ↓mutableな物だけ列挙
|
# ↓mutableな物だけ列挙
|
||||||
intData = ["gpu","srcId", "dstId", "convertChunkNum"]
|
intData = ["gpu","srcId", "dstId", "convertChunkNum"]
|
||||||
floatData = [ "crossFadeOffsetRate", "crossFadeEndRate",]
|
floatData = [ "crossFadeOffsetRate", "crossFadeEndRate",]
|
||||||
@ -38,7 +38,7 @@ class VoiceChanger():
|
|||||||
|
|
||||||
def __init__(self, config:str):
|
def __init__(self, config:str):
|
||||||
# 初期化
|
# 初期化
|
||||||
self.settings = VocieChangerSettings(config_file=config)
|
self.settings = VocieChangerSettings(configFile=config)
|
||||||
self.unpackedData_length=0
|
self.unpackedData_length=0
|
||||||
self.net_g = None
|
self.net_g = None
|
||||||
self.onnx_session = None
|
self.onnx_session = None
|
||||||
@ -58,9 +58,11 @@ class VoiceChanger():
|
|||||||
print(f"VoiceChanger Initialized (GPU_NUM:{self.gpu_num}, mps_enabled:{self.mps_enabled})")
|
print(f"VoiceChanger Initialized (GPU_NUM:{self.gpu_num}, mps_enabled:{self.mps_enabled})")
|
||||||
|
|
||||||
def loadModel(self, config:str, pyTorch_model_file:str=None, onnx_model_file:str=None):
|
def loadModel(self, config:str, pyTorch_model_file:str=None, onnx_model_file:str=None):
|
||||||
self.settings.config_file = config
|
self.settings.configFile = config
|
||||||
self.settings.pyTorch_model_file = pyTorch_model_file
|
if pyTorch_model_file != None:
|
||||||
self.settings.onnx_model_file = onnx_model_file
|
self.settings.pyTorchModelFile = pyTorch_model_file
|
||||||
|
if onnx_model_file:
|
||||||
|
self.settings.onnxModelFile = onnx_model_file
|
||||||
|
|
||||||
# PyTorchモデル生成
|
# PyTorchモデル生成
|
||||||
if pyTorch_model_file != None:
|
if pyTorch_model_file != None:
|
||||||
@ -90,10 +92,10 @@ class VoiceChanger():
|
|||||||
def get_info(self):
|
def get_info(self):
|
||||||
data = asdict(self.settings)
|
data = asdict(self.settings)
|
||||||
|
|
||||||
data["providers"] = self.onnx_session.get_providers() if self.onnx_session != None else ""
|
data["providers"] = self.onnx_session.get_providers() if self.onnx_session != None else []
|
||||||
files = ["config_file", "pyTorch_model_file", "onnx_model_file"]
|
files = ["configFile", "pyTorchModelFile", "onnxModelFile"]
|
||||||
for f in files:
|
for f in files:
|
||||||
if os.path.exists(f):
|
if data[f]!=None and os.path.exists(data[f]):
|
||||||
data[f] = os.path.basename(data[f])
|
data[f] = os.path.basename(data[f])
|
||||||
else:
|
else:
|
||||||
data[f] = ""
|
data[f] = ""
|
||||||
@ -126,8 +128,6 @@ class VoiceChanger():
|
|||||||
|
|
||||||
return self.get_info()
|
return self.get_info()
|
||||||
|
|
||||||
self.currentCrossFadeOffsetRate=0
|
|
||||||
self.currentCrossFadeEndRate=0
|
|
||||||
|
|
||||||
def _generate_strength(self, unpackedData):
|
def _generate_strength(self, unpackedData):
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user